name('login'); Route::post('/login', [AuthController::class, 'login'])->name('login.post'); Route::post('/logout', [AuthController::class, 'logout'])->name('logout'); // Protected Routes (auth required) Route::middleware(['auth', \App\Http\Middleware\SetTenant::class, \App\Http\Middleware\SetLocale::class, \App\Http\Middleware\AuditLogMiddleware::class])->group(function () { // Dashboard Route::get('/', [DashboardController::class, 'index'])->name('dashboard'); Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard.index'); // Locale & Settings Route::post('/locale', function (\Illuminate\Http\Request $request) { $locale = $request->validate(['locale' => 'required|in:fa,en,ar'])['locale']; session(['locale' => $locale]); app()->setLocale($locale); if ($request->user()) { $request->user()->update(['locale' => $locale]); } return redirect()->back(); })->name('locale.update'); Route::post('/calendar', function (\Illuminate\Http\Request $request) { $calendar = $request->validate(['calendar' => 'required|in:jalali,gregorian'])['calendar']; session(['calendar' => $calendar]); if ($request->user()) { $request->user()->update(['preferred_calendar' => $calendar]); } return redirect()->back(); })->name('calendar.update'); Route::post('/currency', function (\Illuminate\Http\Request $request) { $currency = $request->validate(['currency' => 'required|in:IRR,USD,EUR,AED'])['currency']; session(['currency' => $currency]); return redirect()->back(); })->name('currency.update'); // Projects Route::resource('projects', ProjectController::class); Route::put('projects/{project}/status', [ProjectController::class, 'updateStatus'])->name('projects.update-status'); Route::get('projects-export/excel', [ProjectController::class, 'exportExcel'])->name('projects.export.excel'); Route::get('projects-export/pdf', [ProjectController::class, 'exportPdf'])->name('projects.export.pdf'); // Tasks Route::resource('tasks', TaskController::class); Route::put('tasks/{task}/status', [TaskController::class, 'updateStatus'])->name('tasks.update-status'); Route::get('tasks-kanban', [TaskController::class, 'kanban'])->name('tasks.kanban'); Route::get('tasks-gantt', [TaskController::class, 'gantt'])->name('tasks.gantt'); Route::get('tasks/{task}/gantt', [TaskController::class, 'gantt'])->name('tasks.gantt-project'); // Employees Route::resource('employees', EmployeeController::class); Route::get('employees/{employee}/work-logs', [EmployeeController::class, 'workLogs'])->name('employees.work-logs'); Route::get('employees/{employee}/financials', [EmployeeController::class, 'financials'])->name('employees.financials'); // Expenses Route::resource('expenses', ExpenseController::class); Route::put('expenses/{expense}/approve', [ExpenseController::class, 'approve'])->name('expenses.approve'); Route::put('expenses/{expense}/reject', [ExpenseController::class, 'reject'])->name('expenses.reject'); // Petty Cash Route::resource('petty-cashes', PettyCashController::class); Route::get('petty-cashes/{pettyCash}/create-expense', [PettyCashController::class, 'createExpense'])->name('petty-cashes.create-expense'); Route::post('petty-cashes/{pettyCash}/store-expense', [PettyCashController::class, 'storeExpense'])->name('petty-cashes.store-expense'); Route::put('petty-cashes/{pettyCash}/approve', [PettyCashController::class, 'approve'])->name('petty-cashes.approve'); Route::put('petty-cashes/{pettyCash}/reject', [PettyCashController::class, 'reject'])->name('petty-cashes.reject'); Route::put('petty-cashes/{pettyCash}/settle', [PettyCashController::class, 'settle'])->name('petty-cashes.settle'); // Inventory Route::prefix('inventory')->name('inventory.')->group(function () { // Dashboard Route::get('/', [InventoryController::class, 'index'])->name('index'); // Items CRUD Route::get('items', [InventoryController::class, 'items'])->name('items'); Route::get('items/create', [InventoryController::class, 'createItem'])->name('items.create'); Route::post('items', [InventoryController::class, 'storeItem'])->name('items.store'); Route::get('items/{item}/edit', [InventoryController::class, 'editItem'])->name('items.edit'); Route::put('items/{item}', [InventoryController::class, 'updateItem'])->name('items.update'); Route::delete('items/{item}', [InventoryController::class, 'destroyItem'])->name('items.destroy'); // Warehouses CRUD Route::get('warehouses', [InventoryController::class, 'warehouses'])->name('warehouses'); Route::get('warehouses/create', [InventoryController::class, 'createWarehouse'])->name('warehouses.create'); Route::post('warehouses', [InventoryController::class, 'storeWarehouse'])->name('warehouses.store'); Route::get('warehouses/{warehouse}/edit', [InventoryController::class, 'editWarehouse'])->name('warehouses.edit'); Route::put('warehouses/{warehouse}', [InventoryController::class, 'updateWarehouse'])->name('warehouses.update'); Route::delete('warehouses/{warehouse}', [InventoryController::class, 'destroyWarehouse'])->name('warehouses.destroy'); // Transactions Route::get('transactions', [InventoryController::class, 'transactions'])->name('transactions'); // Stock operations Route::post('stock-in', [InventoryController::class, 'stockIn'])->name('stock-in'); Route::post('stock-out', [InventoryController::class, 'stockOut'])->name('stock-out'); Route::post('transfer', [InventoryController::class, 'stockTransfer'])->name('transfer'); Route::get('current-stock', [InventoryController::class, 'currentStock'])->name('current-stock'); }); // Letters (Correspondence) Route::resource('letters', LetterController::class); Route::put('letters/{letter}/archive', [LetterController::class, 'archive'])->name('letters.archive'); // Letters (Correspondence) Route::resource('letters', LetterController::class); Route::put('letters/{letter}/archive', [LetterController::class, 'archive'])->name('letters.archive'); // Documents Route::resource('documents', DocumentController::class); Route::get('documents/{document}/download', [DocumentController::class, 'download'])->name('documents.download'); // Reports Route::prefix('reports')->name('reports.')->group(function () { Route::get('/', [ReportController::class, 'index'])->name('index'); Route::get('financial', [ReportController::class, 'financial'])->name('financial'); Route::get('financial/excel', [ReportController::class, 'financialExportExcel'])->name('financial.excel'); Route::get('financial/pdf', [ReportController::class, 'financialExportPdf'])->name('financial.pdf'); Route::get('employee-worklog', [ReportController::class, 'employeeWorklog'])->name('employee-worklog'); Route::get('employee-worklog/excel', [ReportController::class, 'employeeWorklogExportExcel'])->name('employee-worklog.excel'); Route::get('inventory', [ReportController::class, 'inventory'])->name('inventory'); Route::get('inventory/excel', [ReportController::class, 'inventoryExportExcel'])->name('inventory.excel'); Route::get('payroll', [ReportController::class, 'payroll'])->name('payroll'); Route::get('payroll/excel', [ReportController::class, 'payrollExportExcel'])->name('payroll.excel'); }); Route::prefix('payroll')->name('payroll.')->group(function () { Route::get('/', [PayrollController::class, 'index'])->name('index'); Route::get('/calculate', [PayrollController::class, 'calculate'])->name('calculate'); Route::post('/auto-calculate', [PayrollController::class, 'autoCalculate'])->name('auto-calculate'); Route::post('/store', [PayrollController::class, 'store'])->name('store'); Route::get('/settlement', [PayrollController::class, 'settlement'])->name('settlement'); Route::post('/preview-settlement', [PayrollController::class, 'previewSettlement'])->name('preview-settlement'); Route::post('/process-settlement', [PayrollController::class, 'processSettlement'])->name('process-settlement'); Route::post('/pay-bulk', [PayrollController::class, 'payBulk'])->name('pay-bulk'); Route::get('/{employee}', [PayrollController::class, 'show'])->name('show'); Route::post('/{financial}/pay', [PayrollController::class, 'pay'])->name('pay'); Route::delete('/{financial}', [PayrollController::class, 'destroy'])->name('destroy'); }); // Settings Route::prefix('settings')->name('settings.')->group(function () { Route::get('/', [SettingsController::class, 'index'])->name('index'); Route::put('organization', [SettingsController::class, 'updateOrganization'])->name('organization.update'); Route::post('users', [SettingsController::class, 'storeUser'])->name('users.store'); Route::put('users/{user}', [SettingsController::class, 'updateUser'])->name('users.update'); Route::patch('users/{user}/toggle', [SettingsController::class, 'toggleUser'])->name('users.toggle'); Route::post('currencies', [SettingsController::class, 'storeCurrency'])->name('currencies.store'); Route::put('currencies/{currency}', [SettingsController::class, 'updateCurrency'])->name('currencies.update'); Route::patch('currencies/{currency}/toggle', [SettingsController::class, 'toggleCurrency'])->name('currencies.toggle'); }); // Attachments Route::post('attachments', [AttachmentController::class, 'store'])->name('attachments.store'); Route::delete('attachments/{attachment}', [AttachmentController::class, 'destroy'])->name('attachments.destroy'); Route::get('attachments/{attachment}/download', [AttachmentController::class, 'download'])->name('attachments.download'); });