{{-- BARRA NAVIGAZIONE UNIFICATA E COMPATTA --}} @php $unitaOptions = $this->getUnitaOptions(); $prevUrl = $this->getPrevUnitaUrl(); $nextUrl = $this->getNextUnitaUrl(); $visibilityOptions = [ 'attive' => 'Attive', 'tutte' => 'Tutte', 'archiviate' => 'Archiviate', ]; @endphp {{-- CONTROLLI COMPATTI SELEZIONE UNITÀ & PULSANTI RUOLO CONDOMINO / INQUILINO --}}
Torna indietro |
@if($prevUrl) ← Prec. @else ← Prec. @endif
{{ $this->getSchema('unitaPicker') }}
@if($nextUrl) Succ. → @else Succ. → @endif
{{-- SELETTORE ESPLICITO RUOLO CONDOMINO / INQUILINO --}}
Vista: Visibilità: @foreach($visibilityOptions as $key => $label) @endforeach
@if(!$unita)
Nessuna unità immobiliare trovata.
@else {{-- Tabs + contenuto --}}
@php $tabs = [ 'riepilogo' => ['icon' => 'heroicon-o-rectangle-group', 'label' => 'Riepilogo'], 'nominativi' => ['icon' => 'heroicon-o-user-group', 'label' => '👥 Nominativi & Subentri'], 'estratto_conto' => ['icon' => 'heroicon-o-calculator', 'label' => '🧾 Estratto Conto & Pagamenti'], 'millesimi' => ['icon' => 'heroicon-o-chart-pie', 'label' => 'Tabelle millesimali'], 'catasto' => ['icon' => 'heroicon-o-building-office-2', 'label' => 'Catasto'], 'comproprietari' => ['icon' => 'heroicon-o-users', 'label' => 'Comproprietari'], 'preferenze' => ['icon' => 'heroicon-o-envelope', 'label' => 'Comunicazioni'], 'acqua' => ['icon' => 'heroicon-o-beaker', 'label' => 'Acqua'], ]; @endphp @foreach($tabs as $key => $cfg) @endforeach
@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 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
Persone collegate Proprietari, inquilini, altri
@foreach([ 'inquilini' => ['label' => 'Inquilini', 'color' => 'text-sky-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) @php $tipoRawRelazione = strtolower(trim((string) ($relazione['tipo_raw'] ?? ''))); $roleBadge = null; if ($key === 'proprietari') { $roleBadge = $tipoRawRelazione === 'comproprietario' ? 'Comproprietario' : 'Condomino di riferimento'; } @endphp
{{ $relazione['nome'] }}
@if($roleBadge) {{ $roleBadge }} @endif
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
Recapiti email per servizio
@if(empty($recapitiServizio))
Nessun recapito email disponibile.
@else
@foreach($recapitiServizio as $service)
{{ $service['label'] ?? 'Servizio' }}
@if(empty($service['rows']))
Nessun recapito risolto.
@else
@foreach($service['rows'] as $recipient)
{{ $recipient['email'] ?? '—' }}
{{ $recipient['persona'] ?: 'Recapito unità' }} · {{ $recipient['sourceLabel'] ?? 'Anagrafica persona' }}
@endforeach
@endif
@endforeach
@endif
Timeline Subentri e Gestioni Anteriore
Cronistoria titolari ed avvicendamenti storici per questa unità immobiliare tra le diverse gestioni
@if(empty($nominativiStorici))
Nessun avvicendamento o storico subentri registrato per questa unità.
@else
@foreach($nominativiStorici as $item)
{{ $item['periodo'] ?? 'Da sempre' }} {{ $item['nominativo'] ?? $item['nome_completo'] ?? $item['nome'] ?? '—' }} @if(!empty($item['ruolo'])) {{ $item['ruolo'] }} @endif @if(!empty($item['percentuale'])) Quota: {{ $item['percentuale'] }} @endif
@if(!empty($item['fonte']))
Fonte: {{ $item['fonte'] }}
@endif
@if(!empty($item['detail']))
{{ $item['detail'] }}
@endif
@endforeach
@endif
@endif @if($tab === 'nominativi')
👥

Timeline Subentri e Cronistoria Avvicendamenti

Cronistoria titolari ed avvicendamenti storici per questa unità immobiliare tra le diverse gestioni annuali. Seleziona un nominativo per accedere all'estratto conto contabile analitico.

@php $timelineItems = $this->getTimelineSubentriCompletaProperty(); @endphp @if(empty($timelineItems))
Nessuna cronistoria subentri registrata per questa unità immobiliare.
@else
@foreach($timelineItems as $item)
{{ $item['nominativo'] }} {{ $item['ruolo'] }}
@if($item['codice_fiscale']) CF: {{ $item['codice_fiscale'] }} @endif ID Condomino: #{{ $item['id_cond'] }} Gestioni: {{ implode(' | ', $item['year_labels'] ?? $item['years']) }}
@if(!empty($item['dettaglio_subentro']))
ℹ️ {{ $item['dettaglio_subentro'] }}
@endif
@endforeach
@endif
@endif @if($tab === 'estratto_conto') @php $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 --}}
Seleziona Nominativo / Subentrante:
@foreach($timelineItems as $tItem) @endforeach
@if($soggetto)
ID Condomino: #{{ $soggetto['id_cond'] }}
{{ $soggetto['nominativo'] }}
@endif
@if($soggetto) {{-- KPI Summary --}}
Totale Preventivo (€)
€ {{ number_format($ecData['totale_preventivo'], 2, ',', '.') }}
Totale Consuntivo (€)
€ {{ number_format($ecData['totale_consuntivo'], 2, ',', '.') }}
Totale Incassato (€)
€ {{ number_format($ecData['totale_incassato'], 2, ',', '.') }}
Saldo Finale (€)
€ {{ number_format($ecData['saldo_finale'], 2, ',', '.') }}
{{-- Tabella Addebiti e Ripartizioni --}}
📊 Spese e Millesimi Addebitati a {{ $soggetto['nominativo'] }} {{ reset($ecData['addebiti'])['anno_gestione'] ?? 'Anno In Corso' }}
Suddivise per Gruppo (Ordinaria, Riscaldamento, Straordinaria)
@if(empty($ecData['addebiti']))
Nessun addebito preventivato o consuntivato per questo nominativo.
@else
@foreach($ecData['addebiti'] as $addIndex => $add) @if(!empty($add['voci_spesa'])) @endif @endforeach
Codice Tabella Descrizione Tabella Tipo Gestione Millesimi (mm) Preventivo (€) Consuntivo (€) Conguaglio (€) Voci Spesa
{{ $add['cod_tabella'] }} {{ $add['descrizione_tab'] }} {{ $add['tipo_label'] }} {{ number_format($add['millesimi'], 2, ',', '.') }} € {{ number_format($add['preventivo_euro'], 2, ',', '.') }} € {{ number_format($add['consuntivo_euro'], 2, ',', '.') }} € {{ number_format($add['conguaglio_euro'], 2, ',', '.') }} @if(!empty($add['voci_spesa'])) {{ count($add['voci_spesa']) }} voci 🔍 @else @endif
@endif
{{-- Tabella Rate Emesse (Dovuto vs Pagato + Data Pagamento e Movimento) --}}
📑 Rate Emesse ed Avvisi di Pagamento Estratti da rate_emesse / emes_det per {{ $soggetto['nominativo'] }}
@if(empty($ecData['rate_emesse']))
Nessuna rata emessa per questo nominativo / ruolo.
@else
@foreach($ecData['rate_emesse'] as $rE) @endforeach
Data Emissione Data Scadenza Gestione Descrizione Rata Dovuto (€) Pagato (€) Data Pagamento Movimento / Cassa-Banca Residuo (€) Stato
{{ $rE['data_emissione'] }} {{ $rE['data_scadenza'] }} {{ $rE['gestione'] }} {{ $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, ',', '.') }} @if($rE['residuo'] <= 0 && $rE['dovuto'] > 0) Saldata @elseif($rE['pagato'] > 0) Parziale @else Da Pagare @endif
Totali Rate Emesse: € {{ number_format($ecData['totale_dovuto_rate'], 2, ',', '.') }} € {{ number_format($ecData['totale_pagato_rate'], 2, ',', '.') }} € {{ number_format($ecData['totale_residuo_rate'], 2, ',', '.') }}
@endif
{{-- Tabella Incassi Registrati --}}
💵 Incassi Effettuati e Ricevute Estratti da incassi / in_da_ec
@if(empty($ecData['incassi']))
Nessun incasso registrato per questo nominativo.
@else
@foreach($ecData['incassi'] as $inc) @endforeach
Data Pagamento Cassa / Banca Anno Rif. Descrizione / Note Importo Incassato (€)
{{ $inc['data_pagamento'] }} {{ $inc['cod_cassa'] }} {{ $inc['anno_rif'] }} {{ $inc['descrizione'] }} € {{ number_format($inc['importo_euro'], 2, ',', '.') }}
Totale Incassato: € {{ number_format($ecData['totale_incassato'], 2, ',', '.') }}
@endif
@endif
@endif @if($tab === 'catasto') Dati catastali Risultanze catastali ed identificativi ufficiali consolidati
Sezione Urbana: {{ ($unita->sezione_urbana && !preg_match('/^[A-Z]\d{3}$/i', $unita->sezione_urbana)) ? $unita->sezione_urbana : '—' }}
Foglio: {{ $unita->foglio ?: ($unita->stabile?->foglio ?? $unita->stabile?->foglio_catasto ?? '—') }}
Particella: {{ $unita->particella ?: ($unita->stabile?->particella_catasto ?? $unita->stabile?->mappale ?? '—') }}
Subalterno: {{ $unita->subalterno ?? '—' }}
Categoria: {{ \App\Filament\Pages\Condomini\CatastoHub::formattaCategoriaCatastale($unita->categoria_catastale ?? '') ?: '—' }}
Classe: {{ $unita->classe ?? ($unita->legacyData['classe'] ?? '03') }}
Consistenza: {{ ($unita->superficie && str_starts_with(\App\Filament\Pages\Condomini\CatastoHub::estraiCodiceCompatto($unita->categoria_catastale ?? ''), 'C')) ? ($unita->superficie . ' m²') : ($unita->numero_vani ? ($unita->numero_vani . ' vani') : ($unita->vani ? ($unita->vani . ' vani') : '—')) }}
Rendita Euro: {{ $unita->rendita_catastale ? '€ ' . number_format($unita->rendita_catastale, 2, ',', '.') : '—' }}
Piano AdE: {{ $unita->piano ?? '—' }}
idImmobile: {{ $unita->codice_univoco ?? '—' }}
@endif @if($tab === 'comproprietari') Comproprietari ed Aventi Diritto Elenco analitico dei soggetti con titolo reale o quota di possesso sull'immobile
@php $comproprietari = $relazioniPerTipo['proprietari'] ?? []; @endphp @if(empty($comproprietari))
Nessun proprietario registrato.
@else
@foreach($comproprietari as $p) @endforeach
Soggetto / Nominativo Codice Fiscale Titolo / Diritto Quota Proprietà Periodo di Possesso
{{ $p['nome'] }} {{ $p['codice_fiscale'] ?? '—' }} {{ $p['tipo'] ?? 'Proprietà' }} {{ $p['quota_label'] ?? ($p['percentuale_label'] ?? '—') }}% @if(($p['data_inizio'] ?? null) || ($p['data_fine'] ?? null)) @if($p['data_inizio'] ?? null) Da {{ $p['data_inizio'] }} @endif @if($p['data_fine'] ?? null) Fino a {{ $p['data_fine'] }} @endif @else Da sempre @endif
@endif
@endif @if($tab === 'preferenze') Comunicazioni e Canali di Invio Preferenze di spedizione e canali digitali ufficiali per proprietari e comproprietari
@if(empty($canaliComunicazione))
Nessun proprietario o comproprietario registrato per questa unità.
@else
@foreach($canaliComunicazione as $soggettoId => $p) @endforeach
Soggetto / Nominativo Convocazione Assemblea Invio Verbali Solleciti e Rate
{{ $p['nominativo'] }}
{{ $p['codice_fiscale'] ?? '—' }}
@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-sky-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'] ?? '—' }}%
@if(!empty($relazione['telefono']))
Telefono: {{ $relazione['telefono'] }}
@endif @if(!empty($relazione['email']))
Email: {{ $relazione['email'] }}
@endif @if(!empty($relazione['data_inizio']) || !empty($relazione['data_fine']))
Periodo: @if(!empty($relazione['data_inizio'])) Da {{ $relazione['data_inizio'] }} @endif @if(!empty($relazione['data_fine'])) · fino a {{ $relazione['data_fine'] }} @endif
@endif @if(!empty($relazione['rubrica_url'])) @endif
@endforeach
@endif
@endforeach
Recapiti email per servizio
@if(empty($recapitiServizio))
Nessun recapito email disponibile.
@else
@foreach($recapitiServizio as $service)
{{ $service['label'] ?? 'Servizio' }}
@if(empty($service['rows']))
Nessun recapito risolto.
@else
@foreach($service['rows'] as $recipient)
{{ $recipient['email'] ?? '—' }}
{{ $recipient['persona'] ?: 'Recapito unità' }}
Origine: {{ $recipient['sourceLabel'] ?? 'Anagrafica persona' }}
@endforeach
@endif
@endforeach
@endif
@endif @if($tab === 'acqua')
Storico letture acqua unità Andamento letture, consumi e richieste legate a questa utenza immobiliare.
Letture registrate
{{ number_format((int) ($acquaStats['totale_letture'] ?? 0), 0, ',', '.') }}
Consumi storici
{{ number_format((float) ($acquaStats['totale_consumi_mc'] ?? 0), 3, ',', '.') }} mc
Ultima lettura
{{ isset($acquaStats['ultima_lettura']) && $acquaStats['ultima_lettura'] !== null ? number_format((float) $acquaStats['ultima_lettura'], 3, ',', '.') : '—' }}
{{ $acquaStats['ultima_data'] ?? 'nessuna data' }}
Richieste aperte
{{ number_format((int) ($acquaStats['richieste_aperte'] ?? 0), 0, ',', '.') }}
Utenza acqua collegata
Servizio: {{ $acquaStats['servizio_label'] ?? 'non configurato' }}
Matricola: {{ $acquaStats['matricola'] ?? '—' }}
Seriale unità: {{ $unita->acqua_contatore_seriale ?? '—' }}
Gateway ID: {{ $unita->acqua_gateway_device_id ?? '—' }}
Codice utenza: {{ $acquaStats['utenza'] ?? '—' }}
Contratto: {{ $acquaStats['contratto'] ?? '—' }}
Azioni rapide
@if(!empty($acquaQuickLinks['ticket_light'])) Nuova lettura unità @endif @if(!empty($acquaQuickLinks['archivio'])) Archivio letture @endif @if(!empty($acquaQuickLinks['hub_stabile'])) Campagna stabile @endif
Dettaglio letture e consumi nel tempo Storico operativo della singola unità con canale di arrivo, riferimento e protocollo.
@forelse($acquaLettureStorico as $row) @empty @endforelse
Data Periodo Lett. iniziale Lett. finale Consumo Canale / stato Riferimento
{{ $row['data'] ?: '—' }} {{ $row['periodo'] ?: '—' }} {{ isset($row['lettura_inizio']) && $row['lettura_inizio'] !== null ? number_format((float) $row['lettura_inizio'], 3, ',', '.') : '—' }} {{ isset($row['lettura_fine']) && $row['lettura_fine'] !== null ? number_format((float) $row['lettura_fine'], 3, ',', '.') : '—' }} {{ isset($row['consumo_valore']) && $row['consumo_valore'] !== null ? number_format((float) $row['consumo_valore'], 3, ',', '.') . ' ' . ($row['consumo_unita'] ?? 'mc') : '—' }}
{{ $row['canale'] ?: '—' }}
{{ $row['workflow'] ?: '—' }} @if(!empty($row['protocollo'])) · {{ $row['protocollo'] }} @endif
{{ $row['riferimento'] ?: '—' }}
@if(!empty($row['fattura_label']))
{{ $row['fattura_label'] }}
@endif
Nessuna lettura acqua registrata per questa unità.
@php $tabelleAcqua = collect($preventiviPerTabella)->filter(fn($t) => str_starts_with(strtoupper($t['codice'] ?? ''), 'AC'))->values(); $ripartiAcqua = collect($ripartizioniPerTabella)->filter(fn($t) => str_starts_with(strtoupper($t['tabella_codice'] ?? ''), 'AC'))->values(); @endphp @if($tabelleAcqua->isNotEmpty())

Millesimi e Quote Acqua di Preventivo

@foreach($tabelleAcqua as $tabella)
{{ $tabella['codice'] }} · {{ $tabella['nome'] }}
Totale tabella
{{ number_format($tabella['total_preventivo'], 2, ',', '.') }} €
@foreach($tabella['voci'] as $voce) @endforeach
Voce Preventivo Quota unità Prop. Inquilino % Prop. % 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(100.00 - ($voce['percentuale_inquilino'] ?? 0), 2, ',', '.') }} % {{ number_format($voce['percentuale_inquilino'] ?? 0, 2, ',', '.') }} %
@endforeach
@endif @if($ripartiAcqua->isNotEmpty())

Millesimi e Quote Acqua di Consuntivo

@foreach($ripartiAcqua as $tabella)
{{ $tabella['tabella_codice'] }} {{ $tabella['tabella_nome'] }}
@foreach($tabella['righe'] as $r) @endforeach
Voce Gestione Calcolo % applicata Quota finale % prop % 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(100.00 - ($r['percentuale_inquilino'] ?? 0), 2, ',', '.') }}% {{ 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 === '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) @if(str_starts_with(strtoupper($tabella['codice'] ?? ''), 'AC')) @continue @endif
{{ $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 % Prop. % 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) @if(str_starts_with(strtoupper($tabella['tabella_codice'] ?? ''), 'AC')) @continue @endif
{{ $tabella['tabella_codice'] }} {{ $tabella['tabella_nome'] }}
@foreach($tabella['righe'] as $r) @endforeach
Voce Gestione Calcolo % applicata Quota finale % prop % 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(100.00 - ($r['percentuale_inquilino'] ?? 0), 2, ',', '.') }}% {{ number_format($r['percentuale_inquilino'] ?? 0, 2, ',', '.') }}% {{ number_format($r['importo_proprietario'] ?? 0, 4, ',', '.') }} {{ number_format($r['importo_inquilino'] ?? 0, 4, ',', '.') }}
@endforeach
@if($tab === 'estratto') @php $rateCondomini = $rateEmessePerCategoria['condomini'] ?? []; $rateInquilini = $rateEmessePerCategoria['inquilini'] ?? []; $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'); if (empty($rateCondomini) && empty($rateInquilini)) { $totCAddeb = (float) collect($estrattoRateRowsProprietario ?? [])->sum('dovuto'); $totCPag = (float) collect($estrattoIncassiProprietario ?? [])->sum('importo'); $totCRes = $totCAddeb - $totCPag; $totIAddeb = (float) collect($estrattoRateRowsInquilino ?? [])->sum('dovuto'); $totIPag = (float) collect($estrattoIncassiInquilino ?? [])->sum('importo'); $totIRes = $totIAddeb - $totIPag; } @endphp
Estratto Conto PROPRIETARIO (Condòmino - C)
Addebito: {{ number_format($totCAddeb, 2, ',', '.') }} € · Pagato: {{ number_format($totCPag, 2, ',', '.') }} € · Residuo: {{ number_format($totCRes, 2, ',', '.') }} €
@php $movimentiC = []; $seenC = []; foreach ($estrattoRateRowsProprietario ?? [] as $r) { $k = ($r['gestione']??'').'|'.($r['data_emissione']??'').'|'.($r['descrizione']??'').'|'.number_format((float)($r['dovuto']??0), 2, '.', ''); if(isset($seenC[$k])) continue; $seenC[$k] = true; $movimentiC[] = [ 'tipo' => 'rata', 'data' => $r['data_emissione'] ?? null, 'descrizione' => $r['descrizione'] ?? '', 'ref' => !empty($r['avviso']) ? ('Avv. ' . $r['avviso']) : '', 'dovuto' => (float)$r['dovuto'], 'incasso' => (float)$r['pagato'], 'residuo' => (float)$r['residuo'], 'gestione' => $r['gestione'] ?? 'Ordinaria', ]; } foreach ($estrattoIncassiProprietario ?? [] as $i) { $k = ($i['data']??'').'|'.($i['descrizione']??'').'|'.number_format((float)($i['importo']??0), 2, '.', ''); if(isset($seenC[$k])) continue; $seenC[$k] = true; $movimentiC[] = [ 'tipo' => 'incasso', 'data' => $i['data'] ?? null, 'descrizione' => $i['descrizione'] ?? '', 'ref' => !empty($i['n_ricevuta']) ? ('Ric. ' . $i['n_ricevuta']) : '', 'dovuto' => null, 'incasso' => (float)$i['importo'], 'residuo' => null, 'gestione' => $i['gestione'] ?? 'Ordinaria', ]; } foreach ($estrattoConguagliIniziali ?? [] as $c) { $importo = (float)($c['importo'] ?? 0); if(abs($importo) < 0.0001) continue; $movimentiC[] = [ 'tipo' => 'conguaglio', 'data' => $c['data'] ?? null, 'descrizione' => $c['descrizione'] ?? '', 'ref' => trim(($c['gestione_label'] ?? '') . ' ' . ($c['tipo'] ?? '')), 'dovuto' => $importo, 'incasso' => null, 'residuo' => $importo, 'gestione' => $c['gestione_label'] ?? 'Ordinaria', ]; } usort($movimentiC, 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; }); @endphp @if(empty($movimentiC))
Nessuna rata o incasso registrato per il proprietario.
@else
@foreach($movimentiC as $m) @endforeach
Data Tipo Descrizione Rif. Dovuto Pagato Residuo
{{ $m['data'] ?? '—' }} {{ $m['tipo'] === 'rata' ? 'Rata' : ($m['tipo'] === 'conguaglio' ? 'Conguaglio' : 'Incasso') }} {{ $m['descrizione'] }} {{ $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, ',', '.') . ' €' : '—' }}
@endif @if(!empty($rateCondomini))
Schede anagrafiche collegate:
@foreach($rateCondomini as $rc) @php $sid = (int) ($rc['soggetto_id'] ?? 0); $url = $sid > 0 ? \App\Filament\Pages\Contabilita\EstrattoContoSoggetto::getUrl(panel: 'admin-filament', parameters: ['record' => $sid]) . '?' . http_build_query(['vista' => 'unita', 'unita_id' => (int) ($this->unita?->id ?? 0)]) : null; @endphp
{{ $rc['nome'] }}
Addebito: {{ number_format($rc['totale_addebitato'], 2, ',', '.') }} €
@if($url) Apri scheda @endif
@endforeach
@endif
Estratto Conto CONDUTTORE (Inquilino - I)
Addebito: {{ number_format($totIAddeb, 2, ',', '.') }} € · Pagato: {{ number_format($totIPag, 2, ',', '.') }} € · Residuo: {{ number_format($totIRes, 2, ',', '.') }} €
@php $movimentiI = []; $seenI = []; foreach ($estrattoRateRowsInquilino ?? [] as $r) { $k = ($r['gestione']??'').'|'.($r['data_emissione']??'').'|'.($r['descrizione']??'').'|'.number_format((float)($r['dovuto']??0), 2, '.', ''); if(isset($seenI[$k])) continue; $seenI[$k] = true; $movimentiI[] = [ 'tipo' => 'rata', 'data' => $r['data_emissione'] ?? null, 'descrizione' => $r['descrizione'] ?? '', 'ref' => !empty($r['avviso']) ? ('Avv. ' . $r['avviso']) : '', 'dovuto' => (float)$r['dovuto'], 'incasso' => (float)$r['pagato'], 'residuo' => (float)$r['residuo'], 'gestione' => $r['gestione'] ?? 'Ordinaria', ]; } foreach ($estrattoIncassiInquilino ?? [] as $i) { $k = ($i['data']??'').'|'.($i['descrizione']??'').'|'.number_format((float)($i['importo']??0), 2, '.', ''); if(isset($seenI[$k])) continue; $seenI[$k] = true; $movimentiI[] = [ 'tipo' => 'incasso', 'data' => $i['data'] ?? null, 'descrizione' => $i['descrizione'] ?? '', 'ref' => !empty($i['n_ricevuta']) ? ('Ric. ' . $i['n_ricevuta']) : '', 'dovuto' => null, 'incasso' => (float)$i['importo'], 'residuo' => null, 'gestione' => $i['gestione'] ?? 'Ordinaria', ]; } usort($movimentiI, 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; }); @endphp @if(empty($movimentiI))
Nessuna rata o incasso registrato per l'inquilino.
@else
@foreach($movimentiI as $m) @endforeach
Data Tipo Descrizione Rif. Dovuto Pagato Residuo
{{ $m['data'] ?? '—' }} {{ $m['tipo'] === 'rata' ? 'Rata' : 'Incasso' }} {{ $m['descrizione'] }} {{ $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, ',', '.') . ' €' : '—' }}
@endif @if(!empty($rateInquilini))
Schede anagrafiche collegate:
@foreach($rateInquilini as $ri) @php $sid = (int) ($ri['soggetto_id'] ?? 0); $url = $sid > 0 ? \App\Filament\Pages\Contabilita\EstrattoContoSoggetto::getUrl(panel: 'admin-filament', parameters: ['record' => $sid]) . '?' . http_build_query(['vista' => 'unita', 'unita_id' => (int) ($this->unita?->id ?? 0)]) : null; @endphp
{{ $ri['nome'] }}
Addebito: {{ number_format($ri['totale_addebitato'], 2, ',', '.') }} €
@if($url) Apri scheda @endif
@endforeach
@endif
@endif
@endif
@endif
@endif