This commit is contained in:
李鹏宇
2026-03-24 11:35:25 +08:00
4 changed files with 98 additions and 129 deletions
+2 -15
View File
@@ -173,17 +173,9 @@ class SoongWorkflowRecord(models.Model):
'employee2_ids')
def _compute_is_to_do(self):
current_uid = self.env.user.id
# 关键修改:不再查users_ids,改为查当前用户对应的hr.employee记录
current_employee = self.env['hr.employee'].search([('user_id', '=', current_uid)], limit=1)
if not current_employee:
# 若当前用户无对应员工记录,所有记录均为非待办
for rec in self:
rec.is_to_do = False
return
# 初始化所有记录为非待办(上下文流畅,保留原有初始化逻辑)
self.is_to_do = False
valid_records = self.filtered(
lambda r: (current_employee.id in r.employee_ids.ids or current_employee.id in r.employee2_ids.ids)
lambda r: (current_uid in r.users_ids.ids)
and not r.reclaim_state
)
if not valid_records:
@@ -228,13 +220,8 @@ class SoongWorkflowRecord(models.Model):
def _search_is_to_do(self, operator, value):
current_uid = self.env.user.id
current_employee = self.env['hr.employee'].search([('user_id', '=', current_uid)], limit=1)
if not current_employee:
return [('id', '=', False)]
base_domain = [
'|',
('employee_ids', 'in', [current_employee.id]),
('employee2_ids', 'in', [current_employee.id]),
('users_ids', 'in', current_uid),
('reclaim_state', '=', False)
]
candidate_records = self.search(base_domain)
@@ -46,7 +46,6 @@ class ResGroups(models.Model):
if not department:
return valid_user_ids
# 安全获取部门ID(自动兼容 int / record)
dept_id = department.id if isinstance(department, models.Model) else int(department)
# 当前部门员工
@@ -63,9 +62,7 @@ class ResGroups(models.Model):
for department in self.department_ids:
all_user_ids.update(get_department_employees(department))
# 3. 添加选中角色对应的用户(已修复 origin)
for user_role in self.user_role_ids:
# 安全获取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([
'|',
@@ -74,7 +71,6 @@ class ResGroups(models.Model):
])
all_user_ids.update([emp.user_id.id for emp in user_employees if emp.user_id])
# 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
+25 -25
View File
@@ -679,16 +679,16 @@ class YuthonHrEmployee(models.Model):
pass
return recs
def write(self, values):
for record in self:
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 write(self, values):
# for record in self:
# 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
@@ -708,21 +708,21 @@ class YuthonHrEmployee(models.Model):
"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]
})
# 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.onchange('number')
def onchange_number(self):
+71 -85
View File
@@ -273,103 +273,89 @@ class IssueMeetingLine(models.Model):
@api.constrains('decision_results', 'meeting_booking_id', 'issue_library_id')
def _check_decision_results(self):
if not self.meeting_booking_id.meeting_type_id:
return
for record in self:
if not record.meeting_booking_id.meeting_type_id:
continue
meeting_type_name = str(self.meeting_booking_id.meeting_type_id.name).strip()
suffix_list = ['(通过)', '(未通过)']
self.meeting_booking_id._check_name()
if self.decision_results == 'agree':
is_agree = 'pass'
agree_name = '(通过)'
is_push = True
else:
is_agree = 'reject'
agree_name = '(未通过)'
is_push = False
meeting_type_name = str(record.meeting_booking_id.meeting_type_id.name).strip()
suffix_list = ['(通过)', '(未通过)']
record.meeting_booking_id._check_name()
# 2. 党委会相关:先清理旧后缀,再拼接新后缀
if '党' in meeting_type_name:
if self.issue_library_id.is_class:
self.issue_library_id.is_push_class = is_push
elif self.issue_library_id.is_boss:
self.issue_library_id.is_push_boss = is_push
self.issue_library_id.is_party_passed = is_agree
original_party_char = self.issue_library_id.party_char or ""
# 清理原有后缀(避免重复拼接)
clean_party_char = original_party_char
for suffix in suffix_list:
clean_party_char = clean_party_char.removesuffix(suffix)
self.issue_library_id.party_char = clean_party_char + agree_name
if is_push:
self.issue_library_id.issue_state_party = 'on_meet'
# 统一处理通过/不通过标识
if record.decision_results == 'agree':
is_agree = 'pass'
agree_name = '(通过)'
is_push = True
else:
self.issue_library_id.issue_state_party = 'will'
is_agree = 'reject'
agree_name = '(未通过)'
is_push = False
# 3. 班子会相关:先清理旧后缀,再拼接新后缀
if '班子' in meeting_type_name:
if self.issue_library_id.is_boss:
self.issue_library_id.is_push_boss = is_push
self.issue_library_id.is_class_passed = is_agree
original_class_char = self.issue_library_id.class_char or ""
# 清理原有后缀
clean_class_char = original_class_char
for suffix in suffix_list:
clean_class_char = clean_class_char.removesuffix(suffix)
# 拼接新后缀
self.issue_library_id.class_char = clean_class_char + agree_name
if is_push:
self.issue_library_id.issue_state_class = 'on_meet'
else:
self.issue_library_id.issue_state_class = 'will'
# 2. 党委会相关
if '党' in meeting_type_name:
if record.issue_library_id.is_class:
record.issue_library_id.is_push_class = is_push
elif record.issue_library_id.is_boss:
record.issue_library_id.is_push_boss = is_push
# 4. 董事会相关:先清理旧后缀,再拼接新后缀
if '董事' in meeting_type_name:
self.issue_library_id.is_push_boss = is_push
self.issue_library_id.is_boss_passed = is_agree
original_boss_char = self.issue_library_id.boss_char or ""
# 清理原有后缀
clean_boss_char = original_boss_char
for suffix in suffix_list:
clean_boss_char = clean_boss_char.removesuffix(suffix)
# 拼接新后缀
self.issue_library_id.boss_char = clean_boss_char + agree_name
if is_push:
self.issue_library_id.issue_state_boss = 'on_meet'
else:
self.issue_library_id.issue_state_boss = 'will'
if '套' in meeting_type_name:
if (self.issue_library_id.is_party and
(self.issue_library_id.is_party_passed == 'reject' or not self.issue_library_id.is_party_passed)):
if self.issue_library_id.is_class:
self.issue_library_id.is_push_class = is_push
self.issue_library_id.is_party_passed = is_agree
original_party_char = self.issue_library_id.party_char or ""
record.issue_library_id.is_party_passed = is_agree
original_party_char = record.issue_library_id.party_char or ""
clean_party_char = original_party_char
for suffix in suffix_list:
clean_party_char = clean_party_char.removesuffix(suffix)
self.issue_library_id.party_char = clean_party_char + agree_name
if is_push:
self.issue_library_id.issue_state_party = 'on_meet'
else:
self.issue_library_id.issue_state_party = 'will'
record.issue_library_id.party_char = clean_party_char + agree_name
record.issue_library_id.issue_state_party = 'on_meet' if is_push else 'will'
elif (self.issue_library_id.is_class and
(self.issue_library_id.is_class_passed == 'reject' or not self.issue_library_id.is_class_passed)):
# 复用班子会的修改逻辑
self.issue_library_id.is_class_passed = is_agree
original_class_char = self.issue_library_id.class_char or ""
# 3. 班子会相关
if '班子' in meeting_type_name:
if record.issue_library_id.is_boss:
record.issue_library_id.is_push_boss = is_push
record.issue_library_id.is_class_passed = is_agree
original_class_char = record.issue_library_id.class_char or ""
clean_class_char = original_class_char
for suffix in suffix_list:
clean_class_char = clean_class_char.removesuffix(suffix)
self.issue_library_id.class_char = clean_class_char + agree_name
if is_push:
self.issue_library_id.issue_state_class = 'on_meet'
else:
self.issue_library_id.issue_state_class = 'will'
record.issue_library_id.class_char = clean_class_char + agree_name
record.issue_library_id.issue_state_class = 'on_meet' if is_push else 'will'
# 4. 董事会相关
if '董事' in meeting_type_name:
record.issue_library_id.is_push_boss = is_push
record.issue_library_id.is_boss_passed = is_agree
original_boss_char = record.issue_library_id.boss_char or ""
clean_boss_char = original_boss_char
for suffix in suffix_list:
clean_boss_char = clean_boss_char.removesuffix(suffix)
record.issue_library_id.boss_char = clean_boss_char + agree_name
record.issue_library_id.issue_state_boss = 'on_meet' if is_push else 'will'
# 套开相关
if '套' in meeting_type_name:
if (record.issue_library_id.is_party and
(
record.issue_library_id.is_party_passed == 'reject' or not record.issue_library_id.is_party_passed)):
if record.issue_library_id.is_class:
record.issue_library_id.is_push_class = is_push
record.issue_library_id.is_party_passed = is_agree
original_party_char = record.issue_library_id.party_char or ""
clean_party_char = original_party_char
for suffix in suffix_list:
clean_party_char = clean_party_char.removesuffix(suffix)
record.issue_library_id.party_char = clean_party_char + agree_name
record.issue_library_id.issue_state_party = 'on_meet' if is_push else 'will'
elif (record.issue_library_id.is_class and
(
record.issue_library_id.is_class_passed == 'reject' or not record.issue_library_id.is_class_passed)):
# 班子会逻辑
record.issue_library_id.is_class_passed = is_agree
original_class_char = record.issue_library_id.class_char or ""
clean_class_char = original_class_char
for suffix in suffix_list:
clean_class_char = clean_class_char.removesuffix(suffix)
record.issue_library_id.class_char = clean_class_char + agree_name
record.issue_library_id.issue_state_class = 'on_meet' if is_push else 'will'
def unlink(self):
delete_lines = self.filtered(lambda l: l.issue_library_id and l.meeting_booking_id)