From d104ff1fefb152e3046a3774760cc1d1483e5ddf Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Tue, 15 Feb 2022 09:44:50 +0100
Subject: [PATCH] [add] reflexive relation on membership

---
 models/res_partner.py | 35 +++++++++++++++++++++++++++++++++++
 views/res_partner.xml | 11 +++++++++++
 2 files changed, 46 insertions(+)

diff --git a/models/res_partner.py b/models/res_partner.py
index ec0c27d..d7133bd 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -26,6 +26,24 @@ class ResPartner(models.Model):
         string='Contact Délégué',
         domain="[('parent_id', '=', id)]"
     )
+    membership_is_delegate = fields.Boolean(
+        string='Personne Délégué',
+        compute='_compute_membership_is_delegate',
+        store=True,
+        default=False
+    )
+    membership_is_mandate = fields.Boolean(
+        string='Personne Mandataire',
+        compute='_compute_membership_is_mandate',
+        store=True,
+        default=False
+    )
+    membership_is_contact = fields.Boolean(
+        string='Personne Contact Adhésion',
+        compute='_compute_membership_is_contact',
+        store=True,
+        default=False
+    )
 
     # ------------------------------------------------------
     # SQL Constraints
@@ -38,6 +56,23 @@ class ResPartner(models.Model):
     # ------------------------------------------------------
     # Computed fields / Search Fields
     # ------------------------------------------------------
+    @api.depends('parent_id', 'parent_id.membership_delegate_id')
+    def _compute_membership_is_delegate(self):
+        for partner in self:
+            if partner.parent_id.membership_delegate_id == partner:
+                partner.membership_is_delegate = True
+
+    @api.depends('parent_id', 'parent_id.membership_mandate_id')
+    def _compute_membership_is_mandate(self):
+        for partner in self:
+            if partner.parent_id.membership_mandate_id == partner:
+                partner.membership_is_mandate = True
+
+    @api.depends('parent_id', 'parent_id.membership_contact_id')
+    def _compute_membership_is_contact(self):
+        for partner in self:
+            if partner.parent_id.membership_contact_id == partner:
+                partner.membership_is_contact = True
 
     # ------------------------------------------------------
     # Onchange / Constraints
diff --git a/views/res_partner.xml b/views/res_partner.xml
index dc60dcc..458f6a5 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -76,6 +76,17 @@
                         </group>
                     </group>
                 </xpath>
+                <xpath expr="//page[@name='internal_notes']" position="after">
+                    <page name="membership_contact" string="Membre" attrs="{'invisible': ['|', ('is_company', '=', True), ('parent_id', '=', False)]}">
+                        <group>
+                            <group>
+                                <field name="membership_is_delegate"/>
+                                <field name="membership_is_mandate"/>
+                                <field name="membership_is_contact"/>
+                            </group>
+                        </group>
+                    </page>
+                </xpath>
             </field>
         </record>
 
-- 
GitLab