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', '&lt;', 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', '&lt;', 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