pastikanAkses($request, $sesi); $sesi->load('dun'); $kehadiran = null; $penempatan = null; $ralat = null; if ($request->filled('nombor_siri')) { $nombor = (int) ltrim($request->input('nombor_siri'), '0'); $kehadiran = KehadiranTaklimat::where('sesi_taklimat_id', $sesi->id) ->where('nombor_siri', $nombor) ->with('permohonan.assignments.pusatMengundi', 'permohonan.assignments.saluran', 'permohonan.assignments.jawatan') ->first(); if ($kehadiran) { $penempatan = $kehadiran->permohonan?->butiranPenempatan(); } else { $ralat = 'Nombor siri tidak ditemui dalam sesi ini.'; } } return view('kaunter.index', compact('sesi', 'kehadiran', 'penempatan', 'ralat')); } /** * Rekod petugas telah ambil borang SPR. */ public function serahBorang(Request $request, SesiTaklimat $sesi, KehadiranTaklimat $kehadiran) { $this->pastikanAkses($request, $sesi); if ((int) $kehadiran->sesi_taklimat_id !== (int) $sesi->id) { abort(404); } if (! $kehadiran->borang_diambil) { $kehadiran->update([ 'borang_diambil' => true, 'borang_diambil_at' => now(), 'borang_diambil_oleh_user_id' => $request->user()->id, ]); } return redirect() ->route('kaunter.index', $sesi) ->with('status', 'Borang direkodkan sebagai telah diserahkan kepada petugas (siri ' . $kehadiran->nombor_siri_papar . ').'); } private function pastikanAkses(Request $request, SesiTaklimat $sesi): void { $user = $request->user(); if (! $user->isAdmin() && (int) $sesi->dun_id !== (int) $user->dun_id) { abort(403, 'Sesi ini bukan untuk DUN anda.'); } } }