From 66ccca52bc38ccda62a9ce012db15e23fa94b8a1 Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Mon, 14 Mar 2022 11:53:20 +0100
Subject: [PATCH] [add] RSE fields & pre-commit changes

---
 datas/res_partner_federation_data.xml | 28 ++++++-------
 models/__init__.py                    |  1 +
 models/res_partner.py                 | 19 +++++++++
 models/res_partner_lists.py           |  7 ++--
 models/scop_action_rse.py             | 60 +++++++++++++++++++++++++++
 security/ir.model.access.csv          |  1 +
 views/res_partner.xml                 | 19 +++++++++
 views/res_partner_cooperative.xml     |  8 ++++
 8 files changed, 125 insertions(+), 18 deletions(-)
 create mode 100644 models/scop_action_rse.py

diff --git a/datas/res_partner_federation_data.xml b/datas/res_partner_federation_data.xml
index 03c1f98..fc7382c 100644
--- a/datas/res_partner_federation_data.xml
+++ b/datas/res_partner_federation_data.xml
@@ -2,23 +2,23 @@
 <!-- Copyright 2019 Le Filament
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
-	<data noupdate="1">
+    <data noupdate="1">
 
-		<record id="COM" model="res.partner.federation">
-			<field name="name">Fed. des scop de la communication</field>
-		</record>
+        <record id="COM" model="res.partner.federation">
+            <field name="name">Fed. des scop de la communication</field>
+        </record>
 
-		<record id="IND" model="res.partner.federation">
-			<field name="name">Fed. des scop de l'industrie</field>
-		</record>
+        <record id="IND" model="res.partner.federation">
+            <field name="name">Fed. des scop de l'industrie</field>
+        </record>
 
-		<record id="BTP" model="res.partner.federation">
-			<field name="name">Fed. des scop du BTP</field>
-		</record>
+        <record id="BTP" model="res.partner.federation">
+            <field name="name">Fed. des scop du BTP</field>
+        </record>
 
-		<record id="CAE" model="res.partner.federation">
-			<field name="name">Fed. des CAE</field>
-		</record>
+        <record id="CAE" model="res.partner.federation">
+            <field name="name">Fed. des CAE</field>
+        </record>
 
-	</data>
+    </data>
 </odoo>
diff --git a/models/__init__.py b/models/__init__.py
index fb998bb..6de0dcb 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -14,4 +14,5 @@ from . import res_partner_newsletter
 from . import res_partner
 from . import res_users
 from . import scop_contribution
+from . import scop_action_rse
 from . import union_regionale
diff --git a/models/res_partner.py b/models/res_partner.py
index e324d03..a822e75 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -419,6 +419,16 @@ class ScopPartner(models.Model):
         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, default=False
+    )
+
     # Historique
     scop_period_ids = fields.One2many(
         comodel_name="scop.period",
@@ -955,6 +965,15 @@ class ScopPartner(models.Model):
                 ):
                     partner.contact_legality = "customer"
 
+    @api.depends("action_rse_ids")
+    def _compute_is_rse(self):
+        """
+        Est on une coop RSE
+        """
+        for partner in self:
+            if len(partner.action_rse_ids) != 0:
+                partner.is_rse = True
+
     # TODO: déplacer dans adhésions ? cotisations?
     @api.depends(
         "membership_period_ids",
diff --git a/models/res_partner_lists.py b/models/res_partner_lists.py
index b5c06fb..ee63c0d 100644
--- a/models/res_partner_lists.py
+++ b/models/res_partner_lists.py
@@ -88,7 +88,7 @@ class ResPartnerFederation(models.Model):
     _name = "res.partner.federation"
     _description = "Fédérations"
 
-    name = fields.Char('Fédération')
+    name = fields.Char("Fédération")
 
 
 class ScopPartnerNaf(models.Model):
@@ -101,9 +101,8 @@ class ScopPartnerNaf(models.Model):
     )
     id_riga = fields.Integer("ID RIGA")
     federation_id = fields.Many2one(
-        'res.partner.federation',
-        string='Fédération',
-        ondelete='restrict')
+        "res.partner.federation", string="Fédération", ondelete="restrict"
+    )
 
 
 class ResPartnerOrganizationType(models.Model):
diff --git a/models/scop_action_rse.py b/models/scop_action_rse.py
new file mode 100644
index 0000000..633c78a
--- /dev/null
+++ b/models/scop_action_rse.py
@@ -0,0 +1,60 @@
+# © 2019 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+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 87c7938..34e5bf7 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -77,3 +77,4 @@ access_scop_membership_out_wizard,access_scop_membership_out_wizard,model_scop_m
 access_scop_status_wizard,access_scop_status_wizard,model_scop_status_wizard,base.group_user,1,1,1,1
 access_res_partner_federation,access_res_partner_federation,model_res_partner_federation,base.group_user,1,0,0,0
 admin_res_partner_federation,admin_res_partner_federation,model_res_partner_federation,cgscop_partner.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 6f3f902..65be7ae 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -982,6 +982,9 @@
 
                             <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"
@@ -1571,6 +1574,22 @@
                             </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"
diff --git a/views/res_partner_cooperative.xml b/views/res_partner_cooperative.xml
index 45843d2..b240c8a 100644
--- a/views/res_partner_cooperative.xml
+++ b/views/res_partner_cooperative.xml
@@ -145,6 +145,14 @@
                         domain="[('cae', '=', True)]"
                     />
                     <separator />
+                    <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"
-- 
GitLab