From 18460504012c2dac707342ee5d7ecee606255f8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 8 Mar 2024 12:36:57 +0100 Subject: [PATCH] Do not set sale nor purchase in exception for invoice with cancel move Cancelled invoices with a cancel move should be considered as paid. Closes #13085 --- modules/purchase/purchase.py | 14 +++++++++++--- modules/sale/sale.py | 14 +++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/modules/purchase/purchase.py b/modules/purchase/purchase.py index 22a6ae8876..ff2c0b89c3 100644 --- a/modules/purchase/purchase.py +++ b/modules/purchase/purchase.py @@ -575,12 +575,20 @@ class Purchase( skips = set(self.invoices_ignored) skips.update(self.invoices_recreated) invoices = [i for i in self._invoices_for_state if i not in skips] + + def is_cancelled(invoice): + return invoice.state == 'cancelled' and not invoice.cancel_move + + def is_paid(invoice): + return ( + invoice.state == 'paid' + or (invoice.state == 'cancelled' and invoice.cancel_move)) if invoices: - if any(i.state == 'cancelled' for i in invoices): + if any(is_cancelled(i) for i in invoices): return 'exception' - elif all(i.state == 'paid' for i in invoices): + elif all(is_paid(i) for i in invoices): return 'paid' - elif any(i.state == 'paid' for i in invoices): + elif any(is_paid(i) for i in invoices): return 'partially paid' elif any(i.state == 'posted' for i in invoices): return 'awaiting payment' diff --git a/modules/sale/sale.py b/modules/sale/sale.py index 9062fef7b8..37ace2336f 100644 --- a/modules/sale/sale.py +++ b/modules/sale/sale.py @@ -628,12 +628,20 @@ class Sale( skips = set(self.invoices_ignored) skips.update(self.invoices_recreated) invoices = [i for i in self._invoices_for_state if i not in skips] + + def is_cancelled(invoice): + return invoice.state == 'cancelled' and not invoice.cancel_move + + def is_paid(invoice): + return ( + invoice.state == 'paid' + or (invoice.state == 'cancelled' and invoice.cancel_move)) if invoices: - if any(i.state == 'cancelled' for i in invoices): + if any(is_cancelled(i) for i in invoices): return 'exception' - elif all(i.state == 'paid' for i in invoices): + elif all(is_paid(i) for i in invoices): return 'paid' - elif any(i.state == 'paid' for i in invoices): + elif any(is_paid(i) for i in invoices): return 'partially paid' elif any(i.state == 'posted' for i in invoices): return 'awaiting payment'