diff --git a/addons/sale_product_configurator/controllers/main.py b/addons/sale_product_configurator/controllers/main.py index 541246ba703..edb0c2be7f5 100644 --- a/addons/sale_product_configurator/controllers/main.py +++ b/addons/sale_product_configurator/controllers/main.py @@ -8,7 +8,7 @@ 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_template_id, pricelist_id, **kw): - add_qty = int(kw.get('add_qty', 1)) + add_qty = float(kw.get('add_qty', 1)) product_template = request.env['product.template'].browse(int(product_template_id)) pricelist = self._get_pricelist(pricelist_id) @@ -39,7 +39,7 @@ class ProductConfiguratorController(http.Controller): return self._optional_product_items(product_id, pricelist, **kw) def _optional_product_items(self, product_id, pricelist, **kw): - add_qty = int(kw.get('add_qty', 1)) + add_qty = float(kw.get('add_qty', 1)) product = request.env['product.product'].browse(int(product_id)) parent_combination = product.product_template_attribute_value_ids @@ -59,7 +59,7 @@ class ProductConfiguratorController(http.Controller): def _show_advanced_configurator(self, product_id, variant_values, pricelist, handle_stock, **kw): product = request.env['product.product'].browse(int(product_id)) combination = request.env['product.template.attribute.value'].browse(variant_values) - add_qty = int(kw.get('add_qty', 1)) + add_qty = float(kw.get('add_qty', 1)) no_variant_attribute_values = combination.filtered( lambda product_template_attribute_value: product_template_attribute_value.attribute_id.create_variant == 'no_variant' 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 825aebc630f..6d7448f0e6b 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 @@ -118,12 +118,13 @@ var ProductConfiguratorFormController = FormController.extend({ var initialProduct = this.initialState.data.product_template_id; var changed = initialProduct && initialProduct.data.id !== productTemplateId; var data = this.renderer.state.data; + var quantity = initialProduct.context && initialProduct.context.default_quantity ? initialProduct.context.default_quantity : data.quantity; return this._rpc({ route: '/sale_product_configurator/configure', params: { product_template_id: productTemplateId, pricelist_id: this.renderer.pricelistId, - add_qty: data.quantity, + add_qty: quantity, product_template_attribute_value_ids: changed ? [] : this._getAttributeValueIds( data.product_template_attribute_value_ids ), diff --git a/addons/sale_product_configurator/static/src/js/product_configurator_modal.js b/addons/sale_product_configurator/static/src/js/product_configurator_modal.js index f9bdb5e7e0c..b6dbb6037be 100644 --- a/addons/sale_product_configurator/static/src/js/product_configurator_modal.js +++ b/addons/sale_product_configurator/static/src/js/product_configurator_modal.js @@ -185,7 +185,7 @@ var OptionalProductsModal = Dialog.extend(ServicesMixin, VariantMixin, { let noVariantAttributeValues; for (const product of self.$modal.find('.js_product.in_cart')) { var $item = $(product); - var quantity = parseInt($item.find('input[name="add_qty"]').val(), 10); + var quantity = parseFloat($item.find('input[name="add_qty"]').val().replace(',', '.') || 1); var parentUniqueId = product.dataset.parentUniqueId; var uniqueId = product.dataset.uniqueId; productCustomVariantValues = self.getCustomVariantValues($item); @@ -488,7 +488,7 @@ var OptionalProductsModal = Dialog.extend(ServicesMixin, VariantMixin, { if (this.$modal.find('.js_price_total').length) { var price = 0; this.$modal.find('.js_product.in_cart').each(function () { - var quantity = parseInt($(this).find('input[name="add_qty"]').first().val(), 10); + var quantity = parseFloat($(this).find('input[name="add_qty"]').first().val().replace(',', '.') || 1); price += parseFloat($(this).find('.js_raw_price').html()) * quantity; });