From 488ec2357b70baee52d89a255c2246073bbbfb96 Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Thu, 31 Oct 2024 17:17:44 +0100
Subject: [PATCH] [UPD] update coop data when creating last period

---
 models/res_partner.py        |  3 +-
 models/scop_period.py        | 69 +++++++++++++++++++++++-------------
 wizard/scop_period_wizard.py |  2 +-
 3 files changed, 47 insertions(+), 27 deletions(-)

diff --git a/models/res_partner.py b/models/res_partner.py
index beac707..3e51412 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -873,7 +873,7 @@ class ScopPartner(models.Model):
         partner.scop_period_ids = new_period
 
     def _add_period(self, partner):
-        new_period = self.env["scop.period"].create(
+        new_period = self.env["scop.period"].with_context().create(
             {
                 "partner_id": partner.id,
                 "start": partner.registration_date or fields.Date.today(),
@@ -1387,7 +1387,6 @@ class ScopPartner(models.Model):
             if (partner.revision_type == "1y") and (partner.cooperative_form_id.name == "SCIC") :
                 partner.revision_type_ok = False
 
-
     # ------------------------------------------------------
     # Button & Action
     # ------------------------------------------------------
diff --git a/models/scop_period.py b/models/scop_period.py
index f52de72..3a8c9b7 100644
--- a/models/scop_period.py
+++ b/models/scop_period.py
@@ -1,7 +1,7 @@
 # © 2019 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import fields, models
+from odoo import api, fields, models
 
 
 class ScopPeriod(models.Model):
@@ -82,32 +82,53 @@ class ScopPeriod(models.Model):
     # ------------------------------------------------------
     # Override ORM
     # ------------------------------------------------------
+    @api.model_create_multi
+    def create(self, vals_list):
+        period_ids = super().create(vals_list)
+        vals_list_index = 0
+        for period in period_ids:
+            if period == period.partner_id.scop_period_ids[0]:
+                partner_vals = period._get_partner_vals(vals_list[vals_list_index])
+                # Update partner
+                period.partner_id.sudo().write(partner_vals)
+                vals_list_index += 1
+        return period_ids
+
     def write(self, vals):
         for period in self:
             if period == period.partner_id.scop_period_ids[0]:
-                partner_vals = dict(vals)
-                # Suppression des valeurs à ne pas remonter à l'organisme
-                partner_vals.pop("partner_id", False)
-                partner_vals.pop("id_riga", False)
-                partner_vals.pop("start", False)
-                partner_vals.pop("comments", False)
-
-                # Si la date de fin est modifiée et que l'organisme est décédé
-                # on remonte la date de décès
-                if "end" in partner_vals:
-                    if (
-                        partner_vals.get("end_reason", False) == "deces"
-                        or period.end_reason == "deces"
-                    ):
-                        partner_vals.update(
-                            {"dissolution_date": partner_vals.get("end")}
-                        )
-                    if not partner_vals.get("end"):
-                        partner_vals.update({"dissolution_date": None})
-
-                partner_vals.pop("end", False)
-                partner_vals.pop("end_reason", False)
-
+                partner_vals = self._get_partner_vals(vals)
                 # Update partner
                 period.partner_id.sudo().write(partner_vals)
         return super(ScopPeriod, self).write(vals)
+
+    # ------------------------------------------------------
+    # Business funcitons
+    # ------------------------------------------------------
+    def _get_partner_vals(self, vals):
+        """
+        :param dict vals: dictionnaire des valeurs à créer ou à mettre à jour
+        """
+        partner_vals = dict(vals)
+        # Suppression des valeurs à ne pas remonter à l'organisme
+        partner_vals.pop("partner_id", False)
+        partner_vals.pop("id_riga", False)
+        partner_vals.pop("start", False)
+        partner_vals.pop("comments", False)
+
+        # Si la date de fin est modifiée et que l'organisme est décédé
+        # on remonte la date de décès
+        if "end" in partner_vals:
+            if (
+                partner_vals.get("end_reason", False) == "deces"
+                or self.end_reason == "deces"
+            ):
+                partner_vals.update(
+                    {"dissolution_date": partner_vals.get("end")}
+                )
+            if not partner_vals.get("end"):
+                partner_vals.update({"dissolution_date": None})
+
+        partner_vals.pop("end", False)
+        partner_vals.pop("end_reason", False)
+        return partner_vals
diff --git a/wizard/scop_period_wizard.py b/wizard/scop_period_wizard.py
index c52b835..0029db1 100644
--- a/wizard/scop_period_wizard.py
+++ b/wizard/scop_period_wizard.py
@@ -246,7 +246,7 @@ class ScopPeriodWizard(models.TransientModel):
                 "ur_id": period.ur_id.id,
             }
             period_values.update(values)
-            self.env["scop.period"].create(period_values)
+            self.env["scop.period"].with_context().create(period_values)
 
             # Update partner
             partner_values.update(values)
-- 
GitLab