diff --git a/addons/website_sale/models/product.py b/addons/website_sale/models/product.py index 2f41c8cb384..0a22c37f4f3 100644 --- a/addons/website_sale/models/product.py +++ b/addons/website_sale/models/product.py @@ -207,6 +207,14 @@ class ProductTemplate(models.Model): product_template_image_ids = fields.One2many('product.image', 'product_tmpl_id', string="Extra Product Media", copy=True) + def _get_website_accessory_product(self): + domain = self.env['website'].sale_product_domain() + return self.accessory_product_ids.filtered_domain(domain) + + def _get_website_alternative_product(self): + domain = self.env['website'].sale_product_domain() + return self.alternative_product_ids.filtered_domain(domain) + def _has_no_variant_attributes(self): """Return whether this `product.template` has at least one no_variant attribute. diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index afc2d08094c..c07a8917727 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -301,8 +301,7 @@ class SaleOrder(models.Model): accessory_products = self.env['product.product'] for line in order.website_order_line.filtered(lambda l: l.product_id): combination = line.product_id.product_template_attribute_value_ids + line.product_no_variant_attribute_value_ids - accessory_products |= line.product_id.accessory_product_ids.filtered(lambda product: - product.website_published and + accessory_products |= line.product_id.product_tmpl_id._get_website_accessory_product().filtered(lambda product: product not in products and product._is_variant_possible(parent_combination=combination) and (product.company_id == line.company_id or not product.company_id) diff --git a/addons/website_sale/models/website_snippet_filter.py b/addons/website_sale/models/website_snippet_filter.py index 1f1648c0f9c..e07784ef671 100644 --- a/addons/website_sale/models/website_snippet_filter.py +++ b/addons/website_sale/models/website_snippet_filter.py @@ -146,7 +146,7 @@ class WebsiteSnippetFilter(models.Model): if current_template.exists(): excluded_products = website.sale_get_order().order_line.product_id.ids excluded_products.extend(current_template.product_variant_ids.ids) - included_products = current_template.product_variant_ids.accessory_product_ids.filtered('website_published').ids + included_products = current_template._get_website_accessory_product().ids products_ids = list(set(included_products) - set(excluded_products)) if products_ids: domain = expression.AND([ diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index dd6723ee121..2d7f21dc0ff 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -682,11 +682,12 @@