redirect()->route('dashboard')); // ---------------- Autentikasi ---------------- Route::middleware('guest')->group(function () { Route::get('login', [LoginController::class, 'showLoginForm'])->name('login'); Route::post('login', [LoginController::class, 'login']); }); Route::post('logout', [LoginController::class, 'logout'])->middleware('auth')->name('logout'); // ---------------- Laluan yang memerlukan log masuk ---------------- Route::middleware('auth')->group(function () { Route::get('dashboard', [DashboardController::class, 'index'])->name('dashboard'); // Perunding Route::resource('consultants', ConsultantController::class); // Pusat data + penugasan perunding Route::resource('data-centres', DataCentreController::class); Route::post('data-centres/{dataCentre}/assign', [DataCentreController::class, 'assign']) ->name('data-centres.assign'); Route::post('data-centres/{dataCentre}/end-assignment', [DataCentreController::class, 'endAssignment']) ->name('data-centres.end-assignment'); // Kitaran pelaporan / pembaharuan lesen Route::resource('reporting-cycles', ReportingCycleController::class)->except(['show']); // ----- Pembina templat senarai semak (kebenaran templat.urus) ----- Route::middleware('permission:templat.urus')->group(function () { Route::get('checklist-templates', [ChecklistTemplateController::class, 'index'])->name('checklist-templates.index'); Route::get('checklist-templates/create', [ChecklistTemplateController::class, 'create'])->name('checklist-templates.create'); Route::post('checklist-templates', [ChecklistTemplateController::class, 'store'])->name('checklist-templates.store'); Route::get('checklist-templates/{checklistTemplate}/builder', [ChecklistTemplateController::class, 'builder'])->name('checklist-templates.builder'); Route::put('checklist-templates/{checklistTemplate}', [ChecklistTemplateController::class, 'update'])->name('checklist-templates.update'); Route::post('checklist-templates/{checklistTemplate}/activate', [ChecklistTemplateController::class, 'activate'])->name('checklist-templates.activate'); Route::delete('checklist-templates/{checklistTemplate}', [ChecklistTemplateController::class, 'destroy'])->name('checklist-templates.destroy'); // Seksyen Route::post('checklist-templates/{template}/sections', [ChecklistBuilderController::class, 'storeSection'])->name('checklist.sections.store'); Route::put('checklist-sections/{section}', [ChecklistBuilderController::class, 'updateSection'])->name('checklist.sections.update'); Route::delete('checklist-sections/{section}', [ChecklistBuilderController::class, 'destroySection'])->name('checklist.sections.destroy'); // Skop Route::post('checklist-sections/{section}/scopes', [ChecklistBuilderController::class, 'storeScope'])->name('checklist.scopes.store'); Route::put('checklist-scopes/{scope}', [ChecklistBuilderController::class, 'updateScope'])->name('checklist.scopes.update'); Route::delete('checklist-scopes/{scope}', [ChecklistBuilderController::class, 'destroyScope'])->name('checklist.scopes.destroy'); // Item Route::post('checklist-sections/{section}/items', [ChecklistBuilderController::class, 'storeItem'])->name('checklist.items.store'); Route::put('checklist-items/{item}', [ChecklistBuilderController::class, 'updateItem'])->name('checklist.items.update'); Route::delete('checklist-items/{item}', [ChecklistBuilderController::class, 'destroyItem'])->name('checklist.items.destroy'); // Formula Route::post('checklist-templates/{template}/formulas', [ChecklistBuilderController::class, 'storeFormula'])->name('checklist.formulas.store'); Route::put('checklist-formulas/{formula}', [ChecklistBuilderController::class, 'updateFormula'])->name('checklist.formulas.update'); Route::delete('checklist-formulas/{formula}', [ChecklistBuilderController::class, 'destroyFormula'])->name('checklist.formulas.destroy'); }); // ----- Serahan (perunding & semakan JPP) ----- Route::get('submissions', [SubmissionController::class, 'index'])->name('submissions.index'); Route::get('submissions/create', [SubmissionController::class, 'create'])->name('submissions.create'); Route::post('submissions', [SubmissionController::class, 'store'])->name('submissions.store'); Route::get('submissions/{submission}', [SubmissionController::class, 'show'])->name('submissions.show'); Route::get('submissions/{submission}/edit', [SubmissionController::class, 'edit'])->name('submissions.edit'); Route::put('submissions/{submission}', [SubmissionController::class, 'update'])->name('submissions.update'); Route::post('submissions/{submission}/submit', [SubmissionController::class, 'submit'])->name('submissions.submit'); // Dokumen laporan PDF Route::post('submissions/{submission}/documents', [DocumentController::class, 'store'])->name('documents.store'); Route::get('documents/{document}/download', [DocumentController::class, 'download'])->name('documents.download'); Route::post('documents/{document}/active', [DocumentController::class, 'setActive'])->name('documents.active'); // Tindakan semakan JPP Route::post('submissions/{submission}/status', [SubmissionReviewController::class, 'updateStatus'])->name('submissions.status'); Route::post('submissions/{submission}/assign-officer', [SubmissionReviewController::class, 'assignOfficer'])->name('submissions.assign-officer'); Route::post('submissions/{submission}/lock', [SubmissionReviewController::class, 'lock'])->name('submissions.lock'); Route::post('submissions/{submission}/unlock', [SubmissionReviewController::class, 'unlock'])->name('submissions.unlock'); Route::post('submissions/{submission}/hardcopy', [SubmissionReviewController::class, 'markHardcopy'])->name('submissions.hardcopy'); Route::post('submissions/{submission}/review-note', [SubmissionReviewController::class, 'reviewNote'])->name('submissions.review-note'); Route::post('answers/{answer}/review', [SubmissionReviewController::class, 'reviewAnswer'])->name('answers.review'); // Permohonan pembetulan Route::post('submissions/{submission}/corrections', [CorrectionRequestController::class, 'store'])->name('corrections.store'); Route::post('corrections/{correction}/respond', [CorrectionRequestController::class, 'respond'])->name('corrections.respond'); Route::post('corrections/{correction}/resolve', [CorrectionRequestController::class, 'resolve'])->name('corrections.resolve'); // Komen / perbualan Route::post('submissions/{submission}/comments', [CommentController::class, 'store'])->name('comments.store'); Route::delete('comments/{comment}', [CommentController::class, 'destroy'])->name('comments.destroy'); // Senarai peringatan / belum serah Route::get('reminders', [ReminderController::class, 'index'])->name('reminders.index'); // Laporan & statistik Route::get('reports', [ReportController::class, 'index'])->name('reports.index'); // Pengurusan pengguna Route::resource('users', UserController::class)->except(['show']); // Tetapan aplikasi Route::get('settings', [SettingController::class, 'edit'])->name('settings.edit'); Route::put('settings', [SettingController::class, 'update'])->name('settings.update'); // Log audit Route::get('audit-log', [AuditLogController::class, 'index'])->name('audit.index'); });