!9894 添加功能

Merge pull request !9894 from 李鹏宇/dev_zhou
This commit is contained in:
李鹏宇
2026-03-18 11:35:06 +00:00
committed by Gitee
@@ -75,6 +75,7 @@ class SoongWorkflowRecord(models.Model):
is_unlink = fields.Boolean(string="是否可删", compute='_compute_is_unlink')
is_to_do = fields.Boolean(
string="是否是待办流程",
compute='_compute_is_to_do',
search='_search_is_to_do',
)
@@ -168,6 +169,64 @@ class SoongWorkflowRecord(models.Model):
_logger.warning(f"Failed to get urgency_level from {record.res_model}: {e}")
record.urgency_level = 'normal'
@api.depends('employee_ids', 'res_model', 'res_id', 'soong_state', 'reclaim_state', 'approve_state')
def _compute_is_to_do(self):
"""计算待办状态:
1. approve_state为start 且 employee_ids包含当前用户关联员工 → 待办
2. 原有逻辑:log_ids/log_ids2满足条件 → 待办
"""
current_uid = self.env.user.id
current_employees = self.env['hr.employee'].search([('user_id', '=', current_uid)])
active_employee_ids = current_employees.ids if current_employees else []
if not active_employee_ids:
for record in self:
record.is_to_do = False
return
all_employees = self.env['hr.employee'].search([('user_state', '=', 'in')])
emp_to_user = {emp.id: emp.user_id.id for emp in all_employees if emp.user_id}
for record in self.filtered(lambda r: not r.reclaim_state):
record.is_to_do = False
all_record_emp_ids = record.employee_ids.ids + record.employee2_ids.ids
if record.approve_state == 'start' and set(active_employee_ids) & set(all_record_emp_ids) and not record.reclaim_state:
record.is_to_do = True
continue
# 原有逻辑:仅当新增条件不满足时,才执行原有log_ids/log_ids2判断
record_emp_ids = [emp.id for emp in record.employee_ids if emp.id in active_employee_ids]
if not record_emp_ids:
continue
record_user_ids = [emp_to_user[emp_id] for emp_id in record_emp_ids if emp_id in emp_to_user]
if not record_user_ids:
continue
target_record = None
if record.res_model and record.res_id:
try:
target_record = self.env[record.res_model].browse(record.res_id).exists()
except (exceptions.MissingError, exceptions.AccessError):
continue
if not target_record:
continue
is_todo = False
# 检查log_ids
target_logs = target_record.log_ids.filtered(
lambda l: l.done_by.id in record_user_ids and l.approval_state in ['0', '1']
)
if target_logs:
is_todo = True
# 检查log_ids2
if not is_todo:
target_log2 = target_record.log_ids2.filtered(
lambda l: l.done_by.id in record_user_ids and l.approval_state in ['0', '1']
)
if target_log2:
is_todo = True
# 设置最终待办状态
record.is_to_do = is_todo
def _search_is_to_do(self, operator, value):
"""搜索待办状态:仅打印总耗时"""
@@ -266,6 +325,7 @@ class SoongWorkflowRecord(models.Model):
domain = [('id', 'not in', invalid_ids)]
else:
domain = [('id', '=', False)]
return domain
@api.depends('employee_ids', 'soong_state', 'reclaim_state')