From 0ad0478df66907eb70aaadc08323c444bed039e9 Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Thu, 18 Jul 2024 16:04:17 +0200 Subject: [PATCH] [UPD] Add departments --- .pre-commit-config.yaml | 7 ++++++- __manifest__.py | 2 ++ models/__init__.py | 1 + models/res_department.py | 26 ++++++++++++++++++++++++++ models/res_partner.py | 23 +++++++++++++++++++++++ security/ir.model.access.csv | 3 +++ security/partner_security.xml | 4 +++- views/res_department.xml | 28 ++++++++++++++++++++++++++++ views/res_partner.xml | 3 +++ 9 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 models/res_department.py create mode 100644 security/ir.model.access.csv create mode 100644 views/res_department.xml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b4d48bd..74a4acb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -27,6 +27,11 @@ repos: entry: found forbidden files; remove them language: fail files: "\\.rej$" + - id: en-po-files + name: en.po files cannot exist + entry: found a en.po file + language: fail + files: '[a-zA-Z0-9_]*/i18n/en\.po$' - repo: https://github.com/oca/maintainer-tools rev: dfba427ba03900b69e0a7f2c65890dc48921d36a hooks: @@ -96,7 +101,7 @@ repos: - id: pyupgrade args: ["--keep-percent-format"] - repo: https://github.com/PyCQA/isort - rev: 5.9.3 + rev: 5.12.0 hooks: - id: isort name: isort except __init__.py diff --git a/__manifest__.py b/__manifest__.py index 6e31eb9..b68d32b 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -9,8 +9,10 @@ "data": [ # security "security/partner_security.xml", + "security/ir.model.access.csv", # datas # views + "views/res_department.xml", "views/res_partner.xml", # views menu # wizard diff --git a/models/__init__.py b/models/__init__.py index bf253ce..7b6a397 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,4 +1,5 @@ # Copyright 2023 Le Filament (https://le-filament.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) +from . import res_department from . import res_partner diff --git a/models/res_department.py b/models/res_department.py new file mode 100644 index 0000000..fefceb2 --- /dev/null +++ b/models/res_department.py @@ -0,0 +1,26 @@ +# © 2019 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 ResDepartment(models.Model): + _description = "Départements" + _name = "res.department" + _order = "code" + + name = fields.Char(string="Nom", size=128, required=True) + code = fields.Char( + string="Numéro", + size=3, + required=True, + ) + state_id = fields.Many2one(comodel_name="res.country.state", string="Région") + + _sql_constraints = [ + ( + "code_uniq", + "unique (code)", + "You cannot have two departments with the same code!", + ) + ] diff --git a/models/res_partner.py b/models/res_partner.py index a41534d..d697894 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -14,6 +14,13 @@ class ResPartner(models.Model): user_id = fields.Many2one(default=lambda self: self.env.user) # New fields + department_id = fields.Many2one( + comodel_name="res.department", + string="Département", + compute="_compute_department_id", + store=True, + readonly=False, + ) is_purchasing_centre = fields.Boolean( string="Est une centrale d'achat", default=False, @@ -40,6 +47,22 @@ class ResPartner(models.Model): # ------------------------------------------------------ # Computed fields / Search Fields # ------------------------------------------------------ + @api.depends("zip", "country_id") + def _compute_department_id(self): + for partner in self: + if partner.zip and partner.country_id == self.env.ref("base.fr"): + try: + zip_dep = partner.zip[:2] + if zip_dep == "97": + zip_dep = partner.zip[:3] + + partner.department_id = ( + self.env["res.department"] + .sudo() + .search([("code", "=", zip_dep)]) + ) + except Exception: + partner.department_id = False # ------------------------------------------------------ # Onchange / Constraints diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv new file mode 100644 index 0000000..c991b8e --- /dev/null +++ b/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +user_res_department,user_res_department,model_res_department,,1,0,0,0 +admin_res_department,admin_res_department,model_res_department,base.group_erp_manager,1,1,1,1 diff --git a/security/partner_security.xml b/security/partner_security.xml index 60fd631..59cc615 100644 --- a/security/partner_security.xml +++ b/security/partner_security.xml @@ -15,7 +15,9 @@ <record id="res_partner_vendor" model="ir.rule"> <field name="name">res.partner.vendor</field> <field name="model_id" ref="base.model_res_partner" /> - <field name="domain_force">['|', '|', ('user_id', '=', user.id), ('partner_share', '=', False), ('is_purchasing_centre', '=', True)]</field> + <field + name="domain_force" + >['|', '|', ('user_id', '=', user.id), ('partner_share', '=', False), ('is_purchasing_centre', '=', True)]</field> <field name="groups" eval="[(4, ref('emgidi_partner.group_partner_vendor'))]" /> </record> </odoo> diff --git a/views/res_department.xml b/views/res_department.xml new file mode 100644 index 0000000..f935d1b --- /dev/null +++ b/views/res_department.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <record id="res_department_tree_view" model="ir.ui.view"> + <field name="name">res.department.tree</field> + <field name="model">res.department</field> + <field name="arch" type="xml"> + <tree editable="top"> + <field name="code" /> + <field name="name" /> + <field name="state_id" /> + </tree> + </field> + </record> + + <record id="res_department_act_window" model="ir.actions.act_window"> + <field name="name">Départements</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">res.department</field> + <field name="view_mode">tree</field> + </record> + + <menuitem + id="menu_action_department" + action="res_department_act_window" + parent="contacts.menu_localisation" + sequence="100" + /> +</odoo> diff --git a/views/res_partner.xml b/views/res_partner.xml index c3b793d..6d1c21f 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -41,6 +41,9 @@ <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form" /> <field name="arch" type="xml"> + <xpath expr="//field[@name='vat']" position="before"> + <field name="department_id" options="{'no_create': 1, 'no_edit': 1}" /> + </xpath> <xpath expr="//group/group[2]" position="after"> <group name="purchasing_centre" -- GitLab