This commit is contained in:
李鹏宇
2026-04-13 11:57:06 +08:00
parent fabf6aefbe
commit 9b3543b7d1
2 changed files with 69 additions and 0 deletions
@@ -375,6 +375,46 @@ class YuthonHrEmployee(models.Model):
])
groups_by_role_group.write({'users': [(4, employee.user_id.id)]})
def write(self, vals):
"""覆盖 write,user_role_id / user_role_ids 变更时反向同步到角色的 personnel_ids"""
role_fields = {'user_role_id', 'user_role_ids'}
if not role_fields.intersection(vals.keys()):
return super().write(vals)
# 记录变更前的角色状态
old_role_id_map = {emp.id: emp.user_role_id.id for emp in self} # 主角色 id
old_role_ids_map = {emp.id: set(emp.user_role_ids.ids) for emp in self} # 辅助角色 ids
result = super().write(vals)
for emp in self:
# --- 主角色反向同步 ---
if 'user_role_id' in vals:
old_rid = old_role_id_map.get(emp.id)
new_rid = emp.user_role_id.id if emp.user_role_id else False
# 从旧主角色 personnel_ids 移除
if old_rid and old_rid != new_rid:
old_role = self.env['soong.user.role'].browse(old_rid)
if emp.id in old_role.personnel_ids.ids:
old_role.write({'personnel_ids': [(3, emp.id)]})
# 加入新主角色 personnel_ids
if new_rid and new_rid != old_rid:
new_role = self.env['soong.user.role'].browse(new_rid)
if emp.id not in new_role.personnel_ids.ids:
new_role.write({'personnel_ids': [(4, emp.id)]})
# --- 辅助角色反向同步 ---
if 'user_role_ids' in vals:
old_rids = old_role_ids_map.get(emp.id, set())
new_rids = set(emp.user_role_ids.ids)
added = new_rids - old_rids
removed = old_rids - new_rids
for rid in added:
role = self.env['soong.user.role'].browse(rid)
if emp.id not in role.personnel_ids.ids:
role.write({'personnel_ids': [(4, emp.id)]})
for rid in removed:
role = self.env['soong.user.role'].browse(rid)
if emp.id in role.personnel_ids.ids:
role.write({'personnel_ids': [(3, emp.id)]})
return result
def update_trade_union(self):
records = self.env['hr.employee'].search([('is_membership', '=', True)])
for record in records: