From 216814d2dfd4e8ec3bcfa04cd7b56c303966e6b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 22 Jan 2021 01:16:37 +0100 Subject: [PATCH] Manage missing attribute on sale in on_change_origin The origin maybe an unsaved sale so not all fields are necessary filled. issue9992 review355071002 --- account.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/account.py b/account.py index 3bdb4445e0..24caf68556 100644 --- a/account.py +++ b/account.py @@ -44,14 +44,22 @@ class Payment(metaclass=PoolMeta): 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):