This commit is contained in:
Saufi
2026-06-03 08:51:22 +08:00
commit a14d43fe34
347 changed files with 38197 additions and 0 deletions

215
routes/web.php Normal file
View File

@@ -0,0 +1,215 @@
<?php
use App\Http\Controllers\Admin\AttendanceController as AdminAttendanceController;
use App\Http\Controllers\Admin\Management\AdminManagementController;
use App\Http\Controllers\Admin\Management\ManagedApplicationController;
use App\Http\Controllers\Admin\Management\RepresentativeController;
use App\Http\Controllers\Admin\Management\StaffAssignmentController;
use App\Http\Controllers\Admin\Management\PennempatanController;
use App\Http\Controllers\Admin\Management\WheelchairController;
use App\Http\Controllers\Admin\Setup\AdminSetupController;
use App\Http\Controllers\Admin\Setup\ElectionSettingsController;
use App\Http\Controllers\Admin\Setup\PusatImportController;
use App\Http\Controllers\Admin\Setup\PositionController;
use App\Http\Controllers\Admin\Setup\PositionQuotaController;
use App\Http\Controllers\Admin\Setup\PusatLevelQuotaController;
use App\Http\Controllers\Admin\Setup\PusatMengundiController;
use App\Http\Controllers\Admin\Setup\SaluranMengundiController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\DocumentDownloadController;
use App\Http\Controllers\Kewangan\BankVerificationController;
use App\Http\Controllers\Ktm\TeamController as KtmTeamController;
use App\Http\Controllers\Ppm\ApplicationReviewController as PpmApplicationReviewController;
use App\Http\Controllers\Ppm\AttendanceController as PpmAttendanceController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\PublicApplicationController;
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
})->name('home');
Route::get('/permohonan/{application:public_uuid}/berjaya', [PublicApplicationController::class, 'success'])
->name('public.applications.success');
Route::get('/permohonan/{publicUuid}/status', [PublicApplicationController::class, 'status'])
->name('public.applications.status');
Route::get('/pohon/{pusatMengundi:public_uuid}', [PublicApplicationController::class, 'create'])
->name('public.applications.create');
Route::post('/pohon/{pusatMengundi:public_uuid}', [PublicApplicationController::class, 'store'])
->name('public.applications.store');
Route::middleware('auth')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
Route::get('/admin/dashboard', [DashboardController::class, 'admin'])
->middleware('role:Admin')
->name('admin.dashboard');
Route::get('/kewangan/dashboard', [DashboardController::class, 'kewangan'])
->middleware('role:Admin Kewangan')
->name('kewangan.dashboard');
Route::get('/ppm/dashboard', [DashboardController::class, 'ppm'])
->middleware('role:PPM')
->name('ppm.dashboard');
Route::get('/ktm/dashboard', [DashboardController::class, 'ktm'])
->middleware('role:KTM')
->name('ktm.dashboard');
Route::get('/pemohon/dashboard', [DashboardController::class, 'pemohon'])
->middleware('role:Pemohon')
->name('pemohon.dashboard');
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
Route::middleware(['auth', 'role:Admin'])
->prefix('admin/setup')
->name('admin.setup.')
->group(function (): void {
Route::get('/', [AdminSetupController::class, 'index'])->name('index');
Route::get('import', [PusatImportController::class, 'create'])->name('import.create');
Route::post('import', [PusatImportController::class, 'store'])->name('import.store');
Route::resource('pusat', PusatMengundiController::class)
->parameters(['pusat' => 'pusatMengundi']);
Route::post('pusat/{pusatMengundi}/generate-qr', [PusatMengundiController::class, 'generateQr'])
->name('pusat.generate-qr');
Route::get('pusat/{pusatMengundi}/qr.svg', [PusatMengundiController::class, 'qrSvg'])
->name('pusat.qr-svg');
Route::post('pusat/{pusatMengundi}/assign-ppm', [PusatMengundiController::class, 'assignPpm'])
->name('pusat.assign-ppm');
Route::resource('pusat.saluran', SaluranMengundiController::class)
->parameters(['pusat' => 'pusatMengundi', 'saluran' => 'saluranMengundi'])
->except(['show']);
Route::resource('positions', PositionController::class)
->except(['show']);
Route::resource('pusat.kuota', PusatLevelQuotaController::class)
->parameters(['pusat' => 'pusatMengundi', 'kuota' => 'quota'])
->except(['show']);
Route::resource('pusat.saluran.kuota', PositionQuotaController::class)
->parameters(['pusat' => 'pusatMengundi', 'saluran' => 'saluranMengundi', 'kuota' => 'quota'])
->except(['show']);
Route::get('settings/{election}', [ElectionSettingsController::class, 'edit'])
->name('settings.edit');
Route::post('settings/{election}', [ElectionSettingsController::class, 'store'])
->name('settings.store');
Route::patch('settings/{election}', [ElectionSettingsController::class, 'update'])
->name('settings.update');
});
Route::middleware(['auth', 'role:Admin', 'admin.post_close_note'])
->prefix('admin/management')
->name('admin.management.')
->group(function (): void {
Route::get('/', [AdminManagementController::class, 'index'])->name('index');
Route::get('/applications', [ManagedApplicationController::class, 'index'])->name('applications.index');
Route::get('/applications/create', [ManagedApplicationController::class, 'create'])->name('applications.create');
Route::post('/applications', [ManagedApplicationController::class, 'store'])->name('applications.store');
Route::get('/applications/{application:public_uuid}/edit', [ManagedApplicationController::class, 'edit'])->name('applications.edit');
Route::patch('/applications/{application:public_uuid}', [ManagedApplicationController::class, 'update'])->name('applications.update');
Route::post('/applications/{application:public_uuid}/assign', [ManagedApplicationController::class, 'assign'])->name('applications.assign');
Route::get('/assignments', [StaffAssignmentController::class, 'index'])->name('assignments.index');
Route::get('/assignments/{assignment}/edit', [StaffAssignmentController::class, 'edit'])->name('assignments.edit');
Route::patch('/assignments/{assignment}', [StaffAssignmentController::class, 'update'])->name('assignments.update');
Route::get('/representatives', [RepresentativeController::class, 'index'])->name('representatives.index');
Route::post('/representatives', [RepresentativeController::class, 'store'])->name('representatives.store');
Route::delete('/representatives/{type}/{id}', [RepresentativeController::class, 'destroy'])->name('representatives.destroy');
Route::get('/penempatan/{pusatMengundi}', [PennempatanController::class, 'show'])->name('penempatan.show');
Route::post('/penempatan/{pusatMengundi}/lepas/{assignment}', [PennempatanController::class, 'lepas'])->name('penempatan.lepas');
Route::get('/penempatan/{pusatMengundi}/pindah/{assignment}', [PennempatanController::class, 'pindahForm'])->name('penempatan.pindah.form');
Route::post('/penempatan/{pusatMengundi}/pindah/{assignment}', [PennempatanController::class, 'pindah'])->name('penempatan.pindah');
Route::get('/wheelchairs', [WheelchairController::class, 'index'])->name('wheelchairs.index');
Route::post('/wheelchairs', [WheelchairController::class, 'store'])->name('wheelchairs.store');
Route::get('/wheelchairs/{allocation}', [WheelchairController::class, 'show'])->name('wheelchairs.show');
Route::patch('/wheelchairs/{allocation}', [WheelchairController::class, 'update'])->name('wheelchairs.update');
Route::post('/wheelchairs/{allocation}/ambil', [WheelchairController::class, 'recordTaken'])->name('wheelchairs.ambil');
Route::post('/wheelchairs/{allocation}/pulang', [WheelchairController::class, 'recordReturn'])->name('wheelchairs.pulang');
});
Route::middleware(['auth', 'role:Admin'])
->prefix('admin/attendance')
->name('admin.attendance.')
->group(function (): void {
Route::get('/', [AdminAttendanceController::class, 'index'])->name('index');
Route::get('/{pusatMengundi}', [AdminAttendanceController::class, 'show'])->name('show');
Route::get('/{pusatMengundi}/export', [AdminAttendanceController::class, 'export'])->name('export');
});
Route::middleware(['auth', 'role:Admin'])
->prefix('admin/documents')
->name('admin.documents.')
->group(function (): void {
Route::get('/{document}', [DocumentDownloadController::class, 'admin'])->name('download');
});
Route::middleware(['auth', 'role:Admin Kewangan|Admin'])
->prefix('kewangan')
->name('kewangan.')
->group(function (): void {
Route::get('/bank', [BankVerificationController::class, 'index'])->name('bank.index');
Route::get('/bank/export', [BankVerificationController::class, 'export'])->name('bank.export');
Route::get('/bank/{bankVerification}', [BankVerificationController::class, 'show'])->name('bank.show');
Route::patch('/bank/{bankVerification}', [BankVerificationController::class, 'update'])->name('bank.update');
Route::get('/documents/{document}', [DocumentDownloadController::class, 'finance'])->name('documents.download');
});
Route::middleware(['auth', 'role:PPM'])
->prefix('ppm')
->name('ppm.')
->group(function (): void {
Route::get('/applications', [PpmApplicationReviewController::class, 'index'])
->name('applications.index');
Route::get('/applications/{application:public_uuid}', [PpmApplicationReviewController::class, 'show'])
->name('applications.show');
Route::post('/applications/{application:public_uuid}/approve', [PpmApplicationReviewController::class, 'approve'])
->name('applications.approve');
Route::post('/applications/{application:public_uuid}/reject', [PpmApplicationReviewController::class, 'reject'])
->name('applications.reject');
Route::get('/applications/{application:public_uuid}/documents/{document}', [PpmApplicationReviewController::class, 'downloadDocument'])
->name('applications.documents.download');
Route::get('/attendance', [PpmAttendanceController::class, 'index'])
->name('attendance.index');
Route::get('/attendance/{pusatMengundi}', [PpmAttendanceController::class, 'show'])
->name('attendance.show');
Route::post('/attendance/{pusatMengundi}', [PpmAttendanceController::class, 'store'])
->name('attendance.store');
});
Route::middleware(['auth', 'role:KTM'])
->prefix('ktm')
->name('ktm.')
->group(function (): void {
Route::get('/applications', [KtmTeamController::class, 'index'])
->name('applications.index');
Route::get('/applications/create', [KtmTeamController::class, 'create'])
->name('applications.create');
Route::post('/applications', [KtmTeamController::class, 'store'])
->name('applications.store');
Route::get('/applications/{application:public_uuid}', [KtmTeamController::class, 'show'])
->name('applications.show');
Route::post('/applications/{application:public_uuid}/approve', [KtmTeamController::class, 'approve'])
->name('applications.approve');
Route::delete('/applications/{application:public_uuid}', [KtmTeamController::class, 'destroy'])
->name('applications.destroy');
});
require __DIR__.'/auth.php';