diff --git a/message.xml b/message.xml new file mode 100644 index 0000000..d47f253 --- /dev/null +++ b/message.xml @@ -0,0 +1,34 @@ + + + + + + A customer invoice/refund from sale device (%(reference)s) has not been created. + + + You have not defined a sale device for your user. + + + A draft statement for "%(journal)s" payments has not been created. + + + Party %(party)s has no any account receivable defined. Please, assign one. + + + Statement %(journal)s opened. + + + Statement %(statement)s already opened. + + + User %(user)s has not any device assigned yet. + + + Statement %(statement)s closed. + + + Statement %(statement)s not found. + + + diff --git a/sale.py b/sale.py index e5abbca..2da7a99 100644 --- a/sale.py +++ b/sale.py @@ -12,6 +12,8 @@ from trytond.pool import PoolMeta, Pool from trytond.pyson import Bool, Eval, Not from trytond.transaction import Transaction from trytond.wizard import Wizard, StateView, StateTransition, Button +from trytond.i18n import gettext +from trytond.exceptions import UserError __all__ = ['Sale', 'SalePaymentForm', 'WizardSalePayment', @@ -41,10 +43,6 @@ class Sale(metaclass=PoolMeta): 'readonly': Not(Bool(Eval('lines'))), }, }) - cls._error_messages.update({ - 'not_customer_invoice': ('A customer invoice/refund ' - 'from sale device (%s) has not been created.'), - }) @staticmethod def default_sale_device(): @@ -70,7 +68,9 @@ class Sale(metaclass=PoolMeta): cls.process([sale]) if not sale.invoices and sale.invoice_method == 'order': - cls.raise_user_error('not_customer_invoice', (sale.reference,)) + raise UserError(gettext( + 'sale_payment.not_customer_invoice', + reference=sale.reference)) grouping = getattr(sale.party, 'sale_invoice_grouping_method', False) @@ -218,18 +218,6 @@ class WizardSalePayment(Wizard): ]) pay_ = StateTransition() - @classmethod - def __setup__(cls): - super(WizardSalePayment, cls).__setup__() - cls._error_messages.update({ - 'not_sale_device': ('You have not defined a sale device for ' - 'your user.'), - 'not_draft_statement': ('A draft statement for "%s" payments ' - 'has not been created.'), - 'party_without_account_receivable': 'Party %s has no any ' - 'account receivable defined. Please, assign one.', - }) - def default_start(self, fields): pool = Pool() Sale = pool.get('sale.sale') @@ -238,7 +226,7 @@ class WizardSalePayment(Wizard): user = User(Transaction().user) sale_device = sale.sale_device or user.sale_device or False if user.id != 0 and not sale_device: - self.raise_user_error('not_sale_device') + raise UserError(gettext('sale_payment.not_sale_device')) return { 'journal': sale_device.journal.id if sale_device.journal else None, @@ -262,7 +250,8 @@ class WizardSalePayment(Wizard): ('state', '=', 'draft'), ], order=[('date', 'DESC')]) if not statements: - self.raise_user_error('not_draft_statement', (form.journal.name,)) + raise UserError(gettext('sale_payment.not_draft_statement', + journal=form.journal.name)) active_id = Transaction().context.get('active_id', False) sale = Sale(active_id) @@ -270,9 +259,12 @@ class WizardSalePayment(Wizard): Sale.set_number([sale]) account = (sale.party.account_receivable - and sale.party.account_receivable.id - or self.raise_user_error('party_without_account_receivable', - error_args=(sale.party.name,))) + and sale.party.account_receivable.id) + + if not account: + raise UserError(gettext( + 'sale_payment.party_without_account_receivable', + party=sale.party.name)) if form.payment_amount: payment = StatementLine( diff --git a/statement.py b/statement.py index 6e49dd1..30510ad 100644 --- a/statement.py +++ b/statement.py @@ -6,6 +6,9 @@ from trytond.pool import Pool, PoolMeta from trytond.transaction import Transaction from trytond.wizard import Button, StateTransition, StateView, Wizard from decimal import Decimal +from trytond.i18n import gettext +from trytond.exceptions import UserError + __all__ = ['Journal', 'Statement', 'Line', 'OpenStatementStart', 'OpenStatementDone', 'OpenStatement', 'CloseStatementStart', @@ -137,16 +140,6 @@ class OpenStatement(Wizard): Button('Done', 'end', 'tryton-ok', default=True), ]) - @classmethod - def __setup__(cls): - super(OpenStatement, cls).__setup__() - cls._error_messages.update({ - 'open_statement': 'Statement %s opened. \n', - 'statement_already_opened': 'Statement %s already opened. \n', - 'user_without_device': 'User %s has not any device assigned yet.' - '\n', - }) - def default_done(self, fields): return { 'result': self.result, @@ -186,19 +179,16 @@ class OpenStatement(Wizard): 'end_balance': Decimal('0.0'), } vlist.append(values) - result += self.raise_user_error('open_statement', - error_args=(journal.rec_name,), - raise_exception=False) + result += gettext('sale_payment.open_statement', + journal=journal.rec_name) else: - result += self.raise_user_error('statement_already_opened', - error_args=(journal.rec_name,), - raise_exception=False) + result += gettext('sale_payment.statement_already_opened', + journal=journal.rec_name) statements.extend(Statement.create(vlist)) self.result = result else: - self.result = self.raise_user_error('user_without_device', - error_args=(user.rec_name,), - raise_exception=False) + self.result = gettext('sale_payment.user_without_device', + user=user.rec_name) return 'done' @@ -227,17 +217,6 @@ class CloseStatement(Wizard): Button('Done', 'end', 'tryton-ok', default=True), ]) - @classmethod - def __setup__(cls): - super(CloseStatement, cls).__setup__() - cls._error_messages.update({ - 'close_statement': 'Statement %s closed. \n', - 'statement_already_closed': 'Statement %s already closed. \n', - 'not_statement_found': 'Statement %s not found. \n', - 'user_without_device': 'User %s has not any device assigned yet.' - '\n', - }) - def default_done(self, fields): return { 'result': self.result, @@ -271,22 +250,18 @@ class CloseStatement(Wizard): statement.end_balance = end_balance statement.save() statements.append(statement) - result += self.raise_user_error('close_statement', - error_args=(statement.rec_name,), - raise_exception=False) + result += gettext('sale_payment.close_statement', + statement=statement.rec_name) elif statement: - result += self.raise_user_error('statement_already_closed', - error_args=(statement.rec_name,), - raise_exception=False) + result += gettext('sale_payment.statement_already_closed', + statement=statement.rec_name) else: - result += self.raise_user_error('not_statement_found', - error_args=(journal.rec_name,), - raise_exception=False) + result += gettext('sale_payment.not_statement_found', + journal=journal.rec_name) if statements: Statement.validate_statement(statements) self.result = result else: - self.result = self.raise_user_error('user_without_device', - error_args=(user.rec_name,), - raise_exception=False) + self.result = gettext('sale_payment.user_without_device', + user=user.rec_name) return 'done' diff --git a/tests/scenario_sale_payment.rst b/tests/scenario_sale_payment.rst index ed797c1..44e6d42 100644 --- a/tests/scenario_sale_payment.rst +++ b/tests/scenario_sale_payment.rst @@ -204,7 +204,7 @@ Open statements for current device:: 0 >>> open_statment = Wizard('open.statement') >>> open_statment.execute('create_') - >>> open_statment.form.result == 'Statement Default opened. \n' + >>> open_statment.form.result == 'Statement Default opened.' True >>> payment_statement, = Statement.find([('state', '=', 'draft')]) @@ -270,7 +270,7 @@ When the statement is closed the invoices are paid and sale is done:: >>> close_statment = Wizard('close.statement') >>> close_statment.execute('validate') - >>> close_statment.form.result == 'Statement Default - Default closed. \n' + >>> close_statment.form.result == 'Statement Default - Default closed.' True >>> payment_statement.reload() >>> payment_statement.state == 'validated' diff --git a/tryton.cfg b/tryton.cfg index 24e9f04..b449a4d 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -8,3 +8,4 @@ xml: sale.xml statement.xml user.xml + message.xml