From 74c48d05d633f685242b58f13f8aee95dcb94186 Mon Sep 17 00:00:00 2001
From: Julien Ortet <julien@le-filament.com>
Date: Wed, 16 Apr 2025 16:12:59 +0200
Subject: [PATCH] [UPD] precommit and some debug

---
 __manifest__.py                |  1 -
 models/cgscop_inpi_director.py | 46 ++++++++++++++++++----------------
 models/res_partner.py          | 44 +++++++++++++++++++++-----------
 models/scop_period.py          |  2 +-
 wizard/inpi_update_wizard.py   |  2 +-
 5 files changed, 55 insertions(+), 40 deletions(-)

diff --git a/__manifest__.py b/__manifest__.py
index de22563..3b8d6ba 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -5,7 +5,6 @@
     "author": "Le Filament",
     "license": "AGPL-3",
     "application": False,
-    "installable": True,
     "depends": [
         "base",
         "cgscop_partner",
diff --git a/models/cgscop_inpi_director.py b/models/cgscop_inpi_director.py
index a63ef05..2b80552 100644
--- a/models/cgscop_inpi_director.py
+++ b/models/cgscop_inpi_director.py
@@ -1,9 +1,8 @@
 # Copyright 2020 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-import datetime
 import logging
 
-from odoo import _, fields, models
+from odoo import fields, models
 
 import odoo.addons.api_inpi.models.inpi_models as inpi_models
 
@@ -28,23 +27,26 @@ class CgScopInpiDirector(models.Model):
 
     def maj_from_inpi(self, scop_id, inpi_pouvoir):
 
-        # check if director exist
-        director = self.env["cgscop.inpi.director"].search(
-            [
-                ("partner_id", "=", scop_id.id),
-                ("name", "=", inpi_pouvoir.individu.descriptionPersonne.nom),
-            ]
-        )
-
-        if not director:
-            director_data = {
-                "partner_id": scop_id.id,
-                "name": inpi_pouvoir.individu.descriptionPersonne.nom,
-                "surname": " ".join(inpi_pouvoir.individu.descriptionPersonne.prenoms),
-                "role": inpi_models.get_role_from_code(inpi_pouvoir.roleEntreprise),
-            }
-            if inpi_pouvoir.individu.descriptionPersonne.dateDeNaissancePresent:
-                director_data[
-                    "birthday"
-                ] = inpi_pouvoir.individu.descriptionPersonne.dateDeNaissance
-            self.create(director_data)
+        # check if this "pouvoir" is an human
+        if inpi_pouvoir.typeDePersonne == "INDIVIDU":
+            # check if director exist
+            director = self.env["cgscop.inpi.director"].search(
+                [
+                    ("partner_id", "=", scop_id.id),
+                    ("name", "=", inpi_pouvoir.individu.descriptionPersonne.nom),
+                ]
+            )
+            if not director:
+                director_data = {
+                    "partner_id": scop_id.id,
+                    "name": inpi_pouvoir.individu.descriptionPersonne.nom,
+                    "surname": " ".join(
+                        inpi_pouvoir.individu.descriptionPersonne.prenoms
+                    ),
+                    "role": inpi_models.get_role_from_code(inpi_pouvoir.roleEntreprise),
+                }
+                if inpi_pouvoir.individu.descriptionPersonne.dateDeNaissancePresent:
+                    director_data[
+                        "birthday"
+                    ] = inpi_pouvoir.individu.descriptionPersonne.dateDeNaissance
+                self.create(director_data)
diff --git a/models/res_partner.py b/models/res_partner.py
index f033d65..581a40c 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -64,7 +64,7 @@ class ResPartner(models.Model):
 
     def _get_current_period(self):
         return self.env["scop.period"].search(
-            [("partner_id", "=", self.id), ("end", "=", False)],
+            [("partner_id", "=", self.id), ("end", "=", False)], limit=1
         )
 
     def _get_values_from_period(self, period):
@@ -125,6 +125,7 @@ class ResPartner(models.Model):
                 == inpi_models.RolePourEntreprise.SIEGE_FERME.value
             ):
                 return ets
+        return None
 
     # --------------------------------------------------
     # Fonctions update générale
@@ -157,8 +158,10 @@ class ResPartner(models.Model):
         inpi_data = self.env["api.inpi"].get_rne_data_object(
             sirens=[self.siren.replace(" ", "")]
         )
-
-        update_methods.get(update_type)(inpi_data=inpi_data)
+        if inpi_data:
+            update_methods.get(update_type)(inpi_data=inpi_data)
+        else:
+            logger.error(_(f"No INPI response for {self.siren}"))
 
     # --------------------------------------------------
     # Denomination
@@ -301,18 +304,21 @@ class ResPartner(models.Model):
         inpi_facilities = (
             inpi_data.formality.content.personneMorale.autresEtablissements
         )
+        facilities_not_in_inpi = []
 
         if inpi_facilities:
             facilities = self.facility_ids
 
             # mise a jours de etablissements en base
             for facility in facilities:
-                self._update_facility(
-                    inpi_facility=self._get_inpi_facility_from_siret(
-                        facility.siret, inpi_data
-                    ),
-                    facility=facility,
+                inpi_facily = self._get_inpi_facility_from_siret(
+                    facility.siret, inpi_data
                 )
+                if not inpi_facily:
+                    facilities_not_in_inpi.append(facility)
+                else:
+                    self._update_facility(inpi_facility=inpi_facily, facility=facility)
+
             # creation des eventuels nouveaux établissements secondaire
             for inpi_facility in inpi_facilities:
                 role = inpi_facility.descriptionEtablissement.rolePourEntreprise
@@ -322,13 +328,18 @@ class ResPartner(models.Model):
                     ):
                         self._create_ets_secondaire(inpi_facility)
 
+            # suppression des ets secondaire non present dans inpi
+            for old_facility in facilities_not_in_inpi:
+                logger.info(
+                    f"Etablissement secondaire non present dans INPI {old_facility.name}"
+                )
+
     # --------------------------------------------------
     # FORME JURIDIQUE
     # --------------------------------------------------
 
     def _update_forme_juridique_from_inpi(self, inpi_data, new_period=True):
-        inpi_forme_juridique = inpi_data.formality.content.natureCreation.formeJuridique
-        pass
+        inpi_data.formality.content.natureCreation.formeJuridique
 
     # --------------------------------------------------
     # DIRIGEANTS
@@ -336,13 +347,16 @@ class ResPartner(models.Model):
 
     def _update_dirigeant_from_inpi(self, inpi_data):
 
-        inpi_pouvoirs = inpi_data.formality.content.personneMorale.composition.pouvoirs
-
-        for pouvoir in inpi_pouvoirs:
-            self.env["cgscop.inpi.director"].maj_from_inpi(
-                scop_id=self, inpi_pouvoir=pouvoir
+        if inpi_data.formality.content.personneMorale.composition:
+            inpi_pouvoirs = (
+                inpi_data.formality.content.personneMorale.composition.pouvoirs
             )
 
+            for pouvoir in inpi_pouvoirs:
+                self.env["cgscop.inpi.director"].maj_from_inpi(
+                    scop_id=self, inpi_pouvoir=pouvoir
+                )
+
     # --------------------------------------------------
     # ADRESSE
     # --------------------------------------------------
diff --git a/models/scop_period.py b/models/scop_period.py
index 4d6bd96..3757799 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 api, fields, models
+from odoo import fields, models
 
 
 class ScopPeriod(models.Model):
diff --git a/wizard/inpi_update_wizard.py b/wizard/inpi_update_wizard.py
index 40fa9ab..4ea8ce9 100644
--- a/wizard/inpi_update_wizard.py
+++ b/wizard/inpi_update_wizard.py
@@ -1,7 +1,7 @@
 # © 2020 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import api, fields, models
+from odoo import fields, models
 
 
 class InpiUpdateWizard(models.TransientModel):
-- 
GitLab