字段
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user