details: https://code.tryton.org/tryton/commit/6236378a9cd3
branch: default
user: Cédric Krier <[email protected]>
date: Tue Jul 07 00:04:54 2026 +0200
description:
Add warning when deleting account reconciliation linked to receivable
rule
Closes #14891
diffstat:
modules/account_receivable_rule/account.py |
33 ++++++++++
modules/account_receivable_rule/message.xml |
4 +
modules/account_receivable_rule/tests/scenario_account_receivable_rule.rst |
9 ++
modules/account_receivable_rule/tryton.cfg |
1 +
4 files changed, 47 insertions(+), 0 deletions(-)
diffs (104 lines):
diff -r a50b564c40d1 -r 6236378a9cd3 modules/account_receivable_rule/account.py
--- a/modules/account_receivable_rule/account.py Fri Jun 26 00:09:48
2026 +0200
+++ b/modules/account_receivable_rule/account.py Tue Jul 07 00:04:54
2026 +0200
@@ -8,9 +8,11 @@
from sql.operators import Equal
from trytond import backend
+from trytond.i18n import gettext
from trytond.model import (
DeactivableMixin, Exclude, ModelSQL, ModelView, Unique, Workflow,
dualmethod, fields, sequence_ordered)
+from trytond.modules.account.exceptions import ReconciliationDeleteWarning
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval
from trytond.tools import sqlite_apply_types
@@ -33,6 +35,36 @@
return super()._get_origin() + ['account.account.receivable.rule']
+class Reconciliation(ModelSQL, ModelView):
+ __name__ = 'account.move.reconciliation'
+
+ @classmethod
+ def check_modification(
+ cls, mode, reconciliations, values=None, external=False):
+ pool = Pool()
+ ReceivableRule = pool.get('account.account.receivable.rule')
+ Warning = pool.get('res.user.warning')
+
+ super().check_modification(
+ mode, reconciliations, values=values, external=external)
+
+ if mode == 'delete':
+ for reconciliation in reconciliations:
+ for line in reconciliation.lines:
+ if isinstance(line.move.origin, ReceivableRule):
+ key = Warning.format(
+ 'delete.receivable.rule', [reconciliation])
+ if Warning.check(key):
+ raise ReconciliationDeleteWarning(key, gettext(
+ 'account_receivable_rule.'
+ 'msg_reconciliation_delete'
+ '_receivable_rule',
+ reconciliation=reconciliation.rec_name,
+ line=line.rec_name,
+ receivable_rule=line.move.origin.rec_name,
+ move=line.move.rec_name))
+
+
class AccountRuleAbstract(DeactivableMixin, ModelSQL, ModelView):
company = fields.Many2One(
@@ -473,3 +505,4 @@
rules_parties = [(a.receivable_rules, p) for a, p in accounts.items()]
if rules_parties:
Rule.apply(*rules_parties[0], rules_parties[1:])
+ Rule.apply(*rules_parties[0], rules_parties[1:])
diff -r a50b564c40d1 -r 6236378a9cd3 modules/account_receivable_rule/message.xml
--- a/modules/account_receivable_rule/message.xml Fri Jun 26 00:09:48
2026 +0200
+++ b/modules/account_receivable_rule/message.xml Tue Jul 07 00:04:54
2026 +0200
@@ -9,5 +9,9 @@
<record model="ir.message" id="msg_rule_account_unique">
<field name="text">Only one account is allowed by rule.</field>
</record>
+ <record model="ir.message"
id="msg_reconciliation_delete_receivable_rule">
+ <field name="text">The reconciliation "%(reconciliation)s" is
linked to the line "%(line)s" from the receivable rule %(receivable_rule)s.
+You may need to cancel its move "%(move)s".</field>
+ </record>
</data>
</tryton>
diff -r a50b564c40d1 -r 6236378a9cd3
modules/account_receivable_rule/tests/scenario_account_receivable_rule.rst
---
a/modules/account_receivable_rule/tests/scenario_account_receivable_rule.rst
Fri Jun 26 00:09:48 2026 +0200
+++
b/modules/account_receivable_rule/tests/scenario_account_receivable_rule.rst
Tue Jul 07 00:04:54 2026 +0200
@@ -21,6 +21,7 @@
>>> Party = Model.get('party.party')
>>> Move = Model.get('account.move')
>>> ReceivableRule = Model.get('account.account.receivable.rule')
+ >>> Reconciliation = Model.get('account.move.reconciliation')
Create fiscal year::
@@ -149,3 +150,11 @@
>>> receivable2.reload()
>>> receivable2.balance
Decimal('20.00')
+
+Test delete reconciliation of receivable rule::
+
+ >>> reconciliations = Reconciliation.find([('delegate_to', '=', None)])
+ >>> Reconciliation.delete(reconciliations)
+ Traceback (most recent call last):
+ ...
+ ReconciliationDeleteWarning: ...
diff -r a50b564c40d1 -r 6236378a9cd3 modules/account_receivable_rule/tryton.cfg
--- a/modules/account_receivable_rule/tryton.cfg Fri Jun 26 00:09:48
2026 +0200
+++ b/modules/account_receivable_rule/tryton.cfg Tue Jul 07 00:04:54
2026 +0200
@@ -17,6 +17,7 @@
ir.Cron
account.Account
account.Move
+ account.Reconciliation
account.AccountReceivableRule
account.AccountReceivableRuleAccount