diff --git a/modules/account_asset/asset.py b/modules/account_asset/asset.py index a4a3cc5c4e..aa0e4b4c57 100644 --- a/modules/account_asset/asset.py +++ b/modules/account_asset/asset.py @@ -11,6 +11,7 @@ from sql.functions import CharLength 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 @@ class Asset(Workflow, ModelSQL, ModelView): 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 --git a/modules/account_asset/message.xml b/modules/account_asset/message.xml index 1816424ac0..07c860df30 100644 --- a/modules/account_asset/message.xml +++ b/modules/account_asset/message.xml @@ -27,5 +27,11 @@ this repository contains the full copyright notices and license terms. --> A revision origin can be used only once per asset. + + To close asset "%(asset)s" you must configure a replacement account for "%(account)s". + + + To close asset "%(asset)s" you must configure an account asset for the product "%(product)s". + diff --git a/modules/account_invoice_defer/account.py b/modules/account_invoice_defer/account.py index decef1ffb0..59c698bc07 100644 --- a/modules/account_invoice_defer/account.py +++ b/modules/account_invoice_defer/account.py @@ -362,6 +362,12 @@ class InvoiceDeferred(Workflow, ModelSQL, ModelView): 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 --git a/modules/account_invoice_defer/message.xml b/modules/account_invoice_defer/message.xml index 28d1f88e53..d763228073 100644 --- a/modules/account_invoice_defer/message.xml +++ b/modules/account_invoice_defer/message.xml @@ -12,6 +12,9 @@ this repository contains the full copyright notices and license terms. --> You cannot delete invoice deferred "%(deferral)s" because it is not in "draft" state. + + To create moves for invoice deferred "%(deferral)s" you must configure a replacement account for "%(account)s". + There is no deferred account revenue configured. diff --git a/modules/account_payment_clearing/message.xml b/modules/account_payment_clearing/message.xml new file mode 100644 index 0000000000..af427e26af --- /dev/null +++ b/modules/account_payment_clearing/message.xml @@ -0,0 +1,20 @@ + + + + + + To clear the payment "%(payment)s" you must configure a replacement account for "%(account)s". + + + 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". + + + To clear the payment "%(payment)s" you must configure a payable account for party "%(party)s". + + + To clear the payment "%(payment)s" you must configure a receivable account for party "%(party)s". + + + + diff --git a/modules/account_payment_clearing/payment.py b/modules/account_payment_clearing/payment.py index e05779e9e6..6fd02cd778 100644 --- a/modules/account_payment_clearing/payment.py +++ b/modules/account_payment_clearing/payment.py @@ -8,7 +8,9 @@ from sql.aggregate import BoolAnd, Min 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 @@ class Payment(metaclass=PoolMeta): 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 @@ class Payment(metaclass=PoolMeta): 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 --git a/modules/account_payment_clearing/tryton.cfg b/modules/account_payment_clearing/tryton.cfg index cf2d70da95..6a58b23bba 100644 --- a/modules/account_payment_clearing/tryton.cfg +++ b/modules/account_payment_clearing/tryton.cfg @@ -10,6 +10,7 @@ extras_depend: account_statement_rule xml: payment.xml + message.xml [register] model: