diff --git a/addons/hr/models/hr_employee_base.py b/addons/hr/models/hr_employee_base.py index 67dd28eb46fb7500eb54d1f0b722169de8133ef4..9986c5e1a1a712ed5283bf9d140cbebc15a3d79e 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 6ac8091f2719bd9fcfd96c178421ff9716133321..10edc2ccd7e38382597475eaf8694b85514524c4 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 6c458a3a39a8087dae726f2b46ad704d49561aff..dcc8407de42d036d8a07efe233f1f0e98dca8b18 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 703e2ebc3d50f6d3deb7eebe19fc4cc62639a110..cfc46f28cfed048f53bea7b79c869a471acf6810 100644 --- a/addons/hr/views/hr_employee_public_views.xml +++ b/addons/hr/views/hr_employee_public_views.xml @@ -60,6 +60,7 @@ </group> <group> <field name="department_id"/> + <field name="employee_type"/> <field name="company_id" groups="base.group_multi_company"/> <field name="parent_id"/> <field name="coach_id"/> diff --git a/addons/hr/views/hr_employee_views.xml b/addons/hr/views/hr_employee_views.xml index 08e14041e929937396fbe1912440d1e53cc3e747..f54394c61d1090dbd2a4e55b167cc73cddd369a6 100644 --- a/addons/hr/views/hr_employee_views.xml +++ b/addons/hr/views/hr_employee_views.xml @@ -178,6 +178,7 @@ <page name="hr_settings" string="HR Settings" groups="hr.group_hr_user"> <group> <group string='Status' name="active_group"> + <field name="employee_type"/> <field name="user_id" string="Related User" domain="[('share', '=', False)]"/> </group> <group string="Attendance" name="identification_group"> diff --git a/addons/hr/views/res_users.xml b/addons/hr/views/res_users.xml index d62776ab2a195633ff639869964a563cfe3d5026..0e09118a50a9bf1b5c28e1bb3bfc12500f853389 100644 --- a/addons/hr/views/res_users.xml +++ b/addons/hr/views/res_users.xml @@ -176,7 +176,9 @@ </page> <page name="hr_settings" string="HR Settings"> <group> - <group string='Status' name="active_group" invisible="1"></group> + <group string='Status' name="active_group"> + <field name="employee_type" attrs="{'readonly': [('can_edit', '=', False)]}"/> + </group> <group string="Attendance" name="identification_group"> <field name="pin" attrs="{'readonly': [('can_edit', '=', False)]}"/> <field name="barcode" attrs="{'readonly': [('can_edit', '=', False)]}"/> diff --git a/addons/hr_contract/report/hr_contract_history.py b/addons/hr_contract/report/hr_contract_history.py index 594daa6dae82b8c316f0e7c12e8e3c082441f22a..3513019f7b45ddd58c8c46bcfc181d038a793a9e 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 01bcf76c928d0a059417d4997f722f37381a99f9..c2657a029589bff26c32e48fbee6a5f75afc7748 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'])]}"> <div attrs="{'invisible' : [('first_contract_date', '=', False)]}" class="o_stat_info"> <span class="o_stat_text text-success" attrs="{'invisible' : [('contract_warning', '=', True)]}" title="In Contract Since"> In Contract Since</span> <span class="o_stat_value text-success" attrs="{'invisible' : [('contract_warning', '=', True)]}"> @@ -37,7 +38,9 @@ </button> </div> <xpath expr="//field[@name='user_id']" position="before"> - <field name="first_contract_date" attrs="{'invisible' : [('first_contract_date', '=', False)]}" readonly="1"/> + <field name="first_contract_date" + attrs="{'invisible' : ['|', ('employee_type', 'not in', ['employee', 'student']), ('first_contract_date', '=', False)]}" + readonly="1"/> </xpath> <xpath expr="//field[@name='bank_account_id']" position="replace"> <field name="bank_account_id" context="{'display_partner':True}" attrs="{'invisible' : [('address_home_id', '=', False)]}"/>