diff --git a/addons/hr_holidays/models/hr.py b/addons/hr_holidays/models/hr.py index 5e1dc9840bb..05b35373309 100644 --- a/addons/hr_holidays/models/hr.py +++ b/addons/hr_holidays/models/hr.py @@ -63,6 +63,10 @@ class Department(models.Model): class Employee(models.Model): _inherit = "hr.employee" + leave_manager_id = fields.Many2one( + 'res.users', string='Leave Responsible', + domain=lambda self: [('groups_id', 'in', self.env.ref('hr_holidays.group_hr_holidays_team_leader').id)], + help="User responsible of leaves approval. Should be Team Leader or Department Manager.") remaining_leaves = fields.Float( compute='_compute_remaining_leaves', string='Remaining Legal Leaves', help='Total number of legal leaves allocated to this employee, change this value to create allocation/leave request. ' diff --git a/addons/hr_holidays/models/hr_leave.py b/addons/hr_holidays/models/hr_leave.py index 13b9420a522..16b10a6c83b 100644 --- a/addons/hr_holidays/models/hr_leave.py +++ b/addons/hr_holidays/models/hr_leave.py @@ -31,6 +31,9 @@ class HolidaysRequest(models.Model): - can discuss on its leave requests; - can reset only its own leaves; - cannot validate any leaves; + - a Team Leader + - has same rights as a regular employee + - but is able to approve employees' leaves who are in his/her team (see Employee.leave_manager_id in hr_holidays/hr.py) - an Officer - can see all leaves; - can validate "HR" single validation leaves from people if @@ -686,7 +689,7 @@ class HolidaysRequest(models.Model): def _check_approval_update(self, state): """ Check if target state is achievable. """ current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1) - is_officer = self.env.user.has_group('hr_holidays.group_hr_holidays_user') + is_team_leader = self.env.user.has_group('hr_holidays.group_hr_holidays_team_leader') is_manager = self.env.user.has_group('hr_holidays.group_hr_holidays_manager') for holiday in self: val_type = holiday.holiday_status_id.validation_type @@ -698,10 +701,10 @@ class HolidaysRequest(models.Model): raise UserError(_('Only a Leave Manager can reset other people leaves.')) continue - if not is_officer: - raise UserError(_('Only a Leave Officer or Manager can approve or refuse leave requests.')) + if not is_team_leader: + raise UserError(_('Only a Team Leader, Leave Officer or Manager can approve or refuse leave requests.')) - if is_officer: + if is_team_leader: # use ir.rule based first access check: department, members, ... (see security.xml) holiday.check_access_rule('write') @@ -722,8 +725,8 @@ class HolidaysRequest(models.Model): # ------------------------------------------------------------ def _get_responsible_for_approval(self): - if self.state == 'confirm' and self.manager_id.user_id: - return self.manager_id.user_id + if self.state == 'confirm' and self.employee_id.leave_manager_id: + return self.employee_id.leave_manager_id elif self.state == 'confirm' and self.employee_id.parent_id.user_id: return self.employee_id.parent_id.user_id elif self.department_id.manager_id.user_id: diff --git a/addons/hr_holidays/security/hr_holidays_security.xml b/addons/hr_holidays/security/hr_holidays_security.xml index 546fe9440fd..3e10c16ca65 100644 --- a/addons/hr_holidays/security/hr_holidays_security.xml +++ b/addons/hr_holidays/security/hr_holidays_security.xml @@ -1,9 +1,15 @@ + + + Team Leader + + + Officer - + @@ -35,6 +41,16 @@ + + Leaves: Team Leader: write on employee's leaves in his team + + [('employee_id.leave_manager_id', '=' , user.id)] + + + + + + Leaves: officer: read all @@ -113,11 +129,11 @@ - - Leaves Resources Officer + + Leaves Resources: Team Leader [(1,'=',1)] - + diff --git a/addons/hr_holidays/views/hr_leave_views.xml b/addons/hr_holidays/views/hr_leave_views.xml index 4cfe204bec2..77f0a223f0c 100644 --- a/addons/hr_holidays/views/hr_leave_views.xml +++ b/addons/hr_holidays/views/hr_leave_views.xml @@ -31,7 +31,8 @@ - + + @@ -380,18 +381,18 @@ name="Managers" parent="menu_hr_holidays_root" sequence="4" - groups="hr_holidays.group_hr_holidays_manager,hr_holidays.group_hr_holidays_user"/> + groups="hr_holidays.group_hr_holidays_manager,hr_holidays.group_hr_holidays_user,hr_holidays.group_hr_holidays_team_leader"/> diff --git a/addons/hr_holidays/views/hr_views.xml b/addons/hr_holidays/views/hr_views.xml index 967ef412788..5fa3559e97c 100644 --- a/addons/hr_holidays/views/hr_views.xml +++ b/addons/hr_holidays/views/hr_views.xml @@ -137,11 +137,12 @@ - +