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: