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