From a6eccdc10f7eb49b68e835127e01300163904a0b Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Tue, 22 Apr 2025 12:11:03 +0200 Subject: [PATCH] [WIP] remove data files & update computed function & add/remove fields --- __manifest__.py | 3 - data/mucs_company_type.xml | 75 ------------ data/mucs_cooperative_form.xml | 31 ----- data/union_regionale.xml | 77 ------------ models/mucs_commercial_event.py | 11 +- models/mucs_support_event.py | 9 +- models/res_partner.py | 52 +++++--- security/ir.model.access.csv | 2 + views/res_partner.xml | 207 +++++++++++++++++++++++++------- 9 files changed, 216 insertions(+), 251 deletions(-) delete mode 100644 data/mucs_company_type.xml delete mode 100644 data/mucs_cooperative_form.xml delete mode 100644 data/union_regionale.xml diff --git a/__manifest__.py b/__manifest__.py index 4491005..974f899 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -17,10 +17,7 @@ "security/ir.model.access.csv", # datas "data/federation.xml", - "data/mucs_company_type.xml", "data/mucs_company_size.xml", - "data/mucs_cooperative_form.xml", - "data/union_regionale.xml", # views "views/res_partner.xml", "views/mucs_contract.xml", diff --git a/data/mucs_company_type.xml b/data/mucs_company_type.xml deleted file mode 100644 index 2c00c53..0000000 --- a/data/mucs_company_type.xml +++ /dev/null @@ -1,75 +0,0 @@ -<?xml version="1.0" ?> -<!-- TODO: noupdate en prod --> -<odoo noupdate="0"> - <!-- TODO: Revoir les id externes pour plus de simplicité --> - <record id="riga_14675" model="mucs.company.type"> - <field name="name">Artisan / Commerçant</field> - <field name="is_coop" eval="0" /> - </record> - - <record id="asso" model="mucs.company.type"> - <field name="name">Association loi 1901 ou assimilée</field> - <field name="is_coop" eval="0" /> - </record> - - <record id="riga_14673" model="mucs.company.type"> - <field name="name">Collectivité territoriale</field> - <field name="is_coop" eval="0" /> - </record> - - <record id="riga_14674" model="mucs.company.type"> - <field name="name">Profession libérale</field> - <field name="is_coop" eval="0" /> - </record> - - <record id="SARL" model="mucs.company.type"> - <field name="name">Société à Responsabilité Limitée (SARL)</field> - <field name="is_coop" eval="1" /> - </record> - - <record id="SARLU" model="mucs.company.type"> - <field - name="name" - >Société à Responsabilité Limitée (SARL) unipersonnelle</field> - <field name="is_coop" eval="0" /> - </record> - - <record id="SA" model="mucs.company.type"> - <field name="name">Société Anonyme à Conseil d'Administration</field> - <field name="is_coop" eval="1" /> - </record> - - <record id="SA" model="mucs.company.type"> - <field name="name">Société Anonyme à directoire</field> - <field name="is_coop" eval="1" /> - </record> - - <record id="riga_14677" model="mucs.company.type"> - <field name="name">Société civile coopérative</field> - <field name="is_coop" eval="0" /> - </record> - - <record id="SCI" model="mucs.company.type"> - <field name="name">Société Civile Immobilière (SCI)</field> - <field name="is_coop" eval="0" /> - </record> - - <record id="SELAS" model="mucs.company.type"> - <field - name="name" - >Société d exercice libéral par action simplifiée (SELAS)</field> - <field name="is_coop" eval="0" /> - </record> - - <record id="SAS" model="mucs.company.type"> - <field name="name">Société par actions simplifiée (SAS)</field> - <field name="is_coop" eval="1" /> - </record> - - <record id="SAS" model="mucs.company.type"> - <field - name="name" - >Société par actions simplifiée à associé unique (SASU)</field> - <field name="is_coop" eval="0" /> - </record> -</odoo> diff --git a/data/mucs_cooperative_form.xml b/data/mucs_cooperative_form.xml deleted file mode 100644 index e7a01c6..0000000 --- a/data/mucs_cooperative_form.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" ?> -<!-- TODO: noupdate en prod --> -<odoo noupdate="0"> - <record id="form_coop47" model="mucs.cooperative.form"> - <field name="name">COOP47</field> - </record> - - <record id="form_lamaneur" model="mucs.cooperative.form"> - <field name="name">Lamaneur</field> - </record> - - <record id="form_scic" model="mucs.cooperative.form"> - <field name="name">SCIC</field> - </record> - - <record id="form_scop" model="mucs.cooperative.form"> - <field name="name">SCOP</field> - </record> - - <record id="form_ues" model="mucs.cooperative.form"> - <field name="name">UES</field> - </record> - - <record id="form_unionscop" model="mucs.cooperative.form"> - <field name="name">UNIONSCOP</field> - </record> - - <record id="form_noncooperative" model="mucs.cooperative.form"> - <field name="name">Non coopérative</field> - </record> -</odoo> diff --git a/data/union_regionale.xml b/data/union_regionale.xml deleted file mode 100644 index dd8a5f5..0000000 --- a/data/union_regionale.xml +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" ?> -<!-- TODO: noupdate en prod --> -<odoo noupdate="0"> - <!-- TODO: Revoir les id externes pour plus de simplicité --> - <record id="riga_14231" model="union.regionale"> - <field - name="long_name" - >UNION REGIONALE DES SCOP ILE DE FRANCE CENTRE VAL DE LOIRE DOM-TOM</field> - <field name="name">IdF, Val de Loire, Dom Tom</field> - </record> - - <record id="riga_14232" model="union.regionale"> - <field name="long_name">UNION REGIONALE DES SCOP HAUTS DE FRANCE</field> - <field name="name">Hauts-de-France</field> - </record> - - <record id="riga_14233" model="union.regionale"> - <field name="long_name">UNION REGIONALE DES SCOP BOURGOGNE FRANCHE COMTE</field> - <field name="name">Bourgogne</field> - </record> - - <record id="riga_14234" model="union.regionale"> - <field name="long_name">UNION REGIONALE DES SCOP GRAND EST</field> - <field name="name">Est</field> - </record> - - <record id="riga_14353" model="union.regionale"> - <field name="long_name">UNION REGIONALE DES SCOP AUVERGNE RHONE ALPES</field> - <field name="name">AURA</field> - </record> - - <record id="riga_14237" model="union.regionale"> - <field - name="long_name" - >UNION REGIONALE DES SCOP PROVENCE ALPES COTE D'AZUR CORSE</field> - <field name="name">Paca</field> - </record> - - <record id="riga_14238" model="union.regionale"> - <field - name="long_name" - >UNION REGIONALE DES SCOP D'OCCITANIE POLE PYRENEES</field> - <field name="name">Occitanie pole Pyrénées</field> - </record> - - <record id="riga_14239" model="union.regionale"> - <field name="long_name">UNION REGIONALE DES SCOP LIMOUSIN</field> - <field name="name">Limousin Berry</field> - </record> - - <record id="riga_14240" model="union.regionale"> - <field name="long_name">UNION REGIONALE DES SCOP POITOU CHARENTES</field> - <field name="name">Poitou Charentes</field> - </record> - - <record id="riga_14241" model="union.regionale"> - <field name="long_name">UNION REGIONALE DES SCOP OUEST</field> - <field name="name">Ouest</field> - </record> - - <record id="riga_14242" model="union.regionale"> - <field name="long_name">UNION REGIONALE DES SCOP AQUITAINE</field> - <field name="name">Aquitaine</field> - </record> - - <record id="riga_14243" model="union.regionale"> - <field - name="long_name" - >UNION REGIONALE DES SCOP D'OCCITANIE POLE MEDITERRANEE</field> - <field name="name">Occitanie pole Méditérranée</field> - </record> - - <record id="ur_dom_tom" model="union.regionale"> - <field name="long_name">PROGRAMME OUTRE MER</field> - <field name="name">POM</field> - </record> -</odoo> diff --git a/models/mucs_commercial_event.py b/models/mucs_commercial_event.py index f02dfdc..f204e11 100644 --- a/models/mucs_commercial_event.py +++ b/models/mucs_commercial_event.py @@ -10,10 +10,15 @@ class MucsCommercialEvent(models.Model): _order = "date desc" _rec_name = "partner_id" - date = fields.Date("Date", required=True) - partner_id = fields.Many2one(comodel_name="res.partner", required=True) + date = fields.Date(required=True) + partner_id = fields.Many2one( + comodel_name="res.partner", + string="Entreprise", + domain="[('is_company', '=', True)]", + required=True, + ) name = fields.Char("Sujet") - description = fields.Html("Description") + description = fields.Html() # TODO tags ? # categ_ids = fields.Many2one("X") diff --git a/models/mucs_support_event.py b/models/mucs_support_event.py index 461d4b0..c345eab 100644 --- a/models/mucs_support_event.py +++ b/models/mucs_support_event.py @@ -10,8 +10,13 @@ class MucsSupportEvent(models.Model): _order = "date desc" _rec_name = "partner_id" - date = fields.Date("Date", required=True) - partner_id = fields.Many2one(comodel_name="res.partner", required=True) + date = fields.Date(required=True) + partner_id = fields.Many2one( + comodel_name="res.partner", + string="Entreprise", + domain="[('is_company', '=', True)]", + required=True, + ) qs = fields.Selection(string="Qualité de service", selection=[("s", "Satisfait")]) theme = fields.Char("Thématique") topic = fields.Text("Sujet") diff --git a/models/res_partner.py b/models/res_partner.py index a51cf30..a6b4993 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -13,7 +13,7 @@ class ResPartner(models.Model): is_cooperative = fields.Boolean("Est une coopérative") is_member_cgscop = fields.Boolean("Est adhérent à la CG SCOP") - company_size_id = fields.Many2one("company.size", string="Tranche d'effectif") + company_size_id = fields.Many2one("mucs.company.size", string="Tranche d'effectif") company_size = fields.Integer(string="Effectif approximatif") # Note : peut-être utiliser l10n-france/l10n_fr_siret_lookup @@ -27,12 +27,15 @@ class ResPartner(models.Model): copy=False, tracking=True, ) + social_object = fields.Text("Objet Social") + activity_desc = fields.Text("Description de l'activité") + # Note : pour l'instant str, à changer vers m2o quand on y verra plus clair ccn_idcc = fields.Char("CCN Code", related="ccn_id.idcc") ccn_titre = fields.Char("CCN Label", related="ccn_id.titre") is_member_sante = fields.Boolean( - "Adhérent Santé", compute="_compute_is_member_sante" + "Adhérent Santé", compute="_compute_is_member_sante", store=True ) is_member_unmi = fields.Boolean("Adhérent UNMI") is_member_mutex = fields.Boolean("Adhérent MUTEX") @@ -40,12 +43,17 @@ class ResPartner(models.Model): string="Assistance RMA", selection=[("base", "Base")] ) - first_join_date = fields.Date("Date de première adhésion") - membership = fields.Boolean("Adhésion") + first_join_date = fields.Date( + string="Date de première adhésion", + compute="_compute_first_join_date", + store=True, + readonly=False, + ) removal = fields.Boolean("Radiation") motive = fields.Char("Motif") - # overwrite state to compute it based on department which itself is computed from zip + # overwrite state to compute it based on department which itself is + # computed from zip state_id = fields.Many2one( comodel_name="res.country.state", string="State", @@ -55,11 +63,10 @@ class ResPartner(models.Model): ) # relations ----- - - company_form = fields.Many2one( + company_form_id = fields.Many2one( comodel_name="mucs.company.type", string="Forme juridique" ) - cooperative_form = fields.Many2one( + cooperative_form_id = fields.Many2one( comodel_name="mucs.cooperative.form", string="Forme coopérative" ) @@ -73,7 +80,7 @@ class ResPartner(models.Model): comodel_name="res.partner.federation", string="Fédérations" ) - contract_id = fields.One2many( + contract_ids = fields.One2many( comodel_name="mucs.contract", inverse_name="partner_id", string="Contrats", @@ -84,7 +91,7 @@ class ResPartner(models.Model): comodel_name="mucs.commercial.event", inverse_name="partner_id", ) - mgmt_event_ids = fields.One2many( + support_ids = fields.One2many( string="Suivi de gestion", comodel_name="mucs.support.event", inverse_name="partner_id", @@ -101,24 +108,35 @@ 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] - # TODO compute this - @api.depends("contract_id") + # TODO: valider la fonction + @api.depends("contract_ids", "contract_ids.date_end") def _compute_is_member_sante(self): for partner in self: - partner.is_member_sante = True - pass + if partner.contract_ids and partner.contract_ids.filtered( + lambda c: not c.date_end + ): + partner.is_member_sante = True + else: + partner.is_member_sante = False + + # TODO: valider la fonction + @api.depends("contract_ids", "contract_ids.date_start") + def _compute_first_join_date(self): + for partner in self: + if partner.contract_ids: + partner.first_join_date = partner.contract_ids.sort("date_start")[ + 0 + ].date_start # ------------------------------------------------------ - # Onchange / Constraints + # Constraints # ------------------------------------------------------ - @api.constrains("is_cooperative", "is_company") def _check_individual_not_cooperative(self): for record in self: diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index e50ac00..d12371d 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -6,6 +6,8 @@ access_mucs_commercial_event,access_mucs_commercial_event,model_mucs_commercial_ access_mucs_support_event,access_mucs_support_event,model_mucs_support_event,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 access_mucs_company_type,access_mucs_company_type,model_mucs_company_type,base.group_user,1,0,0,0 +admin_mucs_company_type,admin_mucs_company_type,model_mucs_company_type,base.group_erp_manager,1,1,1,1 access_mucs_cooperative_form,access_mucs_cooperative_form,model_mucs_cooperative_form,base.group_user,1,0,0,0 +admin_mucs_cooperative_form,admin_mucs_cooperative_form,model_mucs_cooperative_form,base.group_erp_manager,1,1,1,1 access_union_regionale,access_union_regionale,model_union_regionale,base.group_user,1,0,0,0 admin_union_regionale,admin_union_regionale,model_union_regionale,base.group_erp_manager,1,1,1,1 diff --git a/views/res_partner.xml b/views/res_partner.xml index 8811c4d..9b12614 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -49,7 +49,6 @@ > <group> <group> - <!--<field name="siret"/>--> <field name="siret" readonly="1" @@ -62,7 +61,7 @@ /> <field name="company_size_id" /> <field name="company_size" /> - <field name="company_form" /> + <field name="company_form_id" /> <field name="naf_id" string="APE" /> <!--<field name="ccn_id"/>--> <field name="ccn_idcc" string="Numéro CCN" /> @@ -81,13 +80,18 @@ invisible="not is_cooperative" /> <field - name="cooperative_form" + name="cooperative_form_id" invisible="not is_cooperative" /> </group> </group> - <group string="Descriptif Activité"> - <field name="comment" nolabel="1" /> + <group> + <group string="Description de l'activité"> + <field name="activity_desc" nolabel="1" /> + </group> + <group string="Objet Social"> + <field name="social_object" nolabel="1" /> + </group> </group> </page> @@ -111,7 +115,7 @@ <group> <group> <field name="first_join_date" /> - <field name="membership" /> + <field name="is_member_sante" /> </group> <group> <field name="removal" /> @@ -120,7 +124,7 @@ </group> <separator /> <group string="Contrats"> - <field name="contract_id" nolabel="1"> + <field name="contract_ids" nolabel="1"> <list> <field name="number" /> <field name="type" /> @@ -156,7 +160,7 @@ invisible="not is_company" > <group string="Synthèse activité gestion"> - <field name="mgmt_event_ids" nolabel="1"> + <field name="support_ids" nolabel="1"> <list> <field name="date" /> <field name="qs" /> @@ -172,50 +176,165 @@ </record> <!-- List --> - <record id="view_partner_tree" model="ir.ui.view"> - <field name="name">res.partner.list</field> + <record id="mucs_coop_partner_tree" model="ir.ui.view"> + <field name="name">mucs.res.partner.list</field> <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_tree" /> <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" /> + <list> + <field name="complete_name" /> + <field name="phone" /> + <field name="email" /> + <field name="city" optional="show" /> + <field name="ur_id" optional="show" /> + <field name="state_id" optional="show" /> + <field name="naf_id" optional="show" /> + <field name="ccn_id" optional="show" /> + <field name="is_cooperative" optional="show" /> + <field name="is_member_cgscop" optional="show" /> + <field name="is_member_sante" optional="show" /> + <field name="is_member_unmi" optional="show" /> + <field name="is_member_mutex" optional="show" /> + <field name="first_join_date" optional="show" /> + <field name="company_size" optional="show" /> + <field name="country_department_id" optional="hide" /> - </xpath> + <field + name="category_id" + optional="hide" + widget="many2many_tags" + options="{'color_field': 'color'}" + /> + <field name="activity_ids" optional="show" widget="list_activity" /> + <field + name="company_id" + groups="base.group_multi_company" + readonly="1" + /> + </list> </field> </record> - <!-- Search View --> - <record id="search_partner" model="ir.ui.view"> - <field name="name">res.partner.search</field> + <!-- Search --> + <record id="mucs_coop_partner_search" model="ir.ui.view"> + <field name="name">mucs.res.partner.search</field> <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_res_partner_filter" /> <field name="arch" type="xml"> - <!-- Search --> - <xpath expr="//field[@name='name']" position="after"> + <search> + <!-- search --> + <field + name="name" + filter_domain="['|', '|', '|', '|', ('complete_name', 'ilike', self), ('ref', 'ilike', self), ('email', 'ilike', self), ('siren', 'ilike', self), ('company_registry', 'ilike', self)]" + /> + <field name="email" filter_domain="[('email', 'ilike', self)]" /> + <field + name="phone" + filter_domain="['|', ('phone', 'ilike', self), ('mobile', 'ilike', self)]" + /> + <field name="category_id" string="Tag" operator="child_of" /> + <field name="city" /> <field name="ur_id" /> - </xpath> - <!-- Filters --> - <!-- <xpath expr="//filter[@name='inactive']" position="before">--> - <!-- <filter--> - <!-- string="Adhérents"--> - <!-- name="member_coop"--> - <!-- domain="[('membership_status', 'not in', ['not_member', 'out'])]"--> - <!-- />--> - <!-- <filter--> - <!-- string="Non Adhérents"--> - <!-- name="not_member_coop"--> - <!-- domain="[('membership_status', 'in', ['not_member', 'out'])]"--> - <!-- />--> - <!-- </xpath>--> - <!-- Group --> - <xpath expr="//filter[@name='salesperson']" position="before"> + <field name="state_id" /> + <field name="naf_id" /> + <field name="ccn_id" /> + <field name="federation_ids" /> + <!-- filters --> + <separator /> <filter - string="Région" - name="group_state_id" - context="{'group_by': 'state_id'}" + string="Coopératives" + name="coop" + domain="[('is_cooperative', '=', True)]" /> - </xpath> + <filter + string="Non coopératives" + name="not_coop" + domain="[('is_cooperative', '=', False)]" + /> + <separator /> + <filter + string="Adhérent Santé" + name="is_member_sante" + domain="[('is_member_sante', '=', True)]" + /> + <filter + string="Non adhérent Santé" + name="not_is_member_sante" + domain="[('is_member_sante', '=', False)]" + /> + <separator /> + <filter + string="Adhérent UNMI" + name="is_member_unmi" + domain="[('is_member_unmi', '=', True)]" + /> + <filter + string="Non adhérent UNMI" + name="not_is_member_unmi" + domain="[('is_member_unmi', '=', False)]" + /> + <separator /> + <filter + string="Adhérent CG Scop" + name="is_member_cgscop" + domain="[('is_member_cgscop', '=', True)]" + /> + <filter + string="Non adhérent CG Scop" + name="not_is_member_cgscop" + domain="[('is_member_cgscop', '=', False)]" + /> + <separator /> + <filter + string="Date de première adhésion" + name="first_join_date" + date="first_join_date" + /> + <separator /> + <filter + string="Archivé" + name="inactive" + domain="[('active', '=', False)]" + /> + <separator /> + <!-- group --> + <group expand="0" name="group_by" string="Group By"> + <filter + name="group_ur_id" + string="Union Régionale" + context="{'group_by': 'ur_id'}" + /> + <filter + name="group_state_id" + string="Région" + context="{'group_by': 'parent_id'}" + /> + <filter + name="group_naf_id" + string="Code Naf" + context="{'group_by': 'naf_id'}" + /> + <filter + name="group_ccn_id" + string="Convention Collective" + context="{'group_by': 'ccn_id'}" + /> + <filter + name="group_company_size_id" + string="Tranche d'effectif" + context="{'group_by': 'company_size_id'}" + /> + </group> + <!-- searchpanel --> + <searchpanel view_types="list,pivot,graph"> + <field name="ur_id" expand="1" select="multi" enable_counters="1" /> + <field + name="company_size_id" + expand="0" + select="multi" + icon="fa-check-square-o" + enable_counters="1" + /> + </searchpanel> + </search> </field> </record> @@ -225,7 +344,7 @@ <field name="type">ir.actions.act_window</field> <field name="res_model">res.partner</field> <field name="view_mode">list,pivot,graph,form</field> - <field name="search_view_id" ref="search_partner" /> + <field name="search_view_id" ref="mucs_coop_partner_search" /> <field name="domain">[('is_cooperative', '=', True)]</field> <field name="path">coop</field> <field name="context"> @@ -236,7 +355,9 @@ </field> <field name="view_ids" - eval="[(5, 0, 0), (0, 0, {'view_mode': 'list', 'view_id': ref('view_partner_tree')}),]" + eval="[ + (5, 0, 0), + (0, 0, {'view_mode': 'list', 'view_id': ref('mucs_coop_partner_tree')}),]" /> </record> </odoo> -- GitLab