Add ir.message and use UserWarning/UserError

This commit is contained in:
?ngel ?lvarez 2019-01-09 11:08:21 +01:00
parent b48f3318d9
commit 300639d912
5 changed files with 68 additions and 66 deletions

34
message.xml Normal file
View File

@ -0,0 +1,34 @@
<?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 group="1">
<record model="ir.message" id="not_customer_invoice">
<field name="text">A customer invoice/refund from sale device (%(reference)s) has not been created.</field>
</record>
<record model="ir.message" id="not_sale_device">
<field name="text">You have not defined a sale device for your user.</field>
</record>
<record model="ir.message" id="not_draft_statement">
<field name="text">A draft statement for "%(journal)s" payments has not been created.</field>
</record>
<record model="ir.message" id="party_without_account_receivable">
<field name="text">Party %(party)s has no any account receivable defined. Please, assign one.</field>
</record>
<record model="ir.message" id="open_statement">
<field name="text">Statement %(journal)s opened.</field>
</record>
<record model="ir.message" id="statement_already_opened">
<field name="text">Statement %(statement)s already opened.</field>
</record>
<record model="ir.message" id="user_without_device">
<field name="text">User %(user)s has not any device assigned yet.</field>
</record>
<record model="ir.message" id="close_statement">
<field name="text">Statement %(statement)s closed.</field>
</record>
<record model="ir.message" id="statement_already_closed">
<field name="text">Statement %(statement)s not found.</field>
</record>
</data>
</tryton>

36
sale.py
View File

@ -12,6 +12,8 @@ from trytond.pool import PoolMeta, Pool
from trytond.pyson import Bool, Eval, Not from trytond.pyson import Bool, Eval, Not
from trytond.transaction import Transaction from trytond.transaction import Transaction
from trytond.wizard import Wizard, StateView, StateTransition, Button from trytond.wizard import Wizard, StateView, StateTransition, Button
from trytond.i18n import gettext
from trytond.exceptions import UserError
__all__ = ['Sale', 'SalePaymentForm', 'WizardSalePayment', __all__ = ['Sale', 'SalePaymentForm', 'WizardSalePayment',
@ -41,10 +43,6 @@ class Sale(metaclass=PoolMeta):
'readonly': Not(Bool(Eval('lines'))), '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 @staticmethod
def default_sale_device(): def default_sale_device():
@ -70,7 +68,9 @@ class Sale(metaclass=PoolMeta):
cls.process([sale]) cls.process([sale])
if not sale.invoices and sale.invoice_method == 'order': 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', grouping = getattr(sale.party, 'sale_invoice_grouping_method',
False) False)
@ -218,18 +218,6 @@ class WizardSalePayment(Wizard):
]) ])
pay_ = StateTransition() 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): def default_start(self, fields):
pool = Pool() pool = Pool()
Sale = pool.get('sale.sale') Sale = pool.get('sale.sale')
@ -238,7 +226,7 @@ class WizardSalePayment(Wizard):
user = User(Transaction().user) user = User(Transaction().user)
sale_device = sale.sale_device or user.sale_device or False sale_device = sale.sale_device or user.sale_device or False
if user.id != 0 and not sale_device: if user.id != 0 and not sale_device:
self.raise_user_error('not_sale_device') raise UserError(gettext('sale_payment.not_sale_device'))
return { return {
'journal': sale_device.journal.id 'journal': sale_device.journal.id
if sale_device.journal else None, if sale_device.journal else None,
@ -262,7 +250,8 @@ class WizardSalePayment(Wizard):
('state', '=', 'draft'), ('state', '=', 'draft'),
], order=[('date', 'DESC')]) ], order=[('date', 'DESC')])
if not statements: 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) active_id = Transaction().context.get('active_id', False)
sale = Sale(active_id) sale = Sale(active_id)
@ -270,9 +259,12 @@ class WizardSalePayment(Wizard):
Sale.set_number([sale]) Sale.set_number([sale])
account = (sale.party.account_receivable account = (sale.party.account_receivable
and sale.party.account_receivable.id and sale.party.account_receivable.id)
or self.raise_user_error('party_without_account_receivable',
error_args=(sale.party.name,))) if not account:
raise UserError(gettext(
'sale_payment.party_without_account_receivable',
party=sale.party.name))
if form.payment_amount: if form.payment_amount:
payment = StatementLine( payment = StatementLine(

View File

@ -6,6 +6,9 @@ from trytond.pool import Pool, PoolMeta
from trytond.transaction import Transaction from trytond.transaction import Transaction
from trytond.wizard import Button, StateTransition, StateView, Wizard from trytond.wizard import Button, StateTransition, StateView, Wizard
from decimal import Decimal from decimal import Decimal
from trytond.i18n import gettext
from trytond.exceptions import UserError
__all__ = ['Journal', 'Statement', 'Line', 'OpenStatementStart', __all__ = ['Journal', 'Statement', 'Line', 'OpenStatementStart',
'OpenStatementDone', 'OpenStatement', 'CloseStatementStart', 'OpenStatementDone', 'OpenStatement', 'CloseStatementStart',
@ -137,16 +140,6 @@ class OpenStatement(Wizard):
Button('Done', 'end', 'tryton-ok', default=True), 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): def default_done(self, fields):
return { return {
'result': self.result, 'result': self.result,
@ -186,19 +179,16 @@ class OpenStatement(Wizard):
'end_balance': Decimal('0.0'), 'end_balance': Decimal('0.0'),
} }
vlist.append(values) vlist.append(values)
result += self.raise_user_error('open_statement', result += gettext('sale_payment.open_statement',
error_args=(journal.rec_name,), journal=journal.rec_name)
raise_exception=False)
else: else:
result += self.raise_user_error('statement_already_opened', result += gettext('sale_payment.statement_already_opened',
error_args=(journal.rec_name,), journal=journal.rec_name)
raise_exception=False)
statements.extend(Statement.create(vlist)) statements.extend(Statement.create(vlist))
self.result = result self.result = result
else: else:
self.result = self.raise_user_error('user_without_device', self.result = gettext('sale_payment.user_without_device',
error_args=(user.rec_name,), user=user.rec_name)
raise_exception=False)
return 'done' return 'done'
@ -227,17 +217,6 @@ class CloseStatement(Wizard):
Button('Done', 'end', 'tryton-ok', default=True), 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): def default_done(self, fields):
return { return {
'result': self.result, 'result': self.result,
@ -271,22 +250,18 @@ class CloseStatement(Wizard):
statement.end_balance = end_balance statement.end_balance = end_balance
statement.save() statement.save()
statements.append(statement) statements.append(statement)
result += self.raise_user_error('close_statement', result += gettext('sale_payment.close_statement',
error_args=(statement.rec_name,), statement=statement.rec_name)
raise_exception=False)
elif statement: elif statement:
result += self.raise_user_error('statement_already_closed', result += gettext('sale_payment.statement_already_closed',
error_args=(statement.rec_name,), statement=statement.rec_name)
raise_exception=False)
else: else:
result += self.raise_user_error('not_statement_found', result += gettext('sale_payment.not_statement_found',
error_args=(journal.rec_name,), journal=journal.rec_name)
raise_exception=False)
if statements: if statements:
Statement.validate_statement(statements) Statement.validate_statement(statements)
self.result = result self.result = result
else: else:
self.result = self.raise_user_error('user_without_device', self.result = gettext('sale_payment.user_without_device',
error_args=(user.rec_name,), user=user.rec_name)
raise_exception=False)
return 'done' return 'done'

View File

@ -204,7 +204,7 @@ Open statements for current device::
0 0
>>> open_statment = Wizard('open.statement') >>> open_statment = Wizard('open.statement')
>>> open_statment.execute('create_') >>> open_statment.execute('create_')
>>> open_statment.form.result == 'Statement Default opened. \n' >>> open_statment.form.result == 'Statement Default opened.'
True True
>>> payment_statement, = Statement.find([('state', '=', 'draft')]) >>> 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 = Wizard('close.statement')
>>> close_statment.execute('validate') >>> close_statment.execute('validate')
>>> close_statment.form.result == 'Statement Default - Default closed. \n' >>> close_statment.form.result == 'Statement Default - Default closed.'
True True
>>> payment_statement.reload() >>> payment_statement.reload()
>>> payment_statement.state == 'validated' >>> payment_statement.state == 'validated'

View File

@ -8,3 +8,4 @@ xml:
sale.xml sale.xml
statement.xml statement.xml
user.xml user.xml
message.xml