diff --git a/addons/hr/models/hr_employee_base.py b/addons/hr/models/hr_employee_base.py index cdbd53780b0..276fa45316b 100644 --- a/addons/hr/models/hr_employee_base.py +++ b/addons/hr/models/hr_employee_base.py @@ -58,6 +58,26 @@ class HrEmployeeBase(models.AbstractModel): ('presence_to_define', 'To define'), ('presence_undetermined', 'Undetermined')], compute='_compute_presence_icon') show_hr_icon_display = fields.Boolean(compute='_compute_presence_icon') + newly_hired = fields.Boolean('Newly Hired', compute='_compute_newly_hired', search='_search_newly_hired') + + @api.model + def _get_new_hire_field(self): + return 'create_date' + + def _compute_newly_hired(self): + new_hire_field = self._get_new_hire_field() + new_hire_date = fields.Datetime.now() - timedelta(days=90) + for employee in self: + employee.newly_hired = employee[new_hire_field] > new_hire_date + + def _search_newly_hired(self, operator, value): + new_hire_field = self._get_new_hire_field() + new_hires = self.env['hr.employee'].sudo().search([ + (new_hire_field, '>', fields.Datetime.now() - timedelta(days=90)) + ]) + + op = 'in' if value and operator == '=' or not value and operator != '=' else 'not in' + return [('id', op, new_hires.ids)] def _get_valid_employee_for_user(self): diff --git a/addons/hr/views/hr_employee_public_views.xml b/addons/hr/views/hr_employee_public_views.xml index efc8639e6ef..9124aea9507 100644 --- a/addons/hr/views/hr_employee_public_views.xml +++ b/addons/hr/views/hr_employee_public_views.xml @@ -18,6 +18,8 @@ + + diff --git a/addons/hr/views/hr_employee_views.xml b/addons/hr/views/hr_employee_views.xml index d7493982bfc..fe404b950c0 100644 --- a/addons/hr/views/hr_employee_views.xml +++ b/addons/hr/views/hr_employee_views.xml @@ -30,6 +30,8 @@ + + diff --git a/addons/hr_contract/models/hr_employee.py b/addons/hr_contract/models/hr_employee.py index bf025f557c3..b78750b7e13 100644 --- a/addons/hr_contract/models/hr_employee.py +++ b/addons/hr_contract/models/hr_employee.py @@ -20,6 +20,14 @@ class EmployeePublic(models.Model): return [('id', 'in', employees.ids)] +class EmployeeBase(models.AbstractModel): + _inherit = "hr.employee.base" + + @api.model + def _get_new_hire_field(self): + return 'first_contract_date' + + class Employee(models.Model): _inherit = "hr.employee" diff --git a/addons/hr_recruitment/models/hr_employee.py b/addons/hr_recruitment/models/hr_employee.py index 2ea3ad7af52..e72ef9fb848 100644 --- a/addons/hr_recruitment/models/hr_employee.py +++ b/addons/hr_recruitment/models/hr_employee.py @@ -7,21 +7,8 @@ from datetime import timedelta class HrEmployee(models.Model): _inherit = "hr.employee" - newly_hired_employee = fields.Boolean('Newly hired employee', compute='_compute_newly_hired_employee', - search='_search_newly_hired_employee') applicant_id = fields.One2many('hr.applicant', 'emp_id', 'Applicant') - def _compute_newly_hired_employee(self): - now = fields.Datetime.now() - for employee in self: - employee.newly_hired_employee = bool(employee.create_date > (now - timedelta(days=90))) - - def _search_newly_hired_employee(self, operator, value): - employees = self.env['hr.employee'].search([ - ('create_date', '>', fields.Datetime.now() - timedelta(days=90)) - ]) - return [('id', 'in', employees.ids)] - @api.model_create_multi def create(self, vals_list): employees = super().create(vals_list) diff --git a/addons/hr_recruitment/views/hr_applicant_views.xml b/addons/hr_recruitment/views/hr_applicant_views.xml index 5f98f59ae7d..313d48fbcb6 100644 --- a/addons/hr_recruitment/views/hr_applicant_views.xml +++ b/addons/hr_recruitment/views/hr_applicant_views.xml @@ -575,30 +575,6 @@ action="hr_recruitment_degree_action" sequence="1" groups="base.group_no_one"/> - - - hr.employee.search.inherit - hr.employee - - - - - - - - - - Newly Hired Employees - hr.employee - kanban,tree,form - { - 'search_default_newly_hired_employee': 1, - 'search_default_department_id': [active_id], - 'default_department_id': active_id} - - - - hr.applicant.pivot hr.applicant