From 52a9822b2d02f2fc266a75c055564c3bde584a3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Mon, 12 Jan 2026 15:44:12 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E9=99=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yuthon_holiday/views/yuthon_fixes_approval_views.xml | 5 ++++- yuthon_hr_attendance/views/card_approval.xml | 5 ++++- yuthon_hr_attendance/views/go_approval.xml | 7 +++++-- yuthon_hr_attendance/views/overtime_approval.xml | 5 ++++- .../views/yuthon_adjustments_approval_views.xml | 5 ++++- yuthon_hr_attendance/views/yuthon_shift_approval_views.xml | 5 ++++- .../views/yuthon_special_approval_views.xml | 5 ++++- .../views/yuthon_department_change_viwes.xml | 5 ++++- .../views/yuthon_leaving_approval_views.xml | 7 +++++-- .../views/yuthon_renewal_approval_views.xml | 5 ++++- yuthon_purchase/views/purchase_workflow_views.xml | 3 +++ yuthon_trade/views/yuthon_message_approval_views.xml | 5 ++++- 12 files changed, 49 insertions(+), 13 deletions(-) diff --git a/yuthon_holiday/views/yuthon_fixes_approval_views.xml b/yuthon_holiday/views/yuthon_fixes_approval_views.xml index 8fd88e3fa..30ddc8827 100644 --- a/yuthon_holiday/views/yuthon_fixes_approval_views.xml +++ b/yuthon_holiday/views/yuthon_fixes_approval_views.xml @@ -53,9 +53,12 @@ - + + + + diff --git a/yuthon_hr_attendance/views/card_approval.xml b/yuthon_hr_attendance/views/card_approval.xml index a31b78ae1..d1872014b 100644 --- a/yuthon_hr_attendance/views/card_approval.xml +++ b/yuthon_hr_attendance/views/card_approval.xml @@ -55,10 +55,13 @@ - + + + + diff --git a/yuthon_hr_attendance/views/go_approval.xml b/yuthon_hr_attendance/views/go_approval.xml index ba490ee9e..0362a2727 100644 --- a/yuthon_hr_attendance/views/go_approval.xml +++ b/yuthon_hr_attendance/views/go_approval.xml @@ -88,16 +88,19 @@ - + - + + + + diff --git a/yuthon_hr_attendance/views/overtime_approval.xml b/yuthon_hr_attendance/views/overtime_approval.xml index c4211f22c..be8b8741d 100644 --- a/yuthon_hr_attendance/views/overtime_approval.xml +++ b/yuthon_hr_attendance/views/overtime_approval.xml @@ -62,10 +62,13 @@ - + + + + diff --git a/yuthon_hr_attendance/views/yuthon_adjustments_approval_views.xml b/yuthon_hr_attendance/views/yuthon_adjustments_approval_views.xml index 8cbf7664e..a9e04448c 100644 --- a/yuthon_hr_attendance/views/yuthon_adjustments_approval_views.xml +++ b/yuthon_hr_attendance/views/yuthon_adjustments_approval_views.xml @@ -50,9 +50,12 @@ - + + + + diff --git a/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml b/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml index f8a1408b9..4ba973976 100644 --- a/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml +++ b/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml @@ -54,12 +54,15 @@ - + + + + @@ -154,7 +153,7 @@ soong.workflow.node.button
- + diff --git a/soong_workflow/views/soong_workflow_record.xml b/soong_workflow/views/soong_workflow_record.xml index 5a0297801..4e63e02c6 100644 --- a/soong_workflow/views/soong_workflow_record.xml +++ b/soong_workflow/views/soong_workflow_record.xml @@ -317,7 +317,7 @@ soong.workflow.record tree,kanban,search {'header_search_default_approve_state': 1, 'header_search_default_to_do':1, 'check_employee': 1} - [('users_ids', 'in', uid), ('reclaim_state', '=', False), ('soong_state', 'in', ['to_do', 'active'])] + [('users_ids', 'in', uid), ('reclaim_state', '=', False), ('soong_state', 'in', ['to_do', 'to_active'])] @@ -327,7 +327,7 @@ soong.workflow.record tree,kanban,search {'header_search_default_approve_state': 1, 'header_search_default_to_do':1, 'check_employee': 1} - [('users_ids', 'in', uid), ('reclaim_state', '=', False), ('soong_state', '=', 'done')] + [('users_ids', 'in', uid), ('reclaim_state', '=', False), ('soong_state', 'in', ['done', 'active'])] diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py index 4c88b1bde..e46a62dab 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard.py +++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py @@ -456,10 +456,18 @@ class SoongWorkflowCommentWizard(models.TransientModel): fields.Datetime.now() + timedelta( hours=8)), url=url, btntxt="查看详情") - # msg_id = result_data[-1]['msgid'] - # target_logs = next_node_log_records.filtered(lambda l: l.done_by.id == employee.user_id.id) - # if target_logs: - # target_logs.msg_id = msg_id + msg_id = None + try: + if result_data and isinstance(result_data, list) and len(result_data) > 0: + last_item = result_data[-1] + if isinstance(last_item, dict) and 'msgid' in last_item: + msg_id = last_item['msgid'] + except (IndexError, KeyError, TypeError): + msg_id = None + if msg_id: + target_logs = next_node_log_records.filtered(lambda l: l.done_by.id == employee.user_id.id) + if target_logs: + target_logs.msg_id = msg_id else: # 串审模式 (沿用原有逻辑) # 查找下一个节点 @@ -615,9 +623,7 @@ class SoongWorkflowCommentWizard(models.TransientModel): same_name_logs = record_id.log_ids.filtered( lambda log: log.name == last_log.name and log.node_btn_name == '4' and log.id != last_log.id ) - all_approved = all(log.approval_state == '3' for log in same_name_logs) - all_approved = all_approved and (last_log.approval_state == '3') - + all_approved = all(log.approval_state == '3' for log in same_name_logs) or not same_name_logs log2_ids_all_qualified = True if record_id.log_ids2: log2_ids_all_qualified = all(log2.approval_state == '2' for log2 in record_id.log_ids2) @@ -628,21 +634,23 @@ class SoongWorkflowCommentWizard(models.TransientModel): if workflow_record: workflow_record.write({ 'approve_state': 'end', - 'employee_ids': applicant.id, + 'employee_ids': [(6, 0, [applicant.employee_ids.id])], 'soong_state': 'to_active', 'node_id': False, }) - self.sudo().env["soong.workflow.log"].create({ - "code": self.code, - "model": self.res_model, - "res_id": self.res_id, - "workflow_id": self.node_btn_id.workflow_id.id, - "lase_click_date": fields.Datetime.now(), - "done_by": applicant.id, - "approval_state": "0", - "commit":'待归档', - "node_btn_id": self.node_btn_id.id, - }) + log_id = record_id.log_ids.filtered(lambda l: l.comment in ['归档', '待归档']) + if not log_id: + self.env["soong.workflow.log"].create({ + 'name': '归档', + "code": self.code, + "model": self.res_model, + "res_id": self.res_id, + "workflow_id": self.node_btn_id.workflow_id.id, + "lase_click_date": fields.Datetime.now(), + "done_by": applicant.id, + "approval_state": "0", + "node_btn_id": self.node_btn_id.id, + }) record_id.work_end = True # 给申请人发消息 @@ -706,9 +714,13 @@ class SoongWorkflowCommentWizard(models.TransientModel): "done_by": self.employee_ids.user_id.id, "node_btn_name": "0", }) - result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id='18562027762', title=record_id._description, description=description, url=url, btntxt="查看详情") - # msg_id = result_data[-1]['msgid'] - # log_id.msg_id = msg_id + result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=emp.wecom_userid, title=record_id._description, description=description, url=url, btntxt="查看详情") + msg_id = None + if result_data and isinstance(result_data, list) and len(result_data) > 0: + last_item = result_data[-1] + if isinstance(last_item, dict) and 'msgid' in last_item: + msg_id = last_item['msgid'] or "" + log_id.msg_id = msg_id for emp in self.dep_manager_employee_ids: workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.dep_manager_employee_ids if employee.user_id] next_node_id = record_id.workflow_id.node_ids.search([('name', '=', '承办'), ('workflow_id', '=', record_id.workflow_id.id)]) @@ -722,8 +734,12 @@ class SoongWorkflowCommentWizard(models.TransientModel): "node_btn_name": "4", }) result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=emp.wecom_userid, title=record_id._description + "承办", description=description, url=url, btntxt="查看详情") - # msg_id = result_data[-1]['msgid'] - # log_id.msg_id = msg_id + msg_id = None + if result_data and isinstance(result_data, list) and len(result_data) > 0: + last_item = result_data[-1] + if isinstance(last_item, dict) and 'msgid' in last_item: + msg_id = last_item['msgid'] or "" + log_id.msg_id = msg_id for employee in self.circulated_employee_ids: workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.circulated_employee_ids if employee.user_id] record_id = self.env[self.res_model].search([('id', '=', self.res_id)]) @@ -746,9 +762,13 @@ class SoongWorkflowCommentWizard(models.TransientModel): "node_btn_id": self.node_btn_id.id, "approval_state": "0", }) - result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id='18562027762', title=record_id._description + "传阅/抄送",description=description, url=url, btntxt="查看详情") - # msg_id = result_data[-1]['msgid'] - # log2_id.msg_id = msg_id + result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=emp.wecom_userid, title=record_id._description + "传阅/抄送",description=description, url=url, btntxt="查看详情") + msg_id = None + if result_data and isinstance(result_data, list) and len(result_data) > 0: + last_item = result_data[-1] + if isinstance(last_item, dict) and 'msgid' in last_item: + msg_id = last_item['msgid'] or "" + log2_id.msg_id = msg_id workflow_record_id.employee_ids = self.dep_manager_employee_ids + self.employee_ids + self.circulated_employee_ids record_id.log_ids[-1].write({"comment": self.comment, "approval_state": "2", "lase_click_date": fields.Datetime.now()}) if self.node_btn_name == "收回": @@ -776,11 +796,14 @@ class SoongWorkflowCommentWizard(models.TransientModel): self.node_btn_id.with_context(cx).run() if self.node_btn_name == '归档': + record = self.env[self.res_model].search([('id', '=', self.res_id)]) + record.log_ids[-1].write({'approval_state': '2'}) + if self.document_ids: + record.log_ids[-1].write({'document_ids': [(6, 0, self.document_ids.ids)]}) workflow_record_id = self.env['soong.workflow.record'].search([('code', '=', record_id.code)]) workflow_record_id.write({'soong_state': 'active', 'employee_ids':False - } - ) + }) if self.node_btn_name != "收回": diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml b/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml index 3041e611f..defa2ff85 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml +++ b/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml @@ -24,6 +24,9 @@

你确认要归档吗?

+ + +
@@ -69,7 +72,7 @@ - + diff --git a/yuthon_issue/models/issue_meeting_minutes.py b/yuthon_issue/models/issue_meeting_minutes.py index d943f00e4..7be500a38 100644 --- a/yuthon_issue/models/issue_meeting_minutes.py +++ b/yuthon_issue/models/issue_meeting_minutes.py @@ -11,7 +11,6 @@ class IssueMeetingMinutes(models.Model): name = fields.Char(string='名称') number_of_meetings = fields.Integer(string='会议次数') - meeting_id = fields.Many2one('room.booking', string='会议名称', required=True) meeting_type_id = fields.Many2one('room.meeting.type', string="会议类型") meeting_date = fields.Datetime(string="会议时间")