From b3c5a6727e4a769c62f55d64a5d24229acd891c6 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: Tue, 30 Dec 2025 16:25:16 +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 --- soong_workflow/wizard/soong_bounced_wizard.py | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/soong_workflow/wizard/soong_bounced_wizard.py b/soong_workflow/wizard/soong_bounced_wizard.py index 7ce7217d5..9c1267d09 100644 --- a/soong_workflow/wizard/soong_bounced_wizard.py +++ b/soong_workflow/wizard/soong_bounced_wizard.py @@ -16,18 +16,33 @@ class SoongBouncedWizard(models.Model): record = self.env[self.res_model].search([('id', '=', self.res_id)]) is_admin = current_user.has_group('base.group_system') or current_user.has_group('base.group_admin') log_ids = record.log_ids.sorted('sequence') + log_to_delete = log_ids.filtered(lambda log: log.name == record.state) if not is_admin: - if log_ids[-1].approval_state in ['1', '2']: + invalid_logs = log_to_delete.filtered( + lambda log: log.approval_state in ['1', '2'] + ) + if invalid_logs: raise UserError('当前状态不可以收回') + + related_record = self.env[self.res_model].browse(self.res_id) + prev_log = None + if hasattr(related_record, 'self_users_ids'): + total_log_count = len(log_ids) + deleted_log_count = len(log_to_delete) + prev_log_index = (total_log_count - deleted_log_count) - 1 + if prev_log_index < 0 or prev_log_index >= len(log_ids): + raise UserError('无有效的上一级审批明细行,无法执行收回操作') + prev_log = log_ids[prev_log_index] + related_record = self.env[self.res_model].browse(self.res_id) if hasattr(related_record, 'self_users_ids'): - related_record.self_users_ids = [(6, 0, [log_ids[-2].done_by.id])] - self.env['soong.workflow.record'].search([('code', '=', record.code)]).write({"employee_ids": [(6, 0, [log_ids[-2].done_by.employee_ids.id])], - "users_ids": [(6, 0, [log_ids[-2].done_by.id])], + related_record.self_users_ids = [(6, 0, [prev_log.done_by.id])] + self.env['soong.workflow.record'].search([('code', '=', record.code)]).write({"employee_ids": [(6, 0, [prev_log.done_by.employee_ids.id])], + "users_ids": [(6, 0, [prev_log.done_by.id])], 'soong_state': 'to_do' }) - log_ids[-1].unlink() - log_ids[-2].write({'approval_state': '1'}) - record.write({'state': log_ids[-2].name, + log_to_delete.unlink() + prev_log.write({'approval_state': '1'}) + record.write({'state': prev_log.name, 'work_end': False, }) \ No newline at end of file