From 80b19b11d605317b8f2267a820632589eb6e18b4 Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Tue, 27 Sep 2022 17:00:21 +0000 Subject: [PATCH 01/12] [IMP] web: make addNew return the newly created record used in product configurator logic X-original-commit: 40cfbf35985422a9415e6ab225d037f7393d3842 Part-of: odoo/odoo#101352 Co-authored-by: Samuel Degueldre --- addons/web/static/src/views/basic_relational_model.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/views/basic_relational_model.js b/addons/web/static/src/views/basic_relational_model.js index 7353c2b4e5f..7860b66e1cc 100644 --- a/addons/web/static/src/views/basic_relational_model.js +++ b/addons/web/static/src/views/basic_relational_model.js @@ -977,10 +977,11 @@ export class StaticList extends DataPoint { await this.model.__bm__.save(this.__bm_handle__, { savePoint: true }); this.model.__bm__.freezeOrder(this.__bm_handle__); await this.__syncParent(operation); + const newRecord = this.records[position === "bottom" ? this.records.length - 1 : 0]; if (params.mode === "edit") { - const newRecord = this.records[position === "bottom" ? this.records.length - 1 : 0]; await newRecord.switchMode("edit"); } + return newRecord; } // x2many dialog edition From 673b784f868f96eaa27b09a784824cac039561ff Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Tue, 27 Sep 2022 17:05:51 +0000 Subject: [PATCH 02/12] [FIX] web: magic commands in search domain Before this commit, when we used a domain on many to many relational fields, the `dataContext()` returned the context of the field, which contained a command tuple. This causes an error server side, when a domain [('id', 'in', [[6, False, [3,4]]])] is provided to search available records to fill the x2m field. Now, it returns the `currentIds`, which correctly gives the id(s) of the records. Approved by SAD X-original-commit: 5653e23a333262683257575d071575a63981ca33 Part-of: odoo/odoo#101352 Co-authored-by: Valentin Chevalier --- addons/web/static/src/views/relational_model.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/views/relational_model.js b/addons/web/static/src/views/relational_model.js index 6e4f88df132..d0cb38c4bfa 100644 --- a/addons/web/static/src/views/relational_model.js +++ b/addons/web/static/src/views/relational_model.js @@ -446,7 +446,7 @@ export class Record extends DataPoint { evalContext[fieldName] = false; } else if (isX2Many(this.fields[fieldName])) { const list = this._cache[fieldName]; - evalContext[fieldName] = list.getContext(); + evalContext[fieldName] = list.currentIds; // ---> implied to initialize (resIds, commands) currentIds before loading static list } else if (value && this.fields[fieldName].type === "date") { evalContext[fieldName] = serializeDate(value); From f05c4ae9c843a2374bdf2b1f274ad6be7c919420 Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Tue, 27 Sep 2022 17:08:00 +0000 Subject: [PATCH 03/12] [IMP] web: util method to apply multiple changes on a x2m field. X-original-commit: 429357c706c43a67febec05e84b290decf542427 Part-of: odoo/odoo#101352 Co-authored-by: Horacio Tellez Perez --- .../src/views/basic_relational_model.js | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/addons/web/static/src/views/basic_relational_model.js b/addons/web/static/src/views/basic_relational_model.js index 7860b66e1cc..82f8d4f8963 100644 --- a/addons/web/static/src/views/basic_relational_model.js +++ b/addons/web/static/src/views/basic_relational_model.js @@ -1039,6 +1039,30 @@ export class StaticList extends DataPoint { await this.__syncParent(operation); } + /** + * @param {Array[]} commands array of commands + */ + async applyCommands(fieldName, commands) { + const commandsWithId = commands.map((command) => { + return { + operation: command.operation, + id: command.record.__bm_handle__, + data: command.data, + }; + }); + + const parentID = this.model.__bm__.localData[this.__bm_handle__].parentID; + await this.model.__bm__.notifyChanges(parentID, { + [fieldName]: { + operation: "MULTI", + commands: commandsWithId, + }, + }); + + this.model.root.__syncData(); + this.model.notify(); + } + /** * @param {string} dataRecordId * @param {string} dataGroupId From 33d86f6b6d8a8a7d2b736c88aaf09df28cb5e993 Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Tue, 27 Sep 2022 16:57:01 +0000 Subject: [PATCH 04/12] [FIX] sale_stock: warehouse_id not present in view Task-2918791 X-original-commit: 76e88d35d7d4fad62920da53501b4462c633e108 Part-of: odoo/odoo#101352 --- addons/sale_stock/views/sale_order_views.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/sale_stock/views/sale_order_views.xml b/addons/sale_stock/views/sale_order_views.xml index 7cd1774fde4..95de71334ef 100644 --- a/addons/sale_stock/views/sale_order_views.xml +++ b/addons/sale_stock/views/sale_order_views.xml @@ -20,6 +20,7 @@ Delivery + From ab7846be8e7c36c53aa49b6ec428f3fe0a125475 Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Tue, 27 Sep 2022 17:15:03 +0000 Subject: [PATCH 05/12] [REF] sale: convert sale order view to OWL * Configurators (sol_product_field) * Discount (sol_discount) Task-2918791 X-original-commit: 27ee2899cbec65b05135d3f12bcf8f6fc8adc241 Part-of: odoo/odoo#101352 Co-authored-by: Horacio Tellez Perez --- addons/sale/__manifest__.py | 8 +- .../src/js/product_configurator_widget.js | 276 ------------------ .../static/src/js/product_discount_field.js | 62 ++++ .../static/src/js/product_discount_widget.js | 26 -- .../static/src/js/sale_order_controller.js | 94 ------ .../static/src/js/sale_order_line_mixin.js | 18 -- addons/sale/static/src/js/sale_order_view.js | 18 -- .../sale/static/src/js/sale_product_field.js | 85 ++++++ addons/sale/static/src/js/variant_mixin.js | 5 +- .../static/src/scss/product_configurator.scss | 1 + .../static/src/xml/product_discount_field.xml | 9 + .../static/src/xml/sale_product_field.xml | 20 ++ .../xml/sales_team_progress_bar_template.xml | 1 + .../tests/product_configurator_tests.js | 100 ------- addons/sale/views/sale_order_views.xml | 11 +- addons/sale_stock/views/sale_order_views.xml | 2 - 16 files changed, 190 insertions(+), 546 deletions(-) delete mode 100644 addons/sale/static/src/js/product_configurator_widget.js create mode 100644 addons/sale/static/src/js/product_discount_field.js delete mode 100644 addons/sale/static/src/js/product_discount_widget.js delete mode 100644 addons/sale/static/src/js/sale_order_controller.js delete mode 100644 addons/sale/static/src/js/sale_order_line_mixin.js delete mode 100644 addons/sale/static/src/js/sale_order_view.js create mode 100644 addons/sale/static/src/js/sale_product_field.js create mode 100644 addons/sale/static/src/xml/product_discount_field.xml create mode 100644 addons/sale/static/src/xml/sale_product_field.xml delete mode 100644 addons/sale/static/tests/product_configurator_tests.js diff --git a/addons/sale/__manifest__.py b/addons/sale/__manifest__.py index 569f3640da1..6dbf5ab9485 100644 --- a/addons/sale/__manifest__.py +++ b/addons/sale/__manifest__.py @@ -67,11 +67,8 @@ This module contains all the common features of Sales Management and eCommerce. 'sale/static/src/scss/product_configurator.scss', 'sale/static/src/js/sale_progressbar_field.js', 'sale/static/src/js/tours/sale.js', - 'sale/static/src/js/sale_order_line_mixin.js', - 'sale/static/src/js/product_configurator_widget.js', - 'sale/static/src/js/sale_order_controller.js', - 'sale/static/src/js/sale_order_view.js', - 'sale/static/src/js/product_discount_widget.js', + 'sale/static/src/js/product_discount_field.js', + 'sale/static/src/js/sale_product_field.js', 'sale/static/src/xml/**/*', ], 'web.assets_frontend': [ @@ -84,7 +81,6 @@ This module contains all the common features of Sales Management and eCommerce. 'sale/static/tests/tours/**/*', ], 'web.qunit_suite_tests': [ - 'sale/static/tests/product_configurator_tests.js', 'sale/static/tests/sales_team_dashboard_tests.js', ], 'web.report_assets_common': [ diff --git a/addons/sale/static/src/js/product_configurator_widget.js b/addons/sale/static/src/js/product_configurator_widget.js deleted file mode 100644 index 54bca05098f..00000000000 --- a/addons/sale/static/src/js/product_configurator_widget.js +++ /dev/null @@ -1,276 +0,0 @@ -odoo.define('sale.product_configurator', function (require) { -var relationalFields = require('web.relational_fields'); -var FieldsRegistry = require('web.field_registry'); -var core = require('web.core'); -var _t = core._t; - -/** - * The sale.product_configurator widget is a simple widget extending FieldMany2One - * It allows the development of configuration strategies in other modules through - * widget extensions. - * - * - * !!! WARNING !!! - * - * This widget is only designed for sale_order_line creation/updates. - * !!! It should only be used on a product_product or product_template field !!! - */ -var ProductConfiguratorWidget = relationalFields.FieldMany2One.extend({ - events: _.extend({}, relationalFields.FieldMany2One.prototype.events, { - 'click .o_edit_product_configuration': '_onEditConfiguration' - }), - - /** - * @override - */ - _render: function () { - this._super.apply(this, arguments); - if (this.mode === 'edit' && this.value && - (this._isConfigurableProduct() || this._isConfigurableLine())) { - this._addProductLinkButton(); - this._addConfigurationEditButton(); - } else if (this.mode === 'edit' && this.value) { - this._addProductLinkButton(); - this.$('.o_edit_product_configuration').hide(); - } else { - this.$('.o_external_button').hide(); - this.$('.o_edit_product_configuration').hide(); - } - }, - - /** - * Add button linking to product_id/product_template_id form. - */ - _addProductLinkButton: function () { - if (this.$('.o_external_button').length === 0) { - var $productLinkButton = $('