From 00f7b7199b97e16f7e94a6d3d78c4a8cf0d8d412 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20Silvant?= <hsilvant@scop.coop>
Date: Fri, 11 Mar 2022 08:03:48 +0100
Subject: [PATCH] Ajout des action RSE sur les coop

---
 models/__init__.py                |  1 +
 models/res_partner.py             | 19 +++++++++++
 models/scop_action_rse.py         | 56 +++++++++++++++++++++++++++++++
 security/ir.model.access.csv      |  3 +-
 views/res_partner.xml             | 15 +++++++++
 views/res_partner_cooperative.xml |  2 ++
 6 files changed, 95 insertions(+), 1 deletion(-)
 create mode 100644 models/scop_action_rse.py

diff --git a/models/__init__.py b/models/__init__.py
index 13c9b78..3737614 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -15,3 +15,4 @@ from . import scop_period
 from . import scop_questionnaire
 from . import scop_revision
 from . import union_regionale
+from . import scop_action_rse
\ No newline at end of file
diff --git a/models/res_partner.py b/models/res_partner.py
index f962286..f871676 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -354,6 +354,17 @@ class ScopPartner(models.Model):
         inverse_name='partner_id',
         string='Liste des Révisions')
 
+    # Action RSE
+    action_rse_ids = fields.One2many(
+        comodel_name='scop.action.rse',
+        inverse_name='partner_id',
+        string='Liste des Actions RSE')
+
+    is_rse = fields.Boolean(
+        string="Engagement RSE",
+        compute="_compute_is_rse",
+        store=True)
+
     # Historique
     scop_period_ids = fields.One2many(
         comodel_name='scop.period',
@@ -751,6 +762,14 @@ class ScopPartner(models.Model):
     # ------------------------------------------------------
     # Computed Fields
     # ------------------------------------------------------
+    @api.depends('action_rse_ids')
+    def _compute_is_rse(self):
+        """
+        Est on une coop RSE
+        """
+        for partner in self:
+            partner.is_rse = len(partner.action_rse_ids) != 0
+
     @api.depends('siret')
     def _compute_from_siret(self):
         for company in self:
diff --git a/models/scop_action_rse.py b/models/scop_action_rse.py
new file mode 100644
index 0000000..7c4b1a0
--- /dev/null
+++ b/models/scop_action_rse.py
@@ -0,0 +1,56 @@
+# © 2019 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from datetime import datetime,date
+from odoo import models, fields, api
+from odoo.exceptions import ValidationError
+
+
+class ScopRevision(models.Model):
+    _name = "scop.action.rse"
+    _description = "Actions RSE engagées"
+    _order = 'partner_id, action_category, action_date'
+
+    partner_id = fields.Many2one(
+        comodel_name='res.partner',
+        string='Organisme',
+        domain=[('is_company', '=', True)],
+        ondelete='cascade', index=True)
+
+    action_date = fields.Date(
+        string="Début de l'action",
+        index=True,
+        track_visibility='onchange')
+
+    action_category = fields.Selection(
+        [('1', "1 -	La gouvernance de l’organisation"),
+         ('2', "2 -	Les droits de l’homme"),
+         ('3', '3 - Les relations et les conditions de travail'),
+         ('4', "4 -	L’environnement"),
+         ('5', '5 -	La loyauté des pratiques dans les affaires'),
+         ('6', '6 -	Les questions relatives aux consommateurs'),
+         ('7', '7 -	Les communautés et le territoire')],
+        string='Catégorie RSE',
+        track_visibility='onchange')
+
+    action_manager = fields.Text(
+        string="Référent de l'action",
+        track_visibility='onchange')
+
+    action_description = fields.Text(
+        string="Description de l'action",
+        track_visibility='onchange')
+
+    action_measure = fields.Text(
+        string="Indicateurs de suivi",
+        track_visibility='onchange')
+
+    # ------------------------------------------------------
+    # Contraintes SQL
+    # ------------------------------------------------------
+    # Unicité de l'action par organisme et par date
+    _sql_constraints = [
+        ('Action RSE',
+         'unique(partner_id, action_category,action_date)',
+         "Une action RSE a déjà été enregistrée à cette date"),
+    ]
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index c5af899..63d8136 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -75,4 +75,5 @@ admin_res_partner_naf,admin_res_partner_naf,model_res_partner_naf,group_cg_admin
 base.access_res_country_state_group_user,res_country_state group_user,base.model_res_country_state,base.group_partner_manager,1,0,0,0
 admin_res_country_state,res_country_state_admin,base.model_res_country_state,group_cg_administrator,1,1,1,1
 access_res_partner_filiere,access_res_partner_filiere,model_res_partner_filiere,base.group_user,1,1,1,0
-admin_res_partner_filiere,admin_res_partner_filiere,model_res_partner_filiere,group_cg_administrator,1,1,1,1
\ No newline at end of file
+admin_res_partner_filiere,admin_res_partner_filiere,model_res_partner_filiere,group_cg_administrator,1,1,1,1
+access_action_rse_group_user,access_action_rse_group_user,model_scop_action_rse,base.group_user,1,1,1,1
diff --git a/views/res_partner.xml b/views/res_partner.xml
index 37035dd..c7e84b6 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -423,6 +423,9 @@
                             <field name="is_union_sociale_update_date" readonly="True"/>
                             <field name="is_federation_com" invisible="True"/>
                             <field name="is_federation_indus" invisible="True"/>
+                            <br/>
+                            <field name="is_rse"/>
+                            <br/>
                             <field name="activity_federation_com_ids" groups="cgscop_partner.group_federation_com" options="{'no_open': True, 'no_create': True}" attrs="{'invisible': [('is_federation_com', '!=', True)]}" widget="many2many_tags"/>
                             <field name="activity_federation_indus_ids" groups="cgscop_partner.group_federation_indus" options="{'no_open': True, 'no_create': True}" attrs="{'invisible': [('is_federation_indus', '!=', True)]}" widget="many2many_tags"/>
                         </group>
@@ -703,12 +706,24 @@
                             </tree>
                         </field>
                     </page>
+                    <page name='scop_rse' string="Actions RSE" attrs="{'invisible': ['|', ('is_cooperative', '!=', True), ('project_status', '!=', '6_suivi')]}">
+                        <field name="action_rse_ids" widget="one2many">
+                            <tree string="Actions RSE" editable="top" >
+                                <field name="action_category" required="1"/>
+                                <field name="action_date" required="1"/>
+                                <field name="action_manager" required="1"/>
+                                <field name="action_description" required="1"/>
+                                <field name="action_measure" required="1"/>
+                            </tree>
+                        </field>
+                    </page>
                     <page name='scop_xnet' string="Extranet" attrs="{'invisible': ['|', ('is_cooperative', '!=', True), ('project_status', '!=', '6_suivi')]}">
                         <group string="Annuaire">
                             <field name="secteur_id" />
                             <field name="activity_desc" />
                         </group>
                     </page>
+
                 </xpath>
 
             </field>
diff --git a/views/res_partner_cooperative.xml b/views/res_partner_cooperative.xml
index 30e4e00..73b2c7f 100644
--- a/views/res_partner_cooperative.xml
+++ b/views/res_partner_cooperative.xml
@@ -44,6 +44,8 @@
                     <filter string="Fédération du BTP" name="is_federation_btp" domain="[('is_federation_btp', '=', True)]"/>
                     <filter string="Fédération des CAE" name="is_federation_cae" domain="[('cae', '=', True)]"/>
                     <separator/>
+                    <filter string="Engagement RSE" name="is_rse" domain="[('is_rse', '=', True)]"/>
+                    <separator/>
                     <group expand="0" name="group_by" string="Group By">
                        <filter name="project_status" string="Statut" domain="[]" context="{'group_by' : 'project_status'}"/>
                        <filter name="cooperative_form_id" string="Forme Coopérative" domain="[]" context="{'group_by' : 'cooperative_form_id'}"/>
-- 
GitLab