Files
Odoo-18.0-20251222/pricelist_cache/models/res_partner.py
tocmo0nlord adbe430761
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled
Initial commit: Odoo 18.0-20251222 extra-addons
2026-03-13 20:43:25 +00:00

59 lines
2.4 KiB
Python
Executable File

# Copyright 2021 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
from odoo import exceptions, fields, models
class Partner(models.Model):
_inherit = "res.partner"
is_pricelist_cache_available = fields.Boolean(
related="property_product_pricelist.is_pricelist_cache_available"
)
def _default_pricelist_cache_product_filter_id(self):
# When the module is installed, Odoo creates the new field and at the
# same time tries to set the default value for all existing records in
# the DB. However the XML data (and thus 'product_filter_default' filter)
# is still not created at this stage.
# In order to get the module installed, the 'raise_if_not_found' parameter
# has been added, and to set the default value on existing partners
# the post_init_hook 'set_default_partner_product_filter' has been defined.
return self.env.ref(
"pricelist_cache.product_filter_default", raise_if_not_found=False
)
pricelist_cache_product_filter_id = fields.Many2one(
comodel_name="ir.filters",
domain=[("model_id", "=", "product.product")],
default=lambda o: o._default_pricelist_cache_product_filter_id(),
)
def _pricelist_cache_get_prices(self):
if not self.is_pricelist_cache_available:
raise exceptions.UserError(
self.env._("Pricelist caching in progress. Retry later")
)
pricelist = self._pricelist_cache_get_pricelist()
products = self._pricelist_cache_get_products()
cache_model = self.env["product.pricelist.cache"]
return cache_model.get_cached_prices_for_pricelist(pricelist, products)
def _pricelist_cache_get_pricelist(self):
return self.property_product_pricelist
def _pricelist_cache_get_products(self):
domain = self._pricelist_cache_product_domain()
return self.env["product.product"].search(domain)
def _pricelist_cache_product_domain(self):
if self.pricelist_cache_product_filter_id:
return self.pricelist_cache_product_filter_id._get_eval_domain()
return []
def button_open_pricelist_cache_tree(self):
prices = self._pricelist_cache_get_prices()
cache_model = self.env["product.pricelist.cache"]
domain = [("id", "in", prices.ids)]
return cache_model._get_tree_view(domain)