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.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(

View File

@ -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'

View File

@ -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'

View File

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