first commit

This commit is contained in:
Saufi
2026-06-14 08:52:33 +08:00
commit 359229685d
87 changed files with 12477 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
<?php
namespace App\Http\Controllers;
use App\Models\KehadiranTaklimat;
use App\Models\SesiTaklimat;
use Illuminate\Http\Request;
class KaunterController extends Controller
{
/**
* Skrin kaunter: masukkan nombor siri slip petugas.
*/
public function index(Request $request, SesiTaklimat $sesi)
{
$this->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->isPengurus() && (int) $sesi->dun_id !== (int) $user->dun_id) {
abort(403, 'Sesi ini bukan untuk DUN anda.');
}
}
}