From 7a516973d3992f5723300a3b2601f9aff97a0806 Mon Sep 17 00:00:00 2001 From: "Laurent Stukkens (LTU)" Date: Thu, 21 Jan 2021 17:29:49 +0000 Subject: [PATCH] [IMP] hr_contract: add employee type Prior to this commit: * All employees were treated the same way regarding the contractual point of vue. From this commit on: * Three employee types will be created: - Employee, which is supposed to be under contract - Student & Contractor which are both not supposed to have an employee contract (but are still use the employee as working for the company) * Employee view and Contract History will take this consideration into account. closes odoo/odoo#64931 Taskid: 2446000 Signed-off-by: Yannick Tivisse (yti) --- addons/hr/models/hr_employee_base.py | 8 ++++++++ addons/hr/models/hr_employee_public.py | 1 + addons/hr/models/res_users.py | 2 ++ addons/hr/views/hr_employee_public_views.xml | 1 + addons/hr/views/hr_employee_views.xml | 1 + addons/hr/views/res_users.xml | 4 +++- addons/hr_contract/report/hr_contract_history.py | 5 +++-- addons/hr_contract/views/hr_contract_views.xml | 7 +++++-- 8 files changed, 24 insertions(+), 5 deletions(-) diff --git a/addons/hr/models/hr_employee_base.py b/addons/hr/models/hr_employee_base.py index 67dd28eb46f..9986c5e1a1a 100644 --- a/addons/hr/models/hr_employee_base.py +++ b/addons/hr/models/hr_employee_base.py @@ -53,6 +53,14 @@ class HrEmployeeBase(models.AbstractModel): ('presence_absent', 'Absent'), ('presence_to_define', 'To define'), ('presence_undetermined', 'Undetermined')], compute='_compute_presence_icon') + employee_type = fields.Selection([ + ('employee', 'Employee'), + ('student', 'Student'), + ('trainee', 'Trainee'), + ('contractor', 'Contractor'), + ('freelance', 'Freelancer'), + ], string='Employee Type', default='employee', required=True, + help="The employee type. Although the primary purpose may seem to categorize employees, this field has also an impact in the Contract History. Only Employee type is supposed to be under contract and will have a Contract History.") @api.depends('user_id.im_status') def _compute_presence_state(self): diff --git a/addons/hr/models/hr_employee_public.py b/addons/hr/models/hr_employee_public.py index 6ac8091f271..10edc2ccd7e 100644 --- a/addons/hr/models/hr_employee_public.py +++ b/addons/hr/models/hr_employee_public.py @@ -30,6 +30,7 @@ class HrEmployeePublic(models.Model): resource_calendar_id = fields.Many2one(readonly=True) tz = fields.Selection(readonly=True) color = fields.Integer(readonly=True) + employee_type = fields.Selection(readonly=True) # hr.employee.public specific fields child_ids = fields.One2many('hr.employee.public', 'parent_id', string='Direct subordinates', readonly=True) diff --git a/addons/hr/models/res_users.py b/addons/hr/models/res_users.py index 6c458a3a39a..dcc8407de42 100644 --- a/addons/hr/models/res_users.py +++ b/addons/hr/models/res_users.py @@ -65,6 +65,7 @@ class User(models.Model): hr_presence_state = fields.Selection(related='employee_id.hr_presence_state') last_activity = fields.Date(related='employee_id.last_activity') last_activity_time = fields.Char(related='employee_id.last_activity_time') + employee_type = fields.Selection(related='employee_id.employee_type', readonly=False, related_sudo=False) can_edit = fields.Boolean(compute='_compute_can_edit') @@ -143,6 +144,7 @@ class User(models.Model): 'study_field', 'study_school', 'private_lang', + 'employee_type', ] init_res = super(User, self).__init__(pool, cr) diff --git a/addons/hr/views/hr_employee_public_views.xml b/addons/hr/views/hr_employee_public_views.xml index 703e2ebc3d5..cfc46f28cfe 100644 --- a/addons/hr/views/hr_employee_public_views.xml +++ b/addons/hr/views/hr_employee_public_views.xml @@ -60,6 +60,7 @@ + diff --git a/addons/hr/views/hr_employee_views.xml b/addons/hr/views/hr_employee_views.xml index 08e14041e92..f54394c61d1 100644 --- a/addons/hr/views/hr_employee_views.xml +++ b/addons/hr/views/hr_employee_views.xml @@ -178,6 +178,7 @@ + diff --git a/addons/hr/views/res_users.xml b/addons/hr/views/res_users.xml index d62776ab2a1..0e09118a50a 100644 --- a/addons/hr/views/res_users.xml +++ b/addons/hr/views/res_users.xml @@ -176,7 +176,9 @@ - + + + diff --git a/addons/hr_contract/report/hr_contract_history.py b/addons/hr_contract/report/hr_contract_history.py index 594daa6dae8..3513019f7b4 100644 --- a/addons/hr_contract/report/hr_contract_history.py +++ b/addons/hr_contract/report/hr_contract_history.py @@ -88,9 +88,10 @@ class ContractHistory(models.Model): FROM hr_contract AS contract INNER JOIN contract_information ON contract.id = contract_information.id RIGHT JOIN hr_employee AS employee - ON contract_information.employee_id = employee.id + ON contract_information.employee_id = employee.id AND contract.company_id = employee.company_id - WHERE (employee.active = true OR contract.state='draft') + WHERE employee.employee_type IN ('employee', 'student') + AND (employee.active = true OR contract.state='draft') )""" % (self._table, self._get_fields())) @api.depends('employee_id.contract_ids') diff --git a/addons/hr_contract/views/hr_contract_views.xml b/addons/hr_contract/views/hr_contract_views.xml index 01bcf76c928..c2657a02958 100644 --- a/addons/hr_contract/views/hr_contract_views.xml +++ b/addons/hr_contract/views/hr_contract_views.xml @@ -13,7 +13,8 @@ class="oe_stat_button" icon="fa-book" type="object" - groups="hr_contract.group_hr_contract_manager"> + groups="hr_contract.group_hr_contract_manager" + attrs="{'invisible' : [('employee_type', 'not in', ['employee', 'student'])]}">
In Contract Since @@ -37,7 +38,9 @@
- +