From 9ddafe65d9129d64efbb19f8a493494a761ec8d5 Mon Sep 17 00:00:00 2001
From: jordan <jordan@le-filament.com>
Date: Mon, 1 Mar 2021 18:15:00 +0100
Subject: [PATCH] [update] check if cotiz invoice and invoice_line exists
 before create in create_contribution

---
 models/scop_cotisation.py | 62 +++++++++++++++++++++++++--------------
 1 file changed, 40 insertions(+), 22 deletions(-)

diff --git a/models/scop_cotisation.py b/models/scop_cotisation.py
index 2232df7..bfc64d7 100644
--- a/models/scop_cotisation.py
+++ b/models/scop_cotisation.py
@@ -69,30 +69,48 @@ class ScopCotisation(models.AbstractModel):
                             liasse=None, amount=0):
         Invoice = self.env['account.invoice']
         InvoiceLine = self.env['account.invoice.line']
-        member_invoice = Invoice.create({
-            'partner_id': partner.id,
-            'liasse_fiscale_id': liasse.id,
-            'type': 'out_invoice',
-            'year': self.year,
-            'is_contribution': True,
-            'type_contribution_id': type_contribution,
-            'journal_id': self.company_id.contribution_journal_id.id,
-            'state': 'draft',
-            'account_id': partner.property_account_receivable_id.id,
-            'payment_term_id': self.payment_term_id.id,
-            'payment_mode_id': partner.customer_payment_mode_id.id,
-            'date_invoice': self.date_cotisation,
-        })
+
+        exisiting_invoice = Invoice.search([
+            ('partner_id', '=', partner.id),
+            ('year', '=', self.year),
+            ('type_contribution_id', '=', type_contribution)
+        ])
+        if not exisiting_invoice:
+            member_invoice = Invoice.create({
+                'partner_id': partner.id,
+                'liasse_fiscale_id': liasse.id,
+                'type': 'out_invoice',
+                'year': self.year,
+                'is_contribution': True,
+                'type_contribution_id': type_contribution,
+                'journal_id': self.company_id.contribution_journal_id.id,
+                'state': 'draft',
+                'account_id': partner.property_account_receivable_id.id,
+                'payment_term_id': self.payment_term_id.id,
+                'payment_mode_id': partner.customer_payment_mode_id.id,
+                'date_invoice': self.date_cotisation,
+            })
+        else:
+            member_invoice = exisiting_invoice
 
         # Création de la ligne CG Scop
-        InvoiceLine.create({
-            'invoice_id': member_invoice.id,
-            'product_id': product.id,
-            'account_id': product.property_account_income_id.id,
-            'invoice_line_tax_ids': [(6, 0, product.taxes_id.ids)],
-            'name': product.name,
-            'price_unit': amount
-        })
+        exisiting_invoice_line_ids = InvoiceLine.search([
+            ('invoice_id', '=', member_invoice.id),
+            ('product_id', '=', product.id)
+        ])
+        if not exisiting_invoice_line_ids:
+            InvoiceLine.create({
+                'invoice_id': member_invoice.id,
+                'product_id': product.id,
+                'account_id': product.property_account_income_id.id,
+                'invoice_line_tax_ids': [(6, 0, product.taxes_id.ids)],
+                'name': product.name,
+                'price_unit': amount
+            })
+        else:
+            exisiting_invoice_line_ids[0].write({
+                'price_unit': amount
+            })
 
         return member_invoice
 
-- 
GitLab