OCA reporting engine fork for dev and update.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

47 lines
1.7 KiB

# Copyright 2019 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models, api, _
from odoo.exceptions import ValidationError
class ActionsReportSubstitutionRule(models.Model):
_name = 'ir.actions.report.substitution.rule'
_description = 'Action Report Substitution Rule'
_order = 'sequence ASC'
sequence = fields.Integer(default=10)
action_report_id = fields.Many2one(
comodel_name="ir.actions.report",
string="Report Action",
required=True,
ondelete="cascade",
)
model = fields.Char(related="action_report_id.model", store=True)
domain = fields.Char(string="Domain", required=True, default="[]")
substitution_action_report_id = fields.Many2one(
comodel_name="ir.actions.report",
string="Substitution Report Action",
required=True,
ondelete="cascade",
domain="[('model', '=', model)]",
)
@api.constrains('substitution_action_report_id', 'action_report_id')
def _check_substitution_infinite_loop(self):
def _check_infinite_loop(original_report, substitution_report):
if original_report == substitution_report:
raise ValidationError(_("Substitution infinite loop detected"))
for (
substitution_rule
) in substitution_report.action_report_substitution_rule_ids:
_check_infinite_loop(
original_report,
substitution_rule.substitution_action_report_id,
)
for rec in self:
_check_infinite_loop(
rec.action_report_id, rec.substitution_action_report_id
)