From ada90cfb8887baafa783388fea840cf8b31a16c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= <9664676+pengyuthon@user.noreply.gitee.com> Date: Wed, 18 Mar 2026 19:34:22 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/soong_workflow_record.py | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/soong_workflow/models/soong_workflow_record.py b/soong_workflow/models/soong_workflow_record.py index 7e01ce71f..3fd0357ac 100644 --- a/soong_workflow/models/soong_workflow_record.py +++ b/soong_workflow/models/soong_workflow_record.py @@ -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') @@ -652,6 +712,7 @@ class SoongWorkflowRecord(models.Model): elif log2.approval_state in ['0', '1']: record.write({'soong_state': 'to_do'}) record._compute_is_done() + record._compute_is_to_do() return super(SoongWorkflowRecord, self).get_view(view_id, view_type, **options) def to_do_process_reminders(self): From 02693d63df2c8b4186c58b2c108fca7f18d0c566 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= <9664676+pengyuthon@user.noreply.gitee.com> Date: Wed, 18 Mar 2026 19:34:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- soong_workflow/models/soong_workflow_record.py | 1 - 1 file changed, 1 deletion(-) diff --git a/soong_workflow/models/soong_workflow_record.py b/soong_workflow/models/soong_workflow_record.py index 3fd0357ac..2a4ed2f6e 100644 --- a/soong_workflow/models/soong_workflow_record.py +++ b/soong_workflow/models/soong_workflow_record.py @@ -712,7 +712,6 @@ class SoongWorkflowRecord(models.Model): elif log2.approval_state in ['0', '1']: record.write({'soong_state': 'to_do'}) record._compute_is_done() - record._compute_is_to_do() return super(SoongWorkflowRecord, self).get_view(view_id, view_type, **options) def to_do_process_reminders(self):