{{-- 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 & Spese'], 'preferenze' => ['icon' => 'heroicon-o-envelope', 'label' => '📨 Comunicazioni & Protocollo'], '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'] ?? '—' }}
{{-- 1. SCHEDE ANAGRAFICHE SOGGETTI ATTIVI & IDENTIFICAZIONE COMPATTA --}}
{{-- Card Condomino / Proprietario Attivo --}}
🏢 Condomino (Proprietario)
🟢 In Carica
{{ $condominoNome !== '' ? $condominoNome : '—' }}
CF: {{ $condominoCf !== '' ? $condominoCf : '—' }}
Quota: {{ $relazioniPerTipo['proprietari'][0]['quota_label'] ?? '100,00' }}% @if($comproprietariCount > 0) +{{ $comproprietariCount }} comproprietari @endif
Validità: {{ $relazioniPerTipo['proprietari'][0]['data_inizio'] ?? 'Gestione attiva' }}
{{-- Card Inquilino / Conduttore Attivo --}}
👤 Inquilino (Conduttore)
@if($hasInquilino) Locazione attiva @else Nessun inquilino @endif
{{ $inquilinoNome !== '' ? $inquilinoNome : 'Nessun inquilino registrato' }}
CF: {{ $relazioniPerTipo['inquilini'][0]['codice_fiscale'] ?? '—' }}
@if($hasInquilino)
Spese: {{ $relazioniPerTipo['inquilini'][0]['quota_label'] ?? '100,00' }}%
Subentro: {{ $relazioniPerTipo['inquilini'][0]['data_inizio'] ?? '—' }}
@else
L'unità risulta occupata direttamente dal proprietario.
@endif
{{-- Card Dati Catastali & Identificazione Immobile --}}
🏛️ Dati Catasto & Immobile
Sub. {{ $unita->subalterno ?: '—' }}
Tipologia: {{ $unita->tipo_unita ?? 'Abitazione' }}
Categoria & Rendita: {{ $unita->categoria_catastale ?: '—' }} · € {{ number_format((float)($unita->rendita_catastale ?? 0), 2, ',', '.') }}
Foglio / Particella: Fg. {{ $unita->foglio ?: ($unita->stabile?->foglio ?: '—') }} / Part. {{ $unita->particella ?: ($unita->stabile?->particella_catasto ?: '—') }}
Posizione fabbricato: Scala {{ $unita->scala ?: '—' }} · Int. {{ $unita->interno ?: '—' }} · Piano {{ $unita->piano ?: '—' }}
{{-- 2. SEZIONE RECAPITI MULTICANALE DINAMICI (MATRICE ATOMICA DIVISA COND/INQ + AGGREGATA) --}} @php $multiRecapiti = $this->getRecapitiMulticanaleTableProperty(); $recapitiCondomino = array_values(array_filter($multiRecapiti, fn($r) => ($r['tipo_soggetto'] ?? 'condomino') === 'condomino')); $recapitiInquilino = array_values(array_filter($multiRecapiti, fn($r) => ($r['tipo_soggetto'] ?? '') === 'inquilino')); $currentRecapitiMode = $this->recapitiViewMode ?? 'diviso'; @endphp
📱
Recapiti Multicanale Dinamici dell'Unità
Email, PEC, cellulari, telefoni e recapiti postali divisi per Condomino e Inquilino
{{-- Selettore Vista Atomica / Aggregata --}}
@if(empty($multiRecapiti))
Nessun recapito multicanale o contatto registrato per i soggetti di questa unità.
@else {{-- VISTA 1: DIVISO PER SOGGETTO (DUE SOTTO-TABELLE ATOMICHE) --}} @if($currentRecapitiMode === 'diviso')
{{-- SOTTO-TABELLA CONDOMINO --}}
🏢 Recapiti Condomino / Aventi Diritto
{{ count($recapitiCondomino) }} canali
@if(empty($recapitiCondomino))
Nessun contatto registrato per il Condomino.
@else
@foreach($recapitiCondomino as $rec) @endforeach
Canale Etichetta Soggetto Valore Contatto Stato Azione
{{ $rec['icon'] }} {{ $rec['canale'] }} {{ $rec['etichetta'] }} {{ $rec['soggetto'] }} ({{ $rec['ruolo'] }}) {{ $rec['valore'] }} @if($rec['is_principal']) ★ Principale @else @endif @if(!empty($rec['action_url'])) Apri @endif
@endif
{{-- SOTTO-TABELLA INQUILINO --}}
👤 Recapiti Inquilino / Conduttore
{{ count($recapitiInquilino) }} canali
@if(empty($recapitiInquilino))
Nessun contatto o recapito registrato per l'Inquilino.
@else
@foreach($recapitiInquilino as $rec) @endforeach
Canale Etichetta Soggetto Valore Contatto Stato Azione
{{ $rec['icon'] }} {{ $rec['canale'] }} {{ $rec['etichetta'] }} {{ $rec['soggetto'] }} ({{ $rec['ruolo'] }}) {{ $rec['valore'] }} @if($rec['is_principal']) ★ Principale @else @endif @if(!empty($rec['action_url'])) Apri @endif
@endif
{{-- VISTA 2: FILTRATA PER CONDOMINO, INQUILINO O TUTTI --}} @else @php $displayedRows = match($currentRecapitiMode) { 'condomino' => $recapitiCondomino, 'inquilino' => $recapitiInquilino, default => $multiRecapiti, }; @endphp
@foreach($displayedRows as $rec) @endforeach
Canale Etichetta / Uso Soggetto Collegato Valore Contatto Stato Azioni Rapide
{{ $rec['icon'] }} {{ $rec['canale'] }} {{ $rec['etichetta'] }} {{ $rec['soggetto'] }} ({{ $rec['ruolo'] }}) {{ $rec['valore'] }} @if($rec['is_principal']) ★ Principale @else @endif @if(!empty($rec['action_url'])) Apri @endif
@endif @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'])) @php $subentroText = $item['dettaglio_subentro']; try { $parsedDate = \Carbon\Carbon::parse($subentroText)->format('d/m/Y'); $subentroText = 'Subentrato il: ' . $parsedDate; } catch (\Throwable $e) {} @endphp
📅 {{ $subentroText }}
@endif
@endforeach
@endif
@endif @if($tab === 'estratto_conto') @php $ec = $this->estrattoContoAtomico; $soggetto = $ec['soggetto'] ?? []; $totali = $ec['totali'] ?? []; $gestioneOrdCorrente = $ec['gestione_ordinaria_corrente'] ?? []; $gestioniStraordinarie = $ec['gestioni_straordinarie'] ?? []; $gestioniPregresseOrd = $ec['gestioni_pregresse_ordinarie'] ?? []; $fonteDati = $ec['fonte'] ?? 'MDB_LIVE'; $ruoloAttivo = $this->condInquilActive ?? 'C'; @endphp
{{-- Toolbar & Selettore Ruolo / Ricarica MDB --}}
🧾

Estratto Conto Atomico & Temporale

{{ $fonteDati === 'MDB_LIVE' ? '⚡ Archivio MDB Live' : '🗄️ Database Consolidato' }}

{{ $soggetto['nominativo'] ?? '—' }} • Scala {{ $soggetto['scala'] ?? 'A' }} / Int. {{ $soggetto['interno'] ?? '1' }} @if(!empty($soggetto['locatario']) && $ruoloAttivo === 'C') • Locatario: {{ $soggetto['locatario'] }} @endif

{{-- Switcher C / I --}}
{{-- Pulsante Ricarica MDB --}}
{{-- KPI Cards Riepilogative Atomiche --}}
TOTALE DA PAGARE
€ {{ number_format($totali['totale_dovuto'] ?? 0, 2, ',', '.') }}
Include tutte le gestioni aperte ed esigibili
STRAORDINARIE ATTIVE
€ {{ number_format($totali['totale_straordinarie_residuo'] ?? 0, 2, ',', '.') }}
{{ count($gestioniStraordinarie) }} gestioni deliberate
ORDINARIA ES. {{ $gestioneOrdCorrente['anno'] ?? '2026' }}
€ {{ number_format($totali['totale_ordinaria_corrente_residuo'] ?? 0, 2, ',', '.') }}
{{ ($totali['totale_ordinaria_corrente_residuo'] ?? 0) <= 0 ? 'Saldata / Compensata' : 'Residuo corrente' }}
ORDINARIE PREGRESSE
€ {{ number_format($totali['totale_ordinarie_pregresse_residuo'] ?? 0, 2, ',', '.') }}
{{ count($gestioniPregresseOrd['items'] ?? []) }} gestioni chiuse a pareggio
{{-- SEZIONE 1: GESTIONE ORDINARIA CORRENTE --}}
📅

{{ $gestioneOrdCorrente['titolo'] ?? 'GESTIONE ORDINARIA' }}

Dettaglio temporale rate, conguagli e incassi dell'esercizio corrente

Dovuto: € {{ number_format($gestioneOrdCorrente['totale_dovuto'] ?? 0, 2, ',', '.') }}
Pagato: € {{ number_format($gestioneOrdCorrente['totale_pagato'] ?? 0, 2, ',', '.') }}
Residuo: € {{ number_format($gestioneOrdCorrente['residuo'] ?? 0, 2, ',', '.') }}
@forelse($gestioneOrdCorrente['rate'] ?? [] as $rata) @empty @endforelse
Data Emiss. Rif. Descrizione Movimento Dovuto (€) Data Pagamento Pagato (€) Residuo (€) Stato
{{ $rata['data'] ?? '—' }} {{ $rata['rif'] ?? '—' }} {{ $rata['descrizione'] ?? '—' }} € {{ number_format($rata['dovuto'] ?? 0, 2, ',', '.') }} {{ $rata['data_pagamento'] ?? '—' }} € {{ number_format($rata['pagato'] ?? 0, 2, ',', '.') }} € {{ number_format($rata['residuo'] ?? 0, 2, ',', '.') }} @if(($rata['stato'] ?? '') === 'Saldata') Saldata @elseif(($rata['stato'] ?? '') === 'Compensato') Compensato @else Da Pagare @endif
Nessun movimento ordinario registrato per l'esercizio corrente.
Totale Gestione Ordinaria: € {{ number_format($gestioneOrdCorrente['totale_dovuto'] ?? 0, 2, ',', '.') }} € {{ number_format($gestioneOrdCorrente['totale_pagato'] ?? 0, 2, ',', '.') }} € {{ number_format($gestioneOrdCorrente['residuo'] ?? 0, 2, ',', '.') }}
{{-- SEZIONE 2: GESTIONI STRAORDINARIE (ATOMICHE PER DELIBERA/SPESA) --}}
🏗️

Gestioni Straordinarie (Delibere & Lavori)

Ogni spesa straordinaria è isolata atomicamente con il proprio piano rate e pagamenti

Totale Residuo Straordinarie: € {{ number_format($totali['totale_straordinarie_residuo'] ?? 0, 2, ',', '.') }}
@forelse($gestioniStraordinarie as $stra)
Spesa {{ $stra['num_spesa'] }}/{{ $stra['anno'] }}
{{ $stra['titolo'] }}
Dovuto: € {{ number_format($stra['totale_dovuto'] ?? 0, 2, ',', '.') }}
Versato: € {{ number_format($stra['totale_pagato'] ?? 0, 2, ',', '.') }}
Residuo da pagare: € {{ number_format($stra['residuo'] ?? 0, 2, ',', '.') }}
@foreach($stra['rate'] ?? [] as $sr) @endforeach
Data Emiss. Rif. Descrizione Rata Dovuto (€) Data Pagamento Pagato (€) Residuo (€) Stato
{{ $sr['data'] ?? '—' }} {{ $sr['rif'] ?? '—' }} {{ $sr['descrizione'] ?? '—' }} € {{ number_format($sr['dovuto'] ?? 0, 2, ',', '.') }} {{ $sr['data_pagamento'] ?? '—' }} € {{ number_format($sr['pagato'] ?? 0, 2, ',', '.') }} € {{ number_format($sr['residuo'] ?? 0, 2, ',', '.') }} @if(($sr['stato'] ?? '') === 'Saldata') Saldata @elseif(($sr['stato'] ?? '') === 'Parziale') Parziale @elseif(($sr['stato'] ?? '') === 'Da Emettere') Da Emettere @else Da Pagare @endif
@empty
Nessuna gestione straordinaria registrata per questa unità.
@endforelse
{{-- SEZIONE 3: RIEPILOGO GESTIONI ORDINARIE PREGRESSE (CONSUNTIVI CHIUSI) --}}
🏛️

Riepilogo Storico Gestioni Ordinarie Pregresse

Storico annuale consolidato dei consuntivi chiusi definitivamente

Saldo complessivo pregresso: € {{ number_format($gestioniPregresseOrd['saldo_residuo'] ?? 0, 2, ',', '.') }}
@forelse($gestioniPregresseOrd['items'] ?? [] as $gp) @empty @endforelse
Anno Esercizio Descrizione Gestione Totale Addebitato (€) Totale Versato (€) Saldo Residuo (€) Stato Consuntivo
{{ $gp['anno'] }} {{ $gp['titolo'] }} € {{ number_format($gp['dovuto'] ?? 0, 2, ',', '.') }} € {{ number_format($gp['pagato'] ?? 0, 2, ',', '.') }} € {{ number_format($gp['saldo'] ?? 0, 2, ',', '.') }} ✓ {{ $gp['stato'] ?? 'Chiusa' }}
Nessuna gestione pregressa archiviata.
Totale Storico Consuntivi Chiusi: € {{ number_format($gestioniPregresseOrd['totale_dovuto'] ?? 0, 2, ',', '.') }} € {{ number_format($gestioniPregresseOrd['totale_versato'] ?? 0, 2, ',', '.') }} € {{ number_format($gestioniPregresseOrd['saldo_residuo'] ?? 0, 2, ',', '.') }}
@endif @if($tab === 'millesimi') @php $ecData = $this->getEstrattoContoNominativoDettaglioProperty(); $soggetto = $ecData['soggetto'] ?? []; @endphp
{{-- Sezione 1: Tabelle Millesimali Assegnate all'Unità --}}
Tabelle Millesimali Assegnate
Millesimi generali e speciali configurati
@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 = ucwords(str_replace('_', ' ', (string) $tipo)); $prevTipo = $loop->first ? null : ($filteredMillesimi[$loop->index - 1]['tipo'] ?? 'altro'); @endphp @if($loop->first || $tipo !== $prevTipo) @endif @empty @endforelse
Codice Tabella Denominazione Valore Millesimi (mm)
{{ $tipoLabel }}
{{ $r['codice'] }} {{ $r['nome'] }} {{ number_format($r['millesimi'], 4, ',', '.') }}
Nessun millesimo presente per il gruppo selezionato
@endif
{{-- Sezione 2: Spese e Millesimi Addebitati per Gestione --}}
📊 Spese e Millesimi Addebitati a {{ $soggetto['nominativo'] ?? 'Condomino' }} {{ 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
@endif @if($tab === 'preferenze') @php $protocolloList = $this->getProtocolloComunicazioniProperty(); @endphp
{{-- 1. Protocollo Corrispondenza ed Estratti Conto Inviati --}}
📨
Protocollo Comunicazioni & Corrispondenza Inviata
Estratti conto, lettere, circolari e comunicazioni storiche collegate all'unità
{{ count($protocolloList) }} documenti a protocollo
@if(empty($protocolloList))
Nessuna comunicazione o estratto conto inviato registrato a protocollo per questa unità.
@else
@foreach($protocolloList as $prot) @endforeach
Data Invio Protocollo / Rif. Canale Destinatario Oggetto / Contenuto Importo E/C Allegato Note
{{ $prot['data_invio'] }} {{ $prot['protocollo'] }} {{ str_contains(strtolower($prot['canale']), 'pec') ? '🛡️' : (str_contains(strtolower($prot['canale']), 'mail') ? '✉️' : '📮') }} {{ $prot['canale'] }}
{{ $prot['destinatario'] }}
{{ $prot['ruolo'] }}
{{ $prot['oggetto'] }} {{ $prot['importo'] !== null ? '€ ' . number_format($prot['importo'], 2, ',', '.') : '—' }} @php $allegatiList = !empty($prot['allegati']) ? $prot['allegati'] : (!empty($prot['nome_file']) ? [['filename' => $prot['nome_file'], 'path' => $prot['file_path'], 'exists' => $prot['file_exists'], 'is_pdf' => str_ends_with(strtolower($prot['nome_file']), '.pdf'), 'is_image' => preg_match('/\.(jpg|jpeg|png|webp|gif)$/i', $prot['nome_file'])]] : []); @endphp @if(!empty($allegatiList))
@foreach($allegatiList as $att) @php $attName = $att['filename'] ?? 'file'; $attPath = $att['path'] ?? ''; $attExists = $att['exists'] ?? false; $isPdf = $att['is_pdf'] ?? str_ends_with(strtolower($attName), '.pdf'); $isImg = $att['is_image'] ?? preg_match('/\.(jpg|jpeg|png|webp|gif)$/i', $attName); @endphp @endforeach
@else @endif
{{ $prot['note'] ?: '—' }}
@endif
{{-- 2. Preferenze di Invio Ufficiali per i Soggetti --}} Canali Ufficiali di Notifica Preferenze di spedizione canoniche 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 === '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
@endif
@endif
@endif {{-- Modal Anteprima Documento Protocollo / Comunicazione --}} @if($showDocModal && $activeDoc)
{{ $activeDoc['title'] }}
@php $dPath = $activeDoc['path'] ?? null; $dExists = $activeDoc['exists'] ?? false; $dType = $activeDoc['content_type'] ?? 'application/pdf'; $isPdf = str_contains($dType, 'pdf') || ($dPath && str_ends_with(strtolower($dPath), '.pdf')); $isImg = str_starts_with($dType, 'image/') || ($dPath && preg_match('/\.(jpg|jpeg|png|webp|gif)$/i', $dPath)); @endphp @if(! $dExists && empty($activeDoc['content']))
📁
Documento non presente nel disco locale
{{ $dPath }}
@elseif($isImg && $dPath && file_exists($dPath)) @php $b64 = base64_encode(file_get_contents($dPath)); @endphp Documento @elseif($isPdf && $dPath && file_exists($dPath)) @php $b64 = base64_encode(file_get_contents($dPath)); @endphp @elseif(!empty($activeDoc['content']))
{{ $activeDoc['content'] }}
@else
{{ $activeDoc['title'] }}
Percorso: {{ $dPath }}
@endif
@endif