Skip to content

Commit 223acaa

Browse files
author
Kevin Baptiste
committed
[FIX] hr_holidays: validation of multi-employee leaves for officer
An employee with time officer access right would receive the error "You must be False's manager to approve this leave" even if they were manager of all the employees. Now the error message will list all the employee's the user is not manager of, and it will properly check that the user is manager of all of them. task-3220920 closes odoo#114573 X-original-commit: 76f7620 Signed-off-by: Kevin Baptiste <kba@odoo.com>
1 parent 0c51e9e commit 223acaa

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

addons/hr_holidays/models/hr_leave.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def _default_get_request_parameters(self, values):
162162
employee_id = fields.Many2one(
163163
'hr.employee', compute='_compute_from_employee_ids', store=True, string='Employee', index=True, readonly=False, ondelete="restrict",
164164
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]},
165-
tracking=True)
165+
tracking=True, compute_sudo=False)
166166
employee_company_id = fields.Many2one(related='employee_id.company_id', readonly=True, store=True)
167167
active_employee = fields.Boolean(related='employee_id.active', string='Employee Active', readonly=True)
168168
tz_mismatch = fields.Boolean(compute='_compute_tz_mismatch')
@@ -206,7 +206,7 @@ def _default_get_request_parameters(self, values):
206206
'hr.employee', compute='_compute_from_holiday_type', store=True, string='Employees', readonly=False,
207207
states={'cancel': [('readonly', True)], 'refuse': [('readonly', True)], 'validate1': [('readonly', True)], 'validate': [('readonly', True)]})
208208
multi_employee = fields.Boolean(
209-
compute='_compute_from_employee_ids', store=True,
209+
compute='_compute_from_employee_ids', store=True, compute_sudo=False,
210210
help='Holds whether this allocation concerns more than 1 employee')
211211
category_id = fields.Many2one(
212212
'hr.employee.category', compute='_compute_from_holiday_type', store=True, string='Employee Tag',
@@ -1431,8 +1431,12 @@ def _check_approval_update(self, state):
14311431
if not is_officer and self.env.user != holiday.employee_id.leave_manager_id:
14321432
raise UserError(_('You must be either %s\'s manager or Time off Manager to approve this leave') % (holiday.employee_id.name))
14331433

1434-
if (state == 'validate' and val_type == 'manager') and self.env.user != holiday.employee_id.leave_manager_id:
1435-
raise UserError(_('You must be %s\'s Manager to approve this leave', holiday.employee_id.name))
1434+
if (state == 'validate' and val_type == 'manager') and self.env.user != (holiday.employee_id | holiday.employee_ids).leave_manager_id:
1435+
if holiday.employee_id:
1436+
employees = holiday.employee_id
1437+
else:
1438+
employees = ', '.join(holiday.employee_ids.filtered(lambda e: e.leave_manager_id != self.env.user).mapped('name'))
1439+
raise UserError(_('You must be %s\'s Manager to approve this leave', employees))
14361440

14371441
if not is_officer and (state == 'validate' and val_type == 'hr') and holiday.holiday_type == 'employee':
14381442
raise UserError(_('You must either be a Time off Officer or Time off Manager to approve this leave'))

0 commit comments

Comments
 (0)