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 @@
+
@@ -40,7 +41,7 @@
+ invisible="not issue_approval_id"/>
@@ -82,6 +83,7 @@
+
@@ -90,7 +92,7 @@
+ invisible="not issue_approval_id"/>
@@ -128,10 +130,11 @@
+
+ invisible="not issue_approval_id"/>