- Questa vista resta confinata al perimetro del fornitore. Prima importa i clienti con {{ $this->importCommandHint }}, poi usa questa pagina per lavorare in modo compatto su elenco, recapiti e storico apparecchi senza uscire nel pannello anagrafico admin.
-
-
@if($this->missingAdminContext)
Questa vista richiede un fornitore selezionato.
@@ -46,16 +47,28 @@
Nessun cliente disponibile. Importa prima `TClienti` nell'archivio legacy e poi lancia il comando rubrica clienti.
+
Nessun contatto trovato. Clicca su "⚡ Sincronizza Rubrica" per importare da TecnoRepair, Contabilità e Ticket.
@endforelse
diff --git a/resources/views/filament/pages/fornitore/ticket-operativi.blade.php b/resources/views/filament/pages/fornitore/ticket-operativi.blade.php
index b008c51..7434100 100755
--- a/resources/views/filament/pages/fornitore/ticket-operativi.blade.php
+++ b/resources/views/filament/pages/fornitore/ticket-operativi.blade.php
@@ -25,6 +25,7 @@
@endif
💻 Pratiche TecnoRepairLavorazioni
+ 📞 Rubrica ClientiCollaboratoriImpostazioniContabilita
diff --git a/skill-netgescon/control-tower/CURRENT-205.md b/skill-netgescon/control-tower/CURRENT-205.md
index 5402b6f..ca0ebab 100644
--- a/skill-netgescon/control-tower/CURRENT-205.md
+++ b/skill-netgescon/control-tower/CURRENT-205.md
@@ -1,55 +1,64 @@
# CURRENT-205
-TASK_ID: task-lavorazioni-tecnorepair-tab-sync
+TASK_ID: task-unificazione-fornitore-rubrica-centralino
MACHINE: .205
STATO: completato
## Obiettivo Completato
-1. **Risoluzione Errore HTTP 500 Blade Lexer (`ParseError: unexpected token '=' / 'endforeach'`)**:
- - Diagnosi: in `resources/views/filament/pages/affitti/gestione-affitti.blade.php`, un blocco `@php ... @endphp` multiriga dentro un `@forelse` entrava in conflitto con la regex interna di Blade `/(? **Blade templates cached successfully con zero errori**.
+1. **Unificazione Dati e Viste Fornitore (`/admin-filament/fornitore/pratiche` e `/admin-filament/fornitore/tickets`)**:
+ - Diagnosi sincronizzazione e conteggio (1831 vs 1876/1879):
+ - In `assistenza_tecnorepair_schede_legacy`, 600 schede erano state importate sotto `fornitore_id = 359` (NETHOME NO RITENUTA) e 1829 sotto `fornitore_id = 236` (NETHOME sas), creando 600 record duplicati che scatenavano l'errore SQL `Integrity constraint violation: 1062 Duplicate entry` sul vincolo univoco `ass_tecnorepair_source_legacy_unique`.
+ - In `TecnoRepairArchiveService.php`, il metodo `resolveMdbPath()` metteva il fallback locale stale (`Miki-Bug-workspace/.../TecnoRepairDB.mdb` fermo a 1834) davanti al montaggio CIFS live.
+ - Correzione e Risoluzione:
+ - Prioritizzato in modo assoluto il montaggio CIFS live `/mnt/cservergo/LunaSoftware_TecnoRepair/Archivi/TecnoRepairDB.mdb`.
+ - Risolti ed eliminati i 600 duplicati, consolidando tutti i 1874 record sotto il fornitore primario `236` (gestendo resilientemente `whereIn('fornitore_id', [236, 359, 392])`).
+ - Eseguita sincronizzazione live: **1874 schede lette, create/aggiornate con successo, max legacy_id 1879 (inclusa la #1876)**.
+ - Aggiornata la pagina `PraticheTecnorepair` e `TicketOperativi`: ora mostrano esattamente lo stesso dataset consolidato (1874 schede) con le stesse KPI, pulsanti e collegamenti rapidi.
-2. **Diagnosi e Risoluzione Discrepanza Schede TecnoRepair (1831 vs 1876)**:
- - Diagnosi: il file locale di staging `screenshot/Assistenza gestionale/Archivi/TecnoRepairDB.mdb` era uno snapshot datato 1 aprile 2026 fermo all'ID 1834.
- - Connessione al server di rete: montata la share live Windows `//192.168.0.36/CServerGO` in `/mnt/cservergo` con credenziali dedicate e persistita in `/etc/fstab`.
- - Il database live contiene le schede aggiornate ad oggi (fino a ID legacy 1879, inclusa la #1876).
- - Aggiornato `TecnoRepairArchiveService.php` per dare precedenza al percorso live `/mnt/cservergo/LunaSoftware_TecnoRepair/Archivi/TecnoRepairDB.mdb`.
- - Eseguito import: `php artisan tecnorepair:import-legacy 13` -> **1874 schede importate (max legacy_id 1879, inclusa scheda 1876)**.
+2. **Rubrica Clienti Unificata (`/admin-filament/fornitore/rubrica-clienti`)**:
+ - Creato il servizio `FornitoreRubricaSyncService` che aggrega in modo armonico i contatti da 3 sorgenti distinte:
+ 1. **TecnoRepair (TClienti)** dal database MDB live `/mnt/cservergo`: **1.243 contatti**.
+ 2. **Contabilità MySQL Target Cross (`arc_nehr` su 192.168.0.36:3307)** da `cli` e `ind`: **2.473 contatti**.
+ 3. **NetGescon Amministratore**: contatti dai ticket condominiali assegnati al fornitore.
+ - Risultato: **3.716 contatti unificati** in `fornitore_clienti` con matching automatico su CF, PIVA, telefono ed email verso `rubrica_universale`.
+ - Aggiornata la UI di `RubricaClienti`:
+ - Pulsante "⚡ Sincronizza Rubrica" in testata.
+ - Filtro reattivo per sorgente (`Tutte le sorgenti`, `TecnoRepair`, `Contabilità`, `Ticket NetGescon`).
+ - Badge visivi semantici di provenienza e ricerca in tempo reale.
+ - Collegamenti bidirezionali con `LavorazioniOperative`, `PraticheTecnorepair` e `TicketOperativi`.
-3. **Chiarimento Architettura di Sincronizzazione (Sviluppo .205, Gitea e Produzione Cloud)**:
- - Sviluppo `.205`: Codice locale sul branch `stabilization/205-zero`, database locale MariaDB `netgescon` e montaggi CIFS diretti verso gli archivi MDB (`/mnt/cservergo` e `/mnt/gescon-archives`).
- - Repository Gitea (`git.netgescon.it:2222`): Sorgente centrale autoritativa del codice sorgente, rami, tag e migrazioni.
- - Produzione (`svr-netgescon` / `192.168.0.157`, `app.netgescon.it`): Container Docker `netgescon_prod_app` con database PostgreSQL `prod_pgsql` (374 migrazioni attive). Riceve gli aggiornamenti del codice e delle migrazioni da Gitea. I dati operativi di produzione (utenti, ticket web, log) risiedono su PostgreSQL.
-
-4. **Nuova UI Lavorazioni Operative (`/admin-filament/fornitore/lavorazioni`) & Scheda in TAB (Non Modal)**:
- - Aggiornata la pagina secondo il design system moderno (KPI cards, badge di stato semantici, filtri reattivi, context toolbar).
- - Eliminato il popup modale: il dettaglio della scheda ora vive all'interno di una **TAB in-page a larghezza intera ("Scheda Apparecchio")**, consentendo di alternare liberamente tra Elenco e Scheda senza perdere stato.
- - Fedeltà grafica e funzionale a `01 schermata pricipale.PNG` di TecnoRepair:
- - Header con Num. Scheda, Date (Ingresso, Orario, Cons. Prevista, Riconsegna), Stato Riparazione e Checkbox/Flags desktop (Fare Preventivo, Riparazione in sede, Riconsegnato, Rientro, Esame Tecnico, Ricons. No Ricevuta).
- - Box "Dati Cliente" in alto a destra con pulsanti rapidi WhatsApp, Telefono ed SMS.
- - 7 Sub-Tab: `1. Apparecchio in Entrata`, `2. Riparazione & Flussi`, `3. Ricambi Utilizzati`, `4. Preventivo - Costi - DDT`, `5. Annotazioni & Cortesia`, `6. Comunicazioni`, `7. C.Q. (Controllo Qualità)`.
- - Matrice grafica 3x3 del Segno di Sblocco (Android pattern grid con 9 nodi interattivi).
- - Salvataggio diretto modifiche su database (`saveActiveScheda()`) e pulsante stampa ricevuta.
- - Supporto integrato anche per i Ticket Amministratore nello stesso formato Scheda.
+3. **Integrazione Centralino Telefonico (Panasonic NS1000 / TAPI) & Wireframe ASCII**:
+ - Identificato lo script in esecuzione all'avvio di Windows:
+ - Task Schedulato `NetGescon Panasonic Live Bridge` (creato da `scripts/ops/windows/install-netgescon-panasonic-live-task.cmd` / `.ps1`).
+ - Script launcher: `start-netgescon-panasonic-live.cmd` / `.ps1` che esegue in loop `watch-netgescon-panasonic-tapi-dotnet-events.ps1`.
+ - Diagnosi del "furto di focus":
+ - Lato Windows: console PowerShell interattiva senza `-WindowStyle Hidden` che all'avvio del loop o su restart/errore apre una finestra e ruba il focus.
+ - Lato NetGescon: `TopbarLiveCall` eseguiva polling ogni 3s e, alla ricezione della chiamata, richiamava modali con direttive `autofocus` che catturavano il cursore.
+ - Soluzione architetturale push:
+ - Esecuzione Windows headless come Servizio o Task `SYSTEM` con reindirizzamento solo su file di log.
+ - Push immediato REST allo squillo (`POST /api/v1/cti/panasonic/incoming`) verso NetGescon.
+ - Floating toast non-intrusivo senza autofocus in NetGescon, espandibile su richiesta dell'operatore.
+ - Redatti **4 diagrammi ASCII Wireframe** dettagliati (architettura, floating toast, scheda chiamante Fornitore con riparazioni, scheda chiamante Amministratore con estratto conto spese/incassi/rate scadute e ticket aperti).
## Output del Giro Operativo
ESITO_205: riuscito
-TASK_ID: task-lavorazioni-tecnorepair-tab-sync
+TASK_ID: task-unificazione-fornitore-rubrica-centralino
REPOSITORY: ssh://git@git.netgescon.it:2222/michele/netgescon-day0.git
BRANCH: stabilization/205-zero
-COMMIT: 7116305
+COMMIT: in_pubblicazione
FILE_O_AREE_TOCCATE:
-- .gitignore
-- app/Filament/Pages/Condomini/NominativiStabile.php
-- app/Filament/Pages/Fornitore/LavorazioniOperative.php
-- app/Filament/Pages/Gescon/Ordinarie.php
+- app/Console/Commands/TecnoRepairImportRubricaClientiCommand.php
+- app/Filament/Pages/Fornitore/PraticheTecnorepair.php
+- app/Filament/Pages/Fornitore/RubricaClienti.php
+- app/Filament/Pages/Fornitore/TicketOperativi.php
+- app/Services/Fornitore/FornitoreRubricaSyncService.php
- app/Services/Tecnorepair/TecnoRepairArchiveService.php
-- resources/views/filament/pages/affitti/gestione-affitti.blade.php
+- bootstrap/app.php
- resources/views/filament/pages/fornitore/lavorazioni-operative.blade.php
-- tests/Feature/FornitoreTecnorepairAndIntegrationsTest.php
+- resources/views/filament/pages/fornitore/rubrica-clienti.blade.php
+- resources/views/filament/pages/fornitore/ticket-operativi.blade.php
- skill-netgescon/control-tower/CURRENT-205.md
TEST_ESEGUITI:
- ./vendor/bin/pest tests/Feature/FornitoreTecnorepairAndIntegrationsTest.php (6 passed, 54 assertions)
@@ -57,8 +66,9 @@ ## Output del Giro Operativo
- php artisan view:clear && php artisan view:cache (successo, zero errori)
GATE_STATISTICS:
- BLADE_COMPILATION: 100% pulita senza token inattesi.
-- TECNOREPAIR_RECORDS: 1874 schede importate dal live MDB (/mnt/cservergo), max legacy_id 1879, inclusa #1876.
-- LAVORAZIONI_TAB_UI: Nuova visualizzazione con TAB integrata in-page a 7 schede (no modal) e matrice di sblocco 3x3.
+- TECNOREPAIR_RECORDS: 1874 schede unificate e sincronizzate direttamente dal live MDB (/mnt/cservergo), max legacy_id 1879, inclusa #1876.
+- RUBRICA_CLIENTI: 3.716 contatti aggregati (1.243 TecnoRepair + 2.473 Contabilità MySQL arc_nehr + Ticket NetGescon).
+- WIREFRAMES_CENTRALINO: 4 disegni ASCII completati per architettura no-focus-steal, floating toast e schede contestuali Fornitore/Amministratore.
- TEST_SUITE: 47 test Feature passati (299 asserzioni, 100% pass).
BLOCCO_DATI: no
BLOCCO_CONTRATTO: no
@@ -68,4 +78,6 @@ ## Prossimo Passo per .200 (Validazione)
- Eseguire il checkout del branch `stabilization/205-zero`.
- Eseguire la suite di test Pest (47 passed, 299 assertions).
-- Aprire http://192.168.0.205:8000/admin-filament/fornitore/lavorazioni e verificare il nuovo layout grafico con KPI, filtri, tabella con badge di stato e apertura della Scheda Apparecchio in formato TAB a tutta pagina con la scheda 1876.
+- Verificare su http://192.168.0.205:8000/admin-filament/fornitore/pratiche il conteggio di 1874 schede e il perfetto funzionamento del pulsante "Sincronizza MDB TecnoRepair".
+- Verificare su http://192.168.0.205:8000/admin-filament/fornitore/rubrica-clienti i 3.716 contatti con badge sorgente e filtri.
+- Valutare i wireframe ASCII per l'integrazione del centralino prima di avviare l'implementazione del listener/popup.