From 253bfaf676d15e5f8e6dee5774f3ff9af0b64b5b Mon Sep 17 00:00:00 2001
From: Julien Ortet <julien@le-filament.com>
Date: Wed, 28 May 2025 16:20:00 +0200
Subject: [PATCH] [UPD] handle date parution on period

---
 models/res_partner.py | 101 +++++++++++++++++++++++++++---------------
 1 file changed, 66 insertions(+), 35 deletions(-)

diff --git a/models/res_partner.py b/models/res_partner.py
index 09f34a8..8e85fb2 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -21,8 +21,7 @@ class ResPartner(models.Model):
         string="Dirigeants",
     )
     last_inpi_update_date = fields.Datetime(
-        string="Dernière mise à jours INPI",
-        tracking=True
+        string="Dernière mise à jours INPI", tracking=True
     )
     first_company_closeout = fields.Date(string="Date de première cloture")
 
@@ -136,7 +135,7 @@ class ResPartner(models.Model):
     # Fonctions update générale
     # --------------------------------------------------
 
-    def update_from_inpi(self, update_type="all"):
+    def update_from_inpi(self, update_type="all", date_parution=None):
         """
         MAJ from inpi
         """
@@ -167,7 +166,9 @@ class ResPartner(models.Model):
             sirens=[self.siren.replace(" ", "")]
         )
         if inpi_data:
-            update_methods.get(update_type)(inpi_data=inpi_data)
+            update_methods.get(update_type)(
+                inpi_data=inpi_data, date_parution=date_parution
+            )
         else:
             logger.error(_(f"No INPI response for {self.name}: {self.siren}"))
 
@@ -175,7 +176,9 @@ class ResPartner(models.Model):
     # Denomination
     # --------------------------------------------------
 
-    def _update_denomination_from_inpi(self, inpi_data, new_period=True):
+    def _update_denomination_from_inpi(
+        self, inpi_data, new_period=True, date_parution=None
+    ):
         """
         MAJ denomination
         """
@@ -193,10 +196,12 @@ class ResPartner(models.Model):
                 logger.info(
                     _(f"Up denomination :Period creation for {self.name}: {self.siren}")
                 )
-                period.write(
-                    {"end": datetime.datetime.now().date(), "end_reason": "nom"}
-                )
-                period_values["start"] = fields.Date.today()
+                if date_parution:
+                    period_date = date_parution
+                else:
+                    period_date = fields.Date.today()
+                period.write({"end": period_date, "end_reason": "adr"})
+                period_values["start"] = period_date
             period_values["name"] = inpi_name
             period_values["partner_id"] = self.id
             if new_period:
@@ -209,7 +214,7 @@ class ResPartner(models.Model):
     # NAF
     # --------------------------------------------------
 
-    def _update_naf_from_inpi(self, inpi_data, new_period=True):
+    def _update_naf_from_inpi(self, inpi_data, new_period=True, date_parution=None):
         """
         MAJ code naf
         """
@@ -224,10 +229,12 @@ class ResPartner(models.Model):
 
         if inpi_naf_id != period.naf_id:
             if new_period:
-                period.write(
-                    {"end": datetime.datetime.now().date(), "end_reason": "acti"}
-                )
-                period_values["start"] = fields.Date.today()
+                if date_parution:
+                    period_date = date_parution
+                else:
+                    period_date = fields.Date.today()
+                period.write({"end": period_date, "end_reason": "adr"})
+                period_values["start"] = period_date
             period_values["naf_id"] = inpi_naf_id
             period_values["partner_id"] = self.id
 
@@ -337,7 +344,9 @@ class ResPartner(models.Model):
             facility_values.update(inpi_adress)
             facility.write(facility_values)
 
-    def _update_etablissement_from_inpi(self, inpi_data, new_period=True):
+    def _update_etablissement_from_inpi(
+        self, inpi_data, new_period=True, date_parution=None
+    ):
         """
         MAJ établissements
         Les nouveaux sont créées on ne fait rien pour ceux qui ne sont plus dans INPI
@@ -383,7 +392,9 @@ class ResPartner(models.Model):
     # FORME JURIDIQUE
     # --------------------------------------------------
 
-    def _update_forme_juridique_from_inpi(self, inpi_data, new_period=True):
+    def _update_forme_juridique_from_inpi(
+        self, inpi_data, new_period=True, date_parution=None
+    ):
         """
         MAJ forme juridique
         on essai de faire correspondre le code de FJ reçu avec un
@@ -396,23 +407,30 @@ class ResPartner(models.Model):
         if not inpi_data.formality.content.personneMorale:
             return current_period
 
-        inpi_forme_juridique = inpi_data.formality.content.personneMorale.identite.entreprise.formeJuridique
+        inpi_forme_juridique = (
+            inpi_data.formality.content.personneMorale.identite.entreprise.formeJuridique
+        )
 
         # check if full code in base
-        cj_id = self.env["res.partner.company.type"].search([("code_forme_juridique", "=", inpi_forme_juridique)])
+        cj_id = self.env["res.partner.company.type"].search(
+            [("code_forme_juridique", "=", inpi_forme_juridique)]
+        )
         # if not check if there is a "niveau 2" code in base, CG use only a few CJ code
         if not cj_id:
-            cj_id = self.env["res.partner.company.type"].search([
-                ("code_forme_juridique", "=", inpi_forme_juridique[:2])])
+            cj_id = self.env["res.partner.company.type"].search(
+                [("code_forme_juridique", "=", inpi_forme_juridique[:2])]
+            )
 
         if cj_id and cj_id.id != self.partner_company_type_id.id:
             self.partner_company_type_id = cj_id.id
             period_values = self._get_values_from_period(current_period)
             if new_period:
-                current_period.write(
-                    {"end": datetime.datetime.now().date(), "end_reason": "adr"}
-                )
-                period_values["start"] = fields.Date.today()
+                if date_parution:
+                    period_date = date_parution
+                else:
+                    period_date = fields.Date.today()
+                current_period.write({"end": period_date, "end_reason": "adr"})
+                period_values["start"] = period_date
                 period_values["partner_id"] = self.id
             period_values["res_partner_company_type"] = cj_id.id
 
@@ -423,7 +441,6 @@ class ResPartner(models.Model):
 
         return self._get_current_period()
 
-
     # --------------------------------------------------
     # DIRIGEANTS
     # --------------------------------------------------
@@ -434,7 +451,10 @@ class ResPartner(models.Model):
         Les dirigants sont créées via le modele cgscop.inpi.director
         """
         logger.info(_(f"Update dirigeants for {self.name}: {self.siren}"))
-        if inpi_data.formality.content.personneMorale and inpi_data.formality.content.personneMorale.composition:
+        if (
+            inpi_data.formality.content.personneMorale
+            and inpi_data.formality.content.personneMorale.composition
+        ):
             inpi_pouvoirs = (
                 inpi_data.formality.content.personneMorale.composition.pouvoirs
             )
@@ -466,7 +486,7 @@ class ResPartner(models.Model):
     # ADRESSE
     # --------------------------------------------------
 
-    def _update_address_from_inpi(self, inpi_data, new_period=True):
+    def _update_address_from_inpi(self, inpi_data, new_period=True, date_parution=None):
         """
         MAJ de l adresse du siege
         """
@@ -497,10 +517,12 @@ class ResPartner(models.Model):
 
             if changing_period_values:
                 if new_period:
-                    period.write(
-                        {"end": datetime.datetime.now().date(), "end_reason": "adr"}
-                    )
-                    period_values["start"] = fields.Date.today()
+                    if date_parution:
+                        period_date = date_parution
+                    else:
+                        period_date = fields.Date.today()
+                    period.write({"end": period_date, "end_reason": "adr"})
+                    period_values["start"] = period_date
                     period_values["partner_id"] = self.id
 
                 for value in changing_period_values:
@@ -522,13 +544,22 @@ class ResPartner(models.Model):
         """
         MAJ de la date de premiere cloture des comptes
         """
-        logger.info(_(f"Update company first closeout date for {self.name}: {self.siren}"))
-        if inpi_data.formality.content.personneMorale and inpi_data.formality.content.personneMorale.identite:
-            description = inpi_data.formality.content.personneMorale.identite.description
+        logger.info(
+            _(f"Update company first closeout date for {self.name}: {self.siren}")
+        )
+        if (
+            inpi_data.formality.content.personneMorale
+            and inpi_data.formality.content.personneMorale.identite
+        ):
+            description = (
+                inpi_data.formality.content.personneMorale.identite.description
+            )
             if description.datePremiereCloture:
                 self.first_company_closeout = description.datePremiereCloture
         else:
-            logger.info(_(f"No company first closeout date found for {self.name}: {self.siren}"))
+            logger.info(
+                _(f"No company first closeout date found for {self.name}: {self.siren}")
+            )
 
     # --------------------------------------------------
     # UPDATE
-- 
GitLab