[IMP] nfu_ecommerce: Make attribute selection an AND-filter
This commit is contained in:
parent
7e63a17abc
commit
f913eac312
6 changed files with 26 additions and 3 deletions
|
|
@ -57,6 +57,7 @@ Changelog
|
||||||
- 16.0.1.4.3: Drop session if SO belongs to another website (Odoo 16 bug)
|
- 16.0.1.4.3: Drop session if SO belongs to another website (Odoo 16 bug)
|
||||||
- 16.0.1.4.3: Remove is_published filtering and use job manager only on more than one
|
- 16.0.1.4.3: Remove is_published filtering and use job manager only on more than one
|
||||||
- 16.0.1.4.5: Make open Packagings more visible
|
- 16.0.1.4.5: Make open Packagings more visible
|
||||||
|
- 16.0.1.5.0: Make attribute selection an AND-filter
|
||||||
|
|
||||||
Bug Tracker
|
Bug Tracker
|
||||||
===========
|
===========
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
"author": "BAKEUP",
|
"author": "BAKEUP",
|
||||||
"website": "https://www.bakeup.org",
|
"website": "https://www.bakeup.org",
|
||||||
"category": "website",
|
"category": "website",
|
||||||
"version": "16.0.1.4.5",
|
"version": "16.0.1.5.0",
|
||||||
"depends": [
|
"depends": [
|
||||||
"sale_product_configurator",
|
"sale_product_configurator",
|
||||||
"website_sale",
|
"website_sale",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
from odoo import fields, http
|
from odoo import fields, http
|
||||||
from odoo.http import request
|
from odoo.http import request
|
||||||
|
from odoo.osv import expression
|
||||||
from odoo.tools import lazy
|
from odoo.tools import lazy
|
||||||
|
|
||||||
from odoo.addons.website_sale.controllers.main import WebsiteSale
|
from odoo.addons.website_sale.controllers.main import WebsiteSale
|
||||||
|
|
@ -73,6 +74,18 @@ class WebsiteSale(WebsiteSale):
|
||||||
new_values["packaging_info"] = packaging_info
|
new_values["packaging_info"] = packaging_info
|
||||||
return new_values
|
return new_values
|
||||||
|
|
||||||
|
def _get_search_domain(
|
||||||
|
self, search, category, attrib_values, search_in_description=True
|
||||||
|
):
|
||||||
|
# AND across all selected attribute values instead of OR within same attribute
|
||||||
|
domain = super()._get_search_domain(search, category, [], search_in_description)
|
||||||
|
if attrib_values:
|
||||||
|
attr_domains = [
|
||||||
|
[("attribute_line_ids.value_ids", "in", [v[1]])] for v in attrib_values
|
||||||
|
]
|
||||||
|
domain = expression.AND([domain] + attr_domains)
|
||||||
|
return domain
|
||||||
|
|
||||||
def _get_search_order(self, post):
|
def _get_search_order(self, post):
|
||||||
# is_published is company_dependent and has no DB column, so it cannot
|
# is_published is company_dependent and has no DB column, so it cannot
|
||||||
# be used in ORDER BY. The shop domain already filters published products,
|
# be used in ORDER BY. The shop domain already filters published products,
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,16 @@ class ProductTemplate(models.Model):
|
||||||
product.is_published = False
|
product.is_published = False
|
||||||
|
|
||||||
def _search_get_detail(self, website, order, options):
|
def _search_get_detail(self, website, order, options):
|
||||||
search_details = super()._search_get_detail(website, order, options)
|
# Pass attrib_values as empty so the parent builds no attribute filter,
|
||||||
|
# then add one condition per value to enforce AND semantics.
|
||||||
|
attrib_values = options.get("attrib_values")
|
||||||
|
patched_options = dict(options, attrib_values=[]) if attrib_values else options
|
||||||
|
search_details = super()._search_get_detail(website, order, patched_options)
|
||||||
open_product_ids = options.get("open_product_ids")
|
open_product_ids = options.get("open_product_ids")
|
||||||
domain = search_details["base_domain"]
|
domain = search_details["base_domain"]
|
||||||
if open_product_ids is not None:
|
if open_product_ids is not None:
|
||||||
domain.append([("id", "in", tuple(open_product_ids))])
|
domain.append([("id", "in", tuple(open_product_ids))])
|
||||||
|
if attrib_values:
|
||||||
|
for value in attrib_values:
|
||||||
|
domain.append([("attribute_line_ids.value_ids", "in", [value[1]])])
|
||||||
return search_details
|
return search_details
|
||||||
|
|
|
||||||
|
|
@ -13,3 +13,4 @@
|
||||||
- 16.0.1.4.3: Drop session if SO belongs to another website (Odoo 16 bug)
|
- 16.0.1.4.3: Drop session if SO belongs to another website (Odoo 16 bug)
|
||||||
- 16.0.1.4.3: Remove is_published filtering and use job manager only on more than one
|
- 16.0.1.4.3: Remove is_published filtering and use job manager only on more than one
|
||||||
- 16.0.1.4.5: Make open Packagings more visible
|
- 16.0.1.4.5: Make open Packagings more visible
|
||||||
|
- 16.0.1.5.0: Make attribute selection an AND-filter
|
||||||
|
|
@ -413,6 +413,7 @@ adjustes the uom quantitiy</li>
|
||||||
<li>16.0.1.4.3: Drop session if SO belongs to another website (Odoo 16 bug)</li>
|
<li>16.0.1.4.3: Drop session if SO belongs to another website (Odoo 16 bug)</li>
|
||||||
<li>16.0.1.4.3: Remove is_published filtering and use job manager only on more than one</li>
|
<li>16.0.1.4.3: Remove is_published filtering and use job manager only on more than one</li>
|
||||||
<li>16.0.1.4.5: Make open Packagings more visible</li>
|
<li>16.0.1.4.5: Make open Packagings more visible</li>
|
||||||
|
<li>16.0.1.5.0: Make attribute selection an AND-filter</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="bug-tracker">
|
<div class="section" id="bug-tracker">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue