changeset c9f21b1d7cb2 in modules/sale_payment:5.8
details: 
https://hg.tryton.org/modules/sale_payment?cmd=changeset;node=c9f21b1d7cb2
description:
        Manage missing attribute on sale in on_change_origin

        The origin maybe an unsaved sale so not all fields are necessary filled.

        issue9992
        review355071002
        (grafted from 009610ee7f1cb7ad4d865f517fbf6cab74e12c3a)
diffstat:

 account.py |  20 ++++++++++++++------
 1 files changed, 14 insertions(+), 6 deletions(-)

diffs (32 lines):

diff -r 537dcf03c231 -r c9f21b1d7cb2 account.py
--- a/account.py        Fri Jan 01 16:36:28 2021 +0100
+++ b/account.py        Fri Jan 22 01:16:37 2021 +0100
@@ -44,14 +44,22 @@
             pass
         if self.origin and isinstance(self.origin, Sale):
             sale = self.origin
-            self.party = sale.invoice_party or sale.party
-            sale_amount = sale.total_amount
-            self.kind = 'receivable' if sale_amount > 0 else 'payable'
+            party = (
+                getattr(sale, 'invoice_party', None)
+                or getattr(sale, 'party', None))
+            if party:
+                self.party = party
+            sale_amount = getattr(sale, 'total_amount', None)
             payment_amount = sum(
-                (p.amount for p in sale.payments if p.state != 'failed'),
+                (p.amount for p in getattr(sale, 'payments', [])
+                    if p.state != 'failed'),
                 Decimal(0))
-            self.amount = abs(sale_amount) - payment_amount
-            self.currency = self.origin.currency
+            if sale_amount is not None:
+                self.kind = 'receivable' if sale_amount > 0 else 'payable'
+                self.amount = abs(sale_amount) - payment_amount
+            currency = getattr(sale, 'currency', None)
+            if currency is not None:
+                self.currency = currency
 
     @classmethod
     def validate(cls, payments):

Reply via email to