diff --git a/__manifest__.py b/__manifest__.py index 2a582fda15c4a19b144dc6a437e56bdb8a650116..483441a046d6712da6e1c08aae1b0464704b9807 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 91fed54d404eac384a0186fdf541d0e354a4171f..747285fc21d2cd732f42be536465ee2c6dad1191 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 901968d686f69a5b1f38c9cc4dacaf0365cf8b33..47c43b32cf58f64a1ff7c71db034312617ad854c 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 0000000000000000000000000000000000000000..77395da58f6379d574f48e02eb73ab8c4f4c0bb9 --- /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 301b7dab167cbcb978ea78e7da9e7f032c40b90e..bde96825517321a3a9d225f58846ea09fa827c43 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 0000000000000000000000000000000000000000..0c3a22492690f8fdc994c699e2d0964cfab42efb --- /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 935a759cfe937648733e8761a39a913ea3b7e073..a4d43532cbe9643915d980015975c7b53120b32d 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 0000000000000000000000000000000000000000..35dcafbb6b28c351c739c8dca2d1a5dd36aeac58 --- /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>