!10114 添加功能

Merge pull request !10114 from 李鹏宇/dev_zhou
This commit is contained in:
李鹏宇
2026-03-24 02:34:56 +00:00
committed by Gitee
+40 -38
View File
@@ -34,55 +34,57 @@ class ResGroups(models.Model):
def _onchange_update_users(self):
"""动态更新 users 字段,基于员工、部门和角色的选择"""
all_user_ids = set()
# 1. 添加选中员工对应的用户
for employee in self.employee_ids:
if employee.user_id:
all_user_ids.add(employee.user_id.id)
# 2. 添加选中部门及其子部门的所有员工对应的用户
def get_department_employees(department_id, is_initial_call=False):
"""
递归获取指定部门及其所有子部门的员工对应的用户ID
is_initial_call: 是否为初始调用(控制是否使用id.origin)
"""
def get_department_employees(department):
valid_user_ids = set()
# 处理不同类型的department_id输入
if isinstance(department_id, int):
dept_id = department_id
elif hasattr(department_id, 'id'):
if is_initial_call and hasattr(department_id.id, 'origin'):
dept_id = department_id.id.origin
else:
dept_id = department_id.id
else:
if not department:
return valid_user_ids
# 查询当前部门的员工
employee_ids = self.env['hr.employee'].search([('department_id', '=', dept_id)])
valid_user_ids.update([user.user_id.id for user in employee_ids if user.user_id])
# 查询子部门并递归处理
child_ids = self.env['hr.department'].search([('parent_id', '=', dept_id)])
for child in child_ids:
valid_user_ids.update(get_department_employees(child, is_initial_call=False))
# 安全获取部门ID(自动兼容 int / record)
dept_id = department.id if isinstance(department, models.Model) else int(department)
# 当前部门员工
employees = self.env['hr.employee'].search([('department_id', '=', dept_id)])
valid_user_ids.update([emp.user_id.id for emp in employees if emp.user_id])
# 递归子部门
child_depts = self.env['hr.department'].search([('parent_id', '=', dept_id)])
for child in child_depts:
valid_user_ids.update(get_department_employees(child))
return valid_user_ids
for department_id in self.department_ids:
all_user_ids.update(get_department_employees(department_id, is_initial_call=True))
for department in self.department_ids:
all_user_ids.update(get_department_employees(department))
# 3. 添加选中角色对应的用户
# 3. 添加选中角色对应的用户(已修复 origin)
for user_role in self.user_role_ids:
user_employee_ids = self.env['hr.employee'].search(
['|', ('user_role_id', '=', user_role.id.origin), ('user_role_ids', 'in', [user_role.id.origin])]
)
all_user_ids.update([user.user_id.id for user in user_employee_ids if user.user_id])
# 4. 添加角色组对应的用户
for record in self:
group_role_ids = record.users_role_group_ids.user_role_ids
for user_role in group_role_ids:
user_employee_ids = self.env['hr.employee'].search(
['|', ('user_role_id', '=', user_role.id.origin), ('user_role_ids', 'in', [user_role.id.origin])]
)
all_user_ids.update([user.user_id.id for user in user_employee_ids if user.user_id])
# 安全获取ID:有 origin 取 origin,没有就取 id
role_id = user_role.id.origin if hasattr(user_role.id, 'origin') else user_role.id
user_employees = self.env['hr.employee'].search([
'|',
('user_role_id', '=', role_id),
('user_role_ids', 'in', [role_id])
])
all_user_ids.update([emp.user_id.id for emp in user_employees if emp.user_id])
# 更新 users 字段(使用 replace 操作)
# 4. 添加角色组对应的用户(已修复 origin)
group_role_ids = self.users_role_group_ids.user_role_ids
for user_role in group_role_ids:
role_id = user_role.id.origin if hasattr(user_role.id, 'origin') else user_role.id
user_employees = self.env['hr.employee'].search([
'|',
('user_role_id', '=', role_id),
('user_role_ids', 'in', [role_id])
])
all_user_ids.update([emp.user_id.id for emp in user_employees if emp.user_id])
# 最终更新用户
self.users = [(6, 0, list(all_user_ids))]