diff --git a/addons/website_sale_stock/controllers/main.py b/addons/website_sale_stock/controllers/main.py index 7dbf3c7f5de..09a59b84cf2 100644 --- a/addons/website_sale_stock/controllers/main.py +++ b/addons/website_sale_stock/controllers/main.py @@ -20,7 +20,7 @@ class PaymentPortal(website_sale_controller.PaymentPortal): for line in order.order_line: if line.product_id.type == 'product' and line.product_id.inventory_availability in ['always', 'threshold']: cart_qty = sum(order.order_line.filtered(lambda p: p.product_id.id == line.product_id.id).mapped('product_uom_qty')) - avl_qty = line.product_id.with_context(warehouse=order.warehouse_id.id).virtual_available + avl_qty = line.product_id.with_context(warehouse=order.warehouse_id.id).free_qty if cart_qty > avl_qty: values.append(_( 'You ask for %(quantity)s products but only %(available_qty)s is available', diff --git a/addons/website_sale_stock/models/product_template.py b/addons/website_sale_stock/models/product_template.py index 3a3e206775b..91761c1078e 100644 --- a/addons/website_sale_stock/models/product_template.py +++ b/addons/website_sale_stock/models/product_template.py @@ -27,10 +27,10 @@ class ProductTemplate(models.Model): if combination_info['product_id']: product = self.env['product.product'].sudo().browse(combination_info['product_id']) website = self.env['website'].get_current_website() - virtual_available = product.with_context(warehouse=website.warehouse_id.id).virtual_available + free_qty = product.with_context(warehouse=website.warehouse_id.id).free_qty combination_info.update({ - 'virtual_available': virtual_available, - 'virtual_available_formatted': self.env['ir.qweb.field.float'].value_to_html(virtual_available, {'precision': 0}), + 'free_qty': free_qty, + 'free_qty_formatted': self.env['ir.qweb.field.float'].value_to_html(free_qty, {'precision': 0}), 'product_type': product.type, 'inventory_availability': product.inventory_availability, 'available_threshold': product.available_threshold, @@ -42,7 +42,7 @@ class ProductTemplate(models.Model): else: product_template = self.sudo() combination_info.update({ - 'virtual_available': 0, + 'free_qty': 0, 'product_type': product_template.type, 'inventory_availability': product_template.inventory_availability, 'available_threshold': product_template.available_threshold, diff --git a/addons/website_sale_stock/models/sale_order.py b/addons/website_sale_stock/models/sale_order.py index 169f97cba60..6aa7a773981 100644 --- a/addons/website_sale_stock/models/sale_order.py +++ b/addons/website_sale_stock/models/sale_order.py @@ -20,8 +20,9 @@ class SaleOrder(models.Model): # The quantity should be computed based on the warehouse of the website, not the # warehouse of the SO. website = self.env['website'].get_current_website() - if cart_qty > line.product_id.with_context(warehouse=website.warehouse_id.id).virtual_available and (line_id == line.id): - qty = line.product_id.with_context(warehouse=website.warehouse_id.id).virtual_available - cart_qty + avl_qty = line.product_id.with_context(warehouse=website.warehouse_id.id).free_qty + if cart_qty > avl_qty and (line_id == line.id): + qty = avl_qty - cart_qty new_val = super(SaleOrder, self)._cart_update(line.product_id.id, line.id, qty, 0, **kwargs) values.update(new_val) diff --git a/addons/website_sale_stock/static/src/js/variant_mixin.js b/addons/website_sale_stock/static/src/js/variant_mixin.js index d78d59d0c1b..dd864fde9bd 100644 --- a/addons/website_sale_stock/static/src/js/variant_mixin.js +++ b/addons/website_sale_stock/static/src/js/variant_mixin.js @@ -48,18 +48,16 @@ VariantMixin._onChangeCombinationStock = function (ev, $parent, combination) { $parent.find('#add_to_cart').removeClass('out_of_stock'); $parent.find('.o_we_buy_now').removeClass('out_of_stock'); if (combination.product_type === 'product' && _.contains(['always', 'threshold'], combination.inventory_availability)) { - combination.virtual_available -= parseInt(combination.cart_qty); - if (combination.virtual_available < 0) { - combination.virtual_available = 0; + combination.free_qty -= parseInt(combination.cart_qty); + if (combination.free_qty < 0) { + combination.free_qty = 0; } - // Handle case when manually write in input - if (qty > combination.virtual_available) { - var $input_add_qty = $parent.find('input[name="add_qty"]'); - qty = combination.virtual_available || 1; - $input_add_qty.val(qty); + if (qty > combination.free_qty) { + var $addQtyInput = $parent.find('input[name="add_qty"]'); + qty = combination.free_qty || 1; + $addQtyInput.val(qty); } - if (qty > combination.virtual_available - || combination.virtual_available < 1 || qty < 1) { + if (combination.free_qty < 1) { $parent.find('#add_to_cart').addClass('disabled out_of_stock'); $parent.find('.o_we_buy_now').addClass('disabled out_of_stock'); } diff --git a/addons/website_sale_stock/static/src/xml/website_sale_stock_product_availability.xml b/addons/website_sale_stock/static/src/xml/website_sale_stock_product_availability.xml index 8bb6682e39e..1710ab1a4cb 100644 --- a/addons/website_sale_stock/static/src/xml/website_sale_stock_product_availability.xml +++ b/addons/website_sale_stock/static/src/xml/website_sale_stock_product_availability.xml @@ -4,22 +4,22 @@ - +
- available + available
-
+
- available + available
-
In stock
+
In stock
- You already added all in your cart. + You already added all in your cart.
-
Temporarily out of stock
+
Temporarily out of stock
diff --git a/addons/website_sale_stock/tests/test_website_sale_stock_product_warehouse.py b/addons/website_sale_stock/tests/test_website_sale_stock_product_warehouse.py index d5b809833e3..42a794c0914 100644 --- a/addons/website_sale_stock/tests/test_website_sale_stock_product_warehouse.py +++ b/addons/website_sale_stock/tests/test_website_sale_stock_product_warehouse.py @@ -66,10 +66,10 @@ class TestWebsiteSaleStockProductWarehouse(TestWebsiteSaleProductAttributeValueC combination_info = product.product_tmpl_id.with_context(website_sale_stock_get_quantity=True)._get_combination_info() # Check available quantity of product is according to warehouse - self.assertEqual(combination_info['virtual_available'], 10, "10 units of Product A should be available in warehouse 1.") + self.assertEqual(combination_info['free_qty'], 10, "10 units of Product A should be available in warehouse 1.") product = product_2.with_context(website_id=current_website.id) combination_info = product.product_tmpl_id.with_context(website_sale_stock_get_quantity=True)._get_combination_info() # Check available quantity of product is according to warehouse - self.assertEqual(combination_info['virtual_available'], 0, "Product B should not be available in warehouse 1.") + self.assertEqual(combination_info['free_qty'], 0, "Product B should not be available in warehouse 1.") diff --git a/addons/website_sale_stock/views/website_sale_stock_templates.xml b/addons/website_sale_stock/views/website_sale_stock_templates.xml index cd86af509aa..ece20a8d3ba 100644 --- a/addons/website_sale_stock/views/website_sale_stock_templates.xml +++ b/addons/website_sale_stock/views/website_sale_stock_templates.xml @@ -3,7 +3,7 @@