netgescon-master/_BACKUP_OLD_netgescon-laravel_INACTIVE/routes/web_new.php

286 lines
17 KiB
PHP

<?php
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\SuperAdmin\UserController as SuperAdminUserController;
use App\Http\Controllers\SuperAdmin\CategoriaTicketController;
use App\Http\Controllers\SuperAdmin\AmministratoreController as SuperAdminAmministratoreController;
use App\Http\Controllers\Admin\StabileController;
use App\Http\Controllers\Admin\SoggettoController;
use App\Http\Controllers\Admin\UnitaImmobiliareController;
use App\Http\Controllers\Admin\FornitoreController;
use App\Http\Controllers\Admin\TicketController;
use App\Http\Controllers\Admin\ContabilitaController;
use App\Http\Controllers\Admin\DocumentoController;
use App\Http\Controllers\Admin\PreventivoController;
use App\Http\Controllers\Admin\BilancioController;
use App\Http\Controllers\Condomino\DashboardController as CondominoDashboardController;
use App\Http\Controllers\Condomino\TicketController as CondominoTicketController;
use App\Http\Controllers\Condomino\DocumentoController as CondominoDocumentoController;
use App\Http\Controllers\Condomino\UnitaController as CondominoUnitaController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\Admin\ImpostazioniController;
use App\Http\Controllers\Admin\ApiTokenController;
use App\Http\Controllers\Admin\RubricaController;
use App\Http\Controllers\Universal\UserSpaceController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
// --- Public Routes ---
Route::get('/', function () { return view('welcome'); });
// --- Authenticated Routes ---
Route::middleware(['auth', 'verified'])->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';