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