74 lines
2.2 KiB
PHP
74 lines
2.2 KiB
PHP
<?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.');
|
|
}
|
|
}
|
|
}
|