1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
odoo.define('sale.SaleOrderView', function (require) {
"use strict";
const FormController = require('web.FormController');
const FormView = require('web.FormView');
const viewRegistry = require('web.view_registry');
const Dialog = require('web.Dialog');
const core = require('web.core');
const _t = core._t;
const SaleOrderFormController = FormController.extend({
custom_events: _.extend({}, FormController.prototype.custom_events, {
open_discount_wizard: '_onOpenDiscountWizard',
}),
// -------------------------------------------------------------------------
// Handlers
// -------------------------------------------------------------------------
/**
* Handler called if user changes the discount field in the sale order line.
* The wizard will open only if
* (1) Sale order line is 3 or more
* (2) First sale order line is changed to discount
* (3) Discount is the same in all sale order line
*/
_onOpenDiscountWizard(ev) {
const orderLines = this.renderer.state.data.order_line.data.filter(line => !line.data.display_type);
const recordData = ev.target.recordData;
const isEqualDiscount = orderLines.slice(1).every(line => line.data.discount === recordData.discount);
if (orderLines.length >= 3 && recordData.sequence === orderLines[0].data.sequence && isEqualDiscount) {
Dialog.confirm(this, _t("Do you want to apply this discount to all order lines?"), {
confirm_callback: () => {
orderLines.slice(1).forEach((line) => {
this.trigger_up('field_changed', {
dataPointID: this.renderer.state.id,
changes: {order_line: {operation: "UPDATE", id: line.id, data: {discount: orderLines[0].data.discount}}},
});
});
},
});
}
},
});
const SaleOrderView = FormView.extend({
config: _.extend({}, FormView.prototype.config, {
Controller: SaleOrderFormController,
}),
});
viewRegistry.add('sale_discount_form', SaleOrderView);
return SaleOrderView;
});
|