use Illuminate\Support\Facades\Route; use App\Http\Controllers\DashboardController; use App\Http\Controllers\ProfileController; use App\Http\Controllers\StudentController; use App\Http\Controllers\StudentMonthlyPaymentController; use App\Http\Controllers\ClassController; use App\Http\Controllers\FeeController; use App\Http\Controllers\FeeCategoryController; use App\Http\Controllers\DonationController; use App\Http\Controllers\DonationCategoryController; use App\Http\Controllers\ExpenseController; use App\Http\Controllers\ExpenseCategoryController; use App\Http\Controllers\ReportController; use App\Http\Controllers\AnalyticsController; use App\Http\Controllers\UserController; use App\Http\Controllers\RoleController; use App\Http\Controllers\ActivityLogController; use App\Http\Controllers\SettingController; use App\Http\Controllers\BackupController; Route::get('/', function () { return view('welcome'); })->name('welcome'); Route::get('/language/{locale}', function ($locale) { if (! in_array($locale, ['en', 'bn'], true)) { abort(400); } session(['locale' => $locale]); return back(); })->name('language.switch'); Route::middleware('auth')->group(function () { Route::get('/dashboard', [DashboardController::class, 'index']) ->name('dashboard'); Route::resource('students', StudentController::class); Route::post('/students/{student}/monthly-payment', [StudentMonthlyPaymentController::class, 'store']) ->name('students.monthly-payment.store'); Route::post('/students/{student}/pay-month', [StudentMonthlyPaymentController::class, 'markPaid']) ->name('students.monthly.pay'); Route::post('/students/{student}/fees/{fee}/pay', [StudentController::class, 'payExtraFee']) ->name('students.fee.pay'); Route::post('/students/payments/{payment}/revert', [StudentController::class, 'revertPayment']) ->name('students.payment.revert'); Route::resource('classes', ClassController::class)->except(['create', 'show', 'edit']); Route::resource('fees', FeeController::class)->except(['create', 'show', 'edit', 'update']); Route::resource('fee-categories', FeeCategoryController::class)->except(['show']); Route::get('/fees/collect', [FeeController::class, 'collectIndex'])->name('fees.collect'); Route::get('/fees/collect/{student}', [FeeController::class, 'show'])->name('fees.student.show'); Route::get('/fees/generate', [FeeController::class, 'generateIndex'])->name('fees.generate'); Route::resource('donations', DonationController::class); Route::resource('donation-categories', DonationCategoryController::class) ->except(['show', 'create', 'edit']); Route::resource('expenses', ExpenseController::class); Route::prefix('expense-categories')->name('expense-categories.')->group(function () { Route::get('/', [ExpenseCategoryController::class, 'index'])->name('index'); Route::post('/', [ExpenseCategoryController::class, 'store'])->name('store'); Route::put('/{id}', [ExpenseCategoryController::class, 'update'])->name('update'); Route::delete('/{id}', [ExpenseCategoryController::class, 'destroy'])->name('destroy'); }); Route::middleware('permission:report.view')->group(function () { Route::match(['get', 'post'], '/financial-report', [ReportController::class, 'financial']) ->name('financial.report'); Route::match(['get', 'post'], '/expense-report', [ExpenseController::class, 'report']) ->name('expenses.report'); Route::get('/expense-report/pdf', [ExpenseController::class, 'reportPdf']) ->name('expenses.report.pdf'); Route::get('/donation-report', [DonationController::class, 'report']) ->name('donation.report'); Route::get('/donation-report/pdf', [DonationController::class, 'reportPdf']) ->name('donation.report.pdf'); }); Route::middleware('permission:analytics.view')->group(function () { Route::get('/analytics', [AnalyticsController::class, 'index'])->name('analytics'); Route::get('/monthly-analytics', [AnalyticsController::class, 'index'])->name('analytics.index'); }); Route::resource('roles', RoleController::class); Route::resource('users', UserController::class); Route::patch('/users/{id}/reset-password', [UserController::class, 'resetPassword']) ->name('users.reset-password'); Route::get('/activity-log', [ActivityLogController::class, 'index']) ->middleware('permission:activity.view') ->name('activity.log'); Route::get('/settings', [SettingController::class, 'index']) ->name('settings.index'); Route::post('/settings', [SettingController::class, 'update']) ->name('settings.update'); Route::get('/backup', [BackupController::class, 'download']) ->middleware(['permission:backup.download', 'throttle:2,1']) ->name('backup.download'); Route::prefix('profile')->name('profile.')->group(function () { Route::get('/', [ProfileController::class, 'edit'])->name('edit'); Route::patch('/', [ProfileController::class, 'update'])->name('update'); Route::delete('/', [ProfileController::class, 'destroy'])->name('destroy'); }); }); require __DIR__.'/auth.php';