From 0243078496e0a6dfa3b1e6e0ac03aedf1a831bee Mon Sep 17 00:00:00 2001 From: pengyuthon Date: Fri, 6 Feb 2026 12:56:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- soong_workflow/models/soong_workflow_mixin.py | 17 +++++++++++++---- soong_workflow/models/trans_link.py | 3 ++- .../views/soong_workflow_link_views.xml | 2 +- soong_workflow/views/trans_link_views.xml | 1 + .../wizard/soong_workflow_comment_wizard.py | 4 +--- .../soong_workflow_comment_wizard_view.xml | 4 +++- 6 files changed, 21 insertions(+), 10 deletions(-) diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py index 96b4816c9..8f8d6329a 100644 --- a/soong_workflow/models/soong_workflow_mixin.py +++ b/soong_workflow/models/soong_workflow_mixin.py @@ -391,6 +391,7 @@ class SoongWorkflowMixin(models.AbstractModel): def _add_comment(self, logs, btn_rec): trans_link_ids = [] wizard = self.env.ref("soong_workflow.view_soong_workflow_comment_wizard") + workflow_record_id = self.env["soong.workflow.record"].search([("res_model", "=", self._name), ("res_id", "=", self.id)]) # 状态列表 node_list = btn_rec.workflow_id.node_ids.sorted('sequence') if self.name_title != '采购申请单': @@ -405,14 +406,17 @@ class SoongWorkflowMixin(models.AbstractModel): # 当前节点 if btn_rec.name not in ['结束', '归档']: current_node = node_list[state_list.index(state)] - # self.env['trans.link'].search([('record_id', '=', self.id)]).unlink() - self.env['trans.link'].search([]).unlink() + workflow_record_id = self.env["soong.workflow.record"].search( + [("res_model", "=", self._name), ("res_id", "=", self.id)]) + self.env['trans.link'].search([('workflow_record_id', '=', workflow_record_id.id)]).unlink() # 退回节点根据日志进行判断 if btn_rec.name == '退回': approved_logs = self.log_ids.filtered(lambda log: log.approval_state == '2') for ret in approved_logs: if not self.env['trans.link'].search([('name', '=', ret.name)]): self.env['trans.link'].create({ + 'sequence': ret.sequence, + 'workflow_record_id': workflow_record_id.id, 'node_button_id': btn_rec.id, 'name': ret.name, 'link_type': 'return', @@ -538,9 +542,13 @@ class SoongWorkflowMixin(models.AbstractModel): #根据实际路径创建trans.link记录并生成domain actual_path_links = [] + self.env["soong.workflow.record"].search([("res_model", "=", self._name), ("res_id", "=", self.id)]) for node in actual_path_nodes[1:]: + workflow_record_id = self.env["soong.workflow.record"].search([("res_model", "=", self._name), ("res_id", "=", self.id)]) if node.name not in skipped_node_names: link = self.env['trans.link'].create({ + 'sequence': node.sequence, + 'workflow_record_id': workflow_record_id.id, 'node_button_id': btn_rec.id, 'name': node.name, 'link_type': 'trans', @@ -588,15 +596,16 @@ class SoongWorkflowMixin(models.AbstractModel): "default_res_id": self.id, 'default_comment_note_id': comment_note_id, "default_code": self.code, + "default_workflow_record_id": workflow_record_id.id, 'default_illustrate':btn_rec.node_id.illustrate, "default_res_model": self._name, "default_filter_personnel_ids": [(6, 0, all_filter_employees.ids)], "default_node_btn_id": btn_rec.id, "default_is_supervising": is_supervising, - "default_trans_link_id": self.env['trans.link'].search(trans_domain, limit=1).id if btn_rec.name == '转交' else False, + "default_trans_link_id": self.env['trans.link'].search(trans_domain, limit=1).sorted('sequence').id if btn_rec.name == '转交' else False, "all_workflow_links": trans_link_ids, "default_return_link_id": self.env['trans.link'].search( - [('link_type', '=', 'return'), ('record_id', '=', self.id)], limit=1).id if btn_rec.name == '退回' else False, + [('link_type', '=', 'return'), ('record_id', '=', self.id)], limit=1).sorted('sequence').id if btn_rec.name == '退回' else False, }, } diff --git a/soong_workflow/models/trans_link.py b/soong_workflow/models/trans_link.py index 9a477ef35..15391a501 100644 --- a/soong_workflow/models/trans_link.py +++ b/soong_workflow/models/trans_link.py @@ -7,10 +7,11 @@ class TransLink(models.Model): _rec_name = 'name' _order = 'sequence' + sequence = fields.Integer(string="转交顺序") + workflow_record_id = fields.Many2one('soong.workflow.record', string='关联流程') node_button_id = fields.Many2one('soong.workflow.node.button', string="按钮") name = fields.Char(string="节点名称") link_type = fields.Selection([('trans', '转交'), ('return', '退回')], string="节点类型") - sequence = fields.Integer(string="转交顺序") record_id = fields.Integer() diff --git a/soong_workflow/views/soong_workflow_link_views.xml b/soong_workflow/views/soong_workflow_link_views.xml index 8b504d282..fa06d3ee2 100644 --- a/soong_workflow/views/soong_workflow_link_views.xml +++ b/soong_workflow/views/soong_workflow_link_views.xml @@ -9,7 +9,7 @@ - + diff --git a/soong_workflow/views/trans_link_views.xml b/soong_workflow/views/trans_link_views.xml index f2689026a..420ece4e8 100644 --- a/soong_workflow/views/trans_link_views.xml +++ b/soong_workflow/views/trans_link_views.xml @@ -7,6 +7,7 @@ + diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py index f9c6e22d5..3c7c49642 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard.py +++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py @@ -32,6 +32,7 @@ class SoongWorkflowCommentWizard(models.TransientModel): comment = fields.Char(compute='_compute_comment', store=True) state_list = fields.Char(string="状态列表") record_id = fields.Integer() + workflow_record_id = fields.Many2one('soong.workflow.record', string="流程") is_selection = fields.Boolean(string="是否自动选择") trans_link_id = fields.Many2one('trans.link', string='转交节点', ondelete='set null') document_ids = fields.Many2many('ir.attachment', string="附件") @@ -171,9 +172,6 @@ class SoongWorkflowCommentWizard(models.TransientModel): for idx, link in enumerate(sorted_all_links): if link.id == current_link.id and link.sequence == current_link.sequence: approvers = self._get_approvers_for_link(link, record_id) - # if not approvers: - # invalid_links |= link - log_records = record_id.log_ids approved_users = log_records.filtered(lambda log: log.node_btn_name != '1' and log.done_by).mapped('done_by.employee_ids') approved_employee_ids = approved_users.ids diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml b/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml index 9b3f269c2..91dc68ebb 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml +++ b/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml @@ -89,7 +89,8 @@ - + + @@ -98,6 +99,7 @@