diff --git a/addons/account/i18n/account.pot b/addons/account/i18n/account.pot index c5468b371b1..9f6ed9c24b1 100644 --- a/addons/account/i18n/account.pot +++ b/addons/account/i18n/account.pot @@ -7565,6 +7565,13 @@ msgstr "" msgid "Invalid \"Zip Range\", please configure it properly." msgstr "" +#. module: account +#. odoo-python +#: code:addons/account/models/account_report.py:0 +#, python-format +msgid "Invalid domain for expression '%s' of line '%s': %s" +msgstr "" + #. module: account #. odoo-python #: code:addons/account/models/company.py:0 diff --git a/addons/account/models/account_report.py b/addons/account/models/account_report.py index 71ec9618f97..d6bd290473b 100644 --- a/addons/account/models/account_report.py +++ b/addons/account/models/account_report.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +import ast import re from collections import defaultdict @@ -549,6 +550,16 @@ class AccountReportExpression(models.Model): ), ] + @api.constrains('formula') + def _check_domain_formula(self): + for expression in self.filtered(lambda expr: expr.engine == 'domain'): + try: + domain = ast.literal_eval(expression.formula) + self.env['account.move.line']._where_calc(domain) + except: + raise UserError(_("Invalid domain for expression '%s' of line '%s': %s", + expression.label, expression.report_line_name, expression.formula)) + @api.depends('engine') def _compute_auditable(self): auditable_engines = self._get_auditable_engines()