{{-- 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 TABELLARE COMPATTA) --}} @php $multiRecapiti = $this->getRecapitiMulticanaleTableProperty(); @endphp
📱
Recapiti Multicanale Dinamici dell'Unità
Email, PEC, cellulari, telefoni e recapiti postali dei soggetti collegati
{{ count($multiRecapiti) }} canali attivi
@if(empty($multiRecapiti))
Nessun recapito multicanale o contatto registrato per i soggetti di questa unità.
@else
@foreach($multiRecapiti 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 @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 $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 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 === '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, ',', '.') : '—' }} @if(!empty($prot['nome_file'])) 📄 {{ $prot['nome_file'] }} @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
@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