From 24cab7509dfb07ffd52316c419eeaefa575fdb66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20D=2E=20D=C3=ADaz?= Date: Fri, 21 May 2021 14:37:09 +0200 Subject: [PATCH] [FIX] web_widget_one2many_product_picker_sale_secondary_unit: Secondary unit management --- .../js/views/One2ManyProductPicker/record.js | 27 +++++++++++++++++++ .../views/One2ManyProductPicker/renderer.js | 21 +++++++++++++++ .../widgets/field_one2many_product_picker.js | 27 +++++++++++++++++++ .../src/xml/one2many_product_picker.xml | 13 ++++----- .../templates/assets.xml | 12 +++++++++ 5 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/One2ManyProductPicker/record.js create mode 100644 web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/One2ManyProductPicker/renderer.js create mode 100644 web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/widgets/field_one2many_product_picker.js diff --git a/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/One2ManyProductPicker/record.js b/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/One2ManyProductPicker/record.js new file mode 100644 index 000000000..0755a1003 --- /dev/null +++ b/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/One2ManyProductPicker/record.js @@ -0,0 +1,27 @@ +// Copyright 2021 Tecnativa - Alexandre Díaz +// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +odoo.define("web_widget_one2many_product_picker_sale_secondary_unit.One2ManyProductPickerRecord", function( + require +) { + "use strict"; + + const One2ManyProductPickerRecord = require("web_widget_one2many_product_picker.One2ManyProductPickerRecord"); + + One2ManyProductPickerRecord.include({ + + /** + * @override + */ + _setMasterUomMap: function () { + this._super.apply(this, arguments); + if ((this.state && this.state.data && this.state.data.secondary_uom_id) || + !this.state && this.recordSearch && this.recordSearch.sale_secondary_uom_id) { + _.extend(this.master_uom_map, { + "field_uom": "secondary_uom", + "field_uom_qty": "secondary_uom_qty", + "search_field_uom": "sale_secondary_uom_id", + }); + } + }, + }); +}); diff --git a/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/One2ManyProductPicker/renderer.js b/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/One2ManyProductPicker/renderer.js new file mode 100644 index 000000000..7b23f02c0 --- /dev/null +++ b/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/One2ManyProductPicker/renderer.js @@ -0,0 +1,21 @@ +// Copyright 2021 Tecnativa - Alexandre Díaz +// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +odoo.define( + "web_widget_one2many_product_picker_sale_secondary_unit.One2ManyProductPickerRenderer", + function(require) { + "use strict"; + + const One2ManyProductPickerRenderer = require("web_widget_one2many_product_picker.One2ManyProductPickerRenderer"); + + One2ManyProductPickerRenderer.include({ + _isEqualState: function(state_a, state_b) { + const res = this._super.apply(this, arguments); + const secondary_uom_id_a = + state_a.data.secondary_uom_id && state_a.data.secondary_uom_id.data.id; + const secondary_uom_id_b = + state_b.data.secondary_uom_id && state_b.data.secondary_uom_id.data.id; + return res && secondary_uom_id_a === secondary_uom_id_b; + }, + }); + } +); diff --git a/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/widgets/field_one2many_product_picker.js b/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/widgets/field_one2many_product_picker.js new file mode 100644 index 000000000..01492f799 --- /dev/null +++ b/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/widgets/field_one2many_product_picker.js @@ -0,0 +1,27 @@ +// Copyright 2021 Tecnativa - Alexandre Díaz +// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +odoo.define("web_widget_one2many_product_picker_sale_secondary_unit.FieldOne2ManyProductPicker", function( + require +) { + "use strict"; + + const FieldOne2ManyProductPicker = require("web_widget_one2many_product_picker.FieldOne2ManyProductPicker"); + + FieldOne2ManyProductPicker.include({ + // Model product.product fields + search_read_fields: _.unique([].concat(FieldOne2ManyProductPicker.prototype.search_read_fields, [ + "sale_secondary_uom_id", + ])), + + /** + * @private + * @returns {Object} + */ + _getDefaultOptions: function() { + const res = this._super.apply(this, arguments); + res.field_map.secondary_uom = "secondary_uom_id"; + res.field_map.secondary_uom_qty = "secondary_uom_qty"; + return res; + }, + }); +}); diff --git a/web_widget_one2many_product_picker_sale_secondary_unit/static/src/xml/one2many_product_picker.xml b/web_widget_one2many_product_picker_sale_secondary_unit/static/src/xml/one2many_product_picker.xml index 8208ba096..88ea03be1 100644 --- a/web_widget_one2many_product_picker_sale_secondary_unit/static/src/xml/one2many_product_picker.xml +++ b/web_widget_one2many_product_picker_sale_secondary_unit/static/src/xml/one2many_product_picker.xml @@ -1,17 +1,18 @@