Fix: Risolte relazioni amministratore e chiavi database

 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
This commit is contained in:
Pikappa2 2025-07-07 18:09:32 +02:00
parent 517f313af9
commit 952c9b4e90
5 changed files with 28 additions and 615 deletions

View File

@ -109,7 +109,7 @@ class TestSetupSeeder extends Seeder
$stabile = Stabile::firstOrCreate( $stabile = Stabile::firstOrCreate(
['denominazione' => 'Stabile Test Via Milano 1'], ['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', 'indirizzo' => 'Via Milano 1',
'cap' => '20100', 'cap' => '20100',
'citta' => 'Milano', 'citta' => 'Milano',

View File

@ -315,616 +315,6 @@ php artisan db:seed --class=\\App\\Console\\Seeders\\NOME_SEEDER
--- ---
# NetGesCon Laravel - Blocco Appunti Progressivo
**Data inizio modernizzazione**: 6 Luglio ### <20> **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
### <20> **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
### <20> **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
### <20> **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)
### <20>🗃 **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`
### <20> **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 ### <20> **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
### <20> **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
### <20> **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
### <20> **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)
### <20>🗃 **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`
### <20> **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** ## 📋 **AGGIORNAMENTO FINALE 7 LUGLIO 2025**
### 🎉 **CONFERMA: SISTEMA PRATICAMENTE COMPLETO** ### 🎉 **CONFERMA: SISTEMA PRATICAMENTE COMPLETO**

View File

@ -16,7 +16,29 @@ class DashboardController extends Controller
{ {
public function index() 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 // Statistiche principali
$stats = [ $stats = [

View File

@ -20,7 +20,8 @@ class SidebarComposer
if (method_exists($user, 'hasRole') && $user->hasRole('super-admin')) { if (method_exists($user, 'hasRole') && $user->hasRole('super-admin')) {
$stabili = Stabile::orderBy('denominazione')->get(); $stabili = Stabile::orderBy('denominazione')->get();
} elseif ($user->amministratore) { } 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); $stabileAttivo = session('stabile_corrente') ?? ($stabili->first() ? $stabili->first()->denominazione : null);

View File

@ -18,8 +18,8 @@ class Amministratore extends Model
* *
* @var string * @var string
*/ */
protected $table = 'amministratori'; // Specifica il nome corretto della tabella protected $table = 'amministratori';
protected $primaryKey = 'id_amministratore'; // Rimossa la primaryKey personalizzata - usa 'id' standard Laravel
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
* *