📋 Commit iniziale con: - ✅ Documentazione unificata in docs/ - ✅ Codice Laravel in netgescon-laravel/ - ✅ Script automazione in scripts/ - ✅ Configurazione sync rsync - ✅ Struttura organizzata e pulita 🔄 Versione: 2025.07.19-1644 🎯 Sistema pronto per Git distribuito
9.3 KiB
9.3 KiB
ISTRUZIONI COMPLETE PER RIPRISTINO SISTEMA NETGESCON
SITUAZIONE ATTUALE
Il sistema è tornato a uno stato precedente con perdita delle seguenti funzionalità:
- Dashboard unificata con navigazione AJAX
- Menu stabili nella sidebar
- Funzionalità SuperAdmin avanzate
- Sistema gestione archivi comuni italiani
RIPRISTINO IMMEDIATO - SEQUENZA OBBLIGATORIA
1. PULIZIA CACHE E VERIFICHE
cd u:\home\michele\netgescon\netgescon-laravel
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan optimize
2. VERIFICA DATABASE E UTENTI
# Verifica utenti esistenti
php artisan tinker
>>> App\Models\User::all()->pluck('email', 'name')
>>> exit
# Crea/aggiorna utente SuperAdmin
php artisan db:seed --class=SuperAdminSeeder
3. VERIFICA FILE PRINCIPALI
Controllare che esistano questi file con contenuto corretto:
File Dashboard: resources/views/admin/dashboard.blade.php
- Deve usare
<x-layout.universal> - Deve avere navigazione AJAX
- Deve mostrare cards cliccabili
File Sidebar: resources/views/components/menu/sidebar-dynamic.blade.php
- Deve avere sezioni per stabili
- Deve avere menu SuperAdmin
- Deve avere data-section per AJAX
File Route: routes/web.php
- Route
/dashboard-> SecureDashboardController::index - Route gruppo
admincon stabili - Route gruppo
superadmincon archivi
4. CONTROLLARE LAYOUT ATTIVO
Il sistema DEVE usare: resources/views/components/layout/universal.blade.php
5. VERIFICARE NAVIGAZIONE AJAX
Nel file dashboard deve esserci:
// Gestione click card statistiche
$('.dashboard-card[data-section]').on('click', function() {
var section = $(this).data('section');
if (section) {
showDynamicContent(section);
}
});
// Gestione click sidebar con AJAX
$(document).on('click', '.dashboard-nav-link[data-section]', function(e) {
e.preventDefault();
var section = $(this).data('section');
var action = $(this).data('action') || 'index';
if (section) {
showDynamicContent(section, action);
}
});
RIPRISTINO STEP-BY-STEP
STEP 1: Verifica Layout Universal
// File: resources/views/components/layout/universal.blade.php
// DEVE avere:
- Header con logo e menu utente
- Sidebar con <x-menu.sidebar-dynamic />
- Area content dinamica
- Bootstrap 5 + FontAwesome
STEP 2: Dashboard Admin Corretta
// File: resources/views/admin/dashboard.blade.php
// INIZIO FILE:
<x-layout.universal pageTitle="Dashboard Admin" showBreadcrumb="true" showSidebar="true">
// CARDS CLICCABILI:
<div class="dashboard-card cursor-pointer" data-section="stabili">
<div class="card h-100">
<div class="card-body">
<div class="row align-items-center">
<div class="col">
<div class="widget-icon bg-primary">
<i class="fas fa-building"></i>
</div>
</div>
<div class="col-auto">
<div class="widget-stats">{{ $stats['stabili_totali'] ?? 0 }}</div>
<div class="text-muted">Stabili gestiti</div>
</div>
</div>
</div>
</div>
</div>
// AREA DINAMICA AJAX:
<div id="dynamic-content-area" style="display: none;">
<div id="dynamic-content-container">
<!-- Contenuto caricato via AJAX -->
</div>
</div>
STEP 3: Sidebar Con Menu Stabili
// File: resources/views/components/menu/sidebar-dynamic.blade.php
// Menu Stabili:
@if($userPermissions['stabili'] ?? false)
<li class="nav-item">
<a href="#stabiliSubmenu" class="nav-link collapse-toggle dashboard-nav-link"
data-bs-toggle="collapse" role="button" aria-expanded="false" data-section="stabili">
<i class="fas fa-building me-2"></i>
<span>Gestione Stabili</span>
<i class="fas fa-chevron-right collapse-icon"></i>
</a>
<div class="collapse" id="stabiliSubmenu">
<ul class="nav flex-column ms-3">
<li class="nav-item">
<a href="#" class="nav-link dashboard-nav-link" data-section="stabili" data-action="index">
<i class="fas fa-list me-2"></i>Elenco Stabili
</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link dashboard-nav-link" data-section="stabili" data-action="create">
<i class="fas fa-plus me-2"></i>Nuovo Stabile
</a>
</li>
</ul>
</div>
</li>
@endif
STEP 4: Menu SuperAdmin
// Menu SuperAdmin nella sidebar:
@if($userRole === 'super-admin' || ($userPermissions['super_admin'] ?? false))
<li class="nav-item">
<a href="#superAdminSubmenu" class="nav-link collapse-toggle"
data-bs-toggle="collapse" role="button" aria-expanded="false">
<i class="fas fa-crown me-2 text-warning"></i>
<span>SuperAdmin</span>
<i class="fas fa-chevron-right collapse-icon"></i>
</a>
<div class="collapse" id="superAdminSubmenu">
<ul class="nav flex-column ms-3">
<li class="nav-item">
<a href="#" class="nav-link dashboard-nav-link" data-section="archivi" data-action="index">
<i class="fas fa-database me-2"></i>Archivi Sistema
</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link dashboard-nav-link" data-section="archivi" data-action="comuni">
<i class="fas fa-map-marked-alt me-2"></i>Comuni Italiani
</a>
</li>
</ul>
</div>
</li>
@endif
STEP 5: Route Corrette
// File: routes/web.php
// Dashboard principale
Route::get('/dashboard', [SecureDashboardController::class, 'index'])->name('dashboard');
// Gruppo admin
Route::prefix('admin')->name('admin.')->group(function () {
// Stabili con navigazione AJAX
Route::get('/stabili', [StabileController::class, 'index'])->name('stabili.index');
Route::get('/stabili/create', [StabileController::class, 'create'])->name('stabili.create');
Route::post('/stabili', [StabileController::class, 'store'])->name('stabili.store');
Route::get('/stabili/{stabile}', [StabileController::class, 'show'])->name('stabili.show');
});
// Gruppo SuperAdmin
Route::prefix('superadmin')->name('superadmin.')->group(function () {
Route::get('/archivi', [ArchiviSistemaController::class, 'index'])->name('archivi.index');
Route::get('/archivi/comuni', [ArchiviSistemaController::class, 'comuniItaliani'])->name('archivi.comuni');
Route::post('/archivi/import', [ArchiviSistemaController::class, 'importZip'])->name('archivi.import');
});
COMANDI DI VERIFICA
Verifica File Esistenti
# Verifica file principali
ls -la resources/views/admin/dashboard.blade.php
ls -la resources/views/components/layout/universal.blade.php
ls -la resources/views/components/menu/sidebar-dynamic.blade.php
# Verifica controller
ls -la app/Http/Controllers/SecureDashboardController.php
ls -la app/Http/Controllers/Admin/StabileController.php
Verifica Database
php artisan tinker
>>> App\Models\User::where('email', 'superadmin@example.com')->first()
>>> App\Models\Stabile::count()
>>> exit
Test Navigazione
- Login con superadmin@example.com / password
- Verificare che appaia dashboard con layout corretto
- Verificare sidebar con menu stabili e SuperAdmin
- Testare click su card "Stabili" -> deve caricare contenuto AJAX
- Testare click menu sidebar "Gestione Stabili" -> deve caricare AJAX
TROUBLESHOOTING
Se Dashboard non si carica correttamente:
- Verificare route in
routes/web.phplinea 47 - Verificare SecureDashboardController ritorna view corretta
- Pulire cache:
php artisan optimize:clear
Se Sidebar non ha menu stabili:
- Verificare variabile
$userPermissionsnel controller - Verificare file sidebar-dynamic.blade.php
- Verificare che user abbia ruolo corretto
Se AJAX non funziona:
- Verificare presenza jQuery e Bootstrap JS nel layout
- Verificare data-section nelle card e menu
- Verificare route AJAX nel controller StabileController
Se SuperAdmin non appare:
- Verificare utente superadmin@example.com esista
- Verificare
$userRole === 'super-admin'nel controller - Verificare menu SuperAdmin nella sidebar
SEQUENZA DI RIPRISTINO COMPLETO (ESEGUIRE IN ORDINE)
# 1. Pulizia
php artisan cache:clear && php artisan config:clear && php artisan route:clear && php artisan view:clear
# 2. Database
php artisan migrate:fresh --seed
php artisan db:seed --class=SuperAdminSeeder
# 3. Ottimizzazione
php artisan optimize
# 4. Test
php artisan serve
Quindi accedere a: http://localhost:8000/dashboard Con credenziali: superadmin@example.com / password
NOTE IMPORTANTI
- Il layout DEVE essere
x-layout.universal - La sidebar DEVE avere
<x-menu.sidebar-dynamic /> - Le cards DEVONO avere
data-sectionper AJAX - I link sidebar DEVONO avere
dashboard-nav-linkclass - Il controller DEVE passare
$userRolee$userPermissions