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 @@