toDateString(); $users = User::query() ->select(['id']) ->active() ->whereHas('roles', function ($q) { $q->whereHas('permissions', fn($pq) => $pq->where('name', Permission::ATTENDANCES_CREATE->value)); }) ->whereHas('employee') ->get(); $eligibleUsers = $users->filter(function (User $user) use ($today) { $employee = $user->employee; if (! $employee) { return false; } $hasAttendedToday = Attendance::where('employee_id', $employee->id) ->where('attendance_date', $today) ->exists(); if ($hasAttendedToday) { return false; } $isOnLeave = LeaveRequest::approved() ->where('employee_id', $employee->id) ->where('start_date', '<=', $today) ->where('end_date', '>=', $today) ->exists(); return ! $isOnLeave; }); if ($eligibleUsers->isEmpty()) { return; } NotificationService::notifyUsers( $eligibleUsers, 'Reminder Presensi', 'Selamat pagi! Jangan lupa untuk melakukan presensi masuk hari ini.', route('admin.hr.attendances.index'), ); } }