From 772a077e01c65edd9cfb7709c2a175b256e0863c Mon Sep 17 00:00:00 2001 From: michele Date: Wed, 8 Apr 2026 20:22:28 +0000 Subject: [PATCH] Launcher status and import operativa polish --- CHANGELOG.md | 2 + app/Filament/Pages/Supporto/Modifiche.php | 16 ++- docs/ai/SESSION_HANDOFF.md | 111 ++++++++++++++++-- .../importazione-archivi-operativa.blade.php | 43 ++++--- .../supporto/aggiornamento-launcher.blade.php | 14 +++ 5 files changed, 155 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f9f268..713e692 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ # Changelog ## [Unreleased] - Initial open-source release prep. +- Reworked Supporto > Aggiornamento Nodo to show local/remote commit dates, explicit pending commit counts, and a clear note that Git updates do not move storage archives or private uploaded data. +- Reorganized the Importazione Archivi operational tab so the action buttons come first, followed by the explanatory blocks and command fields. - Removed active-stabile filtering from topbar avvisi/urgenze counters and from the Google ticket-operativi box so cross-stabile operational tickets stay visible. - Removed the Google Workspace widget from the main/support dashboard, leaving the full panel only under Impostazioni > Google. - Tightened Filament sidebar navigation spacing between main menu groups for denser top-level navigation. diff --git a/app/Filament/Pages/Supporto/Modifiche.php b/app/Filament/Pages/Supporto/Modifiche.php index f85ce46..4f88bce 100644 --- a/app/Filament/Pages/Supporto/Modifiche.php +++ b/app/Filament/Pages/Supporto/Modifiche.php @@ -85,12 +85,20 @@ class Modifiche extends Page public ?string $gitCurrentCommit = null; + public ?string $gitCurrentCommitDate = null; + public ?string $gitRemoteCommit = null; + public ?string $gitRemoteCommitDate = null; + public bool $gitWorkingTreeDirty = false; public string $gitAheadBehind = '-'; + public int $gitAheadCount = 0; + + public int $gitBehindCount = 0; + public bool $gitSyncInProgress = false; public ?string $gitSyncJobId = null; @@ -1051,12 +1059,18 @@ private function loadGitWorkspaceStatus(): void { $this->gitCurrentBranch = $this->runGitProcess(['rev-parse', '--abbrev-ref', 'HEAD']); $this->gitCurrentCommit = $this->runGitProcess(['rev-parse', '--short', 'HEAD']); + $this->gitCurrentCommitDate = $this->runGitProcess(['show', '-s', '--date=format:%d/%m/%Y %H:%M', '--format=%cd', 'HEAD']); $this->gitRemoteCommit = $this->runGitProcess(['rev-parse', '--short', 'refs/remotes/' . $this->gitRemote . '/' . $this->gitBranch]); + $this->gitRemoteCommitDate = $this->runGitProcess(['show', '-s', '--date=format:%d/%m/%Y %H:%M', '--format=%cd', 'refs/remotes/' . $this->gitRemote . '/' . $this->gitBranch]); $this->gitWorkingTreeDirty = trim((string) ($this->runGitProcess(['status', '--porcelain']) ?? '')) !== ''; + $this->gitAheadCount = 0; + $this->gitBehindCount = 0; $aheadBehind = $this->runGitProcess(['rev-list', '--left-right', '--count', 'HEAD...refs/remotes/' . $this->gitRemote . '/' . $this->gitBranch]); if (is_string($aheadBehind) && preg_match('/^(\d+)\s+(\d+)$/', trim($aheadBehind), $matches) === 1) { - $this->gitAheadBehind = 'ahead ' . $matches[1] . ' / behind ' . $matches[2]; + $this->gitAheadCount = (int) $matches[1]; + $this->gitBehindCount = (int) $matches[2]; + $this->gitAheadBehind = 'ahead ' . $this->gitAheadCount . ' / behind ' . $this->gitBehindCount; } else { $this->gitAheadBehind = '-'; } diff --git a/docs/ai/SESSION_HANDOFF.md b/docs/ai/SESSION_HANDOFF.md index 18052cd..273fc9b 100644 --- a/docs/ai/SESSION_HANDOFF.md +++ b/docs/ai/SESSION_HANDOFF.md @@ -1,3 +1,62 @@ +# SESSION HANDOFF - 2026-04-08 + +## Contesto operativo attuale + +- Stabile pilota: `0021` +- Obiettivo reale: import sicuro solo per stabili gia presenti, senza fallback vuoti o inventati su unita, nominativi, millesimi e voci di spesa. +- Regola utente vincolante: + - l'ultimo anno disponibile e la base autorevole dello stato corrente + - la chiave certa dell'unita e `condomin.cod_cond` + - il codice mnemonico operatore resta `Palazzina/Scala/Interno`, ma non deve diventare la chiave interna in fallback + - gli anni precedenti servono per costruire cronologia e variazioni, non per sovrascrivere il nominativo corrente + - niente righe vuote, `interno` inventati, o completamenti artificiali che rompano telefono, nominativi o allineamento unita + +## Fix gia applicate e verificate + +- `app/Console/Commands/ImportGesconFullPipeline.php` + - i placeholder `dettaglio_millesimi` a zero vengono creati solo con opzione esplicita `--fill-missing-millesimi` + - migliorato il fallback di aggancio `voci_spesa -> tabelle_millesimali` quando manca il match per anno gestione + - preflight staging reso sensibile a `cod_stabile + legacy_year`, non solo a `cod_stabile` +- `app/Console/Commands/NetgesconQaMillesimiSpeseCommand.php` + - nuovo comando QA per verificare allineamento unita, nominativi, millesimi, voci e archivi legacy +- `app/Filament/Pages/Strumenti/PostItGestione.php` + - raggruppamento post-it ora phone-first + - chiamate ai gruppi `601` e `603` non risposte da un interno reale trattate come missed in UI +- `app/Console/Commands/SmdrListenCommand.php` + - nuove chiamate SMDR su `601`/`603` marcate missed se non emerge un vero interno finale + +## Evidenze gia verificate + +- Per `0021`, il preflight prima caricava solo `legacy_year=0003`; dopo il fix ha caricato correttamente anche `0004`. +- Dry-run verificato: + - `condomin 0021/0004 = 214` + - `comproprietari 0021/0004 = 11` + - `voc_spe 0021/0004 = 73` +- Dopo il fix sulle voci, per `0021/0003` i codici legacy voce trovano tutti la corrispondente voce di dominio e non restano piu voci agganciate senza tabella default per i casi verificati. +- Sul call board, il numero `3388155553` collassa in un solo gruppo; esiste almeno un caso reale `601 -> 206` che resta correttamente answered. + +## Punto aperto principale + +La prossima modifica strutturale da fare e in `ImportGesconFullPipeline.php`, nella parte che ricostruisce unita/nominativi da staging: + +1. partire dall'ultimo anno disponibile come snapshot corrente autorevole +2. identificare l'unita da `cod_cond` e usare `scala`, `interno`, `sub` solo come supporto di riconciliazione +3. evitare la creazione di unita artificiali o fallback tipo `A/0` se non esiste una base certa in archivio +4. aggiungere gli anni precedenti come variazioni storiche in `unita_immobiliare_nominativi`, senza riscrivere il corrente con dati piu vecchi +5. mantenere continuita contabile con collegamento a unita e ruolo storico `C`/`I` per rate emesse e incassi + +## Anomalie note da non coprire con fallback + +- In dominio esistono ancora 5 unita attive di `0021` senza nominativo corrente: `A/0`, `A/42`, `A/43`, `A/215`, `A/216`. +- Verifica fatta: queste unita non risultano in `gescon_import.condomin` per `0021/0003` nei dati controllati; non vanno auto-riempite con nominativi fittizi. +- Decisione da prendere nella prossima sessione: review/archiviazione/disattivazione guidata, non compensazione automatica. + +## Prompt di ripartenza consigliato + +"Riparti da docs/ai/SESSION_HANDOFF.md, docs/ai/TOPICS_INDEX.md, docs/ai/LATEST_2_CHATS_RECOVERY.md e dal topic docs/ai/topics/import-unita-cod-cond.md. Prima allinea la logica di import unita/nominativi all'ultimo anno autorevole basato su cod_cond, senza fallback inventati. Poi valida l'impatto contabile su rate e incassi." + +--- + # SESSION HANDOFF – 2026-02-27 ## Contesto operativo @@ -50,10 +109,12 @@ ## Prompt di ripartenza consigliato ## CHECKPOINT 2026-03-02 17:45:02 ### Stato rapido + - Branch: main - Ultimo commit: 49002765 2025-11-10 Auto-sync commit: 2025-11-10 12:40:03 ### File modificati (git status --short) + ``` M .gitignore M .vscode/tasks.json @@ -10568,6 +10629,7 @@ ### File modificati (git status --short) ``` ### Ultimi file toccati (max 20) + ``` .gitignore .vscode/tasks.json @@ -10592,15 +10654,19 @@ ### Ultimi file toccati (max 20) ``` ### Bug trovati / verificati in questa sessione -- + +- ### Decisioni prese -- + +- ### Prossimo step operativo -- + +- ### Prompt di ripartenza + Riparti da docs/ai/SESSION_HANDOFF.md, usa l'ultimo CHECKPOINT, continua dal "Prossimo step operativo" senza rifare analisi generale. --- @@ -10608,10 +10674,12 @@ ### Prompt di ripartenza ## CHECKPOINT 2026-03-02 18:33:07 ### Stato rapido + - Branch: main - Ultimo commit: 49002765 2025-11-10 Auto-sync commit: 2025-11-10 12:40:03 ### File modificati (git status --short) + ``` M .gitignore M .vscode/tasks.json @@ -21126,6 +21194,7 @@ ### File modificati (git status --short) ``` ### Ultimi file toccati (max 20) + ``` .gitignore .vscode/tasks.json @@ -21150,15 +21219,19 @@ ### Ultimi file toccati (max 20) ``` ### Bug trovati / verificati in questa sessione -- + +- ### Decisioni prese -- + +- ### Prossimo step operativo -- + +- ### Prompt di ripartenza + Riparti da docs/ai/SESSION_HANDOFF.md, usa l'ultimo CHECKPOINT, continua dal "Prossimo step operativo" senza rifare analisi generale. --- @@ -21166,10 +21239,12 @@ ### Prompt di ripartenza ## CHECKPOINT 2026-03-03 09:35:25 ### Stato rapido + - Branch: main - Ultimo commit: 49002765 2025-11-10 Auto-sync commit: 2025-11-10 12:40:03 ### File modificati (git status --short) + ``` M .gitignore M .vscode/tasks.json @@ -31684,6 +31759,7 @@ ### File modificati (git status --short) ``` ### Ultimi file toccati (max 20) + ``` .gitignore .vscode/tasks.json @@ -31708,15 +31784,19 @@ ### Ultimi file toccati (max 20) ``` ### Bug trovati / verificati in questa sessione -- + +- ### Decisioni prese -- + +- ### Prossimo step operativo -- + +- ### Prompt di ripartenza + Riparti da docs/ai/SESSION_HANDOFF.md, usa l'ultimo CHECKPOINT, continua dal "Prossimo step operativo" senza rifare analisi generale. --- @@ -31724,10 +31804,12 @@ ### Prompt di ripartenza ## CHECKPOINT 2026-03-03 10:26:27 ### Stato rapido + - Branch: main - Ultimo commit: 49002765 2025-11-10 Auto-sync commit: 2025-11-10 12:40:03 ### File modificati (git status --short) + ``` M .gitignore M .vscode/tasks.json @@ -42242,6 +42324,7 @@ ### File modificati (git status --short) ``` ### Ultimi file toccati (max 20) + ``` .gitignore .vscode/tasks.json @@ -42266,13 +42349,17 @@ ### Ultimi file toccati (max 20) ``` ### Bug trovati / verificati in questa sessione -- + +- ### Decisioni prese -- + +- ### Prossimo step operativo -- + +- ### Prompt di ripartenza + Riparti da docs/ai/SESSION_HANDOFF.md, usa l'ultimo CHECKPOINT, continua dal "Prossimo step operativo" senza rifare analisi generale. diff --git a/resources/views/filament/pages/gescon/partials/importazione-archivi-operativa.blade.php b/resources/views/filament/pages/gescon/partials/importazione-archivi-operativa.blade.php index c466f2b..d29c78b 100644 --- a/resources/views/filament/pages/gescon/partials/importazione-archivi-operativa.blade.php +++ b/resources/views/filament/pages/gescon/partials/importazione-archivi-operativa.blade.php @@ -7,35 +7,42 @@ Se importi `unità`, `soggetti` o `diritti`, la pagina ora lancia anche il re-sync di anagrafiche, ruoli rubrica e bonifica recapiti/contatti collegati allo stabile selezionato. +
+
+
+
Azioni operative
+
Prima esegui i pulsanti di preparazione, poi il flusso di import, infine gli eventuali riallineamenti.
+
+
Stabile attuale: {{ $selectedLabel !== '' ? $selectedLabel : 'nessuno' }}
+
+ +
+ Carica elenco stabili + Carica anni + Crea / apri stabile + Importa dati selezionati + Import + allineamento + Aggiorna fornitori + Risincronizza relazioni + Sync anagrafiche + Refresh TAG fornitori +
+
+
1. Setup archivio
-
- Carica elenco stabili - Carica anni - Crea / apri stabile -
-
Stabile attuale: {{ $selectedLabel !== '' ? $selectedLabel : 'nessuno' }}
+
Carica elenco stabili, recupera gli anni dalla base generale e crea o riapri lo stabile locale prima dell'import vero e proprio.
2. Import / aggiornamento
-
- Importa dati selezionati - Import + allineamento - Aggiorna fornitori -
-
Usa `Import + allineamento` come flusso principale; `Importa dati selezionati` serve per slice mirate.
+
Usa Import + allineamento come flusso principale. Importa dati selezionati resta utile solo per slice mirate o recuperi puntuali.
3. Re-sync relazioni
-
- Risincronizza relazioni - Sync anagrafiche - Refresh TAG fornitori -
-
Serve quando i dati locali esistono già e vuoi riallineare rubrica, ruoli e recapiti senza reimportare tutto.
+
Serve quando i dati locali esistono già e vuoi riallineare rubrica, ruoli, recapiti e tag fornitori senza rilanciare l'intero import.
diff --git a/resources/views/filament/pages/supporto/aggiornamento-launcher.blade.php b/resources/views/filament/pages/supporto/aggiornamento-launcher.blade.php index 36b3f00..145b461 100644 --- a/resources/views/filament/pages/supporto/aggiornamento-launcher.blade.php +++ b/resources/views/filament/pages/supporto/aggiornamento-launcher.blade.php @@ -82,12 +82,26 @@
Branch locale: {{ $this->gitCurrentBranch ?? '-' }}
Commit locale: {{ $this->gitCurrentCommit ?? '-' }}
+
Data commit locale: {{ $this->gitCurrentCommitDate ?? '-' }}
Commit remoto: {{ $this->gitRemoteCommit ?? '-' }}
+
Data commit remoto: {{ $this->gitRemoteCommitDate ?? '-' }}
Tracking: {{ $this->gitAheadBehind }}
+
Aggiornamenti da caricare sul nodo: {{ (int) $this->pendingGitCommitCount }}
+
Commit locali da inviare: {{ (int) $this->gitAheadCount }}
Working tree: {{ $this->gitWorkingTreeDirty ? 'sporco' : 'pulito' }}
Ultima sync Git: {{ $this->lastGitSyncAt ?? '-' }}
Ultimo update: {{ $this->lastUpdateAt ?? '-' }}
+ +
+ Git sync e update codice aggiornano i file versionati nel repository. Gli archivi caricati manualmente dentro storage o cartelle private non vengono trasferiti da Git, salvo procedure dedicate di backup/sync dati. +
+ + @if(filled($this->pendingGitPreviewIssue)) +
+ {{ $this->pendingGitPreviewIssue }} +
+ @endif