diff --git a/yuthon_hr_attendance/models/yuthon_vacation_reports.py b/yuthon_hr_attendance/models/yuthon_vacation_reports.py index e886a5409..10950b806 100644 --- a/yuthon_hr_attendance/models/yuthon_vacation_reports.py +++ b/yuthon_hr_attendance/models/yuthon_vacation_reports.py @@ -2999,15 +2999,26 @@ class YuthonVacationReports(models.Model): if not user: return False, '' - # 查找当月考勤分组下 users_ids 包含当前用户的未办结流程 - pending_records = self.env['soong.workflow.record'].sudo().search([ - ('users_ids', 'in', user.id), + # 基础域:当月考勤分组下未办结流程 + base_domain = [ ('approvals_group_id.name', '=', '考勤'), ('reclaim_state', '=', False), ('approve_state', '=', 'pending'), ('workflow_happen_date', '>=', month_start), ('workflow_happen_date', '<=', month_end), - ]) + ] + # 查找当月考勤分组下 users_ids 包含当前用户的未办结流程 + pending_records = self.env['soong.workflow.record'].sudo().search([ + ('users_ids', 'in', user.id), + ] + base_domain) + + # 加班特殊处理:加班人(employee_ids many2many)并不写入 record.users_ids, + # 仅按 users_ids 搜索会漏掉"本人是加班人但不在 users_ids 中"的加班流程, + # 导致该加班人也能确认考勤。故额外捞出当月"加班"流程,下方按加班人字段判定当事人。 + overtime_records = self.env['soong.workflow.record'].sudo().search([ + ('workflow_id.name', '=', '加班'), + ] + base_domain) + pending_records |= overtime_records # 合并并去重(recordset 自动去重) pending_codes = [] for record in pending_records: workflow_name = record.workflow_id.name