68 lines
2.6 KiB
Python
68 lines
2.6 KiB
Python
# Copyright 2022 Camptocamp SA
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
|
|
|
|
from odoo import fields, models
|
|
from odoo.tools.safe_eval import safe_eval
|
|
|
|
|
|
class ConditionalImageConsumerMixin(models.AbstractModel):
|
|
_name = "conditional.image.consumer.mixin"
|
|
_description = "Mixin for conditional images consumers"
|
|
_inherit = "image.mixin"
|
|
|
|
image_1920 = fields.Image(compute="_compute_images", store=False, readonly=True)
|
|
image_1024 = fields.Image(compute="_compute_images", store=False, readonly=True)
|
|
image_512 = fields.Image(compute="_compute_images", store=False, readonly=True)
|
|
image_256 = fields.Image(compute="_compute_images", store=False, readonly=True)
|
|
image_128 = fields.Image(compute="_compute_images", store=False, readonly=True)
|
|
|
|
def _conditional_image_evaluate_selector(self, conditional_image):
|
|
self.ensure_one()
|
|
if conditional_image.selector:
|
|
if (
|
|
conditional_image.company_id == self.company_id
|
|
or self.company_id
|
|
and not conditional_image.company_id
|
|
):
|
|
return bool(
|
|
safe_eval(conditional_image.selector or "True", {"object": self})
|
|
)
|
|
return False
|
|
|
|
def _compute_images(self):
|
|
if "company_id" in self._fields:
|
|
search_clause = [("model_name", "=", self._name)]
|
|
else:
|
|
# If inherited object doesn't have a `company_id` field,
|
|
# remove the items with a company defined and the related checks
|
|
search_clause = [
|
|
("model_name", "=", self._name),
|
|
("company_id", "=", False),
|
|
]
|
|
|
|
conditional_images = self.env["conditional.image"].search(
|
|
search_clause, order="company_id, selector"
|
|
)
|
|
|
|
for record in self:
|
|
images_found = conditional_images.filtered(
|
|
lambda img: record._conditional_image_evaluate_selector(img)
|
|
)
|
|
values = {
|
|
"image_1920": False,
|
|
"image_1024": False,
|
|
"image_512": False,
|
|
"image_256": False,
|
|
"image_128": False,
|
|
}
|
|
if images_found:
|
|
image = images_found[0]
|
|
values = {
|
|
"image_1920": image.image_1920,
|
|
"image_1024": image.image_1024,
|
|
"image_512": image.image_512,
|
|
"image_256": image.image_256,
|
|
"image_128": image.image_128,
|
|
}
|
|
record.update(values)
|