Initial commit
This commit is contained in:
269
routes/web.php
Normal file
269
routes/web.php
Normal file
@@ -0,0 +1,269 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\ProfileController;
|
||||
use App\Http\Controllers\MemberDashboardController;
|
||||
use App\Http\Controllers\AdminMemberController;
|
||||
use App\Http\Controllers\AdminPaymentController;
|
||||
use App\Http\Controllers\FinanceDocumentController;
|
||||
use App\Http\Controllers\PaymentOrderController;
|
||||
use App\Http\Controllers\CashierLedgerController;
|
||||
use App\Http\Controllers\BankReconciliationController;
|
||||
use App\Http\Controllers\AdminAuditLogController;
|
||||
use App\Http\Controllers\AdminRoleController;
|
||||
use App\Http\Controllers\AdminDashboardController;
|
||||
use App\Http\Controllers\BudgetController;
|
||||
use App\Http\Controllers\TransactionController;
|
||||
use App\Http\Controllers\IssueController;
|
||||
use App\Http\Controllers\IssueLabelController;
|
||||
use App\Http\Controllers\IssueReportsController;
|
||||
use App\Http\Controllers\PublicMemberRegistrationController;
|
||||
use App\Http\Controllers\MemberPaymentController;
|
||||
use App\Http\Controllers\PaymentVerificationController;
|
||||
use App\Http\Controllers\PublicDocumentController;
|
||||
use App\Http\Controllers\Admin\DocumentController;
|
||||
use App\Http\Controllers\Admin\DocumentCategoryController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Web Routes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here is where you can register web routes for your application. These
|
||||
| routes are loaded by the RouteServiceProvider and all of them will
|
||||
| be assigned to the "web" middleware group. Make something great!
|
||||
|
|
||||
*/
|
||||
|
||||
Route::get('/', function () {
|
||||
return view('welcome');
|
||||
});
|
||||
|
||||
Route::get('/dashboard', function () {
|
||||
$recentDocuments = \App\Models\Document::with(['category', 'currentVersion'])
|
||||
->where('status', 'active')
|
||||
->latest()
|
||||
->limit(5)
|
||||
->get()
|
||||
->filter(fn($doc) => $doc->canBeViewedBy(auth()->user()));
|
||||
|
||||
return view('dashboard', compact('recentDocuments'));
|
||||
})->middleware(['auth', 'verified'])->name('dashboard');
|
||||
|
||||
// Public Member Registration Routes
|
||||
Route::get('/register/member', [PublicMemberRegistrationController::class, 'create'])->name('register.member');
|
||||
Route::post('/register/member', [PublicMemberRegistrationController::class, 'store'])->name('register.member.store');
|
||||
|
||||
// Public Document Routes (accessible with optional auth)
|
||||
Route::get('/documents', [PublicDocumentController::class, 'index'])->name('documents.index');
|
||||
Route::get('/documents/{uuid}', [PublicDocumentController::class, 'show'])->name('documents.public.show');
|
||||
Route::get('/documents/{uuid}/download', [PublicDocumentController::class, 'download'])
|
||||
->middleware('throttle:document-downloads')
|
||||
->name('documents.public.download');
|
||||
Route::get('/documents/{uuid}/qrcode', [PublicDocumentController::class, 'downloadQRCode'])->name('documents.public.qrcode');
|
||||
Route::get('/documents/{uuid}/versions/{version}/download', [PublicDocumentController::class, 'downloadVersion'])
|
||||
->middleware('throttle:document-downloads')
|
||||
->name('documents.public.download-version');
|
||||
|
||||
Route::middleware('auth')->group(function () {
|
||||
// Member Payment Submission Routes
|
||||
Route::get('/member/submit-payment', [MemberPaymentController::class, 'create'])->name('member.payments.create');
|
||||
Route::post('/member/payments', [MemberPaymentController::class, 'store'])->name('member.payments.store');
|
||||
Route::get('/my-membership', [MemberDashboardController::class, 'show'])
|
||||
->name('member.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', 'admin'])->prefix('admin')->name('admin.')->group(function () {
|
||||
Route::get('/dashboard', [AdminDashboardController::class, 'index'])->name('dashboard');
|
||||
|
||||
Route::get('/members', [AdminMemberController::class, 'index'])->name('members.index');
|
||||
Route::get('/members/create', [AdminMemberController::class, 'create'])->name('members.create');
|
||||
Route::post('/members', [AdminMemberController::class, 'store'])->name('members.store');
|
||||
Route::get('/members/import', [AdminMemberController::class, 'importForm'])->name('members.import-form');
|
||||
Route::post('/members/import', [AdminMemberController::class, 'import'])->name('members.import');
|
||||
Route::get('/members/export', [AdminMemberController::class, 'export'])->name('members.export');
|
||||
Route::get('/members/{member}', [AdminMemberController::class, 'show'])->name('members.show');
|
||||
Route::get('/members/{member}/edit', [AdminMemberController::class, 'edit'])->name('members.edit');
|
||||
Route::patch('/members/{member}', [AdminMemberController::class, 'update'])->name('members.update');
|
||||
Route::patch('/members/{member}/roles', [AdminMemberController::class, 'updateRoles'])->name('members.roles.update');
|
||||
|
||||
Route::get('/members/{member}/payments/create', [AdminPaymentController::class, 'create'])->name('members.payments.create');
|
||||
Route::post('/members/{member}/payments', [AdminPaymentController::class, 'store'])->name('members.payments.store');
|
||||
Route::get('/members/{member}/payments/{payment}/edit', [AdminPaymentController::class, 'edit'])->name('members.payments.edit');
|
||||
Route::patch('/members/{member}/payments/{payment}', [AdminPaymentController::class, 'update'])->name('members.payments.update');
|
||||
Route::delete('/members/{member}/payments/{payment}', [AdminPaymentController::class, 'destroy'])->name('members.payments.destroy');
|
||||
Route::get('/members/{member}/payments/{payment}/receipt', [AdminPaymentController::class, 'receipt'])->name('members.payments.receipt');
|
||||
|
||||
Route::get('/finance-documents', [FinanceDocumentController::class, 'index'])->name('finance.index');
|
||||
Route::get('/finance-documents/create', [FinanceDocumentController::class, 'create'])->name('finance.create');
|
||||
Route::post('/finance-documents', [FinanceDocumentController::class, 'store'])->name('finance.store');
|
||||
Route::get('/finance-documents/{financeDocument}', [FinanceDocumentController::class, 'show'])->name('finance.show');
|
||||
Route::post('/finance-documents/{financeDocument}/approve', [FinanceDocumentController::class, 'approve'])->name('finance.approve');
|
||||
Route::post('/finance-documents/{financeDocument}/reject', [FinanceDocumentController::class, 'reject'])->name('finance.reject');
|
||||
Route::get('/finance-documents/{financeDocument}/download', [FinanceDocumentController::class, 'download'])->name('finance.download');
|
||||
|
||||
// Payment Orders (Stage 2: Payment)
|
||||
Route::get('/payment-orders', [PaymentOrderController::class, 'index'])->name('payment-orders.index');
|
||||
Route::get('/payment-orders/create/{financeDocument}', [PaymentOrderController::class, 'create'])->name('payment-orders.create');
|
||||
Route::post('/payment-orders/{financeDocument}', [PaymentOrderController::class, 'store'])->name('payment-orders.store');
|
||||
Route::get('/payment-orders/{paymentOrder}', [PaymentOrderController::class, 'show'])->name('payment-orders.show');
|
||||
Route::post('/payment-orders/{paymentOrder}/verify', [PaymentOrderController::class, 'verify'])->name('payment-orders.verify');
|
||||
Route::post('/payment-orders/{paymentOrder}/execute', [PaymentOrderController::class, 'execute'])->name('payment-orders.execute');
|
||||
Route::post('/payment-orders/{paymentOrder}/cancel', [PaymentOrderController::class, 'cancel'])->name('payment-orders.cancel');
|
||||
Route::get('/payment-orders/{paymentOrder}/receipt', [PaymentOrderController::class, 'downloadReceipt'])->name('payment-orders.download-receipt');
|
||||
|
||||
// Cashier Ledger (Stage 3: Recording - Cashier)
|
||||
Route::get('/cashier-ledger', [CashierLedgerController::class, 'index'])->name('cashier-ledger.index');
|
||||
Route::get('/cashier-ledger/create', [CashierLedgerController::class, 'create'])->name('cashier-ledger.create');
|
||||
Route::post('/cashier-ledger', [CashierLedgerController::class, 'store'])->name('cashier-ledger.store');
|
||||
Route::get('/cashier-ledger/{cashierLedgerEntry}', [CashierLedgerController::class, 'show'])->name('cashier-ledger.show');
|
||||
Route::get('/cashier-ledger/balance-report', [CashierLedgerController::class, 'balanceReport'])->name('cashier-ledger.balance-report');
|
||||
Route::get('/cashier-ledger/export', [CashierLedgerController::class, 'export'])->name('cashier-ledger.export');
|
||||
|
||||
// Bank Reconciliations (Stage 4: Reconciliation)
|
||||
Route::get('/bank-reconciliations', [BankReconciliationController::class, 'index'])->name('bank-reconciliations.index');
|
||||
Route::get('/bank-reconciliations/create', [BankReconciliationController::class, 'create'])->name('bank-reconciliations.create');
|
||||
Route::post('/bank-reconciliations', [BankReconciliationController::class, 'store'])->name('bank-reconciliations.store');
|
||||
Route::get('/bank-reconciliations/{bankReconciliation}', [BankReconciliationController::class, 'show'])->name('bank-reconciliations.show');
|
||||
Route::post('/bank-reconciliations/{bankReconciliation}/review', [BankReconciliationController::class, 'review'])->name('bank-reconciliations.review');
|
||||
Route::post('/bank-reconciliations/{bankReconciliation}/approve', [BankReconciliationController::class, 'approve'])->name('bank-reconciliations.approve');
|
||||
Route::get('/bank-reconciliations/{bankReconciliation}/statement', [BankReconciliationController::class, 'downloadStatement'])->name('bank-reconciliations.download-statement');
|
||||
Route::get('/bank-reconciliations/{bankReconciliation}/export-pdf', [BankReconciliationController::class, 'exportPdf'])->name('bank-reconciliations.export-pdf');
|
||||
|
||||
Route::get('/audit-logs', [AdminAuditLogController::class, 'index'])->name('audit.index');
|
||||
Route::get('/audit-logs/export', [AdminAuditLogController::class, 'export'])->name('audit.export');
|
||||
|
||||
Route::get('/roles', [AdminRoleController::class, 'index'])->name('roles.index');
|
||||
Route::get('/roles/create', [AdminRoleController::class, 'create'])->name('roles.create');
|
||||
Route::post('/roles', [AdminRoleController::class, 'store'])->name('roles.store');
|
||||
Route::get('/roles/{role}', [AdminRoleController::class, 'show'])->name('roles.show');
|
||||
Route::get('/roles/{role}/edit', [AdminRoleController::class, 'edit'])->name('roles.edit');
|
||||
Route::patch('/roles/{role}', [AdminRoleController::class, 'update'])->name('roles.update');
|
||||
Route::post('/roles/{role}/assign-users', [AdminRoleController::class, 'assignUsers'])->name('roles.assign-users');
|
||||
Route::delete('/roles/{role}/users/{user}', [AdminRoleController::class, 'removeUser'])->name('roles.remove-user');
|
||||
|
||||
Route::get('/budgets', [BudgetController::class, 'index'])->name('budgets.index');
|
||||
Route::get('/budgets/create', [BudgetController::class, 'create'])->name('budgets.create');
|
||||
Route::post('/budgets', [BudgetController::class, 'store'])->name('budgets.store');
|
||||
Route::get('/budgets/{budget}', [BudgetController::class, 'show'])->name('budgets.show');
|
||||
Route::get('/budgets/{budget}/edit', [BudgetController::class, 'edit'])->name('budgets.edit');
|
||||
Route::patch('/budgets/{budget}', [BudgetController::class, 'update'])->name('budgets.update');
|
||||
Route::post('/budgets/{budget}/submit', [BudgetController::class, 'submit'])->name('budgets.submit');
|
||||
Route::post('/budgets/{budget}/approve', [BudgetController::class, 'approve'])->name('budgets.approve');
|
||||
Route::post('/budgets/{budget}/activate', [BudgetController::class, 'activate'])->name('budgets.activate');
|
||||
Route::post('/budgets/{budget}/close', [BudgetController::class, 'close'])->name('budgets.close');
|
||||
Route::delete('/budgets/{budget}', [BudgetController::class, 'destroy'])->name('budgets.destroy');
|
||||
|
||||
Route::get('/transactions', [TransactionController::class, 'index'])->name('transactions.index');
|
||||
Route::get('/transactions/create', [TransactionController::class, 'create'])->name('transactions.create');
|
||||
Route::post('/transactions', [TransactionController::class, 'store'])->name('transactions.store');
|
||||
Route::get('/transactions/{transaction}', [TransactionController::class, 'show'])->name('transactions.show');
|
||||
Route::get('/transactions/{transaction}/edit', [TransactionController::class, 'edit'])->name('transactions.edit');
|
||||
Route::patch('/transactions/{transaction}', [TransactionController::class, 'update'])->name('transactions.update');
|
||||
Route::delete('/transactions/{transaction}', [TransactionController::class, 'destroy'])->name('transactions.destroy');
|
||||
|
||||
// Issue Tracker Routes
|
||||
Route::get('/issues', [IssueController::class, 'index'])->name('issues.index');
|
||||
Route::get('/issues/create', [IssueController::class, 'create'])->name('issues.create');
|
||||
Route::post('/issues', [IssueController::class, 'store'])->name('issues.store');
|
||||
Route::get('/issues/{issue}', [IssueController::class, 'show'])->name('issues.show');
|
||||
Route::get('/issues/{issue}/edit', [IssueController::class, 'edit'])->name('issues.edit');
|
||||
Route::patch('/issues/{issue}', [IssueController::class, 'update'])->name('issues.update');
|
||||
Route::delete('/issues/{issue}', [IssueController::class, 'destroy'])->name('issues.destroy');
|
||||
|
||||
// Issue workflow actions
|
||||
Route::post('/issues/{issue}/assign', [IssueController::class, 'assign'])->name('issues.assign');
|
||||
Route::patch('/issues/{issue}/status', [IssueController::class, 'updateStatus'])->name('issues.update-status');
|
||||
|
||||
// Issue comments and attachments
|
||||
Route::post('/issues/{issue}/comments', [IssueController::class, 'addComment'])->name('issues.comments.store');
|
||||
Route::post('/issues/{issue}/attachments', [IssueController::class, 'uploadAttachment'])->name('issues.attachments.store');
|
||||
Route::get('/issues/attachments/{attachment}/download', [IssueController::class, 'downloadAttachment'])->name('issues.attachments.download');
|
||||
Route::delete('/issues/attachments/{attachment}', [IssueController::class, 'deleteAttachment'])->name('issues.attachments.destroy');
|
||||
|
||||
// Issue time tracking
|
||||
Route::post('/issues/{issue}/time-logs', [IssueController::class, 'logTime'])->name('issues.time-logs.store');
|
||||
|
||||
// Issue watchers
|
||||
Route::post('/issues/{issue}/watchers', [IssueController::class, 'addWatcher'])->name('issues.watchers.store');
|
||||
Route::delete('/issues/{issue}/watchers', [IssueController::class, 'removeWatcher'])->name('issues.watchers.destroy');
|
||||
|
||||
// Issue Labels Management
|
||||
Route::get('/issue-labels', [IssueLabelController::class, 'index'])->name('issue-labels.index');
|
||||
Route::get('/issue-labels/create', [IssueLabelController::class, 'create'])->name('issue-labels.create');
|
||||
Route::post('/issue-labels', [IssueLabelController::class, 'store'])->name('issue-labels.store');
|
||||
Route::get('/issue-labels/{issueLabel}/edit', [IssueLabelController::class, 'edit'])->name('issue-labels.edit');
|
||||
Route::patch('/issue-labels/{issueLabel}', [IssueLabelController::class, 'update'])->name('issue-labels.update');
|
||||
Route::delete('/issue-labels/{issueLabel}', [IssueLabelController::class, 'destroy'])->name('issue-labels.destroy');
|
||||
|
||||
// Issue Reports & Analytics
|
||||
Route::get('/issue-reports', [IssueReportsController::class, 'index'])->name('issue-reports.index');
|
||||
|
||||
// Payment Verification Routes
|
||||
Route::get('/payment-verifications', [PaymentVerificationController::class, 'index'])->name('payment-verifications.index');
|
||||
Route::get('/payment-verifications/{payment}', [PaymentVerificationController::class, 'show'])->name('payment-verifications.show');
|
||||
Route::post('/payment-verifications/{payment}/approve-cashier', [PaymentVerificationController::class, 'approveByCashier'])->name('payment-verifications.approve-cashier');
|
||||
Route::post('/payment-verifications/{payment}/approve-accountant', [PaymentVerificationController::class, 'approveByAccountant'])->name('payment-verifications.approve-accountant');
|
||||
Route::post('/payment-verifications/{payment}/approve-chair', [PaymentVerificationController::class, 'approveByChair'])->name('payment-verifications.approve-chair');
|
||||
Route::post('/payment-verifications/{payment}/reject', [PaymentVerificationController::class, 'reject'])->name('payment-verifications.reject');
|
||||
Route::get('/payment-verifications/{payment}/receipt', [PaymentVerificationController::class, 'downloadReceipt'])->name('payment-verifications.download-receipt');
|
||||
|
||||
// Membership Activation Routes
|
||||
Route::get('/members/{member}/activate', [AdminMemberController::class, 'showActivate'])->name('members.activate');
|
||||
Route::post('/members/{member}/activate', [AdminMemberController::class, 'activate'])->name('members.activate.store');
|
||||
|
||||
// Document Categories Management
|
||||
Route::get('/document-categories', [DocumentCategoryController::class, 'index'])->name('document-categories.index');
|
||||
Route::get('/document-categories/create', [DocumentCategoryController::class, 'create'])->name('document-categories.create');
|
||||
Route::post('/document-categories', [DocumentCategoryController::class, 'store'])->name('document-categories.store');
|
||||
Route::get('/document-categories/{documentCategory}/edit', [DocumentCategoryController::class, 'edit'])->name('document-categories.edit');
|
||||
Route::patch('/document-categories/{documentCategory}', [DocumentCategoryController::class, 'update'])->name('document-categories.update');
|
||||
Route::delete('/document-categories/{documentCategory}', [DocumentCategoryController::class, 'destroy'])->name('document-categories.destroy');
|
||||
|
||||
// Document Management (with Version Control)
|
||||
Route::get('/documents/statistics', [DocumentController::class, 'statistics'])
|
||||
->middleware('can:view_document_statistics')
|
||||
->name('documents.statistics');
|
||||
Route::get('/documents', [DocumentController::class, 'index'])->name('documents.index');
|
||||
Route::get('/documents/create', [DocumentController::class, 'create'])->name('documents.create');
|
||||
Route::post('/documents', [DocumentController::class, 'store'])->name('documents.store');
|
||||
Route::get('/documents/{document}', [DocumentController::class, 'show'])->name('documents.show');
|
||||
Route::get('/documents/{document}/edit', [DocumentController::class, 'edit'])->name('documents.edit');
|
||||
Route::patch('/documents/{document}', [DocumentController::class, 'update'])->name('documents.update');
|
||||
Route::delete('/documents/{document}', [DocumentController::class, 'destroy'])->name('documents.destroy');
|
||||
|
||||
// Document Version Control
|
||||
Route::post('/documents/{document}/upload-version', [DocumentController::class, 'uploadNewVersion'])->name('documents.upload-version');
|
||||
Route::post('/documents/{document}/versions/{version}/promote', [DocumentController::class, 'promoteVersion'])->name('documents.promote-version');
|
||||
Route::get('/documents/{document}/versions/{version}/download', [DocumentController::class, 'downloadVersion'])->name('documents.download-version');
|
||||
|
||||
// Document Archive/Restore
|
||||
Route::post('/documents/{document}/archive', [DocumentController::class, 'archive'])->name('documents.archive');
|
||||
Route::post('/documents/{document}/restore', [DocumentController::class, 'restore'])->name('documents.restore');
|
||||
|
||||
// System Settings (requires manage_system_settings permission)
|
||||
Route::middleware('can:manage_system_settings')->prefix('settings')->name('settings.')->group(function () {
|
||||
Route::get('/', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'index'])->name('index');
|
||||
|
||||
Route::get('/general', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'general'])->name('general');
|
||||
Route::post('/general', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'updateGeneral'])->name('general.update');
|
||||
|
||||
Route::get('/features', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'features'])->name('features');
|
||||
Route::post('/features', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'updateFeatures'])->name('features.update');
|
||||
|
||||
Route::get('/security', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'security'])->name('security');
|
||||
Route::post('/security', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'updateSecurity'])->name('security.update');
|
||||
|
||||
Route::get('/notifications', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'notifications'])->name('notifications');
|
||||
Route::post('/notifications', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'updateNotifications'])->name('notifications.update');
|
||||
|
||||
Route::get('/advanced', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'advanced'])->name('advanced');
|
||||
Route::post('/advanced', [\App\Http\Controllers\Admin\SystemSettingsController::class, 'updateAdvanced'])->name('advanced.update');
|
||||
});
|
||||
});
|
||||
|
||||
require __DIR__.'/auth.php';
|
||||
Reference in New Issue
Block a user