diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py
index 7b543af7ec9..fae5b696b6c 100644
--- a/addons/website_sale/models/sale_order.py
+++ b/addons/website_sale/models/sale_order.py
@@ -368,6 +368,10 @@ class SaleOrder(models.Model):
product.id not in product_ids
and product.filtered_domain(self.env['product.product']._check_company_domain(line.company_id))
and product._is_variant_possible(parent_combination=combination)
+ and (
+ not self.website_id.prevent_zero_price_sale
+ or product._get_contextual_price()
+ )
)
return random.sample(all_accessory_products, len(all_accessory_products))
diff --git a/addons/website_sale/models/website_snippet_filter.py b/addons/website_sale/models/website_snippet_filter.py
index 9e8a1f8071a..23416dab329 100644
--- a/addons/website_sale/models/website_snippet_filter.py
+++ b/addons/website_sale/models/website_snippet_filter.py
@@ -170,6 +170,8 @@ class WebsiteSnippetFilter(models.Model):
excluded_products |= current_template.product_variant_ids
included_products = current_template.alternative_product_ids.product_variant_ids
products = included_products - excluded_products
+ if website.prevent_zero_price_sale:
+ products = products.filtered(lambda p: p._get_contextual_price())
if products:
domain = expression.AND([
domain,
diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml
index cad30f3403e..1fe02017b73 100644
--- a/addons/website_sale/views/templates.xml
+++ b/addons/website_sale/views/templates.xml
@@ -215,7 +215,7 @@
-
+
diff --git a/addons/website_sale_comparison/views/website_sale_comparison_template.xml b/addons/website_sale_comparison/views/website_sale_comparison_template.xml
index 1b10ff8cac3..9a405f2314a 100644
--- a/addons/website_sale_comparison/views/website_sale_comparison_template.xml
+++ b/addons/website_sale_comparison/views/website_sale_comparison_template.xml
@@ -163,7 +163,7 @@
class="btn btn-primary btn_cta">
Contact Us
-
+
Add to Cart
diff --git a/addons/website_sale_product_configurator/controllers/main.py b/addons/website_sale_product_configurator/controllers/main.py
index 6516e181175..343ec003402 100644
--- a/addons/website_sale_product_configurator/controllers/main.py
+++ b/addons/website_sale_product_configurator/controllers/main.py
@@ -16,7 +16,9 @@ class WebsiteSaleProductConfiguratorController(Controller):
product_template = product.product_tmpl_id
combination = request.env['product.template.attribute.value'].browse(variant_values)
has_optional_products = product.optional_product_ids.filtered(
- lambda p: p._is_add_to_cart_possible(combination))
+ lambda p: p._is_add_to_cart_possible(combination)
+ and (not request.website.prevent_zero_price_sale or p._get_contextual_price())
+ )
already_configured = bool(combination)
if not force_dialog and not has_optional_products and (
diff --git a/addons/website_sale_product_configurator/views/templates.xml b/addons/website_sale_product_configurator/views/templates.xml
index fec659110e0..775ed93bcf7 100644
--- a/addons/website_sale_product_configurator/views/templates.xml
+++ b/addons/website_sale_product_configurator/views/templates.xml
@@ -133,7 +133,7 @@
-
+
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 ef1c37026d7..0d7566f1166 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
@@ -2,7 +2,7 @@
-
+
diff --git a/addons/website_sale_stock_wishlist/static/src/xml/product_availability.xml b/addons/website_sale_stock_wishlist/static/src/xml/product_availability.xml
index 0f12e8605f2..3983a8908b2 100644
--- a/addons/website_sale_stock_wishlist/static/src/xml/product_availability.xml
+++ b/addons/website_sale_stock_wishlist/static/src/xml/product_availability.xml
@@ -2,7 +2,9 @@
- |