diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index d3a44363fab..3cf961ada09 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -151,7 +151,7 @@ class WebsiteSale(http.Controller): else: price = variant.website_public_price / quantity visible_attribute_ids = [v.id for v in variant.attribute_value_ids if v.attribute_id.id in visible_attrs_ids] - attribute_value_ids.append([variant.id, visible_attribute_ids, variant.website_price, price]) + attribute_value_ids.append([variant.id, visible_attribute_ids, variant.website_price / quantity, price]) return attribute_value_ids def _get_search_order(self, post): diff --git a/addons/website_sale/data/demo.xml b/addons/website_sale/data/demo.xml index 80401d1095c..d195702f5ad 100644 --- a/addons/website_sale/data/demo.xml +++ b/addons/website_sale/data/demo.xml @@ -545,6 +545,7 @@ Weight: 31 grams 20 + 2 formula diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index 874b9f698b5..1544f199088 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -88,18 +88,12 @@ odoo.define('website_sale.website_sale', function (require) { $(oe_website_sale).on("change", 'input[name="add_qty"]', function (event) { var product_ids = []; - var product_dom = $(".js_product .js_add_cart_variants[data-attribute_value_ids]"); + var product_dom = $(event.target).closest(".js_product").find(".js_add_cart_variants"); var qty = $(event.target).closest('form').find('input[name="add_qty"]').val(); - if (!product_dom.length) { - return; - } var attribute_value_ids = product_dom.data("attribute_value_ids"); - if(_.isString(attribute_value_ids)) { - attribute_value_ids = JSON.parse(attribute_value_ids.replace(/'/g, '"')); - } _.each(attribute_value_ids, function(entry) { - product_ids.push(entry[0]);}); - var qty = $(event.target).closest('form').find('input[name="add_qty"]').val(); + product_ids.push(entry[0]); + }); if ($("#product_detail").length) { // display the reduction from the pricelist in function of the quantity @@ -109,7 +103,7 @@ odoo.define('website_sale.website_sale', function (require) { for(var j=0; j < current.length; j++){ current[j][2] = data[current[j][0]]; } - product_dom.attr("data-attribute_value_ids", JSON.stringify(current)).trigger("change"); + product_dom.trigger("change"); }); } }); @@ -210,8 +204,7 @@ odoo.define('website_sale.website_sale', function (require) { $('input[name="'+$input.attr("name")+'"]').add($input).filter(function () { var $prod = $(this).closest('*:has(input[name="product_id"])'); return !$prod.length || +$prod.find('input[name="product_id"]').val() === product_id; - }).val(new_qty); - $input.change(); + }).val(new_qty).change(); return false; }); @@ -298,27 +291,14 @@ odoo.define('website_sale.website_sale', function (require) { } } - $(oe_website_sale).on('change', 'input.js_product_change', function () { - var self = this; - var $parent = $(this).closest('.js_product'); - $.when(base.ready()).then(function() { - $parent.find(".oe_default_price:first .oe_currency_value").html( price_to_str(+$(self).data('lst_price')) ); - $parent.find(".oe_price:first .oe_currency_value").html(price_to_str(+$(self).data('price')) ); - }); - update_product_image(this, +$(this).val()); - }); - - $(oe_website_sale).on('change', 'input.js_variant_change, select.js_variant_change, ul[data-attribute_value_ids]', function (ev) { - var $ul = $(ev.target).closest('.js_add_cart_variants'); - var $parent = $ul.closest('.js_product'); + $(oe_website_sale).on('change', 'input.js_variant_change, select.js_variant_change, input.js_product_change, [data-attribute_value_ids]', function (ev) { + var $parent = $(ev.target).closest('.js_product'); + var $ul = $parent.find('.js_add_cart_variants'); var $product_id = $parent.find('.product_id').first(); var $price = $parent.find(".oe_price:first .oe_currency_value"); var $default_price = $parent.find(".oe_default_price:first .oe_currency_value"); var $optional_price = $parent.find(".oe_optional:first .oe_currency_value"); var variant_ids = $ul.data("attribute_value_ids"); - if(_.isString(variant_ids)) { - variant_ids = JSON.parse(variant_ids.replace(/'/g, '"')); - } var values = []; var unchanged_values = $parent.find('div.oe_unchanged_value_ids').data('unchanged_value_ids') || []; @@ -326,12 +306,14 @@ odoo.define('website_sale.website_sale', function (require) { values.push(+$(this).val()); }); values = values.concat(unchanged_values); + var list_variant_id = parseInt($parent.find('input.js_product_change:checked').val()); $parent.find("label").removeClass("text-muted css_not_available"); var product_id = false; for (var k in variant_ids) { - if (_.isEmpty(_.difference(variant_ids[k][1], values))) { + if (_.isEmpty(_.difference(variant_ids[k][1], values)) || + variant_ids[k][0] === list_variant_id) { $.when(base.ready()).then(function() { $price.html(price_to_str(variant_ids[k][2])); $default_price.html(price_to_str(variant_ids[k][3])); diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index cae42a8416d..4325d669fda 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -458,8 +458,7 @@

Product Name