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::
 

Reply via email to