@include('filament.components.page-breadcrumbs', [ 'breadcrumbs' => [ ['label' => 'Condomini', 'url' => route('admin.dashboards.condomini')], ['label' => 'Unità immobiliari', 'url' => \App\Filament\Pages\Condomini\UnitaImmobiliariArchivio::getUrl(panel: 'admin-filament')], ['label' => 'Scheda unità'], ], 'backUrl' => $this->getBackUrl(), 'backLabel' => 'Torna indietro', ]) @php $unitaOptions = $this->getUnitaOptions(); @endphp @if(!$unita)
Nessuna unità immobiliare trovata.
@else {{-- Header compatto --}} @php $prevUrl = $this->getPrevUnitaUrl(); $nextUrl = $this->getNextUnitaUrl(); @endphp
Unità immobiliare
Prec. @if($prevUrl) @else @endif
Unità
{{ $this->getSchema('unitaPicker') }}
Succ. @if($nextUrl) @else @endif
@php $labelUnita = (string) ($unita->denominazione ?? ''); if ($labelUnita !== '' && preg_match('/^\s*area\s+condominiale\s*$/i', $labelUnita)) { $labelUnita = ''; } if ($labelUnita === '') { $labelUnita = (string) ($unita->codice_unita ?? $unita->codice_completo ?? 'Unità'); } $condominoNome = (string) ($relazioniPerTipo['proprietari'][0]['nome'] ?? ''); $inquilinoNome = (string) ($relazioniPerTipo['inquilini'][0]['nome'] ?? ''); @endphp @if($labelUnita !== '' && $condominoNome !== '' && trim($labelUnita) !== trim($condominoNome))
{{ $labelUnita }}
@endif
Condomino: {{ $condominoNome !== '' ? $condominoNome : '—' }}
Inquilino: {{ $inquilinoNome !== '' ? $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); @endphp
Condomino
{{ $condominoNome !== '' ? $condominoNome : '—' }}
CF: {{ $relazioniPerTipo['proprietari'][0]['codice_fiscale'] ?? '—' }}
Inquilino
{{ $inquilinoNome !== '' ? $inquilinoNome : '—' }}
CF: {{ $relazioniPerTipo['inquilini'][0]['codice_fiscale'] ?? '—' }}
Estratto rapido
{{-- Tabs + contenuto --}}
@php $tabs = [ 'riepilogo' => ['icon' => 'heroicon-o-rectangle-group', 'label' => 'Riepilogo'], 'millesimi' => ['icon' => 'heroicon-o-chart-pie', 'label' => 'Tabelle millesimali'], 'persone' => ['icon' => 'heroicon-o-user-group', 'label' => 'Persone collegate'], 'estratto' => ['icon' => 'heroicon-o-document-text', 'label' => 'Estratto conto'], 'economico' => ['icon' => 'heroicon-o-banknotes', 'label' => 'Economico'], ]; @endphp @foreach($tabs as $key => $cfg) @endforeach
@if($tab === 'riepilogo')
Indicatori principali Superficie, millesimi, percentuale, valore
@foreach([ ['Superficie', ($unita->superficie_commerciale ?? 0) . ' m²'], ['Millesimi', $unita->millesimi_proprieta ?? $unita->millesimi_generali ?? 0], ['Percentuale', ($unita->millesimi_proprieta ?? $unita->millesimi_generali) ? number_format((($unita->millesimi_proprieta ?? $unita->millesimi_generali)/1000)*100,2) . '%' : '0%'], ['Valore stimato', ($unita->valore_commerciale_stimato ?? 0) . ' €'], ] as [$label, $value])
{{ $label }}
{{ $value }}
@endforeach
Identificazione Tipologia e stato
@foreach([ ['Tipologia', $unita->tipo_unita ?? 'ND'], ['Stato occupazione', $unita->stato_occupazione ?? 'ND'], ['Utilizzo', $unita->utilizzo_attuale ?? 'ND'], ['Codice stabile', $unita->stabile?->codice_operatore ?? $unita->stabile?->codice_stabile ?? 'ND'], ] as [$label, $value])
{{ $label }}
{{ $value }}
@endforeach
Dati catastali Identificativi e classamento
@foreach([ ['Sezione urbana', $unita->sezione_urbana ?? 'ND'], ['Foglio', $unita->foglio ?? 'ND'], ['Particella', $unita->particella ?? 'ND'], ['Subalterno', $unita->subalterno ?? 'ND'], ['Categoria', $unita->categoria_catastale ?? 'ND'], ['Classe', $unita->classe ?? 'ND'], ['Consistenza', $unita->consistenza ?? 'ND'], ['Rendita', $unita->rendita_catastale ?? 'ND'], ] as [$label, $value])
{{ $label }}
{{ $value }}
@endforeach
Persone collegate Proprietari, inquilini, altri
@foreach([ 'proprietari' => ['label' => 'Proprietari', 'color' => 'text-primary-700'], 'inquilini' => ['label' => 'Inquilini', 'color' => 'text-emerald-700'], 'altri' => ['label' => 'Altri soggetti', 'color' => 'text-gray-700'], ] as $key => $cfg) @php $relazioni = $relazioniPerTipo[$key] ?? []; @endphp
{{ $cfg['label'] }} ({{ count($relazioni) }})
@if(empty($relazioni))
Nessun soggetto.
@else
@foreach($relazioni as $relazione)
{{ $relazione['nome'] }}
CF: {{ $relazione['codice_fiscale'] ?? '—' }}
Quota: {{ $relazione['quota_label'] ?? '—' }}%
@php $dal = $relazione['data_inizio'] ?? null; $al = $relazione['data_fine'] ?? null; @endphp
Periodo: @if($dal || $al) @if($dal) Da {{ $dal }} @endif @if($al) · fino a {{ $al }} @endif @else Da sempre @endif
@if(!empty($relazione['ruolo_rate']))
Ruolo rate: ({{ $relazione['ruolo_rate'] }})
@endif
@endforeach
@endif
@endforeach
Nominativi storici (legacy)
@if(empty($nominativiStorici))
Nessun nominativo storico disponibile.
@else
@foreach($nominativiStorici as $nominativo) @endforeach
Ruolo Nominativo Periodo Quota
{{ $nominativo['ruolo'] ?? '—' }}
{{ $nominativo['nominativo'] ?? '—' }}
@if(!empty($nominativo['fonte']))
Fonte: {{ $nominativo['fonte'] }}
@endif
{{ $nominativo['periodo'] ?? '—' }} {{ $nominativo['percentuale'] ?? '—' }}
@endif
@endif @if($tab === 'millesimi')
Tabelle millesimali assegnate
@php $gruppi = [ 'ordinarie' => 'ORDINARIE', 'riscaldamento' => 'RISCALDAMENTO', 'straordinarie' => 'STRAORDINARIE', ]; @endphp @foreach($gruppi as $key => $label) @endforeach
@if(empty($millesimiPerTabella))
Nessuna tabella millesimale associata.
@else @php $selectedGruppo = $millesimiGruppo ?? 'ordinarie'; $filteredMillesimi = array_values(array_filter($millesimiPerTabella, fn ($r) => ($r['gruppo'] ?? 'ordinarie') === $selectedGruppo)); @endphp
@forelse($filteredMillesimi as $r) @php $tipo = $r['tipo'] ?? 'altro'; $tipoLabel = $tipo; $tipoLabel = str_replace('_', ' ', (string) $tipoLabel); $tipoLabel = ucwords($tipoLabel); $prevTipo = $loop->first ? null : ($filteredMillesimi[$loop->index - 1]['tipo'] ?? 'altro'); @endphp @if($loop->first || $tipo !== $prevTipo) @endif @empty @endforelse
Tabella Denominazione Millesimi
{{ $tipoLabel }}
{{ $r['codice'] }} {{ $r['nome'] }} {{ number_format($r['millesimi'], 4, ',', '.') }}
Nessun millesimo presente
@endif
@endif @if($tab === 'persone')
Persone collegate
@php $blocchiRelazioni = [ 'proprietari' => ['label' => 'Proprietari / comproprietari', 'class' => 'text-primary-700'], 'inquilini' => ['label' => 'Inquilini / conduttori', 'class' => 'text-emerald-700'], 'altri' => ['label' => 'Altri soggetti collegati', 'class' => 'text-gray-700'], ]; @endphp
@foreach($blocchiRelazioni as $key => $cfg) @php $relazioni = $relazioniPerTipo[$key] ?? []; @endphp
{{ $cfg['label'] }} ({{ count($relazioni) }})
@if(empty($relazioni))
Nessun soggetto collegato.
@else
@foreach($relazioni as $relazione)
{{ $relazione['tipo'] ?? 'Relazione' }}
{{ $relazione['nome'] }}
CF: {{ $relazione['codice_fiscale'] ?? '—' }}
Quota: {{ $relazione['quota_label'] ?? '—' }}%
@endforeach
@endif
@endforeach
@endif @if($tab === 'economico')
{{-- Contenuti economici: preventivi/riparti (rate emesse spostate nel tab Estratto conto) --}} @if(!empty($preventiviPerTabella))
Preventivo per tabella
Quote unità e riparto proprietario/inquilino (dett_tab cond_inquil).
@if(!empty($totaliPerGestione))
O: {{ number_format($totaliPerGestione['O'] ?? 0, 2, ',', '.') }} € R: {{ number_format($totaliPerGestione['R'] ?? 0, 2, ',', '.') }} € S: {{ number_format($totaliPerGestione['S'] ?? 0, 2, ',', '.') }} €
@endif
@foreach($preventiviPerTabella as $tabella)
{{ $tabella['tabella_codice'] }} · tipo {{ $tabella['tipo'] }}
{{ $tabella['tabella_nome'] }}
Totale tabella
{{ number_format($tabella['total_preventivo'], 2, ',', '.') }} €
@foreach($tabella['voci'] as $voce) @endforeach
Voce Preventivo Quota unità Prop. Inquilino % Inq.
{{ $voce['codice'] }} · {{ $voce['descrizione'] }} {{ number_format($voce['importo_preventivato'] ?? 0, 2, ',', '.') }} € {{ number_format($voce['quota_unita'] ?? 0, 2, ',', '.') }} € {{ number_format($voce['importo_proprietario'] ?? 0, 2, ',', '.') }} € {{ number_format($voce['importo_inquilino'] ?? 0, 2, ',', '.') }} € {{ number_format($voce['percentuale_inquilino'] ?? 0, 2, ',', '.') }} %
Millesimi unità / tabella
{{ number_format($tabella['unit_millesimi'], 3, ',', '.') }} / {{ number_format($tabella['tabella_millesimi'], 3, ',', '.') }}
Quota unità
{{ number_format($tabella['quota_unit'], 2, ',', '.') }} €
Riparto proprietario / inquilino
{{ number_format($tabella['importo_proprietario'], 2, ',', '.') }} € / {{ number_format($tabella['importo_inquilino'], 2, ',', '.') }} €
% inquilino: {{ number_format($tabella['percentuale_inquilino'] ?? 0, 2, ',', '.') }}
@endforeach
@endif
Voci di spesa per tabella (prop. / inq.)
@if(empty($ripartizioniPerTabella))
Nessuna ripartizione registrata per questa unità.
@else
@foreach($ripartizioniPerTabella as $tabella)
{{ $tabella['tabella_codice'] }} {{ $tabella['tabella_nome'] }}
@foreach($tabella['righe'] as $r) @endforeach
Voce Gestione Calcolo % applicata Quota finale % inquilino Prop. Inq.
{{ $r['voce_codice'] ?? '—' }} {{ $r['voce_descrizione'] ?? '' }} {{ $r['tipo_gestione'] ?? '—' }} {{ $r['calcolo'] ?? '—' }} {{ number_format($r['percentuale_applicata'] ?? 0, 2, ',', '.') }}% {{ number_format($r['quota_finale'] ?? 0, 4, ',', '.') }} {{ number_format($r['percentuale_inquilino'] ?? 0, 2, ',', '.') }}% {{ number_format($r['importo_proprietario'] ?? 0, 4, ',', '.') }} {{ number_format($r['importo_inquilino'] ?? 0, 4, ',', '.') }}
@endforeach
@endif
@endif @if($tab === 'estratto') @php $rateCondomini = $rateEmessePerCategoria['condomini'] ?? []; $rateInquilini = $rateEmessePerCategoria['inquilini'] ?? []; $hasRate = (! empty($rateCondomini)) || (! empty($rateInquilini)); $compactRateRows = $estrattoCompattoRateRows ?? []; $compactIncassi = $estrattoCompattoIncassi ?? []; $sumBlk = function (array $items, string $field): float { $s = 0.0; foreach ($items as $it) { $s += (float) ($it[$field] ?? 0); } return $s; }; $totCAddeb = $sumBlk($rateCondomini, 'totale_addebitato'); $totCPag = $sumBlk($rateCondomini, 'totale_pagato'); $totCRes = $sumBlk($rateCondomini, 'residuo'); $totIAddeb = $sumBlk($rateInquilini, 'totale_addebitato'); $totIPag = $sumBlk($rateInquilini, 'totale_pagato'); $totIRes = $sumBlk($rateInquilini, 'residuo'); $tipoSel = $estrattoTipo ?? 'condomini'; $itemsSel = $tipoSel === 'inquilini' ? $rateInquilini : $rateCondomini; @endphp
Estratto conto unità
Situazione rate & incassi
@php $movimenti = []; foreach ($compactRateRows as $r) { $movimenti[] = [ 'tipo' => 'rata', 'data' => $r['data_emissione'] ?? null, 'descrizione' => $r['descrizione'] ?? null, 'ref' => !empty($r['avviso']) ? ('Avv. ' . $r['avviso']) : null, 'dovuto' => (float) ($r['dovuto'] ?? 0), 'residuo' => (float) ($r['residuo'] ?? 0), 'incasso' => null, ]; } foreach ($compactIncassi as $i) { $movimenti[] = [ 'tipo' => 'incasso', 'data' => $i['data'] ?? null, 'descrizione' => $i['descrizione'] ?? null, 'ref' => !empty($i['n_ricevuta']) ? ('Ric. ' . $i['n_ricevuta']) : null, 'dovuto' => null, 'residuo' => null, 'incasso' => (float) ($i['importo'] ?? 0), ]; } foreach ($estrattoConguagliIniziali ?? [] as $c) { $movimenti[] = [ 'tipo' => 'conguaglio', 'data' => $c['data'] ?? null, 'descrizione' => $c['descrizione'] ?? null, 'ref' => trim((string) (($c['gestione_label'] ?? '') . ' ' . ($c['tipo'] ?? ''))), 'dovuto' => (float) ($c['importo'] ?? 0), 'residuo' => (float) ($c['importo'] ?? 0), 'incasso' => null, ]; } usort($movimenti, function ($a, $b) { $da = $a['data'] ? \Carbon\Carbon::createFromFormat('d/m/Y', $a['data'])->timestamp : 0; $db = $b['data'] ? \Carbon\Carbon::createFromFormat('d/m/Y', $b['data'])->timestamp : 0; return $da <=> $db; }); $movimentiByGestione = []; foreach ($movimenti as $m) { $anno = null; if (! empty($m['data'])) { try { $anno = \Carbon\Carbon::createFromFormat('d/m/Y', $m['data'])->format('Y'); } catch (\Throwable $e) { $anno = null; } } $key = $anno ?: 'Senza data'; $movimentiByGestione[$key][] = $m; } @endphp @if(empty($movimenti))
Nessuna rata o incasso disponibile.
@else
@php $totDovutoAll = 0.0; $totIncassoAll = 0.0; @endphp @foreach($movimentiByGestione as $gestione => $rows) @php $totDovuto = 0.0; $totIncasso = 0.0; @endphp @foreach($rows as $m) @php $totDovuto += (float) ($m['dovuto'] ?? 0); $totIncasso += (float) ($m['incasso'] ?? 0); @endphp @endforeach @php $totDovutoAll += $totDovuto; $totIncassoAll += $totIncasso; $saldo = $totDovuto - $totIncasso; @endphp @endforeach @php $saldoAll = $totDovutoAll - $totIncassoAll; @endphp
Data Tipo Descrizione Rif. Dovuto Incasso Residuo
Gestione {{ $gestione }}
{{ $m['data'] ?? '—' }} {{ $m['tipo'] === 'rata' ? 'Rata' : ($m['tipo'] === 'conguaglio' ? 'Conguaglio' : 'Incasso') }} {{ $m['descrizione'] ?? '—' }} {{ $m['ref'] !== '' ? $m['ref'] : '—' }} {{ $m['dovuto'] !== null ? number_format($m['dovuto'], 2, ',', '.') . ' €' : '—' }} {{ $m['incasso'] !== null ? number_format($m['incasso'], 2, ',', '.') . ' €' : '—' }} {{ $m['residuo'] !== null ? number_format($m['residuo'], 2, ',', '.') . ' €' : '—' }}
Subtotale gestione {{ number_format($totDovuto, 2, ',', '.') }} € {{ number_format($totIncasso, 2, ',', '.') }} € Saldo {{ number_format($saldo, 2, ',', '.') }} €
Totale generale {{ number_format($totDovutoAll, 2, ',', '.') }} € {{ number_format($totIncassoAll, 2, ',', '.') }} € Saldo {{ number_format($saldoAll, 2, ',', '.') }} €
@endif
@if(! $hasRate)
Nessuna rata emessa trovata per questa unità.
@else
{{ $tipoSel === 'inquilini' ? 'Inquilino / altro' : 'Condomino (proprietari)' }} ({{ count($itemsSel) }})
@if(empty($itemsSel))
Nessuna rata per questa categoria.
@else
@foreach($itemsSel as $r) @php $sid = (int) ($r['soggetto_id'] ?? 0); $schedaUrl = null; if ($sid > 0) { $base = \App\Filament\Pages\Contabilita\EstrattoContoSoggetto::getUrl(panel: 'admin-filament', parameters: ['record' => $sid]); $schedaUrl = $base . '?' . http_build_query([ 'vista' => 'unita', 'unita_id' => (int) ($this->unita?->id ?? 0), ]); } @endphp @endforeach
Soggetto N. Addebito Pagato Residuo Scadute Scheda
{{ $r['nome'] ?? '—' }}
CF: {{ $r['codice_fiscale'] ?? '—' }}
{{ $r['numero_rate'] ?? 0 }} {{ number_format((float) ($r['totale_addebitato'] ?? 0), 2, ',', '.') }} € {{ number_format((float) ($r['totale_pagato'] ?? 0), 2, ',', '.') }} € {{ number_format((float) ($r['residuo'] ?? 0), 2, ',', '.') }} € {{ $r['scadute'] ?? 0 }} @if($schedaUrl) Apri @else @endif
@endif
@endif
@endif
@endif