[FW][FIX] hr_holidays/hr_recruitment: Write correclty on groups

Purpose
=======

This is the optimal way to add a user on a group, to avoid calling the
contraint method _check_one_user_type on all the users from the group

closes odoo/odoo#87998

Related: odoo/enterprise#25908
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
This commit is contained in:
Yannick Tivisse
2022-04-07 13:23:41 +02:00
parent ee5687a04e
commit 8e682dd591
2 changed files with 9 additions and 11 deletions
+4 -3
View File
@@ -209,10 +209,11 @@ class HrEmployeeBase(models.AbstractModel):
if 'leave_manager_id' in values:
old_managers = self.mapped('leave_manager_id')
if values['leave_manager_id']:
old_managers -= self.env['res.users'].browse(values['leave_manager_id'])
leave_manager = self.env['res.users'].browse(values['leave_manager_id'])
old_managers -= leave_manager
approver_group = self.env.ref('hr_holidays.group_hr_holidays_responsible', raise_if_not_found=False)
if approver_group:
approver_group.sudo().write({'users': [(4, values['leave_manager_id'])]})
if approver_group and not leave_manager.has_group('hr_holidays.group_hr_holidays_responsible'):
leave_manager.sudo().write({'groups_id': [(4, approver_group.id)]})
res = super(HrEmployeeBase, self).write(values)
# remove users from the Responsible group if they are no longer leave managers
+5 -8
View File
@@ -12,10 +12,9 @@ class ResUsers(models.Model):
interviewer_group = self.env.ref('hr_recruitment.group_hr_recruitment_interviewer')
recruitment_group = self.env.ref('hr_recruitment.group_hr_recruitment_user')
interviewer_group.sudo().write({
'users': [
(4, user.id) for user in self - recruitment_group.users
]
interviewers = self - recruitment_group.users
interviewers.sudo().write({
'groups_id': [(4, interviewer_group.id)]
})
def _remove_recruitment_interviewers(self):
@@ -32,8 +31,6 @@ class ResUsers(models.Model):
# Remove users that are no longer interviewers on at least a job or an application
users_to_remove = set(self.ids) - (user_ids | set(recruitment_group.users.ids))
interviewer_group.sudo().write({
'users': [
(3, user_id) for user_id in users_to_remove
]
self.env['res.users'].browse(users_to_remove).sudo().write({
'groups_id': [(3, interviewer_group.id)]
})