diff --git a/yuthon_hr_employee/models/yuthon_hr_employee.py b/yuthon_hr_employee/models/yuthon_hr_employee.py index c2ee90936..0abf50e19 100644 --- a/yuthon_hr_employee/models/yuthon_hr_employee.py +++ b/yuthon_hr_employee/models/yuthon_hr_employee.py @@ -122,15 +122,64 @@ class YuthonHrEmployee(models.Model): pinyin_name = fields.Char(string="拼音名称", compute='_compute_pinyin', index=True, store=True) pinyin_min = fields.Char(string='拼音缩写', compute='_compute_pinyin', index=True, store=True) - @api.onchange('department_id') - def onchange_department_id(self): - for record in self: - record.department_id.do_department_to_res_groups() - @api.onchange('user_role_id') - def onchange_user_role_id(self): + @api.model_create_multi + def create(self, vals_list): + recs = super().create(vals_list) + for record in recs: + try: + if record.department_id: + record.department_id.do_department_to_res_groups() + if record.user_role_id: + record.user_role_id.do_role_to_res_groups() + except Exception as e: + pass + return recs + + def write(self, values): for record in self: - record.user_role_id.do_role_to_res_groups() + try: + if "department_id" in values: + record.do_group_department_id(values.get("department_id")) + if "user_role_id" in values: + record.do_group_user_role_id(values.get("user_role_id")) + except Exception as e: + pass + return super().write(values) + + def do_group_department_id(self, department_id): + user_ids = self.user_id.ids + # 移除原来的数据 + old_res_groups_objs = self.sudo().env["res.groups"].search([("department_ids", "in", self.department_id.ids)]) + if old_res_groups_objs: + for res_groups_obj in old_res_groups_objs: + res_groups_obj.sudo().write({ + "users": [(3, id) for id in user_ids] + }) + # 增加新的元素 + department_obj = self.sudo().env["hr.department"].search([("id", "=", department_id)], limit=1) + res_groups_objs = self.sudo().env["res.groups"].search([("department_ids", "in", department_obj.ids)]) + if res_groups_objs: + for res_groups_obj in res_groups_objs: + res_groups_obj.sudo().write({ + "users": [(4, id) for id in user_ids] + }) + + def do_group_user_role_id(self, user_role_id): + # 移除原来的数据 + user_ids = self.user_id.ids + old_res_groups_objs = self.sudo().env["res.groups"].search([("user_role_ids", "in", self.user_role_id.ids)]) + if old_res_groups_objs: + for res_groups_obj in old_res_groups_objs: + res_groups_obj.sudo().write({"users": [(3, id) for id in user_ids]}) + # 增加新的元素 + role_obj = self.sudo().env["soong.user.role"].search([("id", "=", user_role_id)], limit=1) + res_groups_objs = self.sudo().env["res.groups"].search([("user_role_ids", "in", role_obj.ids)]) + if res_groups_objs: + for res_groups_obj in res_groups_objs: + res_groups_obj.sudo().write({ + "users": [(4, id) for id in user_ids] + }) @api.depends('department_id') def compute_company(self):