From 4e4fdf1603ca78d5cf8e42fa6863885f7a94cb19 Mon Sep 17 00:00:00 2001 From: michele Date: Sun, 30 Aug 2026 21:17:48 +0200 Subject: [PATCH] feat(unita-ui): relocate unit header to Riepilogo tab, move Estratto Rapido to Estratto Conto tab, add Data Pagamento & Movimento Bancario columns in Rate Emesse (task-d095b0e23b) --- app/Filament/Pages/UnitaImmobiliarePage.php | 44 ++- .../pages/unita-immobiliare.blade.php | 280 ++++++++++-------- 2 files changed, 182 insertions(+), 142 deletions(-) diff --git a/app/Filament/Pages/UnitaImmobiliarePage.php b/app/Filament/Pages/UnitaImmobiliarePage.php index a5b2ddb..c113fab 100755 --- a/app/Filament/Pages/UnitaImmobiliarePage.php +++ b/app/Filament/Pages/UnitaImmobiliarePage.php @@ -954,7 +954,7 @@ public function getEstrattoContoNominativoDettaglioProperty(): array } if (empty($this->estrattoCompattoRateRows)) { - $this->initEstrattoContoCompattoData(); + $this->hydrateEstrattoCompatto(); } $rateList = $this->condInquilActive === 'I' @@ -970,17 +970,39 @@ public function getEstrattoContoNominativoDettaglioProperty(): array $pagato = (float) ($r['pagato'] ?? 0); $residuo = (float) ($r['residuo'] ?? ($dovuto - $pagato)); + $dtPagamento = ! empty($r['data_pagamento']) && $r['data_pagamento'] !== '—' ? $r['data_pagamento'] : '—'; + $movimentoBancario = '—'; + + if (! empty($dettaglioIncassi)) { + $gestioneRate = (string) ($r['gestione'] ?? ''); + foreach ($dettaglioIncassi as $incItem) { + $yrInc = (string) ($incItem['anno_rif'] ?? ''); + if ($dtPagamento === '—' && ! empty($incItem['data_pagamento']) && $incItem['data_pagamento'] !== '—') { + $dtPagamento = $incItem['data_pagamento']; + } + if ($movimentoBancario === '—' && (! empty($incItem['cod_cassa']) || ! empty($incItem['descrizione']))) { + $cassaStr = ! empty($incItem['cod_cassa']) && $incItem['cod_cassa'] !== '—' ? 'Mov. #' . $incItem['cod_cassa'] : ''; + $noteStr = ! empty($incItem['descrizione']) && $incItem['descrizione'] !== '—' ? $incItem['descrizione'] : ''; + $movimentoBancario = trim($cassaStr . ($cassaStr !== '' && $noteStr !== '' ? ' · ' : '') . $noteStr); + } + if ($gestioneRate !== '' && str_contains($yrInc, $gestioneRate)) { + break; + } + } + } + $rateEmesseRows[] = [ - 'id' => $r['id'] ?? null, - 'data_emissione' => $r['data_emissione'] ?? '—', - 'data_scadenza' => $r['data_scadenza'] ?? '—', - 'data_pagamento' => $r['data_pagamento'] ?? '—', - 'avviso' => $r['avviso'] ?? '—', - 'gestione' => $r['gestione'] ?? '—', - 'descrizione' => $r['descrizione'] ?? '—', - 'dovuto' => $dovuto, - 'pagato' => $pagato, - 'residuo' => $residuo, + 'id' => $r['id'] ?? null, + 'data_emissione' => $r['data_emissione'] ?? '—', + 'data_scadenza' => $r['data_scadenza'] ?? '—', + 'data_pagamento' => $dtPagamento, + 'movimento_bancario' => $movimentoBancario !== '' ? $movimentoBancario : '—', + 'avviso' => $r['avviso'] ?? '—', + 'gestione' => $r['gestione'] ?? '—', + 'descrizione' => $r['descrizione'] ?? '—', + 'dovuto' => $dovuto, + 'pagato' => $pagato, + 'residuo' => $residuo, ]; $totaleDovutoRate += $dovuto; diff --git a/resources/views/filament/pages/unita-immobiliare.blade.php b/resources/views/filament/pages/unita-immobiliare.blade.php index 5587be3..2bc3435 100755 --- a/resources/views/filament/pages/unita-immobiliare.blade.php +++ b/resources/views/filament/pages/unita-immobiliare.blade.php @@ -108,136 +108,6 @@ class="rounded-lg border px-2.5 py-1 text-xs font-semibold transition {{ $this->
Nessuna unità immobiliare trovata.
@else - {{-- Header compatto --}} - - @php - $isArchivedUnita = method_exists($unita, 'trashed') && $unita->trashed(); - @endphp - -
-
-
-
- - Unità immobiliare - @if($isArchivedUnita) - Archiviata - @endif -
-
- @php - $labelUnita = (string) ($unita->denominazione ?? ''); - if ($labelUnita !== '' && preg_match('/^\s*area\s+condominiale\s*$/i', $labelUnita)) { - $labelUnita = ''; - } - $condominoDaCondomin = trim((string) ($this->getLegacyCondominoRiferimentoNome() ?? '')); - $proprietariAttivi = collect($relazioniPerTipo['proprietari'] ?? []); - $condominoRiferimento = $proprietariAttivi - ->first(fn (array $relazione): bool => strtolower(trim((string) ($relazione['tipo_raw'] ?? ''))) !== 'comproprietario') - ?? ($relazioniPerTipo['proprietari'][0] ?? null); - $condominoNome = $condominoDaCondomin !== '' - ? $condominoDaCondomin - : (string) ($condominoRiferimento['nome'] ?? ''); - $condominoCf = trim((string) ($this->getLegacyCondominoRiferimentoCodiceFiscale() ?? '')); - if ($condominoCf === '') { - $condominoCf = (string) ($condominoRiferimento['codice_fiscale'] ?? ''); - } - $inquilinoNome = (string) ($relazioniPerTipo['inquilini'][0]['nome'] ?? ''); - $comproprietariCount = $proprietariAttivi - ->filter(fn (array $relazione): bool => strtolower(trim((string) ($relazione['tipo_raw'] ?? ''))) === 'comproprietario') - ->count(); - $labelStoricoScaduto = $labelUnita !== '' - && collect($nominativiStorici ?? [])->contains(function (array $nominativo) use ($labelUnita, $condominoNome, $inquilinoNome): bool { - $nome = trim((string) ($nominativo['nominativo'] ?? '')); - - return $nome !== '' - && trim($labelUnita) === $nome - && trim($labelUnita) !== trim($condominoNome) - && trim($labelUnita) !== trim($inquilinoNome); - }); - if ($labelUnita === '' || $labelStoricoScaduto) { - $labelUnita = (string) ($unita->codice_unita ?? $unita->codice_completo ?? 'Unità'); - } - @endphp - @if($labelUnita !== '' && $condominoNome !== '' && trim($labelUnita) !== trim($condominoNome)) -
{{ $labelUnita }}
- @endif -
- C - Condomino: {{ $condominoNome !== '' ? trim(str_replace([' - ', ' 0 ', ' 0', '-'], [' ', ' ', ' ', ' '], $condominoNome)) : '—' }} -
- @if($comproprietariCount > 0) -
Comproprietari collegati: {{ $comproprietariCount }}
- @endif -
- I - Inquilino: {{ $inquilinoNome !== '' ? trim(str_replace([' - ', ' 0 ', ' 0', '-'], [' ', ' ', ' ', ' '], $inquilinoNome)) : '—' }} -
-
{{ trim(($unita->indirizzo ?? '').' '.($unita->civico ?? '').' '.($unita->comune ?? '')) }}
- -
- - @php - $rateCondominiHeader = $rateEmessePerCategoria['condomini'] ?? []; - $rateInquiliniHeader = $rateEmessePerCategoria['inquilini'] ?? []; - $sumHeader = function (array $items, string $field): float { - $s = 0.0; - foreach ($items as $it) { - $s += (float) ($it[$field] ?? 0); - } - return $s; - }; - $totCAddebH = $sumHeader($rateCondominiHeader, 'totale_addebitato'); - $totCPagH = $sumHeader($rateCondominiHeader, 'totale_pagato'); - $totCResH = $sumHeader($rateCondominiHeader, 'residuo'); - $totIAddebH = $sumHeader($rateInquiliniHeader, 'totale_addebitato'); - $totIPagH = $sumHeader($rateInquiliniHeader, 'totale_pagato'); - $totIResH = $sumHeader($rateInquiliniHeader, 'residuo'); - $hasInquilino = !empty($relazioniPerTipo['inquilini'][0]['nome'] ?? null); - if (empty($rateCondominiHeader) && empty($rateInquiliniHeader) && !$hasInquilino) { - $totCAddebH = (float) collect($estrattoCompattoRateRows ?? [])->sum(fn (array $row): float => (float) ($row['dovuto'] ?? 0)); - $totCPagH = (float) collect($estrattoCompattoIncassi ?? [])->sum(fn (array $row): float => (float) ($row['importo'] ?? 0)); - $totCResH = round($totCAddebH - $totCPagH, 2); - } - @endphp - -
-
-
Condomino di riferimento
-
{{ $condominoNome !== '' ? $condominoNome : '—' }}
-
CF: {{ $condominoCf !== '' ? $condominoCf : '—' }}
-
-
-
Inquilino
-
{{ $inquilinoNome !== '' ? $inquilinoNome : '—' }}
-
CF: {{ $relazioniPerTipo['inquilini'][0]['codice_fiscale'] ?? '—' }}
-
-
-
Estratto rapido
- - - -
-
-
-
- {{-- Tabs + contenuto --}}
@@ -267,6 +137,84 @@ class="inline-flex items-center gap-2 rounded-lg border px-3 py-2 text-sm font-s
@if($tab === 'riepilogo') + {{-- Header compatto dell'Unità Immobiliare --}} + + @php + $isArchivedUnita = method_exists($unita, 'trashed') && $unita->trashed(); + $labelUnita = (string) ($unita->denominazione ?? ''); + if ($labelUnita !== '' && preg_match('/^\s*area\s+condominiale\s*$/i', $labelUnita)) { + $labelUnita = ''; + } + $condominoDaCondomin = trim((string) ($this->getLegacyCondominoRiferimentoNome() ?? '')); + $proprietariAttivi = collect($relazioniPerTipo['proprietari'] ?? []); + $condominoRiferimento = $proprietariAttivi + ->first(fn (array $relazione): bool => strtolower(trim((string) ($relazione['tipo_raw'] ?? ''))) !== 'comproprietario') + ?? ($relazioniPerTipo['proprietari'][0] ?? null); + $condominoNome = $condominoDaCondomin !== '' + ? $condominoDaCondomin + : (string) ($condominoRiferimento['nome'] ?? ''); + $condominoCf = trim((string) ($this->getLegacyCondominoRiferimentoCodiceFiscale() ?? '')); + if ($condominoCf === '') { + $condominoCf = (string) ($condominoRiferimento['codice_fiscale'] ?? ''); + } + $inquilinoNome = (string) ($relazioniPerTipo['inquilini'][0]['nome'] ?? ''); + $comproprietariCount = $proprietariAttivi + ->filter(fn (array $relazione): bool => strtolower(trim((string) ($relazione['tipo_raw'] ?? ''))) === 'comproprietario') + ->count(); + $hasInquilino = !empty($relazioniPerTipo['inquilini'][0]['nome'] ?? null); + @endphp + +
+
+
+ + Unità immobiliare {{ $unita->codice_unita ?? $unita->codice_completo }} + @if($isArchivedUnita) + Archiviata + @endif +
+ +
+ C + Condomino: + {{ $condominoNome !== '' ? trim(str_replace([' - ', ' 0 ', ' 0', '-'], [' ', ' ', ' ', ' '], $condominoNome)) : '—' }} +
+ + @if($comproprietariCount > 0) +
Comproprietari collegati: {{ $comproprietariCount }}
+ @endif + +
+ I + Inquilino: + {{ $inquilinoNome !== '' ? trim(str_replace([' - ', ' 0 ', ' 0', '-'], [' ', ' ', ' ', ' '], $inquilinoNome)) : '—' }} +
+ +
📍 {{ trim(($unita->indirizzo ?? '').' Scala '.($unita->scala ?? '').' Int. '.($unita->interno ?? '').' '.($unita->comune ?? '')) }}
+ + +
+ +
+
+
🏢 Condomino di riferimento
+
{{ $condominoNome !== '' ? $condominoNome : '—' }}
+
CF: {{ $condominoCf !== '' ? $condominoCf : '—' }}
+
+
+
👤 Inquilino
+
{{ $inquilinoNome !== '' ? $inquilinoNome : '—' }}
+
CF: {{ $relazioniPerTipo['inquilini'][0]['codice_fiscale'] ?? '—' }}
+
+
+
+
+
Indicatori principali @@ -509,9 +457,66 @@ class="inline-flex items-center gap-1.5 rounded-lg bg-indigo-600 px-3 py-2 text- $ecData = $this->getEstrattoContoNominativoDettaglioProperty(); $timelineItems = $this->getTimelineSubentriCompletaProperty(); $soggetto = $ecData['soggetto'] ?? null; + + $rateCondominiHeader = $rateEmessePerCategoria['condomini'] ?? []; + $rateInquiliniHeader = $rateEmessePerCategoria['inquilini'] ?? []; + $sumHeader = function (array $items, string $field): float { + $s = 0.0; + foreach ($items as $it) { + $s += (float) ($it[$field] ?? 0); + } + return $s; + }; + $totCAddebH = $sumHeader($rateCondominiHeader, 'totale_addebitato'); + $totCPagH = $sumHeader($rateCondominiHeader, 'totale_pagato'); + $totCResH = $sumHeader($rateCondominiHeader, 'residuo'); + $totIAddebH = $sumHeader($rateInquiliniHeader, 'totale_addebitato'); + $totIPagH = $sumHeader($rateInquiliniHeader, 'totale_pagato'); + $totIResH = $sumHeader($rateInquiliniHeader, 'residuo'); + $hasInquilino = !empty($relazioniPerTipo['inquilini'][0]['nome'] ?? null); + if (empty($rateCondominiHeader) && empty($rateInquiliniHeader) && !$hasInquilino) { + $totCAddebH = (float) collect($estrattoCompattoRateRows ?? [])->sum(fn (array $row): float => (float) ($row['dovuto'] ?? 0)); + $totCPagH = (float) collect($estrattoCompattoIncassi ?? [])->sum(fn (array $row): float => (float) ($row['importo'] ?? 0)); + $totCResH = round($totCAddebH - $totCPagH, 2); + } @endphp
+ {{-- Box Estratto Rapido Sintetico diviso per Condomino ed Inquilino --}} +
+
⚡ Estratto Conto Rapido Sintetico
+
+ + + +
+
+ {{-- Header selezione soggetto --}}
@@ -655,7 +660,7 @@ class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-semi @endif
- {{-- Tabella Rate Emesse (Dovuto vs Pagato) --}} + {{-- Tabella Rate Emesse (Dovuto vs Pagato + Data Pagamento e Movimento) --}}
📑 Rate Emesse ed Avvisi di Pagamento @@ -674,6 +679,8 @@ class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-semi Descrizione Rata Dovuto (€) Pagato (€) + Data Pagamento + Movimento / Cassa-Banca Residuo (€) Stato @@ -691,6 +698,16 @@ class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-semi {{ $rE['descrizione'] }} € {{ number_format($rE['dovuto'], 2, ',', '.') }} € {{ number_format($rE['pagato'], 2, ',', '.') }} + {{ $rE['data_pagamento'] ?? '—' }} + + @if(($rE['movimento_bancario'] ?? '—') !== '—') + + 🏛️ {{ $rE['movimento_bancario'] }} + + @else + + @endif + € {{ number_format($rE['residuo'], 2, ',', '.') }} @@ -717,6 +734,7 @@ class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-semi Totali Rate Emesse: € {{ number_format($ecData['totale_dovuto_rate'], 2, ',', '.') }} € {{ number_format($ecData['totale_pagato_rate'], 2, ',', '.') }} + € {{ number_format($ecData['totale_residuo_rate'], 2, ',', '.') }}