[IMP] hr,hr_recruitment: add Newly Hired filter

Moves the Newly Hired search filter from hr_recruitment to hr.
This new filter is available to all employees and not restricted to Officers.

task-3346478

closes odoo/odoo#123420

Related: odoo/upgrade#4759
Signed-off-by: Sofie Gvaladze (sgv) <sgv@odoo.com>
This commit is contained in:
Kevin Baptiste
2023-08-02 02:24:46 +02:00
parent 5c37116a99
commit fef71bac14
6 changed files with 32 additions and 37 deletions
+20
View File
@@ -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):
@@ -18,6 +18,8 @@
<filter name="my_team" string="My Team" domain="[('parent_id.user_id', '=', uid)]"/>
<filter name="my_department" string="My Department" domain="[('member_of_department', '=', True)]"/>
<separator/>
<filter name="newly_hired" string="Newly Hired" domain="[('newly_hired', '=', True)]"/>
<separator/>
<filter name="archived" string="Archived" domain="[('active', '=', False)]"/>
<group expand="0" string="Group By">
<filter name="group_manager" string="Manager" domain="[]" context="{'group_by':'parent_id'}"/>
+2
View File
@@ -30,6 +30,8 @@
<filter name="my_team" string="My Team" domain="[('parent_id.user_id', '=', uid)]"/>
<filter name="my_department" string="My Department" domain="[('member_of_department', '=', True)]"/>
<separator/>
<filter name="newly_hired" string="Newly Hired" domain="[('newly_hired', '=', True)]"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<group expand="0" string="Group By">
<filter name="group_manager" string="Manager" domain="[]" context="{'group_by': 'parent_id'}"/>
+8
View File
@@ -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"
@@ -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)
@@ -575,30 +575,6 @@
action="hr_recruitment_degree_action"
sequence="1" groups="base.group_no_one"/>
<!--Hr Employee inherit search view-->
<record id="hr_employee_view_search" model="ir.ui.view">
<field name="name">hr.employee.search.inherit</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_filter"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='job_id']" position="after">
<filter name="hiring_date" string="Hiring Date" date="create_date" groups="hr_recruitment.group_hr_recruitment_user"/>
</xpath>
</field>
</record>
<record id="hr_employee_action_from_department" model="ir.actions.act_window">
<field name="name">Newly Hired Employees</field>
<field name="res_model">hr.employee</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context">{
'search_default_newly_hired_employee': 1,
'search_default_department_id': [active_id],
'default_department_id': active_id}
</field>
<field name="search_view_id" ref="hr_employee_view_search"/>
</record>
<record id="hr_applicant_view_pivot" model="ir.ui.view">
<field name="name">hr.applicant.pivot</field>
<field name="model">hr.applicant</field>