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