From b58b5b3927f0171fe71b1cf90eed1ff5e9739601 Mon Sep 17 00:00:00 2001 From: Hugo Trentesaux <hugo@le-filament.com> Date: Mon, 7 Apr 2025 15:05:49 +0200 Subject: [PATCH] ajoute les UR --- __manifest__.py | 2 + models/__init__.py | 1 + models/res_partner.py | 19 +++++++-- models/union_regionale.py | 18 +++++++++ security/ir.model.access.csv | 2 + views/menus.xml | 22 +++++++++++ views/res_partner.xml | 77 ++++++++++++++++++++++++++++++++++++ views/union_regionale.xml | 42 ++++++++++++++++++++ 8 files changed, 180 insertions(+), 3 deletions(-) create mode 100644 models/union_regionale.py create mode 100644 views/menus.xml create mode 100644 views/union_regionale.xml diff --git a/__manifest__.py b/__manifest__.py index 2a582fd..483441a 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -11,6 +11,8 @@ # datas # views "views/res_partner.xml", + "views/union_regionale.xml", + "views/menus.xml", # views menu # wizard ], diff --git a/models/__init__.py b/models/__init__.py index 91fed54..747285f 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1 +1,2 @@ from . import res_partner +from . import union_regionale diff --git a/models/res_partner.py b/models/res_partner.py index 901968d..47c43b3 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -1,19 +1,26 @@ # Copyright 2024- Le Filament (https://le-filament.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) -from odoo import models, fields +from odoo import models, fields, api +from odoo.exceptions import ValidationError class ResPartner(models.Model): _inherit = "res.partner" - _description = "Description" - is_cooperative = fields.Boolean("Est une coopérative") # ------------------------------------------------------ # Fields declaration # ------------------------------------------------------ + is_cooperative = fields.Boolean("Est une coopérative") + ur_id = fields.Many2one( + comodel_name="union.regionale", + string="Union Régionale", + index=True, + ondelete="restrict", + ) + # ------------------------------------------------------ # SQL Constraints # ------------------------------------------------------ @@ -30,6 +37,12 @@ class ResPartner(models.Model): # Onchange / Constraints # ------------------------------------------------------ + @api.constrains('is_cooperative', 'is_company') + def _check_individual_not_cooperative(self): + for record in self: + if record.is_cooperative and not record.is_company: + raise ValidationError("An individual can not be a cooperative") + # ------------------------------------------------------ # CRUD methods (ORM overrides) # ------------------------------------------------------ diff --git a/models/union_regionale.py b/models/union_regionale.py new file mode 100644 index 0000000..77395da --- /dev/null +++ b/models/union_regionale.py @@ -0,0 +1,18 @@ +# © 2024 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 UnionRegional(models.Model): + _name = "union.regionale" + _description = "Union Régionale" + _order = "name" + + long_name = fields.Char("Nom", required=True, index=True) + name = fields.Char("Abbréviation", required=True, index=True) + code_ur = fields.Char("Code UR") + + _sql_constraints = [ + ("name_uniq", "unique (name)", "Cette Union Régionale existe déjà !") + ] diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 301b7da..bde9682 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1 +1,3 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink +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/menus.xml b/views/menus.xml new file mode 100644 index 0000000..0c3a224 --- /dev/null +++ b/views/menus.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <!-- Contacts --> + <!-- Coopératives --> + <menuitem + id="menu_coop" + name="Coopératives" + parent="contacts.menu_contacts" + action="coop_partner_action" + /> + + + <!-- Configuration --> + <!-- Union Regionales --> + <menuitem + id="menu_union_regionale" + name="Unions Régionales" + parent="contacts.menu_contacts" + action="union_regionale_act_window" + sequence="20" + /> +</odoo> diff --git a/views/res_partner.xml b/views/res_partner.xml index 935a759..a4d4353 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -2,10 +2,13 @@ <!-- Copyright 2024- Le Filament (https://le-filament.com) 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> <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"> @@ -15,4 +18,78 @@ </xpath> </field> </record> + + <!-- List --> + <record id="view_partner_tree" model="ir.ui.view"> + <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"/> + </xpath> + </field> + </record> + + <!-- Search View --> + <record id="search_partner" model="ir.ui.view"> + <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"> + <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"> + <!-- <filter--> + <!-- string="A jour des cotisations"--> + <!-- name="group_ur_id"--> + <!-- context="{'group_by': 'ur_id'}"--> + <!-- />--> + </xpath> + </field> + </record> + + + <!-- Action --> + <record id="contacts.action_contacts" model="ir.actions.act_window"> + <field name="domain">[('is_cooperative', '!=', True)]</field> + </record> + + <record id="coop_partner_action" model="ir.actions.act_window"> + <field name="name">Coopératives</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">res.partner</field> + <field name="view_mode">list,form</field> + <field name="search_view_id" ref="search_partner"/> + <field name="domain">[('is_cooperative', '=', True)]</field> + <field name="path">coop</field> + <field name="context"> + { + 'default_is_cooperative': True, + 'default_is_company': True, + } + </field> + <field + name="view_ids" + eval="[(5, 0, 0), (0, 0, {'view_mode': 'list', 'view_id': ref('view_partner_tree')}),]" + /> + </record> </odoo> diff --git a/views/union_regionale.xml b/views/union_regionale.xml new file mode 100644 index 0000000..35dcafb --- /dev/null +++ b/views/union_regionale.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" ?> +<!-- Copyright 2024 Le Filament + License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> +<odoo> + <!-- Tree --> + <record model="ir.ui.view" id="union_regionale_tree_view"> + <field name="name">union.regionale.list</field> + <field name="model">union.regionale</field> + <field name="arch" type="xml"> + <list string="Unions Régionales"> + <field name="long_name"/> + <field name="name"/> + <field name="code_ur"/> + </list> + </field> + </record> + + <!-- Form--> + <record model="ir.ui.view" id="union_regionale_form_view"> + <field name="name">union.regionale.form</field> + <field name="model">union.regionale</field> + <field name="arch" type="xml"> + <form string="Union Régionale"> + <sheet> + <group> + <field name="long_name"/> + <field name="name"/> + <field name="code_ur"/> + </group> + </sheet> + </form> + </field> + </record> + + <!-- Action --> + <record model="ir.actions.act_window" id="union_regionale_act_window"> + <field name="name">Unions Régionales</field> + <field name="res_model">union.regionale</field> + <field name="path">ur</field> + <field name="view_mode">list,form</field> + </record> +</odoo> -- GitLab