diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py index c5aad805b..5153737d7 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard.py +++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py @@ -429,6 +429,11 @@ class SoongWorkflowCommentWizard(models.TransientModel): is_admin = self.env.user.has_group('soong_workflow.group_soong_workflow_manager') log_done_by_ids = [log.done_by.id for log in record_id.log_ids if log.done_by] if self.node_btn_name == '转交': + if self.res_model == 'issue.approval': + if self.trans_link_id.name != '申请人': + if record_id.issue_approval_ids: + for issue_library in record_id.issue_approval_ids: + issue_library.issue_library_id.issue_state = 'to_draft' has_comment_note = bool(self.comment_note_id) has_comment = bool(self.comment and self.comment.strip()) if not has_comment_note and not has_comment: @@ -646,6 +651,11 @@ class SoongWorkflowCommentWizard(models.TransientModel): if self.node_btn_name == '退回': if not self.return_link_id: raise UserError('请选择退回节点') + if self.res_model == 'issue.approval': + if self.return_link_id.name == '申请人': + if record_id.issue_approval_ids: + for issue_library in record_id.issue_approval_ids: + issue_library.issue_library_id.issue_state = 'draft' record_id.write({'state': self.return_link_id.name}) next_node_id = record_id.workflow_id.node_ids.search([('name', '=', self.return_link_id.name), ('workflow_id', '=', record_id.workflow_id.id)]) for next_link in record_id.workflow_id.link_ids: diff --git a/yuthon_issue/models/inherit_room_booking.py b/yuthon_issue/models/inherit_room_booking.py index 641c439ac..f327eee50 100644 --- a/yuthon_issue/models/inherit_room_booking.py +++ b/yuthon_issue/models/inherit_room_booking.py @@ -27,12 +27,14 @@ class RoomBooking(models.Model): meet.issue_library_id.party_char = str( record.start_datetime.date()) + record.meeting_type_id.name meet.issue_library_id.issue_state_party = 'meeting' + meet.issue_library_id.issue_state = False if '班子' in meeting_type_name: if meet.issue_library_id.is_class and (meet.issue_library_id.is_class_passed == 'reject' or not meet.issue_library_id.is_class_passed): meet.issue_library_id.class_char = str( record.start_datetime.date()) + f'第{record.number_of_meetings}' + record.meeting_type_id.name meet.issue_library_id.issue_state_class = 'meeting' + meet.issue_library_id.issue_state = False if '董事' in meeting_type_name: if meet.issue_library_id.is_boss and ( @@ -40,16 +42,19 @@ class RoomBooking(models.Model): meet.issue_library_id.boss_char = str( record.start_datetime.date()) + record.meeting_type_id.name meet.issue_library_id.issue_state_boss = 'meeting' + meet.issue_library_id.issue_state = False elif '套' in meeting_type_name: if meet.issue_library_id.is_party and (meet.issue_library_id.is_party_passed == 'reject' or not meet.issue_library_id.is_party_passed): meet.issue_library_id.party_char = str( record.start_datetime.date()) + record.meeting_type_id.name meet.issue_library_id.issue_state_party = 'meeting' + meet.issue_library_id.issue_state = False elif meet.issue_library_id.is_class and (meet.issue_library_id.is_class_passed == 'r eject' or not meet.issue_library_id.is_class_passed): meet.issue_library_id.class_char = str( record.start_datetime.date()) + f'第{record.number_of_meetings}' + record.meeting_type_id.name meet.issue_library_id.issue_state_class = 'meeting' + meet.issue_library_id.issue_state = False if self.code: self.env['issue.library.approval.line'].create({ @@ -365,3 +370,33 @@ class IssueMeetingLine(models.Model): self.issue_library_id.issue_state_class = 'on_meet' else: self.issue_library_id.issue_state_class = 'will' + + def unlink(self): + delete_lines = self.filtered(lambda l: l.issue_library_id and l.meeting_booking_id) + for line in delete_lines: + self._reset_issue_library_fields(line) + return super(IssueMeetingLine, self).unlink() + + def _reset_issue_library_fields(self, line): + lib_record = line.issue_library_id + booking_record = line.meeting_booking_id + meeting_type_name = str(booking_record.meeting_type_id.name or "").strip() + + # 根据会议类型重置对应字段 + if '党' in meeting_type_name or '套' in meeting_type_name: + lib_record.write({ + 'party_char': False, + 'issue_state_party': 'will' + }) + + if '班子' in meeting_type_name or '套' in meeting_type_name: + lib_record.write({ + 'class_char': False, + 'issue_state_class': 'will' + }) + + if '董事' in meeting_type_name: + lib_record.write({ + 'boss_char': False, + 'issue_state_boss': 'will' + }) diff --git a/yuthon_issue/models/issue_approval.py b/yuthon_issue/models/issue_approval.py index 24d5154cd..4105cd99c 100644 --- a/yuthon_issue/models/issue_approval.py +++ b/yuthon_issue/models/issue_approval.py @@ -77,7 +77,6 @@ class IssueApproval(models.Model): for issue_library in rec.issue_approval_ids: name_val = issue_library.issue_library_id.name or "" issue_names.append(str(name_val)) - decision_sequences = [] for issue_library in rec.issue_approval_ids: seq_val = issue_library.approval_decision_sequence @@ -118,6 +117,16 @@ class IssueApprovalLine(models.Model): is_boss = fields.Boolean(related='issue_library_id.is_boss', string="董事会") is_note = fields.Boolean(related='issue_library_id.is_note', string="上级单位") + def unlink(self): + delete_lines = self.filtered(lambda l: l.issue_library_id.exists()) + issue_library_records = self.env['issue.library'] + for line in delete_lines: + issue_library_records |= line.issue_library_id + if issue_library_records: + issue_library_records.write({'issue_state': 'draft'}) + issue_library_records.issue_approval_id = False + return super(IssueApprovalLine, self).unlink() + def open_record(self): self.ensure_one() is_modify = False diff --git a/yuthon_issue/models/issue_library.py b/yuthon_issue/models/issue_library.py index 3bf77dcc1..cfb4114e2 100644 --- a/yuthon_issue/models/issue_library.py +++ b/yuthon_issue/models/issue_library.py @@ -475,27 +475,48 @@ class IssueLibrary(models.Model): self.issue_approval_id.unlink() def all_issue_pull(self): + # 1. 获取选中的议题库记录 issue_active_ids = self.env["issue.library"].browse( self._context.get('active_ids', self._context.get('active_id')) ) + # 校验选中记录的状态(非草稿不允许提交) for i in issue_active_ids: if i.issue_state != 'draft': raise UserError("当前状态不允许提交") + # 2. 查找已存在的关联 issue.approval 记录 existing_approval = self.env['issue.approval'].search([ ('issue_approval_ids.issue_library_id', 'in', issue_active_ids.ids), ], limit=1) + # 3. 拼接审批单名称 specifics_list = [rec.name for rec in issue_active_ids] name = ','.join(specifics_list) if len(specifics_list) > 1 else ( self.name or specifics_list[0] if specifics_list else "") if existing_approval: issue_approval_id = existing_approval + # 获取已有审批单中已关联的议题库 ID + existing_issue_ids = issue_approval_id.issue_approval_ids.mapped('issue_library_id').ids + # 筛选出选中但未关联的议题库记录 + new_issue_records = issue_active_ids.filtered(lambda r: r.id not in existing_issue_ids) + if new_issue_records: + new_lines = [] + for issue_record in new_issue_records: + new_lines.append((0, 0, { + 'issue_library_id': issue_record.id, + 'approval_decision_sequence': issue_record.approval_decision_sequence, + 'employee_id': issue_record.employee_id.id + })) + # 追加新行到已有审批单 + issue_approval_id.write({ + 'issue_approval_ids': new_lines, + 'name': name + }) + self.issue_approval_id = issue_approval_id else: issue_decision_lines = [] for issue_record in issue_active_ids: - issue_record.write({"issue_state": "to_draft"}) issue_decision_lines.append((0, 0, { 'issue_library_id': issue_record.id, 'approval_decision_sequence': issue_record.approval_decision_sequence, @@ -507,7 +528,6 @@ class IssueLibrary(models.Model): 'name': name, }) self.issue_approval_id = issue_approval_id - form_id = self.env.ref("yuthon_issue.issue_library_approval_form").id return { "type": "ir.actions.act_window", diff --git a/yuthon_issue/views/issue_library_views.xml b/yuthon_issue/views/issue_library_views.xml index 616874b91..853cdbaf1 100644 --- a/yuthon_issue/views/issue_library_views.xml +++ b/yuthon_issue/views/issue_library_views.xml @@ -30,6 +30,7 @@ +