From f4e619a3fabfda3fa81b8a0e556c7bdb73807eb1 Mon Sep 17 00:00:00 2001 From: zhou <123@> Date: Wed, 11 Jun 2025 22:49:34 +0800 Subject: [PATCH] =?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 --- .../wizard/soong_workflow_comment_wizard.py | 132 +++++++++++++----- yuthon_notice/views/yuthon_notice_views.xml | 3 + 2 files changed, 101 insertions(+), 34 deletions(-) diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py index 3a1de9878..0544ce297 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard.py +++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py @@ -203,56 +203,120 @@ class SoongWorkflowCommentWizard(models.TransientModel): self.ensure_one() cx = self.env.context.copy() or {} record_id = self.env[self.res_model].search([('id', '=', self.res_id)]) - for employee in self.employee_ids: - action_id = self.env['ir.actions.act_window'].search([('res_model', '=', self.res_model)])[0] - url = f'https://oa.thtzjt.com/web?login={employee.user_id.login}&oauth_uid={employee.wecom_userid}#id={record_id.id}&cids=2&action={action_id.id}&model={record_id._name}&view_type=form' - self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', - user_id=employee.wecom_userid, - title=record_id._description, - description="标题: {}\n".format( - record_id.name) + self.env.user.name + ' ' + str( - fields.Datetime.now() + timedelta(hours=8)), - url=url, btntxt="查看详情") if self.node_btn_name == '转交': self_node_id = record_id.workflow_id.node_ids.search( [('name', '=', record_id.state), ('workflow_id', '=', record_id.workflow_id.id)]) - now_record_obj = self.sudo().env["soong.workflow.log"].search( - [("model", "=", self.res_model), ("res_id", "=", self.res_id), ("node_id", "=", self.node_btn_id.node_id.id)]) - first_node = self.sudo().env["soong.workflow.log"].search([("model", "=", self.res_model), ("res_id", "=", self.res_id)]) - if not now_record_obj: + # 查找当前节点的登录人审批记录 + current_node_log = self.sudo().env["soong.workflow.log"].search( + [("model", "=", self.res_model), + ("res_id", "=", self.res_id), + ("node_id", "=", self.node_btn_id.node_id.id), + ("done_by", "=", self.env.user.id)] + ) + # 创建或更新当前用户的审批记录 + if not current_node_log: self.sudo().env["soong.workflow.log"].create({ "code": self.code, "model": self.res_model, "res_id": self.res_id, - "node_id": self.node_btn_id.node_id.id if first_node else record_id.workflow_id.node_ids[0].id, + "node_id": self.node_btn_id.node_id.id, "workflow_id": self.node_btn_id.workflow_id.id, "done_by": self.env.user.id, "node_btn_name": "0", "node_btn_id": self.node_btn_id.id, "lase_click_date": fields.Datetime.now(), - "approval_state": "2", + "approval_state": "2", # 已完成 "document_ids": self.document_ids, "comment": self.comment, }) else: - now_record_obj.write({"comment": self.comment, - "approval_state": "2", - "lase_click_date": fields.Datetime.now()}) - next_node_id = record_id.workflow_id.node_ids.search([('name', 'ilike', self.trans_link_id.name), - ('workflow_id', '=', record_id.workflow_id.id)]) - self.sudo().env["soong.workflow.log"].create({ - "code": self.code, - "model": self.res_model, - "res_id": self.res_id, - "node_id": next_node_id.id, - "workflow_id": self.node_btn_id.workflow_id.id, - "done_by": self.employee_ids.user_id.id, - "node_btn_name": "0", - }) - workflow_record_id = self.env['soong.workflow.record'].search([('code', '=', record_id.code)]) - workflow_record_id.users_ids = [(4, self.employee_ids.user_id.id)] - workflow_record_id.employee_ids = self.employee_ids - record_id.write({'state': self.trans_link_id.name}) + current_node_log.write({ + "comment": self.comment, + "approval_state": "2", # 已完成 + "lase_click_date": fields.Datetime.now() + }) + + # 检查是否为并审模式 + if self.approval_concatenation == 'bing': # 并审模式 + # 获取当前节点应该审批的所有员工 + expected_employees = self.employee_ids + + # 查找下一个节点 + next_node_id = record_id.workflow_id.node_ids.search([ + ('name', 'ilike', self.trans_link_id.name), + ('workflow_id', '=', record_id.workflow_id.id) + ]) + + completed_logs = self.sudo().env["soong.workflow.log"].search([ + ("model", "=", self.res_model), + ("res_id", "=", self.res_id), + ("node_id", "=", self.node_btn_id.node_id.id), + ("node_btn_name", "=", "4"), + ("approval_state", "!=", "2") + ]) + all_completed = len(completed_logs) == 0 + if all_completed or record_id.state=='申请人' or record_id.state=='拟办': + for employee in expected_employees: + # 检查该员工在下一节点是否已有记录 + next_node_employee_log = self.sudo().env["soong.workflow.log"].search([ + ("model", "=", self.res_model), + ("res_id", "=", self.res_id), + ("node_id", "=", next_node_id.id), + ("done_by", "=", employee.user_id.id) + ]) + + if not next_node_employee_log: + # 创建初步记录,状态为"待审批" + self.sudo().env["soong.workflow.log"].create({ + "code": self.code, + "model": self.res_model, + "res_id": self.res_id, + "node_id": next_node_id.id, + "workflow_id": self.node_btn_id.workflow_id.id, + "done_by": employee.user_id.id, + "node_btn_name": "4", + "approval_state": "0", # 待审批 + }) + workflow_record_id = self.env['soong.workflow.record'].search([('code', '=', record_id.code)]) + if self.employee_ids: + workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.employee_ids if employee.user_id] + workflow_record_id.employee_ids = self.employee_ids + record_id.write({'state': self.trans_link_id.name}) + + for employee in self.employee_ids: + action_id = self.env['ir.actions.act_window'].search([('res_model', '=', self.res_model)])[0] + url = f'https://oa.thtzjt.com/web?login={employee.user_id.login}&oauth_uid={employee.wecom_userid}#id={record_id.id}&cids=2&action={action_id.id}&model={record_id._name}&view_type=form' + self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', + user_id=employee.wecom_userid, + title=record_id._description, + description="标题: {}\n".format( + record_id.name) + self.env.user.name + ' ' + str( + fields.Datetime.now() + timedelta( + hours=8)), + url=url, btntxt="查看详情") + else: # 串审模式 (沿用原有逻辑) + # 查找下一个节点 + next_node_id = record_id.workflow_id.node_ids.search([ + ('name', 'ilike', self.trans_link_id.name), + ('workflow_id', '=', record_id.workflow_id.id) + ]) + + # 创建下一节点的审批记录 + self.sudo().env["soong.workflow.log"].create({ + "code": self.code, + "model": self.res_model, + "res_id": self.res_id, + "node_id": next_node_id.id, + "workflow_id": self.node_btn_id.workflow_id.id, + "done_by": self.employee_ids.user_id.id if self.employee_ids else self.env.user.id, + "node_btn_name": "0", + "lase_click_date": fields.Datetime.now(), + "approval_state": "1", # 待审批 + }) + + # 更新业务记录状态 + record_id.write({'state': self.trans_link_id.name}) + # 抄送传阅日志 if self_node_id.is_carbon_copy: for employee in self_node_id.employee_ids: diff --git a/yuthon_notice/views/yuthon_notice_views.xml b/yuthon_notice/views/yuthon_notice_views.xml index 294984f01..f71012775 100644 --- a/yuthon_notice/views/yuthon_notice_views.xml +++ b/yuthon_notice/views/yuthon_notice_views.xml @@ -152,6 +152,9 @@ + + +