From 17845080115e4ac75372e1c8a1c71c6075423845 Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Fri, 7 Jun 2019 15:00:51 +0000 Subject: [PATCH 1/4] [FIX] sale_product_configurator: controller arguments --- addons/sale_product_configurator/controllers/main.py | 4 ++-- .../static/src/js/product_configurator_controller.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/sale_product_configurator/controllers/main.py b/addons/sale_product_configurator/controllers/main.py index d187d1c7d5a..9717b302dcf 100644 --- a/addons/sale_product_configurator/controllers/main.py +++ b/addons/sale_product_configurator/controllers/main.py @@ -7,9 +7,9 @@ from odoo.http import request class ProductConfiguratorController(http.Controller): @http.route(['/sale_product_configurator/configure'], type='json', auth="user", methods=['POST']) - def configure(self, product_id, pricelist_id, **kw): + def configure(self, product_template_id, pricelist_id, **kw): add_qty = int(kw.get('add_qty', 1)) - product_template = request.env['product.template'].browse(int(product_id)) + product_template = request.env['product.template'].browse(int(product_template_id)) pricelist = self._get_pricelist(pricelist_id) product_combination = False diff --git a/addons/sale_product_configurator/static/src/js/product_configurator_controller.js b/addons/sale_product_configurator/static/src/js/product_configurator_controller.js index d2cfd4a25fd..c46ae4b8265 100644 --- a/addons/sale_product_configurator/static/src/js/product_configurator_controller.js +++ b/addons/sale_product_configurator/static/src/js/product_configurator_controller.js @@ -116,7 +116,7 @@ var ProductConfiguratorFormController = FormController.extend({ return this._rpc({ route: '/sale_product_configurator/configure', params: { - product_id: productTemplateId, + product_template_id: productTemplateId, pricelist_id: this.renderer.pricelistId, add_qty: data.quantity, product_template_attribute_value_ids: this._getAttributeValueIds( From 2a18e26b019b1e729558c8b8a924ea4907af84b4 Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Mon, 17 Jun 2019 15:30:11 +0000 Subject: [PATCH 2/4] [FIX] (event_)sale(_product_configurator: optional products and product access > allow product access from so lines > allow selling optional products with events and rentals (event_sale, enterprise/sale_rental) --- .../src/js/event_configurator_widget.js | 11 +-- addons/event_sale/views/sale_order_views.xml | 3 - .../src/js/product_configurator_widget.js | 79 +++++++++++++-- addons/sale/views/sale_views.xml | 1 + .../src/js/product_configurator_widget.js | 99 +++++++++---------- .../src/js/tours/sale_product_configurator.js | 18 ---- .../views/assets.xml | 1 - 7 files changed, 126 insertions(+), 86 deletions(-) delete mode 100644 addons/sale_product_configurator/static/src/js/tours/sale_product_configurator.js diff --git a/addons/event_sale/static/src/js/event_configurator_widget.js b/addons/event_sale/static/src/js/event_configurator_widget.js index 469bf489f6c..ee63327073e 100644 --- a/addons/event_sale/static/src/js/event_configurator_widget.js +++ b/addons/event_sale/static/src/js/event_configurator_widget.js @@ -74,7 +74,7 @@ ProductConfiguratorWidget.include({ * @override * @private */ - _onEditProductConfiguration: function () { + _onEditLineConfiguration: function () { if (this.recordData.event_ok) { var defaultValues = { default_product_id: this.recordData.product_id.data.id @@ -117,11 +117,10 @@ ProductConfiguratorWidget.include({ self.trigger_up('field_changed', { dataPointID: dataPointId, changes: result.eventConfiguration, - // VFE NOTE : Do we unselect the row after event config? - // event_sale tour is made to work without unselectRow - /*onSuccess: function (){ - self.getParent().unselectRow(); - }*/ + onSuccess: function () { + // Call post-init function. + self._onLineConfigured(); + } }); } else { if (!self.recordData.event_id || !self.recordData.event_ticket_id) { diff --git a/addons/event_sale/views/sale_order_views.xml b/addons/event_sale/views/sale_order_views.xml index ae50fdbd75b..2ec78e4747e 100644 --- a/addons/event_sale/views/sale_order_views.xml +++ b/addons/event_sale/views/sale_order_views.xml @@ -30,9 +30,6 @@ /> - - {'no_open': True} - diff --git a/addons/sale/static/src/js/product_configurator_widget.js b/addons/sale/static/src/js/product_configurator_widget.js index 34721b9b17e..78e79cf74f0 100644 --- a/addons/sale/static/src/js/product_configurator_widget.js +++ b/addons/sale/static/src/js/product_configurator_widget.js @@ -17,7 +17,7 @@ var _t = core._t; */ var ProductConfiguratorWidget = relationalFields.FieldMany2One.extend({ events: _.extend({}, relationalFields.FieldMany2One.prototype.events, { - 'click .o_edit_product_configuration': '_onEditProductConfiguration' + 'click .o_edit_product_configuration': '_onEditConfiguration' }), /** @@ -26,13 +26,35 @@ var ProductConfiguratorWidget = relationalFields.FieldMany2One.extend({ _render: function () { this._super.apply(this, arguments); if (this.mode === 'edit' && this.value && - (this._isConfigurableProduct() || this._isConfigurableLine())) { - this._addConfigurationEditButton(); + (this._isConfigurableProduct() || this._isConfigurableLine())) { + this._addProductLinkButton(); + this._addConfigurationEditButton(); + } else if (this.mode === 'edit' && this.value) { + this._addProductLinkButton(); } else { 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 = $('