group(function () { // Generic Dashboard (redirects to the user's personal space) Route::get('/dashboard', function () { if (Auth::check()) { $user = Auth::user(); // Cerca il codice dell'utente $userCode = null; // Se ha un amministratore associato if ($user->amministratore) { $userCode = $user->amministratore->codice; } // Se ha codice, redirect al nuovo sistema universale if ($userCode) { return redirect()->route('userspace.dashboard', ['userCode' => $userCode]); } // Fallback ai vecchi route se non ha codice if ($user->hasRole('super-admin')) { return redirect()->route('superadmin.dashboard'); } elseif ($user->hasRole(['admin', 'amministratore'])) { return redirect()->route('admin.dashboard'); } elseif ($user->hasRole('condomino')) { return redirect()->route('condomino.dashboard'); } } return view('dashboard'); })->name('dashboard'); // Profile Routes 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'); // --- UNIVERSAL USER SPACE (8-character codes) --- Route::middleware(['userspace'])->group(function () { // Main user space entry point Route::get('/{userCode}', [UserSpaceController::class, 'handleUserSpace']) ->where('userCode', '[A-Z0-9]{8}') ->name('userspace.index'); // Dashboard per ogni utente Route::get('/{userCode}/dashboard', [UserSpaceController::class, 'dashboard']) ->where('userCode', '[A-Z0-9]{8}') ->name('userspace.dashboard'); // Sotto-route specifiche per tipo utente Route::prefix('{userCode}')->where(['userCode' => '[A-Z0-9]{8}'])->group(function () { // --- SUPER-ADMIN SPACE --- Route::middleware(['role:super-admin'])->prefix('system')->name('userspace.system.')->group(function () { // Gestione utenti Route::resource('users', SuperAdminUserController::class)->except(['show']); Route::patch('users/{user}/update-role', [SuperAdminUserController::class, 'updateRole'])->name('users.updateRole'); Route::get('users/{user}/impersonate', [SuperAdminUserController::class, 'impersonate'])->name('users.impersonate'); // Gestione Amministratori Route::resource('amministratori', SuperAdminAmministratoreController::class) ->except(['show']) ->parameters(['amministratori' => 'amministratore']); // Impostazioni Sistema Route::get('impostazioni', [\App\Http\Controllers\SuperAdmin\ImpostazioniController::class, 'index'])->name('impostazioni.index'); Route::post('impostazioni', [\App\Http\Controllers\SuperAdmin\ImpostazioniController::class, 'store'])->name('impostazioni.store'); Route::post('impostazioni/theme', [\App\Http\Controllers\SuperAdmin\ImpostazioniController::class, 'theme'])->name('impostazioni.theme'); // Gestione Categorie Ticket Route::resource('categorie-ticket', CategoriaTicketController::class)->except(['show']); // Diagnostica Route::get('/diagnostica', function() { return view('superadmin.diagnostica'); })->name('diagnostica'); Route::get('/diagnostica-menu', function() { return view('superadmin.diagnostica_menu'); })->name('diagnostica_menu'); }); // --- ADMIN SPACE --- Route::middleware(['role:admin|amministratore'])->prefix('manage')->name('userspace.manage.')->group(function () { // Rotte CRUD principali Route::resource('stabili', StabileController::class); Route::resource('stabili.unitaImmobiliari', UnitaImmobiliareController::class)->shallow(); Route::resource('unitaImmobiliari', UnitaImmobiliareController::class)->only(['edit', 'update', 'destroy']); Route::resource('soggetti', SoggettoController::class); Route::resource('fornitori', FornitoreController::class); Route::resource('tickets', TicketController::class); // Gestione Documenti Route::resource('documenti', DocumentoController::class)->except(['edit', 'update']); Route::get('documenti/{documento}/download', [DocumentoController::class, 'download'])->name('documenti.download'); // Gestione Preventivi Route::prefix('preventivi')->name('preventivi.')->group(function () { Route::get('/', [PreventivoController::class, 'index'])->name('index'); Route::get('/create', [PreventivoController::class, 'create'])->name('create'); Route::post('/', [PreventivoController::class, 'store'])->name('store'); Route::get('/{preventivo}', [PreventivoController::class, 'show'])->name('show'); Route::get('/{preventivo}/edit', [PreventivoController::class, 'edit'])->name('edit'); Route::put('/{preventivo}', [PreventivoController::class, 'update'])->name('update'); Route::post('/{preventivo}/approva', [PreventivoController::class, 'approva'])->name('approva'); Route::post('/{preventivo}/genera-rate', [PreventivoController::class, 'generaRate'])->name('genera-rate'); Route::get('/{preventivo}/storico', [PreventivoController::class, 'storicoModifiche'])->name('storico'); Route::get('/pianificazione/dashboard', [PreventivoController::class, 'pianificazione'])->name('pianificazione'); }); // Contabilità Route::prefix('contabilita')->name('contabilita.')->group(function () { Route::get('/', [ContabilitaController::class, 'index'])->name('index'); Route::get('/prima-nota', [ContabilitaController::class, 'primaNota'])->name('prima-nota'); Route::get('/bilancio', [BilancioController::class, 'index'])->name('bilancio.index'); Route::get('/bilancio/create', [BilancioController::class, 'create'])->name('bilancio.create'); Route::post('/bilancio', [BilancioController::class, 'store'])->name('bilancio.store'); Route::get('/bilancio/{bilancio}', [BilancioController::class, 'show'])->name('bilancio.show'); Route::get('/bilancio/{bilancio}/export', [BilancioController::class, 'export'])->name('bilancio.export'); }); // Impostazioni e configurazione Route::prefix('config')->name('config.')->group(function () { Route::get('/', [ImpostazioniController::class, 'index'])->name('index'); Route::post('/', [ImpostazioniController::class, 'store'])->name('store'); Route::get('/api-tokens', [ApiTokenController::class, 'index'])->name('api-tokens.index'); Route::post('/api-tokens', [ApiTokenController::class, 'store'])->name('api-tokens.store'); Route::delete('/api-tokens/{token}', [ApiTokenController::class, 'destroy'])->name('api-tokens.destroy'); }); // Rubrica Route::resource('rubrica', RubricaController::class)->except(['show']); }); // --- CONDOMINO SPACE --- Route::middleware(['role:condomino'])->prefix('area')->name('userspace.area.')->group(function () { Route::resource('tickets', CondominoTicketController::class)->except(['edit', 'update', 'destroy']); Route::get('/documenti', [CondominoDocumentoController::class, 'index'])->name('documenti.index'); Route::get('/documenti/{documento}/download', [CondominoDocumentoController::class, 'download'])->name('documenti.download'); Route::get('/unita', [CondominoUnitaController::class, 'index'])->name('unita.index'); Route::get('/unita/{unita}', [CondominoUnitaController::class, 'show'])->name('unita.show'); }); }); }); // --- LEGACY ROUTES (per compatibilità backward) --- Route::middleware(['role:super-admin'])->prefix('superadmin')->name('superadmin.')->group(function () { Route::get('/', function() { return view('superadmin.dashboard'); })->name('dashboard'); // Gestione utenti Route::resource('users', SuperAdminUserController::class)->except(['show']); Route::patch('users/{user}/update-role', [SuperAdminUserController::class, 'updateRole'])->name('users.updateRole'); Route::get('users/{user}/impersonate', [SuperAdminUserController::class, 'impersonate'])->name('users.impersonate'); // Impostazioni Sistema Route::get('impostazioni', [\App\Http\Controllers\SuperAdmin\ImpostazioniController::class, 'index'])->name('impostazioni.index'); Route::post('impostazioni', [\App\Http\Controllers\SuperAdmin\ImpostazioniController::class, 'store'])->name('impostazioni.store'); Route::post('impostazioni/theme', [\App\Http\Controllers\SuperAdmin\ImpostazioniController::class, 'theme'])->name('impostazioni.theme'); // Gestione Amministratori Route::resource('amministratori', SuperAdminAmministratoreController::class) ->except(['show']) ->parameters(['amministratori' => 'amministratore']); // Gestione Categorie Ticket Route::resource('categorie-ticket', CategoriaTicketController::class)->except(['show']); // Gestione Stabili (ora anche per super-admin) Route::resource('stabili', StabileController::class); Route::resource('stabili.unitaImmobiliari', UnitaImmobiliareController::class)->shallow(); Route::resource('unitaImmobiliari', UnitaImmobiliareController::class)->only(['edit', 'update', 'destroy']); Route::resource('soggetti', SoggettoController::class); Route::resource('fornitori', FornitoreController::class); Route::resource('tickets', TicketController::class); Route::resource('documenti', DocumentoController::class)->except(['edit', 'update']); // Diagnostica Route::get('/diagnostica', function() { return view('superadmin.diagnostica'); })->name('diagnostica'); Route::get('/diagnostica-menu', function() { return view('superadmin.diagnostica_menu'); })->name('diagnostica_menu'); }); // --- ADMIN / AMMINISTRATORE PANEL (legacy) --- Route::middleware(['role:admin|amministratore'])->prefix('admin')->name('admin.')->group(function () { // Dashboard dell'amministratore Route::get('/', [DashboardController::class, 'index'])->name('dashboard'); // Rotte CRUD principali Route::resource('stabili', StabileController::class); Route::resource('stabili.unitaImmobiliari', UnitaImmobiliareController::class)->shallow(); Route::resource('unitaImmobiliari', UnitaImmobiliareController::class)->only(['edit', 'update', 'destroy']); Route::resource('soggetti', SoggettoController::class); Route::resource('fornitori', FornitoreController::class); Route::resource('tickets', TicketController::class); // Gestione Documenti Route::resource('documenti', DocumentoController::class)->except(['edit', 'update']); Route::get('documenti/{documento}/download', [DocumentoController::class, 'download'])->name('documenti.download'); // Gestione Preventivi Route::prefix('preventivi')->name('preventivi.')->group(function () { Route::get('/', [PreventivoController::class, 'index'])->name('index'); Route::get('/create', [PreventivoController::class, 'create'])->name('create'); Route::post('/', [PreventivoController::class, 'store'])->name('store'); Route::get('/{preventivo}', [PreventivoController::class, 'show'])->name('show'); Route::get('/{preventivo}/edit', [PreventivoController::class, 'edit'])->name('edit'); Route::put('/{preventivo}', [PreventivoController::class, 'update'])->name('update'); Route::post('/{preventivo}/approva', [PreventivoController::class, 'approva'])->name('approva'); Route::post('/{preventivo}/genera-rate', [PreventivoController::class, 'generaRate'])->name('genera-rate'); Route::get('/{preventivo}/storico', [PreventivoController::class, 'storicoModifiche'])->name('storico'); Route::get('/pianificazione/dashboard', [PreventivoController::class, 'pianificazione'])->name('pianificazione'); }); // Contabilità Route::prefix('contabilita')->name('contabilita.')->group(function () { Route::get('/', [ContabilitaController::class, 'index'])->name('index'); Route::get('/prima-nota', [ContabilitaController::class, 'primaNota'])->name('prima-nota'); Route::get('/bilancio', [BilancioController::class, 'index'])->name('bilancio.index'); Route::get('/bilancio/create', [BilancioController::class, 'create'])->name('bilancio.create'); Route::post('/bilancio', [BilancioController::class, 'store'])->name('bilancio.store'); Route::get('/bilancio/{bilancio}', [BilancioController::class, 'show'])->name('bilancio.show'); Route::get('/bilancio/{bilancio}/export', [BilancioController::class, 'export'])->name('bilancio.export'); }); // Impostazioni e configurazione Route::prefix('config')->name('config.')->group(function () { Route::get('/', [ImpostazioniController::class, 'index'])->name('index'); Route::post('/', [ImpostazioniController::class, 'store'])->name('store'); Route::get('/api-tokens', [ApiTokenController::class, 'index'])->name('api-tokens.index'); Route::post('/api-tokens', [ApiTokenController::class, 'store'])->name('api-tokens.store'); Route::delete('/api-tokens/{token}', [ApiTokenController::class, 'destroy'])->name('api-tokens.destroy'); }); // Rubrica Route::resource('rubrica', RubricaController::class)->except(['show']); }); // --- CONDOMINO PANEL (legacy) --- Route::middleware(['role:condomino'])->prefix('condomino')->name('condomino.')->group(function () { Route::get('/', [CondominoDashboardController::class, 'index'])->name('dashboard'); Route::resource('tickets', CondominoTicketController::class)->except(['edit', 'update', 'destroy']); Route::get('/documenti', [CondominoDocumentoController::class, 'index'])->name('documenti.index'); Route::get('/documenti/{documento}/download', [CondominoDocumentoController::class, 'download'])->name('documenti.download'); Route::get('/unita', [CondominoUnitaController::class, 'index'])->name('unita.index'); Route::get('/unita/{unita}', [CondominoUnitaController::class, 'show'])->name('unita.show'); }); }); require __DIR__.'/auth.php';