changeset dc8ed99c96d1 in modules/sale_payment:default
details:
https://hg.tryton.org/modules/sale_payment?cmd=changeset&node=dc8ed99c96d1
description:
Replace sale state validation by domain on origin
issue11304
review361041002
diffstat:
account.py | 42 ++++++++++++++--------------------------
message.xml | 6 -----
tests/scenario_sale_payment.rst | 4 +-
3 files changed, 17 insertions(+), 35 deletions(-)
diffs (104 lines):
diff -r b759822ca43c -r dc8ed99c96d1 account.py
--- a/account.py Sun Mar 06 18:20:38 2022 +0100
+++ b/account.py Sat Mar 26 13:05:32 2022 +0100
@@ -3,10 +3,9 @@
import functools
from decimal import Decimal
-from trytond.i18n import gettext
from trytond.model import fields
-from trytond.modules.account_payment.exceptions import PaymentValidationError
from trytond.pool import Pool, PoolMeta
+from trytond.pyson import Eval, If
def sale_payment_confirm(func):
@@ -30,6 +29,20 @@
__name__ = 'account.payment'
@classmethod
+ def __setup__(cls):
+ super().__setup__()
+ cls.origin.domain['sale.sale'] = [
+ If(~Eval('state').in_(['failed', 'succeeded']),
+ ('state', '!=', 'draft'),
+ ()),
+ If(Eval('state') == 'draft',
+ ('state', '!=', 'cancelled'),
+ ()),
+ ]
+ if 'state' not in cls.origin.depends:
+ cls.origin.depends.append('state')
+
+ @classmethod
def _get_origin(cls):
return super(Payment, cls)._get_origin() + ['sale.sale']
@@ -61,31 +74,6 @@
self.currency = currency
@classmethod
- def validate(cls, payments):
- pool = Pool()
- Sale = pool.get('sale.sale')
- super(Payment, cls).validate(payments)
- for payment in payments:
- if isinstance(payment.origin, Sale):
- payment.check_sale_state()
-
- def check_sale_state(self):
- assert isinstance(self.origin, Pool().get('sale.sale'))
- if self.state == 'succeeded':
- # Do not prevent succeeding payment
- return
- if self.state != 'failed' and self.origin.state == 'draft':
- raise PaymentValidationError(
- gettext('sale_payment.msg_payment_sale_draft',
- sale=self.origin.rec_name,
- payment=self.rec_name))
- elif self.state == 'draft' and self.origin.state == 'cancelled':
- raise PaymentValidationError(
- gettext('sale_payment.msg_payment_sale_cancel',
- sale=self.origin.rec_name,
- payment=self.rec_name))
-
- @classmethod
def create(cls, vlist):
payments = super(Payment, cls).create(vlist)
cls.trigger_authorized([p for p in payments if p.is_authorized])
diff -r b759822ca43c -r dc8ed99c96d1 message.xml
--- a/message.xml Sun Mar 06 18:20:38 2022 +0100
+++ b/message.xml Sat Mar 26 13:05:32 2022 +0100
@@ -9,11 +9,5 @@
<record model="ir.message" id="msg_sale_draft_payment">
<field name="text">You cannot reset to draft sale "%(sale)s"
because it has payments.</field>
</record>
- <record model="ir.message" id="msg_payment_sale_draft">
- <field name="text">You cannot use sale "%(sale)s" on payment
"%(payment)s" because it is a draft sale.</field>
- </record>
- <record model="ir.message" id="msg_payment_sale_cancel">
- <field name="text">You cannot use sale "%(sale)s" on payment
"%(payment)s" because it is a cancelled sale.</field>
- </record>
</data>
</tryton>
diff -r b759822ca43c -r dc8ed99c96d1 tests/scenario_sale_payment.rst
--- a/tests/scenario_sale_payment.rst Sun Mar 06 18:20:38 2022 +0100
+++ b/tests/scenario_sale_payment.rst Sat Mar 26 13:05:32 2022 +0100
@@ -137,7 +137,7 @@
>>> payment.save() # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
- PaymentValidationError: ...
+ DomainValidationError: ...
Cancel the sale::
@@ -156,7 +156,7 @@
>>> payment.save() # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
- PaymentValidationError: ...
+ DomainValidationError: ...
Revive the sale::