59 lines
2.4 KiB
Python
Executable File
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)
|