mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
[12.0][IMP] - Add check for substitution infinite loop
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
# Copyright 2019 ACSONE SA/NV
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
from odoo import fields, models, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class ActionsReportSubstitutionRule(models.Model):
|
||||
@@ -24,5 +25,23 @@ class ActionsReportSubstitutionRule(models.Model):
|
||||
string="Substitution Report Action",
|
||||
required=True,
|
||||
ondelete="cascade",
|
||||
domain="[('model', '=', model)]"
|
||||
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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user