user(); $dunId = $this->dunTerpilih($request); $senaraiDun = $user->isSuperadmin() ? Dun::where('is_active', true)->orderBy('code')->get() : collect(); $assignments = PetugasAssignment::ktm() ->when($dunId, fn ($q) => $q->untukDun($dunId)) ->when($request->filled('q'), function ($q) use ($request) { $cari = trim($request->input('q')); $q->whereHas('permohonan', function ($qq) use ($cari) { $qq->where('nama_ic', 'like', "%{$cari}%") ->orWhere('no_kp', 'like', "%{$cari}%"); }); }) ->when($request->filled('pusat_id'), fn ($q) => $q->where('pusat_mengundi_id', $request->integer('pusat_id'))) ->with(['permohonan', 'pusatMengundi.dun', 'saluran', 'jawatan']) ->get() ->sortBy([ fn ($a, $b) => strcmp($a->pusatMengundi?->nama ?? '', $b->pusatMengundi?->nama ?? ''), fn ($a, $b) => ($a->saluran?->nombor_saluran ?? 0) <=> ($b->saluran?->nombor_saluran ?? 0), ]) ->values(); $kehadiran = KehadiranKtm::whereIn('assignment_id', $assignments->pluck('id')) ->get() ->keyBy('assignment_id'); // Tapis ikut status selepas kehadiran diketahui if (in_array($request->input('status'), ['hadir', 'belum'], true)) { $mahuHadir = $request->input('status') === 'hadir'; $assignments = $assignments ->filter(fn ($a) => $kehadiran->has($a->id) === $mahuHadir) ->values(); } $senaraiPusat = PusatMengundi::when($dunId, fn ($q) => $q->where('dun_id', $dunId)) ->orderBy('nama') ->get(['id', 'nama']); $jumlahSemua = $assignments->count(); $jumlahHadir = $assignments->filter(fn ($a) => $kehadiran->has($a->id))->count(); return view('dashboard', [ 'assignments' => $assignments, 'kehadiran' => $kehadiran, 'senaraiPusat' => $senaraiPusat, 'senaraiDun' => $senaraiDun, 'dunId' => $dunId, 'jumlahSemua' => $jumlahSemua, 'jumlahHadir' => $jumlahHadir, 'jumlahBelum' => $jumlahSemua - $jumlahHadir, ]); } /** * DUN yang dipaparkan: admin DUN terikat pada DUN sendiri; superadmin * boleh pilih (null = semua DUN). */ private function dunTerpilih(Request $request): ?int { $user = $request->user(); if (! $user->isSuperadmin()) { return (int) $user->dun_id; } return $request->filled('dun_id') ? $request->integer('dun_id') : null; } }