From 41957b3e94d83d6aa361eb60043598d1f26c7cbe 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: Fri, 8 May 2026 16:04:36 +0800 Subject: [PATCH 1/2] =?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 --- yuthon_hr_attendance/controllers/portal.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/yuthon_hr_attendance/controllers/portal.py b/yuthon_hr_attendance/controllers/portal.py index fefe39db2..10ee574ce 100644 --- a/yuthon_hr_attendance/controllers/portal.py +++ b/yuthon_hr_attendance/controllers/portal.py @@ -79,6 +79,8 @@ class CustomerPortal(portal.CustomerPortal): num = float(value or 0) * multiply if num == 0: return "0" + if unit == "小时": + return f"{round(num, 1)}{unit}" return f"{num}{unit}" data = { From 3132663c3f1cbdd465f9f9f47c1df66732ea6a0f 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: Fri, 8 May 2026 16:36:03 +0800 Subject: [PATCH 2/2] =?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 --- .../wizard/soong_workflow_comment_wizard.py | 107 +++++++++--------- 1 file changed, 55 insertions(+), 52 deletions(-) diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py index 386b53fe7..6bf481c93 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard.py +++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py @@ -585,6 +585,60 @@ class SoongWorkflowCommentWizard(models.TransientModel): current_user = self.env.user current_datetime = fields.Datetime.now() is_admin = current_user.has_group('base.group_system') + # 归档判断 + last_log = record_id.log_ids[-1] if record_id.log_ids else None + if last_log: + 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 in ['2', '3'] for log in same_name_logs) or not same_name_logs + if all_approved: + workflow_record = self.env['soong.workflow.record'].search([('code', '=', record_id.code)], + limit=1) + has_archive_btn = any(btn_name.name == '归档' for btn_name in self.node_btn_id.node_id.button_ids) + if has_archive_btn: + log_id = record_id.log_ids.filtered(lambda l: l.name == '归档') + employee_id = self.env['hr.employee'].sudo().search( + [('user_id', '=', record_id.log_ids[0].done_by.id)], limit=1) + if workflow_record: + workflow_record.write({ + 'approve_state': 'end', + 'employee_ids': [(6, 0, [employee_id.id])], + 'soong_state': 'to_active', + 'node_id': False, + }) + 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, + "done_by": record_id.log_ids[0].done_by.id, + "approval_state": "0", + "node_btn_id": self.node_btn_id.id, + }) + is_work_remind = True + else: + log_id.write({ + 'document_ids': [(6, 0, self.document_ids.ids)], + "approval_state": "2", + 'lase_click_date': fields.Datetime.now(), + }) + workflow_record.write({ + 'soong_state': 'active', + 'employee_ids': False, + }) + else: + if workflow_record: + workflow_record.sudo().write({ + 'approve_state': 'end', + 'employee_ids': False, + 'node_id': False, + 'soong_state': 'done', + }) + record_id.work_end = True + if is_admin: user_log = record_id.log_ids.filtered( lambda log: log.done_by == current_user and log.node_btn_name != '1' and log.approval_state == '0' @@ -679,58 +733,7 @@ class SoongWorkflowCommentWizard(models.TransientModel): title=record_id._description + "传阅/抄送", description=description, url=url, btntxt="查看详情") - # if not record_id.log_ids2.search([('approval_state', '=', '0')]) or record_id.log_ids2: - last_log = record_id.log_ids[-1] if record_id.log_ids else None - if last_log: - 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 in ['2', '3'] for log in same_name_logs) or not same_name_logs - if all_approved: - workflow_record = self.env['soong.workflow.record'].search([('code', '=', record_id.code)], - limit=1) - has_archive_btn = any(btn_name.name == '归档' for btn_name in self.node_btn_id.node_id.button_ids) - if has_archive_btn: - log_id = record_id.log_ids.filtered(lambda l: l.name == '归档') - employee_id = self.env['hr.employee'].sudo().search([('user_id', '=', record_id.log_ids[0].done_by.id)], limit=1) - if workflow_record: - workflow_record.write({ - 'approve_state': 'end', - 'employee_ids': [(6, 0, [employee_id.id])], - 'soong_state': 'to_active', - 'node_id': False, - }) - 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, - "done_by": record_id.log_ids[0].done_by.id, - "approval_state": "0", - "node_btn_id": self.node_btn_id.id, - }) - is_work_remind = True - else: - log_id.write({ - 'document_ids': [(6, 0, self.document_ids.ids)], - "approval_state": "2", - 'lase_click_date': fields.Datetime.now(), - }) - workflow_record.write({ - 'soong_state': 'active', - 'employee_ids': False, - }) - else: - if workflow_record: - workflow_record.sudo().write({ - 'approve_state': 'end', - 'employee_ids': False, - 'node_id': False, - 'soong_state': 'done', - }) - record_id.work_end = True + # 给申请人发消息 if is_work_remind: biz_record = self.env[self.res_model].browse(self.res_id)