From 938a7fdd294cfc29a31d0c18ddbcf75e36567fcf Mon Sep 17 00:00:00 2001
From: jordan <jordan@le-filament.com>
Date: Mon, 3 May 2021 19:35:32 +0200
Subject: [PATCH] [fix] much easier way to compute state

---
 models/scop_cotisations_idf.py | 45 ++++++++++++++--------------------
 models/scop_invoice_idf.py     | 43 ++++++++++++++------------------
 2 files changed, 36 insertions(+), 52 deletions(-)

diff --git a/models/scop_cotisations_idf.py b/models/scop_cotisations_idf.py
index 3c1ca25..2dd5bf4 100644
--- a/models/scop_cotisations_idf.py
+++ b/models/scop_cotisations_idf.py
@@ -84,6 +84,7 @@ class ScopCotisationsIDF(models.Model):
                 else:
                     r.amount_residual = r.debit
 
+    @api.multi
     def _compute_state(self):
         """
         A line can be in different state :
@@ -91,35 +92,25 @@ class ScopCotisationsIDF(models.Model):
         - Too many payments related to one invoice
         - Some payments are missing
         - The invoice has been paid
-
         """
-        partners = set(self.mapped('partner_id'))
-        years = set(self.mapped('year'))
-        for year in years:
-            for partner in partners:
-                invoice_lines = self.search([
-                    ['year', '=', year],
-                    ['partner_id', '=', partner.id],
-                    ['lettrage', '=', letter]])
-                invoices = invoice_lines.filtered(
-                    lambda l: l.type == 'inv')
-                if not invoices:
-                    for r in invoice_lines:
-                        r.state = 'no_invoice'
+        for r in self:
+            if r.type != 'inv':
+                if not r.invoice_id:
+                    r.state = 'no_invoice'
+                else:
+                    if r.invoice_id.amount_residual > 0:
+                        r.state = 'awaiting_payments'
+                    elif r.invoice_id.amount_residual < 0:
+                        r.state = 'overpaid'
+                    else:
+                        r.state = 'paid'
+            else:
+                if r.amount_residual > 0:
+                    r.state = 'awaiting_payments'
+                elif r.amount_residual < 0:
+                    r.state = 'overpaid'
                 else:
-                    for invoice in invoices:
-                        if invoice.amount_residual > 0:
-                            invoice.state = 'awaiting_payments'
-                            for r in invoice.payments_ids:
-                                r.state = 'awaiting_payments'
-                        elif invoice.amount_residual < 0:
-                            invoice.state = 'overpaid'
-                            for r in invoice.payments_ids:
-                                r.state = 'overpaid'
-                        else:
-                            invoice.state = 'paid'
-                            for r in invoice.payments_ids:
-                                r.state = 'paid'
+                    r.state = 'paid'
 
     @api.multi
     def _search_state(self, operator, value):
diff --git a/models/scop_invoice_idf.py b/models/scop_invoice_idf.py
index 306026f..a19534a 100644
--- a/models/scop_invoice_idf.py
+++ b/models/scop_invoice_idf.py
@@ -80,6 +80,7 @@ class ScopInvoiceIDF(models.Model):
                 else:
                     r.amount_residual = r.debit
 
+    @api.multi
     def _compute_state(self):
         """
         A line can be in different state :
@@ -88,32 +89,24 @@ class ScopInvoiceIDF(models.Model):
         - Some payments are missing
         - The invoice has been paid
         """
-        partners = set(self.mapped('partner_id'))
-        years = set(self.mapped('year'))
-        for year in years:
-            for partner in partners:
-                invoice_lines = self.search([
-                    ['year', '=', year],
-                    ['partner_id', '=', partner.id], ])
-                invoices = invoice_lines.filtered(
-                    lambda l: l.type == 'inv')
-                if not invoices:
-                    for r in invoice_lines:
-                        r.state = 'no_invoice'
+        for r in self:
+            if r.type != 'inv':
+                if not r.invoice_id:
+                    r.state = 'no_invoice'
+                else:
+                    if r.invoice_id.amount_residual > 0:
+                        r.state = 'awaiting_payments'
+                    elif r.invoice_id.amount_residual < 0:
+                        r.state = 'overpaid'
+                    else:
+                        r.state = 'paid'
+            else:
+                if r.amount_residual > 0:
+                    r.state = 'awaiting_payments'
+                elif r.amount_residual < 0:
+                    r.state = 'overpaid'
                 else:
-                    for invoice in invoices:
-                        if invoice.amount_residual > 0:
-                            invoice.state = 'awaiting_payments'
-                            for r in invoice.payments_ids:
-                                r.state = 'awaiting_payments'
-                        elif invoice.amount_residual < 0:
-                            invoice.state = 'overpaid'
-                            for r in invoice.payments_ids:
-                                r.state = 'overpaid'
-                        else:
-                            invoice.state = 'paid'
-                            for r in invoice.payments_ids:
-                                r.state = 'paid'
+                    r.state = 'paid'
 
     @api.multi
     def _search_state(self, operator, value):
-- 
GitLab