From 7c89d4ecdfa8980db4b8e2795cb66cb3464efbe9 Mon Sep 17 00:00:00 2001
From: Hugo Trentesaux <hugo@le-filament.com>
Date: Tue, 8 Apr 2025 17:33:50 +0200
Subject: [PATCH] wip

---
 __manifest__.py       |  3 ++-
 models/res_partner.py | 32 +++++++++++++++++++++++++++++++-
 views/res_partner.xml | 39 +++++++++++++++++++++++++++++----------
 3 files changed, 62 insertions(+), 12 deletions(-)

diff --git a/__manifest__.py b/__manifest__.py
index 483441a..02fb90e 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -5,7 +5,8 @@
     "website": "https://le-filament.com",
     "version": "18.0.1.0.0",
     "license": "AGPL-3",
-    "depends": [],
+    "depends": ["l10n_fr_state", "l10n_fr_department",
+                "l10n_fr_department_oversea"],
     "data": [
         "security/ir.model.access.csv",
         # datas
diff --git a/models/res_partner.py b/models/res_partner.py
index 47c43b3..75c0149 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -8,12 +8,36 @@ from odoo.exceptions import ValidationError
 class ResPartner(models.Model):
     _inherit = "res.partner"
 
-
     # ------------------------------------------------------
     # Fields declaration
     # ------------------------------------------------------
 
     is_cooperative = fields.Boolean("Est une coopérative")
+    is_member_cgscop = fields.Boolean("Est adhérent à la CG SCOP")
+    size_group = fields.Selection(
+        [("1-5", "1 à 5"), ("5-15", "5 à 15"), ("15-50", "15 à 50"),
+         ("50-100", "50 à 100"), ("+100", "plus de 100")],
+        string="Tranche d'effectif")
+
+    siret = fields.Char(index=True, tracking=True, copy=False)
+    siren = fields.Char(
+        string="SIREN",
+        compute="_compute_siren",
+        store=True,
+        readonly=False,
+        copy=False,
+        tracking=True
+    )
+
+    # overwrite state to compute it based on department which itself is computed from zip
+    state_id = fields.Many2one("res.country.state", string='State',
+                               ondelete='restrict',
+                               domain="[('country_id', '=?', country_id)]",
+                               related="country_department_id.state_id",
+                               )
+
+    # relations -----
+
     ur_id = fields.Many2one(
         comodel_name="union.regionale",
         string="Union Régionale",
@@ -33,6 +57,12 @@ class ResPartner(models.Model):
     # Computed fields / Search Fields
     # ------------------------------------------------------
 
+    @api.depends("siret")
+    def _compute_siren(self):
+        for partner in self:
+            if partner.siret:
+                partner.siren = partner.siret.replace(" ", "")[0:9]
+
     # ------------------------------------------------------
     # Onchange / Constraints
     # ------------------------------------------------------
diff --git a/views/res_partner.xml b/views/res_partner.xml
index a4d4353..3124f43 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -3,12 +3,12 @@
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
     <!-- View -->
+
     <!-- Form -->
-    <record id="view_partner_form" model="ir.ui.view">
-        <field name="name">res.partner.form</field>
+    <record id="view_partner_form_inherit" model="ir.ui.view">
+        <field name="name">res.partner.form.inherit</field>
         <field name="model">res.partner</field>
         <field name="inherit_id" ref="base.view_partner_form"/>
-        <field name="mode">primary</field>
         <field name="arch" type="xml">
             <xpath expr="//h1" position="before">
                 <span invisible="not is_company">
@@ -16,6 +16,28 @@
                     <field name="is_cooperative"/>
                 </span>
             </xpath>
+            <xpath expr="//h1" position="after">
+                <group invisible="not is_company">
+                    <group>
+                        <field name="ur_id" invisible="not is_cooperative"/>
+                        <field name="size_group"/>
+                    </group>
+                </group>
+            </xpath>
+            <xpath expr="//field[@name='vat']" position="after">
+                <field name="siret" readonly="1" widget="CopyClipboardChar"/>
+                <field name="siren" readonly="1" widget="CopyClipboardChar"/>
+            </xpath>
+            <xpath expr="//page[@name='contact_addresses']" position="before">
+                <page
+                    name="company"
+                    string="Company"
+                    invisible="not is_company"
+                >
+                    <group>
+                    </group>
+                </page>
+            </xpath>
         </field>
     </record>
 
@@ -24,10 +46,11 @@
         <field name="name">res.partner.list</field>
         <field name="model">res.partner</field>
         <field name="inherit_id" ref="base.view_partner_tree"/>
-        <field name="mode">primary</field>
         <field name="arch" type="xml">
             <xpath expr="//field[@name='complete_name']" position="after">
                 <field name="ur_id" optional="hide"/>
+                <field name="state_id" optional="hide"/>
+                <field name="country_department_id" optional="hide"/>
             </xpath>
         </field>
     </record>
@@ -37,7 +60,6 @@
         <field name="name">res.partner.search</field>
         <field name="model">res.partner</field>
         <field name="inherit_id" ref="base.view_res_partner_filter"/>
-        <field name="mode">primary</field>
         <field name="arch" type="xml">
             <!-- Search -->
             <xpath expr="//field[@name='name']" position="after">
@@ -58,11 +80,8 @@
             <!--            </xpath>-->
             <!-- Group -->
             <xpath expr="//filter[@name='salesperson']" position="before">
-                <!--                <filter-->
-                <!--                    string="A jour des cotisations"-->
-                <!--                    name="group_ur_id"-->
-                <!--                    context="{'group_by': 'ur_id'}"-->
-                <!--                />-->
+                <filter string="Région" name="group_state_id"
+                        context="{'group_by': 'state_id'}"/>
             </xpath>
         </field>
     </record>
-- 
GitLab