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:
8
routes/console.php
Normal file
8
routes/console.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Inspiring;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
Artisan::command('inspire', function () {
|
||||
$this->comment(Inspiring::quote());
|
||||
})->purpose('Display an inspiring quote');
|
||||
48
routes/web.php
Normal file
48
routes/web.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?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');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user