From e3db57852ecf157f176fed4b668bc1e15e6a73e8 Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Tue, 25 Jul 2023 12:26:08 +0200
Subject: [PATCH] [update] creation & membership process

---
 models/res_partner.py        | 121 ++++++++++++++++++++++++++++-------
 models/scop_adhesion_file.py |  29 +--------
 2 files changed, 99 insertions(+), 51 deletions(-)

diff --git a/models/res_partner.py b/models/res_partner.py
index 361280c..4604a60 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -3,7 +3,8 @@
 
 from pytz import timezone
 
-from odoo import fields, models
+from odoo import _, fields, models
+from odoo.exceptions import UserError
 
 
 class ScopAlfrescoAdhesionPartner(models.Model):
@@ -90,20 +91,67 @@ class ScopAlfrescoAdhesionPartner(models.Model):
     # ------------------------------------------------------
     # Business method
     # ------------------------------------------------------
-    def get_compulsory_docs(self):
+    def get_compulsory_docs(self, type_process):
         domain = [
             ("coop_type_id", "=", self.cooperative_form_id.id),
             ("is_compulsory", "=", True),
+            ("type_process", "=", type_process),
         ]
-        # Si la coop est en projet de création
-        if self.project_status == "3_accompagnement":
-            domain += [("type_process", "=", "project")]
-        # Si la coop est en phase d'adhésion
-        if self.membership_status == "adhesion":
-            domain += [("type_process", "=", "adhesion")]
 
         return self.env["scop.adhesion.file"].search(domain)
 
+    def scop_check_docs(self, type_process, error_type=""):
+        """
+        Return error message for mandatory documents
+        :param str type_process: scop.adhesion.file type_process
+        :param str error_type: scop.adhesion.file type_process
+        """
+        errors = str()
+        compulsory_docs = self.get_compulsory_docs(type_process)
+        loaded_docs = self.compulsory_doc_cmis_query()
+
+        errors_complete_docs = self.check_compulsory_docs(
+            compulsory_docs, loaded_docs)
+        if errors_complete_docs:
+            errors_str = str()
+            for error in errors_complete_docs:
+                errors_str += "<li>" + error + "</li>"
+            errors += (
+                "<hr/><strong>Documents manquants :</strong><ul>" + errors_str + "</ul>"
+            )
+        # Si des erreurs remplir les logs avec la liste des documents manquants
+        if errors:
+            local_tz = timezone("Europe/Paris")
+            utc_tz = timezone("UTC")
+            log_date = utc_tz.localize(
+                fields.Datetime.now()).astimezone(local_tz).strftime("%d/%m/%Y %-H:%M")
+            self.list_logs = "<strong>%s</strong> %s %s" % (
+                log_date, error_type, errors
+            )
+        else:
+            self.list_logs = False
+
+    def check_compulsory_docs(self, compulsory_docs, loaded_docs):
+        """
+        Override function to check docs with cmis query
+        :param obj compulsory_docs: scop.adhesion.file object
+        :param list loaded_docs: cmis query response
+        @returns list: list of missing mandatory documents
+        """
+        errors = list()
+
+        compulsory_docs_list = compulsory_docs.mapped(
+            lambda d: {"name": d.name, "metadata": d.type_doc}
+        )
+        loaded_docs_list = list(
+            map(lambda d: d.properties.get("crm:type"), loaded_docs)
+        )
+        for mandatory_doc in compulsory_docs_list:
+            if mandatory_doc.get("metadata") not in loaded_docs_list:
+                errors.append(mandatory_doc.get("name"))
+
+        return errors
+
     # ------------------------------------------------------
     # Override parent
     # ------------------------------------------------------
@@ -172,23 +220,50 @@ class ScopAlfrescoAdhesionPartner(models.Model):
 
         return res
 
-    def check_compulsory_docs(self):
+    def scop_suivi_adhesion(self):
         """
-        Override function to check docs with cmis query
-        :return:
+        Inherit parent to check documents
         """
-        errors = list()
-        compulsory_docs = self.get_compulsory_docs()
-        loaded_docs = self.env["scop.adhesion.file"].compulsory_doc_cmis_query(self)
+        # vérification des documents obligatoires
+        self.scop_check_docs("project", "Impossible de créer la coopérative")
 
-        compulsory_docs_list = compulsory_docs.mapped(
-            lambda d: {"name": d.name, "metadata": d.type_doc}
-        )
-        loaded_docs_list = list(
-            map(lambda d: d.properties.get("crm:type"), loaded_docs)
+        return super(ScopAlfrescoAdhesionPartner, self).scop_suivi_adhesion()
+
+    def scop_sumbit_cg(self):
+        """
+        Inherit parent to check documents
+        """
+        res = super(ScopAlfrescoAdhesionPartner, self).scop_sumbit_cg()
+        # vérification des documents obligatoires
+        self.scop_check_docs(
+            "adhesion", "Impossible de transmettre le dossier d'adhésion"
         )
-        for mandatory_doc in compulsory_docs_list:
-            if mandatory_doc.get("metadata") not in loaded_docs_list:
-                errors.append(mandatory_doc.get("name"))
+        return res
 
-        return errors
+    # ------------------------------------------------------
+    # Alfresco method
+    # ------------------------------------------------------
+    def compulsory_doc_cmis_query(self):
+        self.ensure_one()
+        backend = self.env["cmis.backend"].search([])
+        backend.ensure_one()
+        cmis_client = backend.get_cmis_client()
+        query = (
+            """
+                    SELECT * FROM crm:document as d
+                    JOIN crm:organisme as o ON d.cmis:objectId = o.cmis:objectId
+                    WHERE o.crm:id = '%s'"""
+            % self.id
+        )
+        try:
+            doc = cmis_client.getDefaultRepository().query(query)
+            result = doc.getResults()
+            return result
+        except Exception as e:
+            raise UserError(
+                _(
+                    "Impossible de vérifier les documents d'adhésion"
+                    " dans Alfresco : %s"
+                )
+                % e
+            )
diff --git a/models/scop_adhesion_file.py b/models/scop_adhesion_file.py
index 3005cbe..62fd4e2 100644
--- a/models/scop_adhesion_file.py
+++ b/models/scop_adhesion_file.py
@@ -1,7 +1,7 @@
 # © 2021 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import _, exceptions, fields, models
+from odoo import fields, models
 
 
 class ScopAdhesionFiles(models.Model):
@@ -9,30 +9,3 @@ class ScopAdhesionFiles(models.Model):
     _description = "Documents pour adhésion des coops"
 
     type_doc = fields.Char("Méta : Type")
-
-    # ------------------------------------------------------
-    # Business method
-    # ------------------------------------------------------
-    def compulsory_doc_cmis_query(self, partner):
-        backend = self.env["cmis.backend"].search([])
-        backend.ensure_one()
-        cmis_client = backend.get_cmis_client()
-        query = (
-            """
-                    SELECT * FROM crm:document as d
-                    JOIN crm:organisme as o ON d.cmis:objectId = o.cmis:objectId
-                    WHERE o.crm:id = '%s'"""
-            % partner.id
-        )
-        try:
-            doc = cmis_client.getDefaultRepository().query(query)
-            result = doc.getResults()
-            return result
-        except Exception as e:
-            raise exceptions.UserError(
-                _(
-                    "Impossible de vérifier les documents d'adhésion"
-                    " dans Alfresco : %s"
-                )
-                % e
-            )
-- 
GitLab