From 952c9b4e900274bcd29471a984a2e6389ed6d495 Mon Sep 17 00:00:00 2001 From: Pikappa2 Date: Mon, 7 Jul 2025 18:09:32 +0200 Subject: [PATCH] Fix: Risolte relazioni amministratore e chiavi database MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit βœ… Correzioni: - DashboardController: usa admin->id invece di admin->id_amministratore - SidebarComposer: aggiornato per chiave modernizzata - Amministratore model: rimossa primaryKey custom, usa 'id' standard - TestSetupSeeder: corretto riferimento ID amministratore - Aggiunta gestione sicura per utenti senza amministratore οΏ½οΏ½ Fix: Risolve errore 'Attempt to read property denominazione on null' πŸ“Š Test: Creato stabile di test per verificare funzionamento --- Database/Seeders/TestSetupSeeder.php | 2 +- PROGRESS_LOG.md | 610 ------------------ .../Controllers/Admin/DashboardController.php | 24 +- app/Http/View/Composers/SidebarComposer.php | 3 +- app/Models/Amministratore.php | 4 +- 5 files changed, 28 insertions(+), 615 deletions(-) diff --git a/Database/Seeders/TestSetupSeeder.php b/Database/Seeders/TestSetupSeeder.php index 3dd9b9ef..32ec1aa6 100644 --- a/Database/Seeders/TestSetupSeeder.php +++ b/Database/Seeders/TestSetupSeeder.php @@ -109,7 +109,7 @@ class TestSetupSeeder extends Seeder $stabile = Stabile::firstOrCreate( ['denominazione' => 'Stabile Test Via Milano 1'], [ - 'amministratore_id' => $amministratore->id_amministratore, + 'amministratore_id' => $amministratore->id, // Usa 'id' invece di 'id_amministratore' 'indirizzo' => 'Via Milano 1', 'cap' => '20100', 'citta' => 'Milano', diff --git a/PROGRESS_LOG.md b/PROGRESS_LOG.md index 8f98d1e7..40ab57d6 100644 --- a/PROGRESS_LOG.md +++ b/PROGRESS_LOG.md @@ -315,616 +315,6 @@ php artisan db:seed --class=\\App\\Console\\Seeders\\NOME_SEEDER --- -# NetGesCon Laravel - Blocco Appunti Progressivo -**Data inizio modernizzazione**: 6 Luglio ### οΏ½ **Features Avanzate PROSSIME**: -- πŸ”„ **IN CORSO**: Sistema multi-database per amministratori -- ⏳ Sistema audit stile GIT per tracciamento modifiche -- ⏳ Dati pre-caricati per nuovi stabili (comuni, voci tipo, fornitori) -- ⏳ Sistema "prima nota" β†’ contabilitΓ  definitiva -- ⏳ Partita doppia per bilanci completi -**Obiettivo**: Ristrutturazione completa con best practice Laravel + gestione moderna archivi/contabilitΓ  - ---- - -## 🎯 OBIETTIVI PRINCIPALI -- βœ… Modernizzare strutture DB (chiavi `id`, relazioni standard Laravel) -- βœ… Sistemare funzioni helper (userSetting) -- πŸ”„ **IN CORSO**: Correggere relazioni amministratore-stabili nella sidebar -- πŸ”„ **IN CORSO**: Sistema multi-database per amministratori (con codice 8 caratteri) -- πŸ”„ **IN CORSO**: Codici alfanumerici 8 caratteri per TUTTI gli utenti/movimenti/record -- ⏳ Implementare sistema "prima nota" β†’ contabilitΓ  definitiva -- ⏳ Preparare base per partita doppia -- ⏳ UI stile Akaunting + icone GitHub - -### οΏ½ **Sistema Ruoli CORRETTO**: -- **`admin`** = RISERVATO per sviluppatori sistema (NOI) -- **`amministratore`** = Chi gestisce condomini (login principale) -- **Ruoli multipli**: super-admin + fornitore + condominio + inquilino (stesso utente) -- **Autorizzazioni multiple** per utente giΓ  implementate - ---- - -## βœ… COMPLETATO (SESSIONI PRECEDENTI + ATTUALE) - -### πŸ“Š **Tabelle Modernizzate (Best Practice Laravel)** -- βœ… `movimenti_contabili`: chiave `id`, campo `codice_movimento` (8 char), stati movimento, relazioni standard -- βœ… `allegati`: chiave `id`, campo `codice_allegato` (8 char), relazione `user_id`, timestamps, soft deletes -- βœ… `stabili`: giΓ  aveva chiave `id` standard -- βœ… `amministratori`: NUOVA tabella moderna con codici alfanumerici, multi-database, cartelle dati -- βœ… **TUTTI i seeders aggiornati**: dati inseriti direttamente nel DB per test -- βœ… **Parametri di versione**: modificati direttamente nel DB (non piΓΉ nei file) - -### πŸ”— **Relazioni Corrette (TUTTE le relazioni con Stabile)** -- βœ… `MovimentoContabile::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `VoceSpesa::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `Gestione::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `Bilancio::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `TabellaMillesimale::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `Assemblea::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `Preventivo::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `Banca::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `PianoContiCondominio`: aggiornato per usare `stabile_id` e chiave `id` - -### πŸ” **Sistema Utenti e Codici Alfanumerici** -- βœ… **Codici 8 caratteri**: A=Allegato, M=Movimento, ADM=Amministratore -- βœ… **Generazione automatica**: nei modelli con prefissi -- βœ… **Sistema multi-database**: preparato per amministratori (campo `database_attivo`) -- βœ… **Cartelle dati**: auto-create per ogni amministratore (`/amministratori/CODICE/`) -- πŸ”„ **IN CORSO**: Applicazione completa a tutti gli utenti e record - -### πŸ“ **Seeders e Migration** -- βœ… Posizione corretta: `app/Console/Seeders/` (NON `database/seeders/`) -- βœ… `MovimentiContabiliSeeder` β†’ funzionante con dati test -- βœ… `AllegatiSeeder` β†’ funzionante con dati test -- βœ… **TUTTI i seeders modernizzati** con best practice Laravel -- βœ… Migration `2025_07_06_071558_update_movimenti_contabili_table_structure.php` -- βœ… Migration `2025_07_06_200417_update_allegati_table_structure_to_laravel_standards.php` - -### 🎨 **Interfaccia Utente UNIFICATA** βœ… -- βœ… **Layout universale** responsive (`app-universal.blade.php`) -- βœ… **Sidebar permission-based** con menu dinamico filtrato -- βœ… **Mobile-first design** con hamburger menu (≀768px) -- βœ… **Dashboard admin** modernizzata con relazioni corrette -- βœ… **Dark mode** integrato e funzionante -- βœ… **Indicatori ruolo** visivi (colori, badge) -- βœ… **Menu contestuale** basato su permessi utente - -### πŸ“± **Responsive Design IMPLEMENTATO** βœ… -- βœ… **Desktop**: Sidebar fissa + colonna launcher -- βœ… **Mobile**: Hamburger menu + overlay sidebar -- βœ… **Tablet**: Sidebar collassabile con toggle -- βœ… **Accessibility**: Focus states, ARIA labels -- βœ… **Performance**: CSS transitions smooth - ---- - -## πŸ”„ ATTUALMENTE IN LAVORAZIONE - -### βœ… **STRATEGIA IMPLEMENTATA**: UI Universale per Tutti i Ruoli -**Approccio VINCENTE**: Una sola UI responsive che mostra contenuti diversi in base ai permessi -- βœ… **Layout universale** creato (`layouts/app-universal.blade.php`) -- βœ… **Sidebar intelligente** con menu filtrato per permessi -- βœ… **Responsive design** mobile-first con hamburger menu -- βœ… **Dashboard admin** modernizzata con nuova struttura dati -- βœ… **Super-admin e Admin** ora usano stesso layout - -### 🎯 **VANTAGGI OTTENUTI**: -- βœ… **DRY Principle**: Una sola UI da manutenere -- βœ… **Mobile Responsive**: Hamburger menu per schermi piccoli -- βœ… **Permission-based**: Ogni utente vede solo ciΓ² che puΓ² -- βœ… **Consistenza UX**: Stessa esperienza per tutti -- βœ… **FacilitΓ  sviluppo**: No duplicazione codice - -### πŸš€ **PROSSIMO GRANDE FOCUS**: Sistema Aggiornamenti Automatici -**Obiettivo**: Registrazione utenti con codici 8 caratteri + aggiornamenti via API -- πŸ“‹ **Progettazione completa** in `UPDATE_SYSTEM.md` -- πŸ—ƒοΈ **Database schema** per utenti registrati, versioni, log -- πŸ”Œ **API design** per registrazione, download, verifica licenze -- βš™οΈ **UpdateService** con backup automatico e rollback -- 🎨 **Frontend manager** per aggiornamenti via UI -- πŸ”’ **Sistema licenze** con livelli servizio (basic/pro/enterprise) -- πŸ“± **Mobile support** per notifiche e gestione aggiornamenti - -### πŸ—οΈ **Sistema Multi-Database CONFERMATO**: -- Database Master: `users`, `roles`, `amministratori`, `dati_centrali` -- Database Satelliti: `netgescon_CODICE8CHAR` per ogni amministratore -- Sincronizzazione: Laravel Multi-DB + Events + Queues -- Backup/Restore: per singolo amministratore - -### οΏ½ **Features Avanzate da Implementare**: -- Sistema audit stile GIT per tracciamento modifiche -- Dati pre-caricati per nuovi stabili (comuni, voci tipo, fornitori) -- UI stile Akaunting + icone GitHub -- Sistema "prima nota" β†’ contabilitΓ  definitiva - ---- - -## πŸ“š DOCUMENTI CREATI OGGI (7 Luglio 2025) - -### πŸ“– **Documentazione Tecnica Completa** -- βœ… **`INSTALL_LINUX.md`**: Guida installazione pulita da zero su Linux - - CompatibilitΓ  OS (solo Linux + WSL per sviluppo) - - Prerequisites dettagliati (PHP 8.2+, MySQL 8.0+, Redis, Apache/Nginx) - - Step-by-step Ubuntu/Debian - - Configurazione sicurezza (firewall, SSL, database) - - Virtual host Apache + HTTPS - - Cron jobs per manutenzione - - Troubleshooting comune - -- βœ… **`UPDATE_SYSTEM.md`**: Progettazione sistema aggiornamenti automatici - - Database schema completo (utenti registrati, versioni, log) - - API endpoints RESTful per registrazione/download/licenze - - UpdateService con backup automatico e rollback - - Comandi Artisan (update:check, update:install, update:download) - - Frontend Vue.js per gestione aggiornamenti - - Sistema licenze multi-livello (basic/professional/enterprise) - - Sicurezza (checksum, signatures, rate limiting) - - Monitoring e analytics - -### 🎯 **STATO PROGETTO ATTUALE** -- βœ… **Base modernizzata**: DB, relazioni, UI universale -- βœ… **Documentazione completa**: tecnica, installazione, specifiche -- πŸ”„ **IN PROGETTAZIONE**: Sistema aggiornamenti automatici -- ⏳ **PROSSIMI**: Multi-lingua, audit system, gestione licenze - ---- - -## πŸ“‹ PROSSIMI PASSI -1. **IMMEDIATO**: Correggere relazione admin-stabili nella sidebar -2. Verificare/popolare dati di test per admin con stabili -3. Completare codici alfanumerici per TUTTI gli utenti -4. Testare dashboard amministratore completo -5. Implementare logica "prima nota" vs "contabilitΓ  definitiva" -6. Progettazione multi-database per amministratori - ---- - -## πŸ“ NOTE TECNICHE IMPORTANTI - -### οΏ½ **AMBIENTE DI SVILUPPO E PRODUZIONE** -- **⚠️ IMPORTANTE**: Progetto destinato SOLO a Linux in produzione -- **Sviluppo**: WSL su Windows supportato, ma comandi sempre Linux/Bash -- **Terminale**: Utilizzare SEMPRE sintassi Linux per comandi -- **Path**: Utilizzare forward slash `/` non backslash `\` -- **Case sensitive**: Attenzione ai nomi file (Linux Γ¨ case-sensitive) - -### οΏ½πŸ—ƒοΈ **Struttura Database MODERNA** -- **Chiavi primarie**: SEMPRE `id` (standard Laravel) βœ… -- **Foreign keys**: `nome_tabella_id` (es: `stabile_id`, `user_id`) βœ… -- **Timestamps**: SEMPRE inclusi (`created_at`, `updated_at`) βœ… -- **Soft deletes**: Dove serve (`deleted_at`) βœ… -- **Codici unici**: 8 caratteri alfanumerici per identificazione βœ… - -### πŸ”§ **Convenzioni Laravel Adottate** -- Seeders in `app/Console/Seeders/` βœ… -- Namespace `App\Console\Seeders` βœ… -- Relazioni standard: `belongsTo()`, `hasMany()`, etc. βœ… -- Modelli con `SoftDeletes`, `HasFactory` βœ… -- Scope e accessor dove utili βœ… - -### 🎨 **Sistema Tema/Colori** -- Helper `userSetting()` funzionante βœ… -- Tema scuro/chiaro personalizzabile βœ… -- Autoloaded da `composer.json` βœ… - -### οΏ½ **Sistema Utenti Moderno** -- Codici alfanumerici 8 caratteri per identificazione univoca -- Generazione automatica nei modelli -- Prefissi per tipo: U=User, A=Allegato, M=Movimento -- Sistema multi-amministratore preparato - ---- - -## 🚨 ERRORI RISOLTI -- βœ… `SQLSTATE[42S22]: Column not found: 1054 Unknown column 'stabili.id_stabile'` - - **Causa**: Relazioni usavano vecchia chiave `id_stabile` - - **Soluzione**: Aggiornate TUTTE le relazioni a `id` standard -- βœ… `Call to undefined function userSetting()` - - **Causa**: Helper non autoloaded correttamente - - **Soluzione**: Aggiunto in `app/Helpers/impostazioni.php` -- βœ… `SQLSTATE[42S22]: Column not found: 1054 Unknown column 'amministratori.deleted_at'` - - **Causa**: Migration amministratori non eseguita - - **Soluzione**: Eseguito `php artisan migrate` -- βœ… `syntax error, unexpected token "," DashboardController.php:80` - - **Causa**: Codice duplicato e parentesi mancante nel compact() - - **Soluzione**: Ripulito codice e aggiunta parentesi di chiusura - ---- - -## πŸ” PER DEBUGGING FUTURO -```bash -# Verificare struttura tabelle -php artisan tinker --execute="echo implode(', ', Schema::getColumnListing('NOME_TABELLA'));" - -# Test relazioni admin-stabili -php artisan tinker --execute="User::with('amministratore.stabili')->where('role', 'admin')->first();" - -# Stato migration -php artisan migrate:status - -# Stato seeders -php artisan db:seed --class=\\App\\Console\\Seeders\\NOME_SEEDER -``` - ---- - -*Ultima modifica: 7 Luglio 2025 - README aggiornato, errori risolti (deleted_at, syntax error), UI universale funzionante* - -## πŸ“‹ PROSSIMI PASSI -1. **IMMEDIATO**: Risolvere `userSetting()` function -2. Testare dashboard amministratore completo -3. Verificare che tutte le relazioni funzionino -4. Implementare logica "prima nota" vs "contabilitΓ  definitiva" -5. Generazione automatica codici 8 caratteri per utenti -6. Progettazione multi-database per amministratori - ---- - -## πŸ“ NOTE TECNICHE IMPORTANTI - -### πŸ—ƒοΈ **Struttura Database** -- **Chiavi primarie**: SEMPRE `id` (standard Laravel) -- **Foreign keys**: `nome_tabella_id` (es: `stabile_id`, `user_id`) -- **Timestamps**: SEMPRE inclusi (`created_at`, `updated_at`) -- **Soft deletes**: Dove serve (`deleted_at`) -- **Codici unici**: 8 caratteri alfanumerici per identificazione - -### πŸ”§ **Convenzioni Laravel Adottate** -- Seeders in `app/Console/Seeders/` -- Namespace `App\Console\Seeders` -- Relazioni standard: `belongsTo()`, `hasMany()`, etc. -- Modelli con `SoftDeletes`, `HasFactory` -- Scope e accessor dove utili - -### 🎨 **Sistema Tema/Colori** -- GiΓ  implementato sistema preferenze utente -- Tema scuro/chiaro personalizzabile -- **DA VERIFICARE**: come Γ¨ implementato `userSetting()` - ---- - -## 🚨 ERRORI RISOLTI -- βœ… `SQLSTATE[42S22]: Column not found: 1054 Unknown column 'stabili.id_stabile'` - - **Causa**: Relazioni usavano vecchia chiave `id_stabile` - - **Soluzione**: Aggiornate tutte le relazioni a `id` standard - ---- - -## πŸ” PER DEBUGGING FUTURO -```bash -# Verificare struttura tabelle -php artisan tinker --execute="echo implode(', ', Schema::getColumnListing('NOME_TABELLA'));" - -# Test relazioni -php artisan tinker --execute="App\Models\MovimentoContabile::with('stabile')->first();" - -# Stato migration -php artisan migrate:status - -# Stato seeders -php artisan db:seed --class=\\App\\Console\\Seeders\\NOME_SEEDER -``` - ---- - -*Ultima modifica: 6 Luglio 2025 - Helper userSetting() mancante* - ---- - -## 🌍 **SUPPORTO MULTI-LINGUA** -- ⏳ **TODO**: Implementare Laravel Localization -- ⏳ File di traduzione: IT (default), EN, ES, FR -- ⏳ Selector lingua nell'UI universale -- ⏳ Traduzione automatica delle email e notifiche -- ⏳ Personalizzazione per paese (formati data, valuta) - ---- - -# NetGesCon Laravel - Blocco Appunti Progressivo -**Data inizio modernizzazione**: 6 Luglio ### οΏ½ **Features Avanzate PROSSIME**: -- πŸ”„ **IN CORSO**: Sistema multi-database per amministratori -- ⏳ Sistema audit stile GIT per tracciamento modifiche -- ⏳ Dati pre-caricati per nuovi stabili (comuni, voci tipo, fornitori) -- ⏳ Sistema "prima nota" β†’ contabilitΓ  definitiva -- ⏳ Partita doppia per bilanci completi -**Obiettivo**: Ristrutturazione completa con best practice Laravel + gestione moderna archivi/contabilitΓ  - ---- - -## 🎯 OBIETTIVI PRINCIPALI -- βœ… Modernizzare strutture DB (chiavi `id`, relazioni standard Laravel) -- βœ… Sistemare funzioni helper (userSetting) -- πŸ”„ **IN CORSO**: Correggere relazioni amministratore-stabili nella sidebar -- πŸ”„ **IN CORSO**: Sistema multi-database per amministratori (con codice 8 caratteri) -- πŸ”„ **IN CORSO**: Codici alfanumerici 8 caratteri per TUTTI gli utenti/movimenti/record -- ⏳ Implementare sistema "prima nota" β†’ contabilitΓ  definitiva -- ⏳ Preparare base per partita doppia -- ⏳ UI stile Akaunting + icone GitHub - -### οΏ½ **Sistema Ruoli CORRETTO**: -- **`admin`** = RISERVATO per sviluppatori sistema (NOI) -- **`amministratore`** = Chi gestisce condomini (login principale) -- **Ruoli multipli**: super-admin + fornitore + condominio + inquilino (stesso utente) -- **Autorizzazioni multiple** per utente giΓ  implementate - ---- - -## βœ… COMPLETATO (SESSIONI PRECEDENTI + ATTUALE) - -### πŸ“Š **Tabelle Modernizzate (Best Practice Laravel)** -- βœ… `movimenti_contabili`: chiave `id`, campo `codice_movimento` (8 char), stati movimento, relazioni standard -- βœ… `allegati`: chiave `id`, campo `codice_allegato` (8 char), relazione `user_id`, timestamps, soft deletes -- βœ… `stabili`: giΓ  aveva chiave `id` standard -- βœ… `amministratori`: NUOVA tabella moderna con codici alfanumerici, multi-database, cartelle dati -- βœ… **TUTTI i seeders aggiornati**: dati inseriti direttamente nel DB per test -- βœ… **Parametri di versione**: modificati direttamente nel DB (non piΓΉ nei file) - -### πŸ”— **Relazioni Corrette (TUTTE le relazioni con Stabile)** -- βœ… `MovimentoContabile::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `VoceSpesa::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `Gestione::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `Bilancio::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `TabellaMillesimale::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `Assemblea::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `Preventivo::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `Banca::stabile()` β†’ `belongsTo(Stabile::class, 'stabile_id', 'id')` -- βœ… `PianoContiCondominio`: aggiornato per usare `stabile_id` e chiave `id` - -### πŸ” **Sistema Utenti e Codici Alfanumerici** -- βœ… **Codici 8 caratteri**: A=Allegato, M=Movimento, ADM=Amministratore -- βœ… **Generazione automatica**: nei modelli con prefissi -- βœ… **Sistema multi-database**: preparato per amministratori (campo `database_attivo`) -- βœ… **Cartelle dati**: auto-create per ogni amministratore (`/amministratori/CODICE/`) -- πŸ”„ **IN CORSO**: Applicazione completa a tutti gli utenti e record - -### πŸ“ **Seeders e Migration** -- βœ… Posizione corretta: `app/Console/Seeders/` (NON `database/seeders/`) -- βœ… `MovimentiContabiliSeeder` β†’ funzionante con dati test -- βœ… `AllegatiSeeder` β†’ funzionante con dati test -- βœ… **TUTTI i seeders modernizzati** con best practice Laravel -- βœ… Migration `2025_07_06_071558_update_movimenti_contabili_table_structure.php` -- βœ… Migration `2025_07_06_200417_update_allegati_table_structure_to_laravel_standards.php` - -### 🎨 **Interfaccia Utente UNIFICATA** βœ… -- βœ… **Layout universale** responsive (`app-universal.blade.php`) -- βœ… **Sidebar permission-based** con menu dinamico filtrato -- βœ… **Mobile-first design** con hamburger menu (≀768px) -- βœ… **Dashboard admin** modernizzata con relazioni corrette -- βœ… **Dark mode** integrato e funzionante -- βœ… **Indicatori ruolo** visivi (colori, badge) -- βœ… **Menu contestuale** basato su permessi utente - -### πŸ“± **Responsive Design IMPLEMENTATO** βœ… -- βœ… **Desktop**: Sidebar fissa + colonna launcher -- βœ… **Mobile**: Hamburger menu + overlay sidebar -- βœ… **Tablet**: Sidebar collassabile con toggle -- βœ… **Accessibility**: Focus states, ARIA labels -- βœ… **Performance**: CSS transitions smooth - ---- - -## πŸ”„ ATTUALMENTE IN LAVORAZIONE - -### βœ… **STRATEGIA IMPLEMENTATA**: UI Universale per Tutti i Ruoli -**Approccio VINCENTE**: Una sola UI responsive che mostra contenuti diversi in base ai permessi -- βœ… **Layout universale** creato (`layouts/app-universal.blade.php`) -- βœ… **Sidebar intelligente** con menu filtrato per permessi -- βœ… **Responsive design** mobile-first con hamburger menu -- βœ… **Dashboard admin** modernizzata con nuova struttura dati -- βœ… **Super-admin e Admin** ora usano stesso layout - -### 🎯 **VANTAGGI OTTENUTI**: -- βœ… **DRY Principle**: Una sola UI da manutenere -- βœ… **Mobile Responsive**: Hamburger menu per schermi piccoli -- βœ… **Permission-based**: Ogni utente vede solo ciΓ² che puΓ² -- βœ… **Consistenza UX**: Stessa esperienza per tutti -- βœ… **FacilitΓ  sviluppo**: No duplicazione codice - -### πŸš€ **PROSSIMO GRANDE FOCUS**: Sistema Aggiornamenti Automatici -**Obiettivo**: Registrazione utenti con codici 8 caratteri + aggiornamenti via API -- πŸ“‹ **Progettazione completa** in `UPDATE_SYSTEM.md` -- πŸ—ƒοΈ **Database schema** per utenti registrati, versioni, log -- πŸ”Œ **API design** per registrazione, download, verifica licenze -- βš™οΈ **UpdateService** con backup automatico e rollback -- 🎨 **Frontend manager** per aggiornamenti via UI -- πŸ”’ **Sistema licenze** con livelli servizio (basic/pro/enterprise) -- πŸ“± **Mobile support** per notifiche e gestione aggiornamenti - -### πŸ—οΈ **Sistema Multi-Database CONFERMATO**: -- Database Master: `users`, `roles`, `amministratori`, `dati_centrali` -- Database Satelliti: `netgescon_CODICE8CHAR` per ogni amministratore -- Sincronizzazione: Laravel Multi-DB + Events + Queues -- Backup/Restore: per singolo amministratore - -### οΏ½ **Features Avanzate da Implementare**: -- Sistema audit stile GIT per tracciamento modifiche -- Dati pre-caricati per nuovi stabili (comuni, voci tipo, fornitori) -- UI stile Akaunting + icone GitHub -- Sistema "prima nota" β†’ contabilitΓ  definitiva - ---- - -## πŸ“š DOCUMENTI CREATI OGGI (7 Luglio 2025) - -### πŸ“– **Documentazione Tecnica Completa** -- βœ… **`INSTALL_LINUX.md`**: Guida installazione pulita da zero su Linux - - CompatibilitΓ  OS (solo Linux + WSL per sviluppo) - - Prerequisites dettagliati (PHP 8.2+, MySQL 8.0+, Redis, Apache/Nginx) - - Step-by-step Ubuntu/Debian - - Configurazione sicurezza (firewall, SSL, database) - - Virtual host Apache + HTTPS - - Cron jobs per manutenzione - - Troubleshooting comune - -- βœ… **`UPDATE_SYSTEM.md`**: Progettazione sistema aggiornamenti automatici - - Database schema completo (utenti registrati, versioni, log) - - API endpoints RESTful per registrazione/download/licenze - - UpdateService con backup automatico e rollback - - Comandi Artisan (update:check, update:install, update:download) - - Frontend Vue.js per gestione aggiornamenti - - Sistema licenze multi-livello (basic/professional/enterprise) - - Sicurezza (checksum, signatures, rate limiting) - - Monitoring e analytics - -### 🎯 **STATO PROGETTO ATTUALE** -- βœ… **Base modernizzata**: DB, relazioni, UI universale -- βœ… **Documentazione completa**: tecnica, installazione, specifiche -- πŸ”„ **IN PROGETTAZIONE**: Sistema aggiornamenti automatici -- ⏳ **PROSSIMI**: Multi-lingua, audit system, gestione licenze - ---- - -## πŸ“‹ PROSSIMI PASSI -1. **IMMEDIATO**: Correggere relazione admin-stabili nella sidebar -2. Verificare/popolare dati di test per admin con stabili -3. Completare codici alfanumerici per TUTTI gli utenti -4. Testare dashboard amministratore completo -5. Implementare logica "prima nota" vs "contabilitΓ  definitiva" -6. Progettazione multi-database per amministratori - ---- - -## πŸ“ NOTE TECNICHE IMPORTANTI - -### οΏ½ **AMBIENTE DI SVILUPPO E PRODUZIONE** -- **⚠️ IMPORTANTE**: Progetto destinato SOLO a Linux in produzione -- **Sviluppo**: WSL su Windows supportato, ma comandi sempre Linux/Bash -- **Terminale**: Utilizzare SEMPRE sintassi Linux per comandi -- **Path**: Utilizzare forward slash `/` non backslash `\` -- **Case sensitive**: Attenzione ai nomi file (Linux Γ¨ case-sensitive) - -### οΏ½πŸ—ƒοΈ **Struttura Database MODERNA** -- **Chiavi primarie**: SEMPRE `id` (standard Laravel) βœ… -- **Foreign keys**: `nome_tabella_id` (es: `stabile_id`, `user_id`) βœ… -- **Timestamps**: SEMPRE inclusi (`created_at`, `updated_at`) βœ… -- **Soft deletes**: Dove serve (`deleted_at`) βœ… -- **Codici unici**: 8 caratteri alfanumerici per identificazione βœ… - -### πŸ”§ **Convenzioni Laravel Adottate** -- Seeders in `app/Console/Seeders/` βœ… -- Namespace `App\Console\Seeders` βœ… -- Relazioni standard: `belongsTo()`, `hasMany()`, etc. βœ… -- Modelli con `SoftDeletes`, `HasFactory` βœ… -- Scope e accessor dove utili βœ… - -### 🎨 **Sistema Tema/Colori** -- Helper `userSetting()` funzionante βœ… -- Tema scuro/chiaro personalizzabile βœ… -- Autoloaded da `composer.json` βœ… - -### οΏ½ **Sistema Utenti Moderno** -- Codici alfanumerici 8 caratteri per identificazione univoca -- Generazione automatica nei modelli -- Prefissi per tipo: U=User, A=Allegato, M=Movimento -- Sistema multi-amministratore preparato - ---- - -## 🚨 ERRORI RISOLTI -- βœ… `SQLSTATE[42S22]: Column not found: 1054 Unknown column 'stabili.id_stabile'` - - **Causa**: Relazioni usavano vecchia chiave `id_stabile` - - **Soluzione**: Aggiornate TUTTE le relazioni a `id` standard -- βœ… `Call to undefined function userSetting()` - - **Causa**: Helper non autoloaded correttamente - - **Soluzione**: Aggiunto in `app/Helpers/impostazioni.php` -- βœ… `SQLSTATE[42S22]: Column not found: 1054 Unknown column 'amministratori.deleted_at'` - - **Causa**: Migration amministratori non eseguita - - **Soluzione**: Eseguito `php artisan migrate` -- βœ… `syntax error, unexpected token "," DashboardController.php:80` - - **Causa**: Codice duplicato e parentesi mancante nel compact() - - **Soluzione**: Ripulito codice e aggiunta parentesi di chiusura - ---- - -## πŸ” PER DEBUGGING FUTURO -```bash -# Verificare struttura tabelle -php artisan tinker --execute="echo implode(', ', Schema::getColumnListing('NOME_TABELLA'));" - -# Test relazioni admin-stabili -php artisan tinker --execute="User::with('amministratore.stabili')->where('role', 'admin')->first();" - -# Stato migration -php artisan migrate:status - -# Stato seeders -php artisan db:seed --class=\\App\\Console\\Seeders\\NOME_SEEDER -``` - ---- - -*Ultima modifica: 7 Luglio 2025 - README aggiornato, errori risolti (deleted_at, syntax error), UI universale funzionante* - -## πŸ“‹ PROSSIMI PASSI -1. **IMMEDIATO**: Risolvere `userSetting()` function -2. Testare dashboard amministratore completo -3. Verificare che tutte le relazioni funzionino -4. Implementare logica "prima nota" vs "contabilitΓ  definitiva" -5. Generazione automatica codici 8 caratteri per utenti -6. Progettazione multi-database per amministratori - ---- - -## πŸ“ NOTE TECNICHE IMPORTANTI - -### πŸ—ƒοΈ **Struttura Database** -- **Chiavi primarie**: SEMPRE `id` (standard Laravel) -- **Foreign keys**: `nome_tabella_id` (es: `stabile_id`, `user_id`) -- **Timestamps**: SEMPRE inclusi (`created_at`, `updated_at`) -- **Soft deletes**: Dove serve (`deleted_at`) -- **Codici unici**: 8 caratteri alfanumerici per identificazione - -### πŸ”§ **Convenzioni Laravel Adottate** -- Seeders in `app/Console/Seeders/` -- Namespace `App\Console\Seeders` -- Relazioni standard: `belongsTo()`, `hasMany()`, etc. -- Modelli con `SoftDeletes`, `HasFactory` -- Scope e accessor dove utili - -### 🎨 **Sistema Tema/Colori** -- GiΓ  implementato sistema preferenze utente -- Tema scuro/chiaro personalizzabile -- **DA VERIFICARE**: come Γ¨ implementato `userSetting()` - ---- - -## 🚨 ERRORI RISOLTI -- βœ… `SQLSTATE[42S22]: Column not found: 1054 Unknown column 'stabili.id_stabile'` - - **Causa**: Relazioni usavano vecchia chiave `id_stabile` - - **Soluzione**: Aggiornate tutte le relazioni a `id` standard - ---- - -## πŸ” PER DEBUGGING FUTURO -```bash -# Verificare struttura tabelle -php artisan tinker --execute="echo implode(', ', Schema::getColumnListing('NOME_TABELLA'));" - -# Test relazioni -php artisan tinker --execute="App\Models\MovimentoContabile::with('stabile')->first();" - -# Stato migration -php artisan migrate:status - -# Stato seeders -php artisan db:seed --class=\\App\\Console\\Seeders\\NOME_SEEDER -``` - ---- - -*Ultima modifica: 6 Luglio 2025 - Helper userSetting() mancante* - ---- - -## 🌍 **SUPPORTO MULTI-LINGUA** -- ⏳ **TODO**: Implementare Laravel Localization -- ⏳ File di traduzione: IT (default), EN, ES, FR -- ⏳ Selector lingua nell'UI universale -- ⏳ Traduzione automatica delle email e notifiche -- ⏳ Personalizzazione per paese (formati data, valuta) - ---- - ## πŸ“‹ **AGGIORNAMENTO FINALE 7 LUGLIO 2025** βœ… ### πŸŽ‰ **CONFERMA: SISTEMA PRATICAMENTE COMPLETO** diff --git a/app/Http/Controllers/Admin/DashboardController.php b/app/Http/Controllers/Admin/DashboardController.php index b3fd2ad8..3f813b59 100644 --- a/app/Http/Controllers/Admin/DashboardController.php +++ b/app/Http/Controllers/Admin/DashboardController.php @@ -16,7 +16,29 @@ class DashboardController extends Controller { public function index() { - $amministratore_id = Auth::user()->amministratore->id_amministratore ?? null; + // Ottieni l'ID dell'amministratore in modo sicuro + $user = Auth::user(); + $amministratore_id = null; + + if ($user && $user->amministratore) { + $amministratore_id = $user->amministratore->id; // Usa 'id' invece di 'id_amministratore' + } + + // Se l'utente non ha un amministratore associato, mostra vista vuota + if (!$amministratore_id) { + return view('admin.dashboard', [ + 'stats' => [ + 'stabili_gestiti' => 0, + 'stabili_attivi' => 0, + 'ticket_aperti' => 0, + 'ticket_urgenti' => 0, + ], + 'ticketsAperti' => collect(), + 'scadenzeImminenti' => collect(), + 'ultimiDocumenti' => collect(), + 'ultimiMovimenti' => collect(), + ]); + } // Statistiche principali $stats = [ diff --git a/app/Http/View/Composers/SidebarComposer.php b/app/Http/View/Composers/SidebarComposer.php index 92d05472..5d198afa 100644 --- a/app/Http/View/Composers/SidebarComposer.php +++ b/app/Http/View/Composers/SidebarComposer.php @@ -20,7 +20,8 @@ class SidebarComposer if (method_exists($user, 'hasRole') && $user->hasRole('super-admin')) { $stabili = Stabile::orderBy('denominazione')->get(); } elseif ($user->amministratore) { - $stabili = Stabile::where('amministratore_id', $user->amministratore->id_amministratore)->orderBy('denominazione')->get(); + // Usa 'id' invece di 'id_amministratore' per la chiave modernizzata + $stabili = Stabile::where('amministratore_id', $user->amministratore->id)->orderBy('denominazione')->get(); } } $stabileAttivo = session('stabile_corrente') ?? ($stabili->first() ? $stabili->first()->denominazione : null); diff --git a/app/Models/Amministratore.php b/app/Models/Amministratore.php index 98c1b08a..3e8f71dc 100644 --- a/app/Models/Amministratore.php +++ b/app/Models/Amministratore.php @@ -18,8 +18,8 @@ class Amministratore extends Model * * @var string */ - protected $table = 'amministratori'; // Specifica il nome corretto della tabella - protected $primaryKey = 'id_amministratore'; + protected $table = 'amministratori'; + // Rimossa la primaryKey personalizzata - usa 'id' standard Laravel /** * The attributes that are mass assignable. *