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>
49 lines
2.4 KiB
PHP
49 lines
2.4 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\AuthController;
|
|
use App\Http\Controllers\DashboardController;
|
|
use App\Http\Controllers\EksportKehadiranController;
|
|
use App\Http\Controllers\KehadiranController;
|
|
use App\Http\Controllers\PasswordResetController;
|
|
use App\Http\Controllers\PenggunaController;
|
|
use App\Http\Controllers\ProfilController;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
Route::redirect('/', '/login');
|
|
|
|
// Log masuk
|
|
Route::get('/login', [AuthController::class, 'showLogin'])->name('login');
|
|
Route::post('/login', [AuthController::class, 'login'])->name('login.attempt');
|
|
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
|
|
|
|
// Lupa kata laluan
|
|
Route::get('/lupa-katalaluan', [PasswordResetController::class, 'showLinkRequestForm'])->name('password.request');
|
|
Route::post('/lupa-katalaluan', [PasswordResetController::class, 'sendResetLink'])->name('password.email');
|
|
Route::get('/set-kata-laluan/{token}', [PasswordResetController::class, 'showResetForm'])->name('password.reset');
|
|
Route::post('/set-kata-laluan', [PasswordResetController::class, 'reset'])->name('password.update');
|
|
|
|
Route::middleware(['auth'])->group(function () {
|
|
// Profil sendiri: tukar kata laluan (semua peranan)
|
|
Route::get('/profil', [ProfilController::class, 'edit'])->name('profil.edit');
|
|
Route::put('/profil/kata-laluan', [ProfilController::class, 'updatePassword'])->name('profil.kata-laluan');
|
|
|
|
Route::middleware(['role:superadmin,admin'])->group(function () {
|
|
// Dashboard kehadiran KTM ambil peti undi
|
|
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
|
|
|
|
// Tanda hadir / batal
|
|
Route::post('/kehadiran/{assignment}/hadir', [KehadiranController::class, 'hadir'])->name('kehadiran.hadir');
|
|
Route::delete('/kehadiran/{assignment}', [KehadiranController::class, 'batal'])->name('kehadiran.batal');
|
|
|
|
// Muat turun senarai kehadiran (Excel)
|
|
Route::get('/eksport-kehadiran', EksportKehadiranController::class)->name('kehadiran.eksport');
|
|
});
|
|
|
|
Route::middleware(['role:superadmin'])->group(function () {
|
|
// Pengurusan pengguna (superadmin sahaja)
|
|
Route::get('/pengguna', [PenggunaController::class, 'index'])->name('pengguna.index');
|
|
Route::get('/pengguna/cipta', [PenggunaController::class, 'create'])->name('pengguna.create');
|
|
Route::post('/pengguna', [PenggunaController::class, 'store'])->name('pengguna.store');
|
|
});
|
|
});
|