From c6a3e034dd1167f3b3f7d374f9798111ab796b1d Mon Sep 17 00:00:00 2001 From: tbe-odoo Date: Tue, 13 Feb 2018 17:43:08 +0100 Subject: [PATCH] [FIX] hr_holidays: Remove related on employee's manager - In SaaS-16 we have added a related on the employee's manager as the manager of the leave. This cause access rights issues when changing the employee's manager. We do not want to rewrite all the old records, only the new ones should use the new manager. --- addons/hr_holidays/models/hr.py | 7 +++++++ addons/hr_holidays/models/hr_holidays.py | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/addons/hr_holidays/models/hr.py b/addons/hr_holidays/models/hr.py index eb69a0437b1..7767b648aa8 100644 --- a/addons/hr_holidays/models/hr.py +++ b/addons/hr_holidays/models/hr.py @@ -215,3 +215,10 @@ class Employee(models.Model): ('type', '=', 'remove') ]) return [('id', 'in', holidays.mapped('employee_id').ids)] + + def write(self, values): + res = super(Employee, self).write(values) + if 'parent_id' in values: + holidays = self.env['hr.holidays'].search([('state', 'in', ['draft', 'confirm']), ('employee_id', 'in', self.ids)]) + holidays.write({'manager_id': values['parent_id']}) + return res diff --git a/addons/hr_holidays/models/hr_holidays.py b/addons/hr_holidays/models/hr_holidays.py index 2ad8de7130e..5706317a019 100644 --- a/addons/hr_holidays/models/hr_holidays.py +++ b/addons/hr_holidays/models/hr_holidays.py @@ -180,7 +180,7 @@ class Holidays(models.Model): states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}) employee_id = fields.Many2one('hr.employee', string='Employee', index=True, readonly=True, states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}, default=_default_employee, track_visibility='onchange') - manager_id = fields.Many2one('hr.employee', related='employee_id.parent_id', string='Manager', readonly=True, store=True) + manager_id = fields.Many2one('hr.employee', string='Manager', readonly=True) notes = fields.Text('Reasons', readonly=True, states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}) number_of_days_temp = fields.Float( 'Allocation', copy=False, readonly=True, @@ -213,6 +213,10 @@ class Holidays(models.Model): double_validation = fields.Boolean('Apply Double Validation', related='holiday_status_id.double_validation') can_reset = fields.Boolean('Can reset', compute='_compute_can_reset') + @api.onchange('employee_id') + def _onchange_employee_id(self): + self.manager_id = self.employee_id and self.employee_id.parent_id + @api.multi @api.depends('number_of_days_temp', 'type') def _compute_number_of_days(self): @@ -358,6 +362,8 @@ class Holidays(models.Model): values.update({'department_id': self.env['hr.employee'].browse(employee_id).department_id.id}) holiday = super(Holidays, self.with_context(mail_create_nolog=True, mail_create_nosubscribe=True)).create(values) holiday.add_follower(employee_id) + if 'employee_id' in values: + holiday._onchange_employee_id() return holiday @api.multi @@ -367,6 +373,8 @@ class Holidays(models.Model): raise AccessError(_('You cannot set a leave request as \'%s\'. Contact a human resource manager.') % values.get('state')) result = super(Holidays, self).write(values) self.add_follower(employee_id) + if 'employee_id' in values: + self._onchange_employee_id() return result @api.multi