37 lines
1.4 KiB
Python
37 lines
1.4 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from collections import OrderedDict
|
|
|
|
from odoo import models
|
|
|
|
|
|
class ProductProduct(models.Model):
|
|
_inherit = 'product.product'
|
|
|
|
def _prepare_categories_for_display(self):
|
|
"""On the comparison page group on the same line the values of each
|
|
product that concern the same attributes, and then group those
|
|
attributes per category.
|
|
|
|
The returned categories are ordered following their default order.
|
|
|
|
:return: OrderedDict [{
|
|
product.attribute.category: OrderedDict [{
|
|
product.attribute: OrderedDict [{
|
|
product: [product.template.attribute.value]
|
|
}]
|
|
}]
|
|
}]
|
|
"""
|
|
attributes = self.product_tmpl_id.valid_product_template_attribute_line_ids.attribute_id.sorted()
|
|
categories = OrderedDict([(cat, OrderedDict()) for cat in attributes.category_id.sorted()])
|
|
if any(not pa.category_id for pa in attributes):
|
|
# category_id is not required and the mapped does not return empty
|
|
categories[self.env['product.attribute.category']] = OrderedDict()
|
|
for pa in attributes:
|
|
categories[pa.category_id][pa] = OrderedDict([(
|
|
product,
|
|
product.attribute_line_ids.filtered(lambda ptal: ptal.attribute_id == pa).value_ids
|
|
) for product in self])
|
|
return categories
|