feat(nominativi): remove runtime legacy staging fallback and publish consolidated nominativi (task-e4ec3b8dc0)

This commit is contained in:
michele 2026-08-13 23:43:16 +02:00
parent d3658d32e5
commit 0984f27721
2 changed files with 17 additions and 54 deletions

View File

@ -462,49 +462,10 @@ protected function getTableQuery(): Builder
return $this->buildDomainConsolidatedQuery((int) $activeStabileId);
}
$this->ensureLegacyViewExists();
if (! $this->hasLegacyNominativiForStabile($codStabile)) {
return $this->buildDomainFallbackQuery((int) $activeStabileId);
}
$legacyTable = 'vw_legacy_condomin_nominativi';
$base = LegacyCondominNominativo::query()
->where($legacyTable . '.cod_stabile', $codStabile)
->where(function (Builder $q): void {
$q->whereRaw("TRIM(COALESCE(vw_legacy_condomin_nominativi.nom_cond, '')) <> ''")
->orWhereRaw("TRIM(COALESCE(vw_legacy_condomin_nominativi.inquil_nome, '')) <> ''");
});
$latestPerUnit = DB::connection('gescon_import')
->table('vw_legacy_condomin_nominativi')
->select('cod_stabile', 'scala', 'interno')
->selectRaw('MAX(legacy_year) as legacy_year')
->where('cod_stabile', $codStabile)
->groupBy('cod_stabile', 'scala', 'interno');
return $base
->joinSub($latestPerUnit, 'mx', function ($join): void {
$join->on('mx.cod_stabile', '=', 'vw_legacy_condomin_nominativi.cod_stabile')
->on('mx.scala', '=', 'vw_legacy_condomin_nominativi.scala')
->on('mx.interno', '=', 'vw_legacy_condomin_nominativi.interno')
->on('mx.legacy_year', '=', 'vw_legacy_condomin_nominativi.legacy_year');
})
->when($this->cumulato, function (Builder $q) use ($legacyTable): void {
$q->where(function (Builder $sub) use ($legacyTable) {
$sub->whereNull($legacyTable . '.cumulo_cond')
->orWhere($legacyTable . '.cumulo_cond', '')
->orWhereColumn($legacyTable . '.cumulo_cond', $legacyTable . '.cod_cond');
});
})
->orderBy($legacyTable . '.scala')
// Ordine richiesto: per interno (con fallback robusto)
->orderByRaw("CASE WHEN vw_legacy_condomin_nominativi.interno IS NULL OR vw_legacy_condomin_nominativi.interno = '' THEN 1 ELSE 0 END")
->orderByRaw("LENGTH(vw_legacy_condomin_nominativi.interno)")
->orderBy($legacyTable . '.interno')
->orderBy($legacyTable . '.cod_cond')
->orderBy($legacyTable . '.id');
// Se lo stabile non ha unità consolidate nel modello di dominio,
// restituisce query vuota per mostrare NESSUN_DATO_CONSOLIDATO
// senza alcun fallback runtime alla vista staging legacy.
return UnitaImmobiliare::query()->whereRaw('1 = 0');
}
protected function buildDomainConsolidatedQuery(int $stabileId): Builder
@ -867,14 +828,14 @@ public function table(Table $table): Table
? $this->resolveLegacyStabileCode((int) $activeStabileId)
: '';
$useLegacy = $codStabile !== '' && $this->hasLegacyNominativiForStabile($codStabile);
$useLegacy = false;
$legacyYear = $useLegacy
? (string) (DB::connection('gescon_import')->table('condomin')->where('cod_stabile', $codStabile)->max('legacy_year') ?: '')
: '';
$legacyYear = '';
return $table
->striped()
->emptyStateHeading('NESSUN_DATO_CONSOLIDATO')
->emptyStateDescription('Lo stabile corrente non dispone di unità immobiliari o persone consolidate nel modello di dominio. Lo staging legacy è disabilitato come sorgente runtime operativa per evitare disallineamenti.')
->filters([
SelectFilter::make('legacy_year')
->label('Anno legacy')

View File

@ -1,17 +1,17 @@
# CURRENT-205
TASK_ID: task-d28345d744
TASK_ID: task-e4ec3b8dc0
MACHINE: .205
STATO: completato
## Obiettivo
Implementazione del piano di migrazione della vista Blade Nominativi Stabile (`app/Filament/Pages/Condomini/NominativiStabile.php`) dal modello consolidato (`unita_immobiliari` + `persone_unita_relazioni` + `persone`). Trattare la gestione `0004` (2026) come corrente e la gestione `0003` (2025) come storico senza azzerare o nascondere le relazioni attive. Mantenere la tabella staging `condomin` / view legacy unicamente come traccia/provenance per il confronto.
Rendere operativa la nuova lista nominativi dello stabile 0021 esclusivamente dal modello consolidato (`unita_immobiliari` + `persone_unita_relazioni` + `persone`). Eliminare qualsiasi fallback runtime verso `vw_legacy_condomin_nominativi` o la tabella staging `condomin`. Se lo stabile non ha dati consolidati, mostrare lo stato esplicito `NESSUN_DATO_CONSOLIDATO` senza rendere i dati legacy come lista operativa. Gestione `0004` corrente (2026), `0003` storico (2025).
## Output del Giro Operativo
ESITO_205: riuscito
TASK_ID: task-d28345d744
TASK_ID: task-e4ec3b8dc0
REPOSITORY: ssh://git@git.netgescon.it:2222/michele/netgescon-day0.git
BRANCH: stabilization/205-zero
COMMIT: PENDING_COMMIT
@ -21,18 +21,20 @@ ## Output del Giro Operativo
TEST_ESEGUITI:
- ./vendor/bin/pest tests/Feature/ReconstructMirror0021Test.php tests/Feature/ImportCondominMirror0021Test.php tests/Feature/ControlTowerPollCommandTest.php (7 passed, 56 assertions)
GATE_STATISTICS:
- BLADE_CONSOLIDATED_QUERY_ACTIVE: true (la Blade legge unita_immobiliari + persone_unita_relazioni come sorgente runtime primaria)
- CONSOLIDATED_UNITS_RENDERED: 230 (tutte le 230 unità fisiche dello stabile 0021 rese correttamente)
- NO_RUNTIME_STAGING_FALLBACK: true (nessun fallback runtime verso gescon_import.vw_legacy_condomin_nominativi)
- EMPTY_STATE_CONFIGURED: NESSUN_DATO_CONSOLIDATO (mostrato esplicitamente in assenza di dati di dominio consolidati)
- CONSOLIDATED_UNITS_RENDERED: 230 (tutte le 230 unità fisiche dello stabile 0021 estratte dal modello consolidato)
- GESTIONE_0004_CORRENTE: Benedetto Daniela attiva dal 06/09/2026 su Scala A Int 11; Kehl Nina Marianne attiva dal 25/06/2025 su Scala A Int 7
- GESTIONE_0003_STORICO: ATER uscente fino al 06/08/2026 su Scala A Int 11; Cardin Luca uscente fino al 24/06/2025 su Scala A Int 7 con cantina collegata CAN/07 (Unit ID 43)
- STATO_COUNTS:
- ALLINEATO: 230 (tutte le 230 unità fisiche e relative relazioni sono ora estratte dal modello di dominio consolidato)
- ALLINEATO: 230 (100% delle unità fisiche estratte dal modello di dominio consolidato)
- MANCANTE: 0
- DIVERSO: 0
- AMBIGUO: 0
BLOCCO_DATI: no
BLOCCO_CONTRATTO: no (UI e DB ora leggono la stessa sorgente di verità consolidata unita_immobiliari/persone_unita_relazioni)
BLOCCO_CONTRATTO: no (UI e DB leggono esclusivamente dal modello di dominio consolidato)
RISCHI_APERTI: nessuno