From fbe77f6a39c38c36cab846ad0a149aae539bfaac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 16 Mar 2023 13:22:19 +0100 Subject: [PATCH] Allow to extend the invoices list to compute invoice state of sale and purchase So advance payment invoices can be included in the original computation instead of duplicating the computation since changeset 1a763ffe4a66 renamed waiting into pending and add more states. --- modules/purchase/purchase.py | 10 +++++++--- modules/sale/sale.py | 10 +++++++--- modules/sale_advance_payment/sale.py | 17 +++-------------- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/modules/purchase/purchase.py b/modules/purchase/purchase.py index d59bed85dd..0f8a023357 100644 --- a/modules/purchase/purchase.py +++ b/modules/purchase/purchase.py @@ -597,13 +597,17 @@ class Purchase( return [('lines.invoice_lines.invoice' + clause[0][len(name):], *clause[1:])] + @property + def _invoices_for_state(self): + return self.invoices + def get_invoice_state(self): ''' Return the invoice state for the purchase. ''' - skip_ids = set(x.id for x in self.invoices_ignored) - skip_ids.update(x.id for x in self.invoices_recreated) - invoices = [i for i in self.invoices if i.id not in skip_ids] + skips = set(self.invoices_ignored) + skips.update(self.invoices_recreated) + invoices = [i for i in self._invoices_for_state if i.id not in skips] if invoices: if any(i.state == 'cancelled' for i in invoices): return 'exception' diff --git a/modules/sale/sale.py b/modules/sale/sale.py index 8a92a01a98..c1e654fa61 100644 --- a/modules/sale/sale.py +++ b/modules/sale/sale.py @@ -607,13 +607,17 @@ class Sale( return [('lines.invoice_lines.invoice' + clause[0][len(name):], *clause[1:])] + @property + def _invoices_for_state(self): + return self.invoices + def get_invoice_state(self): ''' Return the invoice state for the sale. ''' - skip_ids = set(x.id for x in self.invoices_ignored) - skip_ids.update(x.id for x in self.invoices_recreated) - invoices = [i for i in self.invoices if i.id not in skip_ids] + skips = set(self.invoices_ignored) + skips.update(self.invoices_recreated) + invoices = [i for i in self._invoices_for_state if i not in skips] if invoices: if any(i.state == 'cancelled' for i in invoices): return 'exception' diff --git a/modules/sale_advance_payment/sale.py b/modules/sale_advance_payment/sale.py index becbfebcce..9904eea4fe 100644 --- a/modules/sale_advance_payment/sale.py +++ b/modules/sale_advance_payment/sale.py @@ -345,20 +345,9 @@ class Sale(metaclass=PoolMeta): return [('advance_payment_conditions.invoice_lines.invoice' + clause[0][len(name):], *clause[1:])] - def get_invoice_state(self): - state = super(Sale, self).get_invoice_state() - skip_ids = set(x.id for x in self.invoices_ignored) - skip_ids.update(x.id for x in self.invoices_recreated) - invoices = [i - for i in self.advance_payment_invoices if i.id not in skip_ids] - if invoices: - if any(i.state == 'cancelled' for i in invoices): - return 'exception' - elif all(i.state == 'paid' for i in invoices): - return state - else: - return 'waiting' - return state + @property + def _invoices_for_state(self): + return super()._invoices_for_state + self.advance_payment_invoices def get_recall_lines(self, invoice): pool = Pool()