server-ux/base_tier_validation_formula/models/tier_validation.py
2024-05-03 11:21:24 +02:00

28 lines
916 B
Python

# Copyright 2019 Creu Blanca
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from flectra import _, models
from flectra.exceptions import UserError
from flectra.tools.safe_eval import safe_eval
class TierValidation(models.AbstractModel):
_inherit = "tier.validation"
def evaluate_formula_tier(self, tier):
try:
res = safe_eval(tier.python_code, globals_dict={"rec": self})
except Exception as error:
raise UserError(
_("Error evaluating tier validation conditions.\n %s") % error
) from error
return res
def evaluate_tier(self, tier):
res = super().evaluate_tier(tier)
if tier.definition_type == "formula":
return self.evaluate_formula_tier(tier)
if tier.definition_type == "domain_formula":
return res and self.evaluate_formula_tier(tier)
return res