feat(unita-ui): relocate unit header to Riepilogo tab, move Estratto Rapido to Estratto Conto tab, add Data Pagamento & Movimento Bancario columns in Rate Emesse (task-d095b0e23b)

This commit is contained in:
michele 2026-08-30 21:17:48 +02:00
parent 8dd60d9ca5
commit 4e4fdf1603
2 changed files with 182 additions and 142 deletions

View File

@ -954,7 +954,7 @@ public function getEstrattoContoNominativoDettaglioProperty(): array
} }
if (empty($this->estrattoCompattoRateRows)) { if (empty($this->estrattoCompattoRateRows)) {
$this->initEstrattoContoCompattoData(); $this->hydrateEstrattoCompatto();
} }
$rateList = $this->condInquilActive === 'I' $rateList = $this->condInquilActive === 'I'
@ -970,17 +970,39 @@ public function getEstrattoContoNominativoDettaglioProperty(): array
$pagato = (float) ($r['pagato'] ?? 0); $pagato = (float) ($r['pagato'] ?? 0);
$residuo = (float) ($r['residuo'] ?? ($dovuto - $pagato)); $residuo = (float) ($r['residuo'] ?? ($dovuto - $pagato));
$dtPagamento = ! empty($r['data_pagamento']) && $r['data_pagamento'] !== '—' ? $r['data_pagamento'] : '—';
$movimentoBancario = '—';
if (! empty($dettaglioIncassi)) {
$gestioneRate = (string) ($r['gestione'] ?? '');
foreach ($dettaglioIncassi as $incItem) {
$yrInc = (string) ($incItem['anno_rif'] ?? '');
if ($dtPagamento === '—' && ! empty($incItem['data_pagamento']) && $incItem['data_pagamento'] !== '—') {
$dtPagamento = $incItem['data_pagamento'];
}
if ($movimentoBancario === '—' && (! empty($incItem['cod_cassa']) || ! empty($incItem['descrizione']))) {
$cassaStr = ! empty($incItem['cod_cassa']) && $incItem['cod_cassa'] !== '—' ? 'Mov. #' . $incItem['cod_cassa'] : '';
$noteStr = ! empty($incItem['descrizione']) && $incItem['descrizione'] !== '—' ? $incItem['descrizione'] : '';
$movimentoBancario = trim($cassaStr . ($cassaStr !== '' && $noteStr !== '' ? ' · ' : '') . $noteStr);
}
if ($gestioneRate !== '' && str_contains($yrInc, $gestioneRate)) {
break;
}
}
}
$rateEmesseRows[] = [ $rateEmesseRows[] = [
'id' => $r['id'] ?? null, 'id' => $r['id'] ?? null,
'data_emissione' => $r['data_emissione'] ?? '—', 'data_emissione' => $r['data_emissione'] ?? '—',
'data_scadenza' => $r['data_scadenza'] ?? '—', 'data_scadenza' => $r['data_scadenza'] ?? '—',
'data_pagamento' => $r['data_pagamento'] ?? '—', 'data_pagamento' => $dtPagamento,
'avviso' => $r['avviso'] ?? '—', 'movimento_bancario' => $movimentoBancario !== '' ? $movimentoBancario : '—',
'gestione' => $r['gestione'] ?? '—', 'avviso' => $r['avviso'] ?? '—',
'descrizione' => $r['descrizione'] ?? '—', 'gestione' => $r['gestione'] ?? '—',
'dovuto' => $dovuto, 'descrizione' => $r['descrizione'] ?? '—',
'pagato' => $pagato, 'dovuto' => $dovuto,
'residuo' => $residuo, 'pagato' => $pagato,
'residuo' => $residuo,
]; ];
$totaleDovutoRate += $dovuto; $totaleDovutoRate += $dovuto;

View File

@ -108,136 +108,6 @@ class="rounded-lg border px-2.5 py-1 text-xs font-semibold transition {{ $this->
<div class="rounded-xl border border-dashed border-gray-200 bg-white p-6 text-center text-gray-500">Nessuna unità immobiliare trovata.</div> <div class="rounded-xl border border-dashed border-gray-200 bg-white p-6 text-center text-gray-500">Nessuna unità immobiliare trovata.</div>
@else @else
{{-- Header compatto --}}
<x-filament::section class="p-4!">
@php
$isArchivedUnita = method_exists($unita, 'trashed') && $unita->trashed();
@endphp
<div class="flex items-start justify-between gap-4 flex-wrap">
<div class="space-y-1">
<div class="space-y-1">
<div class="flex flex-wrap items-center gap-3 text-lg font-semibold text-gray-900">
<x-filament::icon icon="heroicon-o-home-modern" class="h-5 w-5 text-primary-600" />
<span class="text-primary-700">Unità immobiliare</span>
@if($isArchivedUnita)
<span class="rounded-full border border-amber-300 bg-amber-50 px-2 py-0.5 text-xs font-semibold text-amber-700">Archiviata</span>
@endif
</div>
</div>
@php
$labelUnita = (string) ($unita->denominazione ?? '');
if ($labelUnita !== '' && preg_match('/^\s*area\s+condominiale\s*$/i', $labelUnita)) {
$labelUnita = '';
}
$condominoDaCondomin = trim((string) ($this->getLegacyCondominoRiferimentoNome() ?? ''));
$proprietariAttivi = collect($relazioniPerTipo['proprietari'] ?? []);
$condominoRiferimento = $proprietariAttivi
->first(fn (array $relazione): bool => strtolower(trim((string) ($relazione['tipo_raw'] ?? ''))) !== 'comproprietario')
?? ($relazioniPerTipo['proprietari'][0] ?? null);
$condominoNome = $condominoDaCondomin !== ''
? $condominoDaCondomin
: (string) ($condominoRiferimento['nome'] ?? '');
$condominoCf = trim((string) ($this->getLegacyCondominoRiferimentoCodiceFiscale() ?? ''));
if ($condominoCf === '') {
$condominoCf = (string) ($condominoRiferimento['codice_fiscale'] ?? '');
}
$inquilinoNome = (string) ($relazioniPerTipo['inquilini'][0]['nome'] ?? '');
$comproprietariCount = $proprietariAttivi
->filter(fn (array $relazione): bool => strtolower(trim((string) ($relazione['tipo_raw'] ?? ''))) === 'comproprietario')
->count();
$labelStoricoScaduto = $labelUnita !== ''
&& collect($nominativiStorici ?? [])->contains(function (array $nominativo) use ($labelUnita, $condominoNome, $inquilinoNome): bool {
$nome = trim((string) ($nominativo['nominativo'] ?? ''));
return $nome !== ''
&& trim($labelUnita) === $nome
&& trim($labelUnita) !== trim($condominoNome)
&& trim($labelUnita) !== trim($inquilinoNome);
});
if ($labelUnita === '' || $labelStoricoScaduto) {
$labelUnita = (string) ($unita->codice_unita ?? $unita->codice_completo ?? 'Unità');
}
@endphp
@if($labelUnita !== '' && $condominoNome !== '' && trim($labelUnita) !== trim($condominoNome))
<div class="text-sm text-gray-700">{{ $labelUnita }}</div>
@endif
<div class="flex items-center gap-2 text-sm text-gray-700 mt-1">
<span class="inline-flex items-center rounded bg-emerald-50 dark:bg-emerald-900/30 px-1.5 py-0.5 text-[10px] font-bold text-emerald-700 dark:text-emerald-300">C</span>
<span>Condomino: {{ $condominoNome !== '' ? trim(str_replace([' - ', ' 0 ', ' 0', '-'], [' ', ' ', ' ', ' '], $condominoNome)) : '—' }}</span>
</div>
@if($comproprietariCount > 0)
<div class="text-xs text-gray-500 pl-6">Comproprietari collegati: {{ $comproprietariCount }}</div>
@endif
<div class="flex items-center gap-2 text-sm text-gray-700 mt-1">
<span class="inline-flex items-center rounded bg-sky-50 dark:bg-sky-900/30 px-1.5 py-0.5 text-[10px] font-bold text-sky-700 dark:text-sky-300">I</span>
<span>Inquilino: {{ $inquilinoNome !== '' ? trim(str_replace([' - ', ' 0 ', ' 0', '-'], [' ', ' ', ' ', ' '], $inquilinoNome)) : '—' }}</span>
</div>
<div class="text-xs text-gray-500">{{ trim(($unita->indirizzo ?? '').' '.($unita->civico ?? '').' '.($unita->comune ?? '')) }}</div>
<div class="mt-2 pt-2 border-t border-gray-100 dark:border-gray-800">
<a href="/admin-filament/condomini/catasto-hub?unita_id={{ $unita->id }}" class="inline-flex items-center gap-2 rounded-lg bg-primary-600 hover:bg-primary-700 text-white font-semibold px-4 py-2 text-xs shadow-sm transition">
<x-filament::icon icon="heroicon-o-arrow-top-right-on-square" class="h-4 w-4" />
<span>[ Apri in HUB Catasto ]</span>
</a>
</div>
</div>
@php
$rateCondominiHeader = $rateEmessePerCategoria['condomini'] ?? [];
$rateInquiliniHeader = $rateEmessePerCategoria['inquilini'] ?? [];
$sumHeader = function (array $items, string $field): float {
$s = 0.0;
foreach ($items as $it) {
$s += (float) ($it[$field] ?? 0);
}
return $s;
};
$totCAddebH = $sumHeader($rateCondominiHeader, 'totale_addebitato');
$totCPagH = $sumHeader($rateCondominiHeader, 'totale_pagato');
$totCResH = $sumHeader($rateCondominiHeader, 'residuo');
$totIAddebH = $sumHeader($rateInquiliniHeader, 'totale_addebitato');
$totIPagH = $sumHeader($rateInquiliniHeader, 'totale_pagato');
$totIResH = $sumHeader($rateInquiliniHeader, 'residuo');
$hasInquilino = !empty($relazioniPerTipo['inquilini'][0]['nome'] ?? null);
if (empty($rateCondominiHeader) && empty($rateInquiliniHeader) && !$hasInquilino) {
$totCAddebH = (float) collect($estrattoCompattoRateRows ?? [])->sum(fn (array $row): float => (float) ($row['dovuto'] ?? 0));
$totCPagH = (float) collect($estrattoCompattoIncassi ?? [])->sum(fn (array $row): float => (float) ($row['importo'] ?? 0));
$totCResH = round($totCAddebH - $totCPagH, 2);
}
@endphp
<div class="grid gap-2 sm:grid-cols-3 min-w-70">
<div class="rounded-lg border p-3 {{ ($estrattoTipo ?? 'condomini') === 'condomini' ? 'border-primary-300 bg-primary-50' : 'bg-gray-50' }}">
<div class="text-xs text-gray-500">Condomino di riferimento</div>
<div class="text-sm font-semibold text-gray-900">{{ $condominoNome !== '' ? $condominoNome : '—' }}</div>
<div class="text-xs text-gray-500">CF: {{ $condominoCf !== '' ? $condominoCf : '—' }}</div>
</div>
<div class="rounded-lg border p-3 {{ ($estrattoTipo ?? 'condomini') === 'inquilini' ? 'border-sky-300 bg-sky-50' : 'bg-gray-50' }} {{ $hasInquilino ? '' : 'opacity-60' }}">
<div class="text-xs text-gray-500">Inquilino</div>
<div class="text-sm font-semibold text-gray-900">{{ $inquilinoNome !== '' ? $inquilinoNome : '—' }}</div>
<div class="text-xs text-gray-500">CF: {{ $relazioniPerTipo['inquilini'][0]['codice_fiscale'] ?? '—' }}</div>
</div>
<div class="rounded-lg border bg-gray-50 p-3 space-y-2">
<div class="text-xs text-gray-500">Estratto rapido</div>
<button type="button"
wire:click="setEstrattoTipo('condomini')"
class="w-full rounded-md border px-2 py-1 text-left text-xs font-semibold transition {{ ($estrattoTipo ?? 'condomini') === 'condomini' ? 'border-primary-300 bg-primary-50 text-primary-700' : 'border-gray-200 bg-white text-gray-700 hover:bg-gray-50' }}">
<div>Condomino</div>
<div class="text-[11px] text-gray-600">Addebito {{ number_format($totCAddebH, 2, ',', '.') }} · Incasso {{ number_format($totCPagH, 2, ',', '.') }} · Residuo {{ number_format($totCResH, 2, ',', '.') }} </div>
</button>
<button type="button"
wire:click="setEstrattoTipo('inquilini')"
class="w-full rounded-md border px-2 py-1 text-left text-xs font-semibold transition {{ ($estrattoTipo ?? 'condomini') === 'inquilini' ? 'border-sky-300 bg-sky-50 text-sky-700' : 'border-gray-200 bg-white text-gray-700 hover:bg-gray-50' }} {{ $hasInquilino ? '' : 'opacity-50' }}"
@if(!$hasInquilino) disabled @endif>
<div>Inquilino</div>
<div class="text-[11px] text-gray-600">Addebito {{ number_format($totIAddebH, 2, ',', '.') }} · Incasso {{ number_format($totIPagH, 2, ',', '.') }} · Residuo {{ number_format($totIResH, 2, ',', '.') }} </div>
</button>
</div>
</div>
</div>
</x-filament::section>
{{-- Tabs + contenuto --}} {{-- Tabs + contenuto --}}
<x-filament::section class="p-0! overflow-hidden"> <x-filament::section class="p-0! overflow-hidden">
<div class="flex flex-wrap items-center gap-2 px-4 py-2 bg-white border-b"> <div class="flex flex-wrap items-center gap-2 px-4 py-2 bg-white border-b">
@ -267,6 +137,84 @@ class="inline-flex items-center gap-2 rounded-lg border px-3 py-2 text-sm font-s
<div class="p-4 space-y-4"> <div class="p-4 space-y-4">
@if($tab === 'riepilogo') @if($tab === 'riepilogo')
{{-- Header compatto dell'Unità Immobiliare --}}
<x-filament::section class="p-4! mb-4">
@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
<div class="flex items-start justify-between gap-4 flex-wrap">
<div class="space-y-1">
<div class="flex flex-wrap items-center gap-3 text-lg font-semibold text-gray-900">
<x-filament::icon icon="heroicon-o-home-modern" class="h-5 w-5 text-primary-600" />
<span class="text-primary-700 font-bold">Unità immobiliare {{ $unita->codice_unita ?? $unita->codice_completo }}</span>
@if($isArchivedUnita)
<span class="rounded-full border border-amber-300 bg-amber-50 px-2 py-0.5 text-xs font-semibold text-amber-700">Archiviata</span>
@endif
</div>
<div class="flex items-center gap-2 text-sm text-gray-800 mt-2">
<span class="inline-flex items-center rounded bg-emerald-100 px-2 py-0.5 text-xs font-bold text-emerald-800">C</span>
<span class="font-semibold">Condomino:</span>
<span class="font-bold text-indigo-900">{{ $condominoNome !== '' ? trim(str_replace([' - ', ' 0 ', ' 0', '-'], [' ', ' ', ' ', ' '], $condominoNome)) : '—' }}</span>
</div>
@if($comproprietariCount > 0)
<div class="text-xs text-gray-500 pl-6">Comproprietari collegati: {{ $comproprietariCount }}</div>
@endif
<div class="flex items-center gap-2 text-sm text-gray-800 mt-1">
<span class="inline-flex items-center rounded bg-sky-100 px-2 py-0.5 text-xs font-bold text-sky-800">I</span>
<span class="font-semibold">Inquilino:</span>
<span class="font-bold text-slate-800">{{ $inquilinoNome !== '' ? trim(str_replace([' - ', ' 0 ', ' 0', '-'], [' ', ' ', ' ', ' '], $inquilinoNome)) : '—' }}</span>
</div>
<div class="text-xs text-gray-600 mt-1">📍 {{ trim(($unita->indirizzo ?? '').' Scala '.($unita->scala ?? '').' Int. '.($unita->interno ?? '').' '.($unita->comune ?? '')) }}</div>
<div class="mt-3 pt-2 border-t border-gray-100">
<a href="/admin-filament/condomini/catasto-hub?unita_id={{ $unita->id }}" class="inline-flex items-center gap-2 rounded-lg bg-indigo-700 hover:bg-indigo-800 text-white font-semibold px-3.5 py-1.5 text-xs shadow-xs transition">
<span>🏛️</span>
<span>[ Apri in HUB Catasto ]</span>
</a>
</div>
</div>
<div class="grid gap-3 sm:grid-cols-2 min-w-80">
<div class="rounded-xl border border-slate-200 bg-slate-50 p-3.5">
<div class="text-xs font-semibold text-slate-500">🏢 Condomino di riferimento</div>
<div class="text-sm font-bold text-slate-900 mt-1">{{ $condominoNome !== '' ? $condominoNome : '—' }}</div>
<div class="text-xs font-mono text-slate-600 mt-0.5">CF: {{ $condominoCf !== '' ? $condominoCf : '—' }}</div>
</div>
<div class="rounded-xl border border-slate-200 bg-slate-50 p-3.5 {{ $hasInquilino ? '' : 'opacity-60' }}">
<div class="text-xs font-semibold text-slate-500">👤 Inquilino</div>
<div class="text-sm font-bold text-slate-900 mt-1">{{ $inquilinoNome !== '' ? $inquilinoNome : '—' }}</div>
<div class="text-xs font-mono text-slate-600 mt-0.5">CF: {{ $relazioniPerTipo['inquilini'][0]['codice_fiscale'] ?? '—' }}</div>
</div>
</div>
</div>
</x-filament::section>
<div class="grid gap-4 lg:grid-cols-3"> <div class="grid gap-4 lg:grid-cols-3">
<x-filament::section class="lg:col-span-2"> <x-filament::section class="lg:col-span-2">
<x-slot name="heading">Indicatori principali</x-slot> <x-slot name="heading">Indicatori principali</x-slot>
@ -509,9 +457,66 @@ class="inline-flex items-center gap-1.5 rounded-lg bg-indigo-600 px-3 py-2 text-
$ecData = $this->getEstrattoContoNominativoDettaglioProperty(); $ecData = $this->getEstrattoContoNominativoDettaglioProperty();
$timelineItems = $this->getTimelineSubentriCompletaProperty(); $timelineItems = $this->getTimelineSubentriCompletaProperty();
$soggetto = $ecData['soggetto'] ?? null; $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 @endphp
<div class="space-y-4"> <div class="space-y-4">
{{-- Box Estratto Rapido Sintetico diviso per Condomino ed Inquilino --}}
<div class="rounded-xl border border-slate-200 bg-slate-50 p-4">
<div class="text-xs font-bold text-slate-600 uppercase tracking-wider mb-2"> Estratto Conto Rapido Sintetico</div>
<div class="grid gap-3 sm:grid-cols-2">
<button type="button"
wire:click="setCondInquilActive('C')"
class="rounded-xl border p-3.5 text-left transition {{ ($condInquilActive ?? 'C') === 'C' ? 'border-amber-400 bg-amber-50/80 shadow-xs ring-2 ring-amber-500/20' : 'border-slate-200 bg-white hover:bg-slate-100' }}">
<div class="flex items-center justify-between">
<span class="text-xs font-bold text-amber-900">🏢 Condomino (Proprietari)</span>
<span class="rounded bg-amber-200 px-1.5 py-0.5 text-[10px] font-bold text-amber-900">C</span>
</div>
<div class="text-xs text-slate-700 mt-1 font-mono">
Addebito: <strong> {{ number_format($totCAddebH, 2, ',', '.') }}</strong> ·
Incasso: <strong class="text-emerald-700"> {{ number_format($totCPagH, 2, ',', '.') }}</strong> ·
Residuo: <strong class="{{ $totCResH > 0 ? 'text-rose-600' : 'text-slate-600' }}"> {{ number_format($totCResH, 2, ',', '.') }}</strong>
</div>
</button>
<button type="button"
wire:click="setCondInquilActive('I')"
class="rounded-xl border p-3.5 text-left transition {{ ($condInquilActive ?? 'C') === 'I' ? 'border-indigo-400 bg-indigo-50/80 shadow-xs ring-2 ring-indigo-500/20' : 'border-slate-200 bg-white hover:bg-slate-100' }} {{ $hasInquilino ? '' : 'opacity-60' }}"
@if(!$hasInquilino) disabled @endif>
<div class="flex items-center justify-between">
<span class="text-xs font-bold text-indigo-900">👤 Inquilino</span>
<span class="rounded bg-indigo-200 px-1.5 py-0.5 text-[10px] font-bold text-indigo-900">I</span>
</div>
<div class="text-xs text-slate-700 mt-1 font-mono">
Addebito: <strong> {{ number_format($totIAddebH, 2, ',', '.') }}</strong> ·
Incasso: <strong class="text-emerald-700"> {{ number_format($totIPagH, 2, ',', '.') }}</strong> ·
Residuo: <strong class="{{ $totIResH > 0 ? 'text-rose-600' : 'text-slate-600' }}"> {{ number_format($totIResH, 2, ',', '.') }}</strong>
</div>
</button>
</div>
</div>
{{-- Header selezione soggetto --}} {{-- Header selezione soggetto --}}
<div class="flex flex-wrap items-center justify-between gap-4 rounded-xl border border-slate-200 bg-slate-50 p-4"> <div class="flex flex-wrap items-center justify-between gap-4 rounded-xl border border-slate-200 bg-slate-50 p-4">
<div> <div>
@ -655,7 +660,7 @@ class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-semi
@endif @endif
</div> </div>
{{-- Tabella Rate Emesse (Dovuto vs Pagato) --}} {{-- Tabella Rate Emesse (Dovuto vs Pagato + Data Pagamento e Movimento) --}}
<div class="rounded-xl border border-slate-200 bg-white overflow-hidden shadow-xs"> <div class="rounded-xl border border-slate-200 bg-white overflow-hidden shadow-xs">
<div class="border-b border-slate-200 bg-slate-50 px-4 py-3 font-semibold text-slate-800 text-sm flex items-center justify-between"> <div class="border-b border-slate-200 bg-slate-50 px-4 py-3 font-semibold text-slate-800 text-sm flex items-center justify-between">
<span>📑 Rate Emesse ed Avvisi di Pagamento</span> <span>📑 Rate Emesse ed Avvisi di Pagamento</span>
@ -674,6 +679,8 @@ class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-semi
<th class="px-4 py-2.5">Descrizione Rata</th> <th class="px-4 py-2.5">Descrizione Rata</th>
<th class="px-4 py-2.5 text-right">Dovuto ()</th> <th class="px-4 py-2.5 text-right">Dovuto ()</th>
<th class="px-4 py-2.5 text-right">Pagato ()</th> <th class="px-4 py-2.5 text-right">Pagato ()</th>
<th class="px-4 py-2.5">Data Pagamento</th>
<th class="px-4 py-2.5">Movimento / Cassa-Banca</th>
<th class="px-4 py-2.5 text-right">Residuo ()</th> <th class="px-4 py-2.5 text-right">Residuo ()</th>
<th class="px-4 py-2.5 text-center">Stato</th> <th class="px-4 py-2.5 text-center">Stato</th>
</tr> </tr>
@ -691,6 +698,16 @@ class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-semi
<td class="px-4 py-2 font-medium text-slate-900">{{ $rE['descrizione'] }}</td> <td class="px-4 py-2 font-medium text-slate-900">{{ $rE['descrizione'] }}</td>
<td class="px-4 py-2 text-right font-mono font-medium text-slate-900"> {{ number_format($rE['dovuto'], 2, ',', '.') }}</td> <td class="px-4 py-2 text-right font-mono font-medium text-slate-900"> {{ number_format($rE['dovuto'], 2, ',', '.') }}</td>
<td class="px-4 py-2 text-right font-mono font-medium text-emerald-700"> {{ number_format($rE['pagato'], 2, ',', '.') }}</td> <td class="px-4 py-2 text-right font-mono font-medium text-emerald-700"> {{ number_format($rE['pagato'], 2, ',', '.') }}</td>
<td class="px-4 py-2 font-mono text-slate-700 font-medium">{{ $rE['data_pagamento'] ?? '—' }}</td>
<td class="px-4 py-2 text-slate-600 font-mono text-xs">
@if(($rE['movimento_bancario'] ?? '—') !== '—')
<span class="inline-flex items-center gap-1 rounded bg-slate-100 border border-slate-200 px-2 py-0.5 text-xs text-slate-800 font-mono">
<span>🏛️ {{ $rE['movimento_bancario'] }}</span>
</span>
@else
<span class="text-slate-400"></span>
@endif
</td>
<td class="px-4 py-2 text-right font-mono font-bold {{ $rE['residuo'] > 0 ? 'text-rose-600' : 'text-slate-500' }}"> <td class="px-4 py-2 text-right font-mono font-bold {{ $rE['residuo'] > 0 ? 'text-rose-600' : 'text-slate-500' }}">
{{ number_format($rE['residuo'], 2, ',', '.') }} {{ number_format($rE['residuo'], 2, ',', '.') }}
</td> </td>
@ -717,6 +734,7 @@ class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-semi
<td colspan="4" class="px-4 py-2.5 text-right text-slate-700">Totali Rate Emesse:</td> <td colspan="4" class="px-4 py-2.5 text-right text-slate-700">Totali Rate Emesse:</td>
<td class="px-4 py-2.5 text-right font-mono text-slate-900"> {{ number_format($ecData['totale_dovuto_rate'], 2, ',', '.') }}</td> <td class="px-4 py-2.5 text-right font-mono text-slate-900"> {{ number_format($ecData['totale_dovuto_rate'], 2, ',', '.') }}</td>
<td class="px-4 py-2.5 text-right font-mono text-emerald-700"> {{ number_format($ecData['totale_pagato_rate'], 2, ',', '.') }}</td> <td class="px-4 py-2.5 text-right font-mono text-emerald-700"> {{ number_format($ecData['totale_pagato_rate'], 2, ',', '.') }}</td>
<td colspan="2"></td>
<td class="px-4 py-2.5 text-right font-mono text-rose-700"> {{ number_format($ecData['totale_residuo_rate'], 2, ',', '.') }}</td> <td class="px-4 py-2.5 text-right font-mono text-rose-700"> {{ number_format($ecData['totale_residuo_rate'], 2, ',', '.') }}</td>
<td></td> <td></td>
</tr> </tr>