Aplikasi kehadiran KTM ambil peti undi (SPR 2026)
Sistem untuk admin DUN merekod waktu KTM (Ketua Tempat Mengundi) hadir mengambil peti undi. Data KTM dibaca daripada DB sppm (spr2026) melalui connection kedua — hanya penempatan berjawatan KTM yang dipaparkan. - Dashboard: senarai KTM ikut pusat mengundi (asc) & saluran (asc), status BELUM HADIR (merah) / HADIR (hijau) + tarikh & masa - Carian nama/no. KP, tapisan pusat mengundi & status - Tanda hadir / batal dengan kawalan DUN (admin terhad ke DUN sendiri) - Eksport Excel (worksheet Hadir & Belum Hadir) guna SimpleXlsx - Peranan: superadmin (urus pengguna, semua DUN) & admin DUN - Docker: nginx + php-fpm + queue + scheduler + webhook deploy, port 127.0.0.1:8009, TZ Asia/Kuala_Lumpur di semua container - Zon waktu aplikasi: Asia/Kuala_Lumpur (APP_TIMEZONE) Berasaskan scaffold spr2026_taklimat. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
66
app/Http/Controllers/KehadiranController.php
Normal file
66
app/Http/Controllers/KehadiranController.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\KehadiranKtm;
|
||||
use App\Models\Sppm\PetugasAssignment;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class KehadiranController extends Controller
|
||||
{
|
||||
/**
|
||||
* Tanda KTM sebagai hadir mengambil peti undi. Rekod tarikh dan masa.
|
||||
*/
|
||||
public function hadir(Request $request, int $assignmentId)
|
||||
{
|
||||
$assignment = PetugasAssignment::ktm()
|
||||
->with(['permohonan', 'pusatMengundi'])
|
||||
->findOrFail($assignmentId);
|
||||
|
||||
$this->pastikanDunDibenarkan($request, $assignment);
|
||||
|
||||
KehadiranKtm::firstOrCreate(
|
||||
['assignment_id' => $assignment->id],
|
||||
[
|
||||
'permohonan_id' => $assignment->permohonan_id,
|
||||
'dun_id' => $assignment->pusatMengundi->dun_id,
|
||||
'hadir_at' => now(),
|
||||
'dicatat_oleh_user_id' => $request->user()->id,
|
||||
],
|
||||
);
|
||||
|
||||
return back()->with('status', ($assignment->permohonan?->nama_ic ?? 'KTM').' ditanda HADIR.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Batalkan rekod kehadiran (jika tersilap tanda).
|
||||
*/
|
||||
public function batal(Request $request, int $assignmentId)
|
||||
{
|
||||
$assignment = PetugasAssignment::ktm()
|
||||
->with(['permohonan', 'pusatMengundi'])
|
||||
->findOrFail($assignmentId);
|
||||
|
||||
$this->pastikanDunDibenarkan($request, $assignment);
|
||||
|
||||
KehadiranKtm::where('assignment_id', $assignment->id)->delete();
|
||||
|
||||
return back()->with('status', 'Rekod kehadiran '.($assignment->permohonan?->nama_ic ?? 'KTM').' dibatalkan.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Admin DUN hanya boleh urus KTM dalam DUN sendiri.
|
||||
*/
|
||||
private function pastikanDunDibenarkan(Request $request, PetugasAssignment $assignment): void
|
||||
{
|
||||
$user = $request->user();
|
||||
|
||||
if ($user->isSuperadmin()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((int) $assignment->pusatMengundi?->dun_id !== (int) $user->dun_id) {
|
||||
abort(403, 'KTM ini bukan dalam DUN anda.');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user