From 57c3f0c243794be58e4c4acb6faf9b7dfd9fff9e Mon Sep 17 00:00:00 2001 From: Benjamin <benjamin@le-filament.com> Date: Mon, 23 Mar 2020 18:42:07 +0100 Subject: [PATCH] =?UTF-8?q?[cgscop=20#143=20&=20#144]=20ajout=20convention?= =?UTF-8?q?=20r=C3=A9gionale=20et=20automatisation=20de=20la=20mise=20?= =?UTF-8?q?=C3=A0=20jour=20depuis=20l'organisme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __manifest__.py | 1 + models/__init__.py | 2 ++ models/hr_timesheet.py | 32 +++++++++++++++++++++++++++++++ models/res_partner.py | 21 ++++++++++++++++++++ models/ur_regional_convention.py | 24 +++++++++++++++++++++++ security/ir.model.access.csv | 3 +++ views/hr_timesheet.xml | 15 +++++++++++---- views/res_partner.xml | 17 ++++++++++++++++ views/ur_regional_convention.xml | 33 ++++++++++++++++++++++++++++++++ 9 files changed, 144 insertions(+), 4 deletions(-) create mode 100644 models/res_partner.py create mode 100644 models/ur_regional_convention.py create mode 100644 views/ur_regional_convention.xml diff --git a/__manifest__.py b/__manifest__.py index 2bbe4d1..853bbdd 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -24,6 +24,7 @@ "views/hr_timesheet_cgscop.xml", "views/res_partner.xml", "views/ur_financial_system.xml", + "views/ur_regional_convention.xml", "report/report_hr_timesheet.xml", "datas/cgscop_timesheet_code_data.xml", ] diff --git a/models/__init__.py b/models/__init__.py index e64d275..15e2aa4 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -5,5 +5,7 @@ from . import cgscop_timesheet_code from . import cgscop_timesheet_sheet from . import hr_timesheet from . import project +from . import res_partner from . import ur_financial_system +from . import ur_regional_convention diff --git a/models/hr_timesheet.py b/models/hr_timesheet.py index 04e190e..789f5f9 100644 --- a/models/hr_timesheet.py +++ b/models/hr_timesheet.py @@ -19,6 +19,9 @@ class ScopHrTimesheet(models.Model): ur_financial_system_id = fields.Many2one( comodel_name='ur.financial.system', string='Dispositif Financier') + ur_regional_convention_id = fields.Many2one( + comodel_name='ur.regional.convention', + string='Convention Régionale') ur_id = fields.Many2one( 'union.regionale', string='Union Régionale', @@ -41,10 +44,30 @@ class ScopHrTimesheet(models.Model): index=True, readonly=True, store=True,) + ur_financial_system_nb = fields.Integer( + string="Nb Dispositifs Financiers", + compute="_compute_ur_system_nb") + ur_regional_convention_nb = fields.Integer( + string="Nb conventions régionales", + compute="_compute_ur_system_nb") # ------------------------------------------------------ # Compute Functions # ------------------------------------------------------ + @api.depends('ur_id') + def _compute_ur_system_nb(self): + for time in self: + # Calcul nombre de dispositifs financiers + financial_system = time.env['ur.financial.system'].search([ + ('ur_id', '=', time.ur_id.id)]) + time.ur_financial_system_nb = len( + financial_system) + # Calcul nombre de conventions + regional_convention = time.env['ur.regional.convention'].search([ + ('ur_id', '=', time.ur_id.id)]) + time.ur_regional_convention_nb = len( + regional_convention) + @api.depends('sheet_id', 'sheet_id.state') def _compute_state(self): for timesheet in self: @@ -60,6 +83,15 @@ class ScopHrTimesheet(models.Model): def onchange_project_id(self): self.partner_id = self.project_id.partner_id + @api.onchange('partner_id') + def onchange_partner_id(self): + if not self.partner_id.ur_financial_system_date or \ + fields.Datetime.now() > self.partner_id.ur_financial_system_date: + self.ur_financial_system_id = self.partner_id.ur_financial_system_id + if not self.partner_id.ur_regional_convention_date or \ + fields.Datetime.now() > self.partner_id.ur_regional_convention_date: + self.ur_regional_convention_id = self.partner_id.ur_regional_convention_id + # ------------------------------------------------------ # Override ORM # ------------------------------------------------------ diff --git a/models/res_partner.py b/models/res_partner.py new file mode 100644 index 0000000..ee67f1c --- /dev/null +++ b/models/res_partner.py @@ -0,0 +1,21 @@ +# © 2020 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models, fields + + +class ScopPartnerTimesheet(models.Model): + _inherit = "res.partner" + + ur_financial_system_id = fields.Many2one( + comodel_name='ur.financial.system', + string='Dispositif Financier', + ondelete='set null') + ur_financial_system_date = fields.Date( + "Date de fin de dispositif") + ur_regional_convention_id = fields.Many2one( + comodel_name='ur.regional.convention', + string='Convention Régionale', + ondelete='set null') + ur_regional_convention_date = fields.Date( + "Date de fin de convention") diff --git a/models/ur_regional_convention.py b/models/ur_regional_convention.py new file mode 100644 index 0000000..04a986c --- /dev/null +++ b/models/ur_regional_convention.py @@ -0,0 +1,24 @@ +# © 2019 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models, fields + + +class ScopRegionalConvention(models.Model): + _name = "ur.regional.convention" + _description = "Convention Régionale UR" + + def _default_ur(self): + return self.env['res.company']._ur_default_get() + + name = fields.Char('Nom') + company_id = fields.Many2one( + comodel_name='res.company', + string='Société', + default=lambda self: self.env.user.company_id) + ur_id = fields.Many2one( + 'union.regionale', + string='Union Régionale', + index=True, + on_delete='restrict', + default=_default_ur) diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index df99751..ee179f4 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -9,3 +9,6 @@ access_project_project_cg_manager,access_project_project_cg,model_project_projec access_account_analytic_account_ur_manager,access_account_analytic_account_ur,analytic.model_account_analytic_account,cgscop_partner.group_ur_list_modif,1,1,1,1 access_account_analytic_account_cg_manager,access_account_analytic_account_cg,analytic.model_account_analytic_account,cgscop_partner.group_cg_administrator,1,1,1,1 access_cgscop_timesheet_sheet_user,access_cgscop_timesheet_sheet_user,model_cgscop_timesheet_sheet,hr_timesheet.group_hr_timesheet_user,1,1,1,1 +access_ur_regional_convention,access_ur_regional_convention,model_ur_regional_convention,base.group_user,1,0,0,0 +access_ur_regional_convention_ur_manager,access_ur_regional_convention_ur,model_ur_regional_convention,cgscop_partner.group_ur_list_modif,1,1,1,1 +access_ur_regional_convention_cg_manager,access_ur_regional_convention_cg,model_ur_regional_convention,cgscop_partner.group_cg_administrator,1,1,1,1 diff --git a/views/hr_timesheet.xml b/views/hr_timesheet.xml index 4b13d7c..893e76f 100644 --- a/views/hr_timesheet.xml +++ b/views/hr_timesheet.xml @@ -47,9 +47,13 @@ <attribute name="string">Code activité UR</attribute> </field> <field name="project_id" position="after" > + <field name="partner_id" domain="[('is_company', '=', True), ('ur_id', '=', ur_id)]" required="True" class="td-ellipsis" options="{'no_open': True, 'no_create': True}" string="Contact" /> - <field name="ur_financial_system_id" options="{'no_open': True, 'no_create': True}"/> - <field name="ur_id" options="{'no_open': True, 'no_create': True}"/> + <field name="ur_financial_system_id" options="{'no_open': True, 'no_create': True}" attrs="{'required':[('ur_financial_system_nb', '>', 0)], 'invisible':[('ur_financial_system_nb', '=', 0)]}"/> + <field name="ur_regional_convention_id" options="{'no_open': True, 'no_create': True}" attrs="{'required':[('ur_regional_convention_nb', '>', 0)], 'invisible':[('ur_regional_convention_nb', '=', 0)]}"/> + <field name="ur_id" options="{'no_open': True, 'no_create': True}" groups="cgscop_partner.group_cg_administrator"/> + <field name="ur_regional_convention_nb" invisible="1"/> + <field name="ur_financial_system_nb" invisible="1"/> </field> <field name="task_id" position="attributes"> <attribute name="invisible">True</attribute> @@ -87,9 +91,12 @@ <attribute name="attrs">{'readonly': [('state', 'in', ('submit', 'valid'))]}</attribute> </field> <field name="unit_amount" position="after"> - <field name="ur_financial_system_id" options="{'no_open': True, 'no_create': True}" attrs="{'readonly': [('state', 'in', ('submit', 'valid'))]}"/> + <field name="ur_regional_convention_nb" invisible="1"/> + <field name="ur_financial_system_nb" invisible="1"/> + <field name="ur_financial_system_id" options="{'no_open': True, 'no_create': True}" attrs="{'required': [('ur_financial_system_nb', '>', 0)], 'invisible': [('ur_financial_system_nb', '<', 1)], 'readonly': [('state', 'in', ('submit', 'valid'))]}"/> + <field name="ur_regional_convention_id" options="{'no_open': True, 'no_create': True}" attrs="{'required':[('ur_regional_convention_nb', '>', 0)], 'invisible':[('ur_regional_convention_nb', '<', 1)], 'readonly': [('state', 'in', ('submit', 'valid'))]}"/> <field name="state" /> - <field name="ur_id" attrs="{'readonly': [('state', 'in', ('submit', 'valid'))]}"/> + <field name="ur_id" attrs="{'readonly': [('state', 'in', ('submit', 'valid'))]}" groups="cgscop_partner.group_cg_administrator"/> </field> </field> </record> diff --git a/views/res_partner.xml b/views/res_partner.xml index 1e69861..ac36a2f 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -17,5 +17,22 @@ </field> </record> + <record id="view_partner_cooperative_timesheet_form" model="ir.ui.view"> + <field name="name">cooperative.timesheet.form</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="cgscop_partner.scop_contact_view_form"/> + <field name="priority" eval="1"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='activity_federation_com']" position="before"> + <separator></separator> + <field name="ur_financial_system_id" /> + <field name="ur_financial_system_date" attrs="{'invisible':[('ur_financial_system_id','=',False)]}"/> + <field name="ur_regional_convention_id" options="{'no_open': True, 'no_create': True}"/> + <field name="ur_regional_convention_date" attrs="{'invisible':[('ur_regional_convention_id','=',False)]}"/> + <separator></separator> + </xpath> + </field> + </record> + </data> </odoo> \ No newline at end of file diff --git a/views/ur_regional_convention.xml b/views/ur_regional_convention.xml new file mode 100644 index 0000000..97e9b3e --- /dev/null +++ b/views/ur_regional_convention.xml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!-- Copyright 2019 Le Filament + License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> + +<odoo> + <data> + <record id="view_ur_regional_convention_tree" model="ir.ui.view"> + <field name="name">ur.regional.convention.tree</field> + <field name="model">ur.regional.convention</field> + <field name="arch" type="xml"> + <tree editable='top'> + <field name="name" /> + <field name="ur_id" options="{'no_open': True, 'no_create': True}"/> + <field name="company_id" groups="base.group_no_one" options="{'no_open': True, 'no_create': True}"/> + </tree> + </field> + </record> + + <record id="action_ur_regional_convention" model="ir.actions.act_window"> + <field name="name">Conventions Régionales</field> + <field name="res_model">ur.regional.convention</field> + <field name="view_mode">tree</field> + </record> + + <menuitem id="menu_ur_regional_convention" + name="Conventions Régionales" + parent="hr_timesheet.hr_timesheet_menu_configuration" + action="action_ur_regional_convention" + sequence="50" + groups="cgscop_partner.group_ur_list_modif"/> + + </data> +</odoo> \ No newline at end of file -- GitLab