details: https://code.tryton.org/tryton/commit/968413e3ff29
branch: default
user: Cédric Krier <[email protected]>
date: Wed Nov 26 12:03:42 2025 +0100
description:
Raise tailored error message when calculated account for move line is
empty
Closes #14392
diffstat:
modules/account_asset/asset.py | 13 ++++++++
modules/account_asset/message.xml | 6 ++++
modules/account_invoice_defer/account.py | 6 ++++
modules/account_invoice_defer/message.xml | 3 ++
modules/account_payment_clearing/message.xml | 20 +++++++++++++
modules/account_payment_clearing/payment.py | 42 +++++++++++++++++++++++++--
modules/account_payment_clearing/tryton.cfg | 1 +
7 files changed, 87 insertions(+), 4 deletions(-)
diffs (181 lines):
diff -r 6a0e22e0f45e -r 968413e3ff29 modules/account_asset/asset.py
--- a/modules/account_asset/asset.py Tue Dec 02 00:12:08 2025 +0100
+++ b/modules/account_asset/asset.py Wed Nov 26 12:03:42 2025 +0100
@@ -11,6 +11,7 @@
from trytond.i18n import gettext
from trytond.model import Index, ModelSQL, ModelView, Unique, Workflow, fields
from trytond.model.exceptions import AccessError
+from trytond.modules.account.exceptions import AccountMissing
from trytond.modules.company import CompanyReport
from trytond.modules.currency.fields import Monetary
from trytond.pool import Pool
@@ -589,8 +590,20 @@
period = Period.find(self.company, date)
if self.supplier_invoice_line:
account_asset = self.supplier_invoice_line.account.current()
+ if not account_asset:
+ raise AccountMissing(gettext(
+ 'account_asset'
+ '.msg_asset_close_invoice_line_missing_account',
+ asset=self.rec_name,
+ account=self.supplier_invoice_line.account.rec_name))
else:
account_asset = self.product.account_asset_used
+ if not account_asset:
+ raise AccountMissing(gettext(
+ 'account_asset'
+ '.msg_asset_close_product_account_asset',
+ asset=self.rec_name,
+ product=self.product.rec_name))
asset_line = MoveLine(
debit=0,
diff -r 6a0e22e0f45e -r 968413e3ff29 modules/account_asset/message.xml
--- a/modules/account_asset/message.xml Tue Dec 02 00:12:08 2025 +0100
+++ b/modules/account_asset/message.xml Wed Nov 26 12:03:42 2025 +0100
@@ -27,5 +27,11 @@
<record model="ir.message" id="msg_revision_asset_origin_unique">
<field name="text">A revision origin can be used only once per
asset.</field>
</record>
+ <record model="ir.message"
id="msg_asset_close_invoice_line_missing_account">
+ <field name="text">To close asset "%(asset)s" you must configure a
replacement account for "%(account)s".</field>
+ </record>
+ <record model="ir.message" id="msg_asset_close_product_account_asset">
+ <field name="text">To close asset "%(asset)s" you must configure
an account asset for the product "%(product)s".</field>
+ </record>
</data>
</tryton>
diff -r 6a0e22e0f45e -r 968413e3ff29 modules/account_invoice_defer/account.py
--- a/modules/account_invoice_defer/account.py Tue Dec 02 00:12:08 2025 +0100
+++ b/modules/account_invoice_defer/account.py Wed Nov 26 12:03:42 2025 +0100
@@ -362,6 +362,12 @@
else:
income.debit, income.credit = 0, -amount
income.account = self.invoice_line.account.current(move.date)
+ if not income.account:
+ raise AccountMissing(gettext(
+ 'account_invoice_defer'
+ '.msg_invoice_deferred_invoice_line_missing_account',
+ deferral=self.rec_name,
+ account=self.invoice_line.account.rec_name))
if income.account.party_required:
income.party = invoice.party
diff -r 6a0e22e0f45e -r 968413e3ff29 modules/account_invoice_defer/message.xml
--- a/modules/account_invoice_defer/message.xml Tue Dec 02 00:12:08 2025 +0100
+++ b/modules/account_invoice_defer/message.xml Wed Nov 26 12:03:42 2025 +0100
@@ -12,6 +12,9 @@
<record model="ir.message" id="msg_invoice_deferred_delete_draft">
<field name="text">You cannot delete invoice deferred
"%(deferral)s" because it is not in "draft" state.</field>
</record>
+ <record model="ir.message"
id="msg_invoice_deferred_invoice_line_missing_account">
+ <field name="text">To create moves for invoice deferred
"%(deferral)s" you must configure a replacement account for "%(account)s".
</field>
+ </record>
<record model="ir.message" id="msg_missing_deferred_account_revenue">
<field name="text">There is no deferred account revenue
configured.</field>
</record>
diff -r 6a0e22e0f45e -r 968413e3ff29
modules/account_payment_clearing/message.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/account_payment_clearing/message.xml Wed Nov 26 12:03:42
2025 +0100
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tryton>
+ <data grouped="1">
+ <record model="ir.message" id="msg_payment_clearing_account_missing">
+ <field name="text">To clear the payment "%(payment)s" you must
configure a replacement account for "%(account)s".</field>
+ </record>
+ <record model="ir.message"
id="msg_payment_clearing_account_missing_journal">
+ <field name="text">To clear the payment "%(payment)s" you must
configure a replacement account for "%(account)s" or an active account on the
payment journal "%(journal)s".</field>
+ </record>
+ <record model="ir.message"
id="msg_payment_clearing_account_payable_missing">
+ <field name="text">To clear the payment "%(payment)s" you must
configure a payable account for party "%(party)s".</field>
+ </record>
+ <record model="ir.message"
id="msg_payment_clearing_account_receivable_missing">
+ <field name="text">To clear the payment "%(payment)s" you must
configure a receivable account for party "%(party)s".</field>
+ </record>
+
+ </data>
+</tryton>
diff -r 6a0e22e0f45e -r 968413e3ff29 modules/account_payment_clearing/payment.py
--- a/modules/account_payment_clearing/payment.py Tue Dec 02 00:12:08
2025 +0100
+++ b/modules/account_payment_clearing/payment.py Wed Nov 26 12:03:42
2025 +0100
@@ -8,7 +8,9 @@
from sql.conditionals import Coalesce
from trytond import backend
+from trytond.i18n import gettext
from trytond.model import ModelView, Workflow, fields
+from trytond.modules.account.exceptions import AccountMissing
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Eval, If, TimeDelta
from trytond.tools import grouped_slice, reduce_ids
@@ -235,13 +237,38 @@
context = transaction.context
with transaction.set_context(date=context.get('clearing_date')):
if self.line:
- return self.line.account.current()
+ account = self.line.account.current()
+ if not account:
+ raise AccountMissing(gettext(
+ 'account_payment_clearing'
+ '.msg_payment_clearing_account_missing',
+ payment=self.rec_name,
+ account=self.line.account.rec_name))
elif self.account:
- return self.account.current()
+ account = self.account.current()
+ if not account:
+ raise AccountMissing(gettext(
+ 'account_payment_clearing'
+ '.msg_payment_clearing_account_missing',
+ payment=self.rec_name,
+ account=self.account.rec_name))
elif self.kind == 'payable':
- return self.party.account_payable_used
+ account = self.party.account_payable_used
+ if not account:
+ raise AccountMissing(gettext(
+ 'account_payment_clearing'
+ '.msg_payment_clearing_account_payable_missing',
+ payment=self.rec_name,
+ party=self.party.rec_name))
elif self.kind == 'receivable':
- return self.party.account_receivable_used
+ account = self.party.account_receivable_used
+ if not account:
+ raise AccountMissing(gettext(
+ 'account_payment_clearing'
+ '.msg_payment_clearing_account_receivable_missing',
+ payment=self.rec_name,
+ party=self.party.rec_name))
+ return account
@property
def clearing_party(self):
@@ -314,6 +341,13 @@
else:
counterpart.debit, counterpart.credit = local_amount, 0
counterpart.account = self.journal.clearing_account.current(date)
+ if not counterpart.account:
+ raise AccountMissing(gettext(
+ 'account_payment_clearing'
+ '.msg_payment_clearing_account_missing_journal',
+ payment=self.rec_name,
+ account=self.journal.clearing_account.rec_name,
+ journal=self.journal.rec_name))
if not local_currency:
counterpart.amount_second_currency = self.amount.copy_sign(
counterpart.debit - counterpart.credit)
diff -r 6a0e22e0f45e -r 968413e3ff29 modules/account_payment_clearing/tryton.cfg
--- a/modules/account_payment_clearing/tryton.cfg Tue Dec 02 00:12:08
2025 +0100
+++ b/modules/account_payment_clearing/tryton.cfg Wed Nov 26 12:03:42
2025 +0100
@@ -10,6 +10,7 @@
account_statement_rule
xml:
payment.xml
+ message.xml
[register]
model: