user(); if (! $user->isAdmin() && (int) $sesi->dun_id !== (int) $user->dun_id) { abort(403, 'Sesi ini bukan untuk DUN anda.'); } $sesi->load('dun'); // Semua petugas 'assigned' untuk DUN sesi ini $semuaPetugas = PetugasPermohonan::assignedUntukDun($sesi->dun_id) ->with(['assignments' => fn ($q) => $q->orderBy('urutan')->with(['pusatMengundi', 'saluran', 'jawatan'])]) ->orderBy('nama_ic') ->get(); $kehadiran = $sesi->kehadiran()->get()->keyBy('permohonan_id'); $belumHadirSesiIni = $semuaPetugas->reject(fn (PetugasPermohonan $p) => $kehadiran->has($p->id)); // Antara yang belum hadir sesi ini, semak siapa pernah hadir di sesi LAIN. $kehadiranSesiLain = KehadiranTaklimat::whereIn('permohonan_id', $belumHadirSesiIni->pluck('id')) ->where('sesi_taklimat_id', '!=', $sesi->id) ->with('sesi.dun') ->orderBy('hadir_at') ->get() ->unique('permohonan_id') ->keyBy('permohonan_id'); [$hadirSesiLain, $tidakHadir] = $belumHadirSesiIni->partition( fn (PetugasPermohonan $p) => $kehadiranSesiLain->has($p->id) ); return view('pengurus.senarai', [ 'sesi' => $sesi, 'hadir' => $semuaPetugas->filter(fn (PetugasPermohonan $p) => $kehadiran->has($p->id))->values(), 'hadirSesiLain' => $hadirSesiLain->values(), 'tidakHadir' => $tidakHadir->values(), 'kehadiran' => $kehadiran, 'kehadiranSesiLain' => $kehadiranSesiLain, ]); } }