From 325d470fb0a2de03ec1e8b8b7478137c4868728d 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: Thu, 2 Jul 2026 11:11:04 +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 --- .../models/yuthon_vacation_reports.py | 47 +++++++++++++++++-- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/yuthon_hr_attendance/models/yuthon_vacation_reports.py b/yuthon_hr_attendance/models/yuthon_vacation_reports.py index 3a1842fc8..e64f3e192 100644 --- a/yuthon_hr_attendance/models/yuthon_vacation_reports.py +++ b/yuthon_hr_attendance/models/yuthon_vacation_reports.py @@ -2742,6 +2742,10 @@ class YuthonVacationReports(models.Model): def _has_pending_hr_workflow(self, employee_id, month_date): """ 检查员工在指定月份是否存在未办结的人力资源相关流程(请假、加班、外出等) + 检查员工在指定月份是否存在未办结的人力资源相关流程(请假、加班、外出等) + 搜索条件保留 users_ids 包含当前用户(不管是自己的流程还是需要审批的), + 找到后再判断员工是否是流程的当事人(请假人/加班人/外出人/补卡人), + 如果员工只是审批人(盖章),不算未办结,不阻止确认。 :param employee_id: hr.employee.id :param month_date: 月份任一天(用于计算当月起止) :return: (bool, str) 是否有未办结流程, 提示文字 @@ -2749,11 +2753,13 @@ class YuthonVacationReports(models.Model): month_start = month_date.replace(day=1) month_end = (month_start + relativedelta(months=1) - relativedelta(days=1)) - # 先找到员工对应的 user - user = self.env['hr.employee'].sudo().browse(employee_id).user_id + employee = self.env['hr.employee'].sudo().browse(employee_id) + user = employee.user_id if not user: return False, '' - pending = self.env['soong.workflow.record'].sudo().search_count([ + + # 查找当月考勤分组下 users_ids 包含当前用户的未办结流程 + pending_records = self.env['soong.workflow.record'].sudo().search([ ('users_ids', 'in', user.id), ('approvals_group_id.name', '=', '考勤'), ('reclaim_state', '=', False), @@ -2761,8 +2767,39 @@ class YuthonVacationReports(models.Model): ('workflow_happen_date', '>=', month_start), ('workflow_happen_date', '<=', month_end), ]) - if pending: - return True, '该月考勤相关流程尚未完结,暂不允许确认' + for record in pending_records: + workflow_name = record.workflow_id.name + # 获取业务记录 + biz_record = self.env[record.res_model].sudo().browse(record.res_id) + if not biz_record.exists(): + continue + + # 根据流程类型判断当事人字段 + if workflow_name == '请假': + if hasattr(biz_record, 'users_id') and biz_record.users_id: + if biz_record.users_id == employee.user_id: + return True, '该月考勤相关流程尚未完结,暂不允许确认' + elif workflow_name == '加班': + if hasattr(biz_record, 'employee_ids') and biz_record.employee_ids: + if employee in biz_record.employee_ids: + return True, '该月考勤相关流程尚未完结,暂不允许确认' + elif workflow_name == '外出': + if hasattr(biz_record, 'employee_ids') and biz_record.employee_ids: + if employee in biz_record.employee_ids: + return True, '该月考勤相关流程尚未完结,暂不允许确认' + elif workflow_name == '补卡': + if hasattr(biz_record, 'users_id') and biz_record.users_id: + if biz_record.users_id == employee.user_id: + return True, '该月考勤相关流程尚未完结,暂不允许确认' + else: + # 其他考勤类型:如果员工是业务记录的 users_id 或在 employee_ids 中也算当事人 + if hasattr(biz_record, 'users_id') and biz_record.users_id: + if biz_record.users_id == employee.user_id: + return True, '该月考勤相关流程尚未完结,暂不允许确认' + if hasattr(biz_record, 'employee_ids') and biz_record.employee_ids: + if employee in biz_record.employee_ids: + return True, '该月考勤相关流程尚未完结,暂不允许确认' + return False, '' class VacationLeaveLine(models.Model):