use Illuminate\Support\Facades\Route; use App\Http\Controllers\SuperAdmin\DashboardController as SuperDashboard; use App\Http\Controllers\SuperAdmin\ShopController as SuperShop; use App\Http\Controllers\DashboardController; use App\Http\Controllers\CategoryController; use App\Http\Controllers\ProductController; use App\Http\Controllers\PosController; use App\Http\Controllers\CustomerController; use App\Http\Controllers\SupplierController; use App\Http\Controllers\BranchController; use App\Http\Controllers\PurchaseController; use App\Http\Controllers\SaleController; use App\Http\Controllers\TransactionController; use App\Http\Controllers\InventoryController; use App\Http\Controllers\ExpenseController; use App\Http\Controllers\ReportController; use App\Http\Controllers\SettingController; use App\Http\Controllers\AuthController; // Authentication Routes Route::get('/login', [AuthController::class, 'showLogin'])->name('login'); Route::post('/login', [AuthController::class, 'login'])->name('login.post'); Route::post('/logout', [AuthController::class, 'logout'])->name('logout'); // Super Admin Routes (Require superadmin role) Route::middleware(['auth', 'role:superadmin'])->prefix('superadmin')->name('superadmin.')->group(function () { Route::get('/dashboard', [SuperDashboard::class, 'index'])->name('dashboard'); Route::resource('shops', SuperShop::class); }); // Group Protected Routes (Common Tenants) Route::middleware(['auth'])->group(function () { Route::get('/', function () { return redirect()->route('dashboard'); }); Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); Route::post('/switch-branch', [DashboardController::class, 'switchBranch'])->name('dashboard.switch-branch'); // Management (Admin Only) Route::middleware(['role:admin'])->group(function () { Route::resource('branches', BranchController::class); Route::resource('suppliers', SupplierController::class); Route::resource('users', \App\Http\Controllers\UserController::class); Route::resource('roles', \App\Http\Controllers\RoleController::class); Route::get('/settings', [SettingController::class, 'index'])->name('settings.index'); Route::post('/settings', [SettingController::class, 'store'])->name('settings.store'); Route::get('/settings/sms/balance', [SettingController::class, 'checkSmsBalance'])->name('settings.sms.balance'); Route::post('/settings/profile', [SettingController::class, 'profileUpdate'])->name('profile.update'); Route::post('/settings/smtp', [SettingController::class, 'smtpUpdate'])->name('settings.smtp.update'); }); // POS & Inventory (Manager/Admin/Cashier) Route::middleware(['role_or_permission:admin|manager|pos.access'])->group(function () { Route::resource('categories', CategoryController::class); Route::resource('products', ProductController::class); Route::resource('customers', CustomerController::class); // Enterprise POS & Sales Route::get('/pos', [PosController::class, 'index'])->name('pos.index'); Route::post('/sales', [SaleController::class, 'store'])->name('sales.store'); Route::get('/sales', [SaleController::class, 'index'])->name('sales.index'); Route::get('/sales/{sale}', [SaleController::class, 'show'])->name('sales.show'); // Inventory Module Route::get('/inventory', [InventoryController::class, 'index'])->name('inventory.index'); Route::get('/inventory/transfer', [InventoryController::class, 'transfer'])->name('inventory.transfer'); }); // Purchase & Accounting (Admin/Manager/Accountant) Route::middleware(['role:admin|manager|accountant'])->group(function () { Route::resource('purchases', PurchaseController::class)->except(['edit', 'update', 'destroy']); Route::get('/transactions', [TransactionController::class, 'index'])->name('transactions.index'); Route::resource('expenses', ExpenseController::class); }); // Reports (Admin/Manager) Route::middleware(['role:admin|manager'])->prefix('reports')->name('reports.')->group(function () { Route::get('/sales', [ReportController::class, 'sales'])->name('sales'); Route::get('/expenses', [ReportController::class, 'expenses'])->name('expenses'); Route::get('/stock', [ReportController::class, 'stock'])->name('stock'); Route::get('/profit-loss', [ReportController::class, 'profitLoss'])->name('profit-loss'); }); // Legacy Invoice routes (redirecting to Sales) Route::get('/invoices', [SaleController::class, 'index'])->name('invoices.index'); Route::get('/invoices/{sale}', [SaleController::class, 'show'])->name('invoices.show'); Route::get('/invoices/{sale}/print', [PosController::class, 'printInvoice'])->name('invoices.print'); });