From 1e81e6840ab7cc3df9eda573bb6f5143ae4eaa11 Mon Sep 17 00:00:00 2001
From: Juliana <juliana@le-filament.com>
Date: Fri, 23 Dec 2022 18:43:27 +0100
Subject: [PATCH] [UPD]Change process adhesion

---
 models/res_partner.py                         | 59 ++++++++++++++++++-
 models/scop_adhesion_file.py                  |  4 ++
 report/report_scop_adhesion.xml               |  4 +-
 views/res_partner.xml                         | 31 ++++++----
 views/scop_adhesion_file.xml                  |  7 ++-
 wizard/scop_compulsory_fields_suivi_wizard.py |  8 ++-
 .../scop_compulsory_fields_suivi_wizard.xml   | 23 +++++++-
 7 files changed, 113 insertions(+), 23 deletions(-)

diff --git a/models/res_partner.py b/models/res_partner.py
index 88163fe..98259bb 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -110,7 +110,7 @@ class ScopPartner(models.Model):
     # ------------------------------------------------------
     @api.onchange("project_status")
     def _onchange_project_status(self):
-        if self.project_status != "7_abandonne":
+        if self.project_status != "5_abandonne":
             self.date_abort = None
 
     # ------------------------------------------------------
@@ -253,7 +253,7 @@ class ScopPartner(models.Model):
         errors_complete_fields = self.check_compulsory_fields(lm_adhesion)
         if errors_complete_fields:
             errors += errors_complete_fields
-        errors_complete_docs = self.check_compulsory_docs()
+        errors_complete_docs = self.check_compulsory_docs(True)
         if errors_complete_docs:
             errors_str = str()
             for error in errors_complete_docs:
@@ -297,7 +297,7 @@ class ScopPartner(models.Model):
             )
         return res
 
-    def check_compulsory_docs(self):
+    def check_compulsory_docs(self, is_adhesion=False):
         """
         Vérification de la présence des docs obligatoires
         :return:
@@ -484,13 +484,66 @@ class ScopPartner(models.Model):
         self.date_abort = fields.Date.today()
         return True
 
+    def scop_suivi_check_docs(self, is_adherent=False):
+        """
+        Passe la coop en statut suivi sans devenir adhérente
+        """
+        self.scop_suivi_check_docs(is_adherent)
+        errors = str()
+        errors_complete_docs = self.check_compulsory_docs(is_adherent)
+        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>"
+            )
+        if errors:
+            local_tz = timezone("Europe/Paris")
+            utc_tz = timezone("UTC")
+            self.list_logs = (
+                "<strong>"
+                + utc_tz.localize(fields.Datetime.now())
+                .astimezone(local_tz)
+                .strftime("%d/%m/%Y - %-H:%M")
+                + "</strong> - Impossible de soumettre le dossier à la CG Scop"
+                + errors
+            )
+
     def scop_suivi_non_adhesion(self):
         """
         Passe la coop en statut suivi sans devenir adhérente
         """
+        # Avant de passer en suivi, vérification des documents obligatoires
+        self.scop_suivi_check_docs(self.env.context.get("default_with_adhesion", False))
+        wizard = self.env["scop.compulsory.fields.suivi.wizard"].create(
+            {
+                "partner_id": self.id,
+                "list_logs": self.list_logs,
+            }
+        )
+        return {
+            "name": "Confirmation des champs obligatoires",
+            "type": "ir.actions.act_window",
+            "view_mode": "form",
+            "res_model": "scop.compulsory.fields.suivi.wizard",
+            "res_id": wizard.id,
+            "target": "new",
+        }
+
+    def scop_suivi_adhesion(self):
+        """
+        Passe la coop en statut suivi sans devenir adhérente
+        """
+        # Todo: Gestion de la bascule suivi avec adhésion à tester
+
+        # Avant de passer en suivi, vérification des documents obligatoires
+        self.scop_suivi_check_docs(self.env.context.get("default_with_adhesion", False))
+
         wizard = self.env["scop.compulsory.fields.suivi.wizard"].create(
             {
                 "partner_id": self.id,
+                "with_adhesion": self.env.context.get("default_with_adhesion", False),
             }
         )
         return {
diff --git a/models/scop_adhesion_file.py b/models/scop_adhesion_file.py
index 9567c16..661d9ef 100644
--- a/models/scop_adhesion_file.py
+++ b/models/scop_adhesion_file.py
@@ -14,3 +14,7 @@ class ScopAdhesionFiles(models.Model):
         string="Type de coopérative",
     )
     is_compulsory = fields.Boolean("Obligatoire")
+    type_process = fields.Selection(
+        [("project", "Projet de création"), ("adhesion", "Processus d'adhésion")],
+        string="Type de process",
+    )
diff --git a/report/report_scop_adhesion.xml b/report/report_scop_adhesion.xml
index 9c894df..89f1e1e 100644
--- a/report/report_scop_adhesion.xml
+++ b/report/report_scop_adhesion.xml
@@ -8,9 +8,7 @@
                 <div class="page" style="font-size: 16px;">
                     <div class="row">
                         <div class="col-6 offset-6">
-                            <span
-                                t-field="o.name"
-                            /><br />
+                            <span t-field="o.name" /><br />
                             <span t-field="o.street" /><br />
                             <t t-if="o.street2"><span t-field="o.street2" /><br /></t>
                             <t t-if="o.street3"><span t-field="o.street3" /><br /></t>
diff --git a/views/res_partner.xml b/views/res_partner.xml
index 0455b7a..a11c5bd 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -38,12 +38,11 @@
             <field name="inherit_id" ref="cgscop_partner.scop_contact_view_form" />
             <field name="priority" eval="1" />
             <field name="arch" type="xml">
-
                 <page name='scop_contacts' position="before">
                     <page
                         name="adhesion_processus1"
                         string="Processus d'Adhésion"
-                        attrs="{'invisible': ['|', ('is_cooperative', '!=', True), ('project_status','=','6_suivi')]}"
+                        attrs="{'invisible': ['|', ('is_cooperative', '!=', True), ('project_status','=','4_suivi')]}"
                     >
                         <header>
                             <button
@@ -51,35 +50,35 @@
                                 type="object"
                                 name="scop_lm_adhesion"
                                 class="btn-info"
-                                attrs="{'invisible': ['|', ('project_status', '!=', '4_adhesion'), ('cooperative_form_id', 'in', (%(cgscop_partner.form_scic)d, %(cgscop_partner.form_coop47)d))]}"
+                                attrs="{'invisible': ['|', ('membership_status', '!=', 'adhesion'), ('cooperative_form_id', 'in', (%(cgscop_partner.form_scic)d, %(cgscop_partner.form_coop47)d))]}"
                             />
                             <button
                                 string="Dossier d'inscription"
                                 type="object"
                                 name="scop_lm_adhesion"
                                 class="btn-info"
-                                attrs="{'invisible': ['|', ('project_status', '!=', '4_adhesion'), ('cooperative_form_id', 'not in', (%(cgscop_partner.form_scic)d, %(cgscop_partner.form_coop47)d))]}"
+                                attrs="{'invisible': ['|', ('membership_status', '!=', 'adhesion'), ('cooperative_form_id', 'not in', (%(cgscop_partner.form_scic)d, %(cgscop_partner.form_coop47)d))]}"
                             />
                             <button
                                 string="Données financières"
                                 type="object"
                                 name="scop_liasse_adhesion"
                                 class="btn-info"
-                                attrs="{'invisible': [('project_status', '!=', '4_adhesion')]}"
+                                attrs="{'invisible': [('membership_status', '!=', 'adhesion')]}"
                             />
                             <button
                                 string="Modifier l'année du dossier"
                                 type="object"
                                 name="scop_change_year_dossier"
                                 class="btn-warning"
-                                attrs="{'invisible': ['|', ('project_status', '!=', '4_adhesion'), ('lm_adhesion_id', '=', False)]}"
+                                attrs="{'invisible': ['|', ('membership_status', '!=', 'adhesion'), ('lm_adhesion_id', '=', False)]}"
                                 groups="cgscop_partner.group_cg_administrator"
                             />
                         </header>
                         <div
                             class="alert alert-danger"
                             role="alert"
-                            attrs="{'invisible':['|', '|', ('write_date', '=', False), ('list_logs', '=', False), ('project_status', 'not in', ('4_adhesion', '5_cg'))]}"
+                            attrs="{'invisible':['|', '|', ('write_date', '=', False), ('list_logs', '=', False), ('project_status', '!=', '3_accompagnement')]}"
                         >
                             <field
                                 class="o_field_header"
@@ -107,11 +106,11 @@
                                 <field name="ca_previsionnel" widget="monetary" />
                                 <field
                                     name="date_abort"
-                                    attrs="{'invisible':[('project_status','!=','7_abandonne')], 'required':[('project_status','=','7_abandonne')]}"
+                                    attrs="{'invisible':[('project_status','!=','5_abandonne')], 'required':[('project_status','=','5_abandonne')]}"
                                 />
                                 <field
                                     name="abort_comments"
-                                    attrs="{'invisible':[('project_status','!=','7_abandonne')], 'required':[('project_status','=','7_abandonne')]}"
+                                    attrs="{'invisible':[('project_status','!=','5_abandonne')], 'required':[('project_status','=','5_abandonne')]}"
                                 />
                             </group>
                             <group string="Dossier UE">
@@ -179,7 +178,7 @@
                     <page
                         name="adhesion_processus2"
                         string="Processus d'Adhésion"
-                        attrs="{'invisible': ['|', ('is_cooperative', '!=', True), ('project_status','!=','6_suivi')]}"
+                        attrs="{'invisible': ['|', ('is_cooperative', '!=', True), ('project_status','!=','4_suivi')]}"
                     >
                         <field name="project_invoicing_status_nb" invisible="1" />
                         <group col="3">
@@ -197,7 +196,7 @@
                                 />
                                 <field
                                     name="creation_delegate_id"
-                                    attrs="{'required':[('project_status','in',('3_accompagnement','4_adhesion', '5_cg'))]}"
+                                    attrs="{'required':['|', ('project_status','=','3_accompagnement'), ('membership_status','in',('adhesion', 'soumis_cg'))]}"
                                     options="{'no_create': True}"
                                     domain="[('ur_id', '=', ur_id)]"
                                 />
@@ -264,7 +263,15 @@
                         string="Suivi sans adhésion"
                         type="object"
                         name="scop_suivi_non_adhesion"
-                        attrs="{'invisible':[('project_status','in',('5_cg', '6_suivi', '7_abandonne'))]}"
+                        attrs="{'invisible':[('project_status','in',('4_suivi', '5_abandonne'))]}"
+                    />
+                    <button
+                        string="Suivi avec adhésion"
+                        type="object"
+                        name="scop_suivi_adhesion"
+                        class="oe_highlight"
+                        attrs="{'invisible':[('project_status','in',('4_suivi', '5_abandonne'))]}"
+                        context="{'default_with_adhesion': True}"
                     />
                 </xpath>
 
diff --git a/views/scop_adhesion_file.xml b/views/scop_adhesion_file.xml
index b4562fa..e68eaf4 100644
--- a/views/scop_adhesion_file.xml
+++ b/views/scop_adhesion_file.xml
@@ -11,16 +11,19 @@
                 <tree string="Document" editable="top">
                     <field name="name" />
                     <field name="coop_type_id" />
+                    <field name="type_process" />
                     <field name="is_compulsory" />
                 </tree>
             </field>
         </record>
 
         <record id="action_scop_adhesion_file_tree" model="ir.actions.act_window">
-            <field name="name">Documents adhésion</field>
+            <field name="name">Documents</field>
             <field name="res_model">scop.adhesion.file</field>
             <field name="view_mode">tree</field>
-            <field name="help">Liste des documents pour l'adhésion.</field>
+            <field
+                name="help"
+            >Liste des documents pour l'adhésion et les projets de création</field>
         </record>
 
         <!-- MENUS -->
diff --git a/wizard/scop_compulsory_fields_suivi_wizard.py b/wizard/scop_compulsory_fields_suivi_wizard.py
index 59e7e4c..63db618 100644
--- a/wizard/scop_compulsory_fields_suivi_wizard.py
+++ b/wizard/scop_compulsory_fields_suivi_wizard.py
@@ -23,13 +23,17 @@ class ScopCompulsoryFieldsSuiviWizard(models.TransientModel):
     closeout_month = fields.Selection(
         related="partner_id.closeout_month", readonly=False
     )
+    with_adhesion = fields.Boolean("Avec adhésion")
+    list_logs = fields.Text("Liste des erreurs")
 
     # ------------------------------------------------------
     # Actions / Buttons
     # ------------------------------------------------------
     def confirm(self):
         """
-        Passe la coop en statut "6_suivi"
+        Passe la coop en statut "4_suivi"
         """
-        self.partner_id.write({"project_status": "6_suivi"})
+        self.partner_id.write({"project_status": "4_suivi"})
+        if self.with_adhesion:
+            self.partner_id.write({"membership_status": "adhesion"})
         return {"type": "ir.actions.act_window_close"}
diff --git a/wizard/scop_compulsory_fields_suivi_wizard.xml b/wizard/scop_compulsory_fields_suivi_wizard.xml
index f2a3c47..881ceff 100644
--- a/wizard/scop_compulsory_fields_suivi_wizard.xml
+++ b/wizard/scop_compulsory_fields_suivi_wizard.xml
@@ -12,6 +12,18 @@
                 <field name="model">scop.compulsory.fields.suivi.wizard</field>
             <field name="arch" type="xml">
                 <form string="Confirmer les champs obligatoires">
+                    <div
+                        class="alert alert-danger"
+                        role="alert"
+                        attrs="{'invisible':[('list_logs', '=', False)]}"
+                    >
+                        <field
+                            class="o_field_header"
+                            name="list_logs"
+                            readonly="1"
+                            widget="html"
+                        />
+                    </div>
                     <group>
                         <field
                             name="ur_id"
@@ -28,13 +40,22 @@
                         <field name="capital" required="1" />
                         <field name="first_closeout" required="1" />
                         <field name="closeout_month" required="1" />
+                        <field name="with_adhesion" invisible="1" />
                     </group>
                     <footer>
                         <button
                             name="confirm"
                             type="object"
-                            string="Valider"
+                            string="Valider sans adhésion"
+                            class="oe_highlight"
+                            attrs="{'invisible':['|', ('with_adhesion','=',True),('list_logs', '=', False)]}"
+                        />
+                        <button
+                            name="confirm"
+                            type="object"
+                            string="Valider avec adhésion"
                             class="oe_highlight"
+                            attrs="{'invisible':['|', ('with_adhesion','=',False), ('list_logs', '=', False)]}"
                         />
                         <button special="cancel" string="Annuler" />
                     </footer>
-- 
GitLab