netgescon-day0/resources/views/filament/pages/condomini/servizi-stabile-archivio.blade.php

393 lines
29 KiB
PHP

<x-filament-panels::page>
@php
$stats = $this->acquaDashboardStats;
$annoGestioneAttivo = \App\Support\AnnoGestioneContext::resolveActiveAnno(auth()->user());
$fatturePerGestione = $this->acquaFatturePerGestione;
$lettureCondomini = $this->acquaLettureCondomini;
$tariffeRows = $this->acquaTariffeRows;
$legacyArchive = $this->acquaLegacyArchiveAvailability;
$legacyExtraRows = $this->acquaAltreVociLegacy;
$legacyOpsSummary = $this->acquaLegacyOperazioniSummary;
$legacyOpsRows = $this->acquaLegacyOperazioniRows;
$acquaContratto = $this->acquaContrattoStabile;
$acquaRipartoNominativi = $this->acquaRipartoNominativiLegacy;
@endphp
<div class="space-y-6">
<div>
<h1 class="text-2xl font-bold text-gray-900 dark:text-gray-100">Servizi / Utenze - ACQUA</h1>
<p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
Cruscotto operativo acqua con controllo fatture, versamenti/letture condomini e tariffe storicizzate. I dati mostrati seguono lo stabile attivo e l'anno gestione del topbar.
</p>
<div class="mt-2 inline-flex items-center rounded-full border border-blue-200 bg-blue-50 px-3 py-1 text-xs font-medium text-blue-700 dark:border-blue-700/50 dark:bg-blue-900/20 dark:text-blue-200">
Anno gestione attivo: {{ $annoGestioneAttivo }}
</div>
</div>
<div class="border-b border-gray-200 dark:border-gray-800">
<nav class="-mb-px flex flex-wrap gap-6" aria-label="Tabs">
<button type="button"
wire:click="setAcquaTab('dashboard')"
class="pb-3 px-1 border-b-2 font-medium text-sm {{ $acquaTab === 'dashboard' ? 'border-blue-600 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300' }}">
Dashboard
</button>
<button type="button"
wire:click="setAcquaTab('fatture')"
class="pb-3 px-1 border-b-2 font-medium text-sm {{ $acquaTab === 'fatture' ? 'border-blue-600 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300' }}">
Fatture per gestione
</button>
<button type="button"
wire:click="setAcquaTab('letture')"
class="pb-3 px-1 border-b-2 font-medium text-sm {{ $acquaTab === 'letture' ? 'border-blue-600 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300' }}">
Versamenti / Letture condomini
</button>
<button type="button"
wire:click="setAcquaTab('tariffe')"
class="pb-3 px-1 border-b-2 font-medium text-sm {{ $acquaTab === 'tariffe' ? 'border-blue-600 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300' }}">
Tariffe
</button>
<button type="button"
wire:click="setAcquaTab('servizi')"
class="pb-3 px-1 border-b-2 font-medium text-sm {{ $acquaTab === 'servizi' ? 'border-blue-600 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300' }}">
Servizi / Utenze (tabella)
</button>
</nav>
</div>
@if($acquaTab === 'dashboard')
<div class="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4">
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="text-xs text-gray-500">Totale fatture acqua (import registrato)</div>
<div class="mt-2 text-xl font-semibold">EUR {{ number_format((float) ($stats['totale_fatture'] ?? 0), 2, ',', '.') }}</div>
</div>
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="text-xs text-gray-500">Controllo legacy operazioni (AC1+AC2)</div>
<div class="mt-2 text-xl font-semibold">EUR {{ number_format((float) ($stats['totale_operazioni_ac12_legacy'] ?? 0), 2, ',', '.') }}</div>
<div class="mt-1 text-xs {{ ((float) ($stats['delta_operazioni_vs_fatture'] ?? 0)) == 0.0 ? 'text-emerald-600' : 'text-amber-600' }}">
Delta fatture registrate - legacy AC1+AC2: {{ number_format((float) ($stats['delta_operazioni_vs_fatture'] ?? 0), 2, ',', '.') }}
</div>
</div>
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="text-xs text-gray-500">Letture condomini registrate</div>
<div class="mt-2 text-xl font-semibold">{{ number_format((int) ($stats['totale_letture'] ?? 0), 0, ',', '.') }}</div>
<div class="mt-1 text-xs text-gray-500">con riferimento acquisizione: {{ number_format((int) ($stats['totale_letture_con_riferimento'] ?? 0), 0, ',', '.') }}</div>
</div>
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="text-xs text-gray-500">Consumi e tariffe</div>
<div class="mt-2 text-xl font-semibold">{{ number_format((float) ($stats['totale_consumi_mc'] ?? 0), 3, ',', '.') }} mc</div>
<div class="mt-1 text-xs text-gray-500">snapshot tariffe: {{ number_format((int) ($stats['totale_tariffe'] ?? 0), 0, ',', '.') }}</div>
</div>
</div>
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="text-sm font-semibold text-gray-900 dark:text-gray-100">Copertura archivio legacy ACEA</div>
<div class="mt-2 text-sm text-gray-600 dark:text-gray-300">
<div>Tabella <code>contratti_ACEA</code>: <span class="font-semibold">{{ ($legacyArchive['contratti_acea'] ?? false) ? 'presente' : 'non presente' }}</span></div>
<div>Tabella <code>Tariffe_ACEA_Standard</code>: <span class="font-semibold">{{ ($legacyArchive['tariffe_acea_standard'] ?? false) ? 'presente' : 'non presente' }}</span></div>
<div class="mt-1 text-xs text-gray-500">{{ $legacyArchive['note'] ?? '' }}</div>
</div>
</div>
<div class="rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-700/50 dark:bg-blue-900/10">
<div class="mb-2 flex flex-wrap items-center justify-between gap-3">
<div class="text-sm font-semibold text-blue-900 dark:text-blue-200">Contratto servizio ACQUA (stabile -> fornitore)</div>
<x-filament::button size="xs" color="info" wire:click="ensureAcquaAceaContract">
Allinea/crea contratto con Acea Ato2
</x-filament::button>
</div>
<div class="grid grid-cols-1 gap-2 text-xs text-blue-900 dark:text-blue-100 md:grid-cols-2">
<div>Servizio: <span class="font-semibold">{{ $acquaContratto['servizio_nome'] ?: 'non configurato' }}</span></div>
<div>Fornitore: <span class="font-semibold">{{ $acquaContratto['fornitore_nome'] ?: 'non assegnato' }}</span></div>
<div>Codice utenza: <span class="font-semibold">{{ $acquaContratto['codice_utenza'] ?: '' }}</span></div>
<div>Codice cliente: <span class="font-semibold">{{ $acquaContratto['codice_cliente'] ?: '' }}</span></div>
<div>Codice contratto: <span class="font-semibold">{{ $acquaContratto['codice_contratto'] ?: '' }}</span></div>
<div>Matricola contatore: <span class="font-semibold">{{ $acquaContratto['matricola'] ?: '' }}</span></div>
</div>
@if(!($acquaContratto['fornitore_nome'] ?? null) && ($acquaContratto['suggerito_fornitore'] ?? null))
<div class="mt-2 text-xs text-blue-700 dark:text-blue-300">Suggerito in anagrafica fornitori: {{ $acquaContratto['suggerito_fornitore'] }}</div>
@endif
</div>
@endif
@if($acquaTab === 'fatture')
<div class="space-y-4">
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="mb-3 text-sm font-semibold text-gray-900 dark:text-gray-100">Fatture registrate divise per gestione</div>
<div class="overflow-x-auto">
<table class="min-w-full text-sm">
<thead>
<tr class="border-b border-gray-200 dark:border-gray-800">
<th class="px-3 py-2 text-left">Gestione</th>
<th class="px-3 py-2 text-right">Numero fatture</th>
<th class="px-3 py-2 text-right">FE</th>
<th class="px-3 py-2 text-right">Manuali</th>
<th class="px-3 py-2 text-right">Totale EUR</th>
</tr>
</thead>
<tbody>
@forelse($fatturePerGestione as $row)
<tr class="border-b border-gray-100 dark:border-gray-800">
<td class="px-3 py-2">{{ strtoupper((string) ($row['gestione'] ?? 'non definita')) }}</td>
<td class="px-3 py-2 text-right">{{ number_format((int) ($row['fatture_count'] ?? 0), 0, ',', '.') }}</td>
<td class="px-3 py-2 text-right">{{ number_format((int) ($row['fe_count'] ?? 0), 0, ',', '.') }}</td>
<td class="px-3 py-2 text-right">{{ number_format((int) ($row['manual_count'] ?? 0), 0, ',', '.') }}</td>
<td class="px-3 py-2 text-right">{{ number_format((float) ($row['totale_fatture'] ?? 0), 2, ',', '.') }}</td>
</tr>
@empty
<tr>
<td colspan="5" class="px-3 py-4 text-center text-gray-500">Nessuna fattura acqua registrata.</td>
</tr>
@endforelse
</tbody>
@if(count($fatturePerGestione) > 0)
<tfoot>
<tr class="bg-gray-50 dark:bg-gray-950/30">
<td class="px-3 py-2 font-semibold">Totale</td>
<td class="px-3 py-2 text-right font-semibold">{{ number_format((int) collect($fatturePerGestione)->sum('fatture_count'), 0, ',', '.') }}</td>
<td class="px-3 py-2 text-right font-semibold">{{ number_format((int) collect($fatturePerGestione)->sum('fe_count'), 0, ',', '.') }}</td>
<td class="px-3 py-2 text-right font-semibold">{{ number_format((int) collect($fatturePerGestione)->sum('manual_count'), 0, ',', '.') }}</td>
<td class="px-3 py-2 text-right font-semibold">{{ number_format((float) collect($fatturePerGestione)->sum('totale_fatture'), 2, ',', '.') }}</td>
</tr>
</tfoot>
@endif
</table>
</div>
</div>
<div class="rounded-lg border border-indigo-200 bg-indigo-50 p-4 dark:border-indigo-700/50 dark:bg-indigo-900/10">
<div class="mb-2 text-sm font-semibold text-indigo-900 dark:text-indigo-200">Archivio legacy operazioni AC1 + AC2 (collegamento fatture)</div>
<div class="mb-3 grid grid-cols-1 gap-2 text-xs text-indigo-900 dark:text-indigo-100 md:grid-cols-4">
<div>Righe: <span class="font-semibold">{{ number_format((int) ($legacyOpsSummary['righe'] ?? 0), 0, ',', '.') }}</span></div>
<div>Totale AC1: <span class="font-semibold">{{ number_format((float) (($legacyOpsSummary['voci']['AC1'] ?? 0)), 2, ',', '.') }}</span></div>
<div>Totale AC2: <span class="font-semibold">{{ number_format((float) (($legacyOpsSummary['voci']['AC2'] ?? 0)), 2, ',', '.') }}</span></div>
<div>Totale AC1+AC2: <span class="font-semibold">{{ number_format((float) ($legacyOpsSummary['totale'] ?? 0), 2, ',', '.') }}</span></div>
</div>
<div class="overflow-x-auto">
<table class="min-w-full text-xs">
<thead>
<tr class="border-b border-indigo-200 dark:border-indigo-700/50">
<th class="px-2 py-2 text-left">Data op.</th>
<th class="px-2 py-2 text-left">Voce</th>
<th class="px-2 py-2 text-left">Doc legacy</th>
<th class="px-2 py-2 text-left">Fornitore</th>
<th class="px-2 py-2 text-left">Descrizione</th>
<th class="px-2 py-2 text-right">Importo</th>
<th class="px-2 py-2 text-left">Match fattura locale</th>
</tr>
</thead>
<tbody>
@forelse($legacyOpsRows as $row)
<tr class="border-b border-indigo-100 dark:border-indigo-800/30">
<td class="px-2 py-2">{{ $row['data_operazione'] ? \Carbon\Carbon::parse($row['data_operazione'])->format('d/m/Y') : '' }}</td>
<td class="px-2 py-2 font-medium">{{ $row['cod_spe'] ?: '' }}</td>
<td class="px-2 py-2">
{{ $row['num_fat'] ?: '' }}
<div class="text-[10px] text-indigo-700 dark:text-indigo-300">{{ $row['dt_fat'] ? \Carbon\Carbon::parse($row['dt_fat'])->format('d/m/Y') : '' }}</div>
</td>
<td class="px-2 py-2">{{ $row['fornitore_legacy'] ?: ('cod. ' . ($row['cod_for'] ?: '')) }}</td>
<td class="px-2 py-2 max-w-[22rem] truncate" title="{{ $row['benef'] }}">{{ $row['benef'] ?: '' }}</td>
<td class="px-2 py-2 text-right">{{ number_format((float) ($row['importo'] ?? 0), 2, ',', '.') }}</td>
<td class="px-2 py-2">
@if(($row['matched_fattura_id'] ?? null))
<span class="rounded bg-emerald-100 px-1.5 py-0.5 text-[10px] font-semibold text-emerald-700">OK {{ strtoupper((string) ($row['match_type'] ?? '')) }}</span>
<div class="text-[10px] text-emerald-700">ID {{ $row['matched_fattura_id'] }} @if($row['matched_fe_id']) / FE {{ $row['matched_fe_id'] }} @endif</div>
@else
<span class="rounded bg-amber-100 px-1.5 py-0.5 text-[10px] font-semibold text-amber-700">DA COLLEGARE</span>
@endif
</td>
</tr>
@empty
<tr>
<td colspan="7" class="px-2 py-4 text-center text-indigo-700 dark:text-indigo-300">Nessuna operazione AC1/AC2 trovata in archivio legacy.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
<div class="rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700/50 dark:bg-amber-900/10">
<div class="mb-3 text-sm font-semibold text-amber-900 dark:text-amber-200">Altre voci AC (escluse AC1/AC2) - archivio legacy</div>
<div class="overflow-x-auto">
<table class="min-w-full text-sm">
<thead>
<tr class="border-b border-amber-200 dark:border-amber-700/50">
<th class="px-3 py-2 text-left">Voce</th>
<th class="px-3 py-2 text-right">Totale EUR</th>
</tr>
</thead>
<tbody>
@forelse($legacyExtraRows as $row)
<tr class="border-b border-amber-100 dark:border-amber-800/30">
<td class="px-3 py-2">{{ $row['cod_spe'] }}</td>
<td class="px-3 py-2 text-right">{{ number_format((float) ($row['totale'] ?? 0), 2, ',', '.') }}</td>
</tr>
@empty
<tr>
<td colspan="2" class="px-3 py-4 text-center text-amber-700 dark:text-amber-300">Nessuna voce AC diversa da AC1 trovata.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
@endif
@if($acquaTab === 'letture')
<div class="space-y-4">
<div class="rounded-lg border border-slate-200 bg-slate-50 p-4 dark:border-slate-700/50 dark:bg-slate-900/20">
<div class="mb-2 text-sm font-semibold text-slate-900 dark:text-slate-100">Base nominativi riparto ACQUA (legacy) per inserimento letture manuali</div>
<div class="mb-2 text-xs text-slate-600 dark:text-slate-300">
Fonte letture manuali PDF: <code>/home/michele/netgescon/netgescon-laravel/Miki-Bug-workspace/ACQUA-Acea/06 - 2024 VIA_A_DORIA_36.0.RIPARTO.2.pdf</code>
</div>
<div class="overflow-x-auto">
<table class="min-w-full text-xs">
<thead>
<tr class="border-b border-slate-200 dark:border-slate-700/50">
<th class="px-2 py-2 text-left">Scala</th>
<th class="px-2 py-2 text-left">Interno</th>
<th class="px-2 py-2 text-left">Nominativo</th>
<th class="px-2 py-2 text-left">Ruolo</th>
<th class="px-2 py-2 text-right">Lettura iniziale</th>
<th class="px-2 py-2 text-right">Consumo mc</th>
<th class="px-2 py-2 text-right">Quota EUR (riparto)</th>
</tr>
</thead>
<tbody>
@forelse($acquaRipartoNominativi as $row)
<tr class="border-b border-slate-100 dark:border-slate-800/30">
<td class="px-2 py-2">{{ $row['scala'] ?: '' }}</td>
<td class="px-2 py-2">{{ $row['interno'] ?: '' }}</td>
<td class="px-2 py-2">{{ $row['nominativo'] ?: '' }}</td>
<td class="px-2 py-2">{{ $row['ruolo'] ?: '' }}</td>
<td class="px-2 py-2 text-right">{{ isset($row['lettura_iniziale']) && $row['lettura_iniziale'] !== null ? number_format((float) $row['lettura_iniziale'], 3, ',', '.') : '' }}</td>
<td class="px-2 py-2 text-right">{{ isset($row['consumo_mc']) && $row['consumo_mc'] !== null ? number_format((float) $row['consumo_mc'], 3, ',', '.') : '' }}</td>
<td class="px-2 py-2 text-right">{{ number_format((float) ($row['quota_euro'] ?? 0), 2, ',', '.') }}</td>
</tr>
@empty
<tr>
<td colspan="7" class="px-2 py-4 text-center text-slate-500">Nominativi riparto legacy non disponibili.</td>
</tr>
@endforelse
</tbody>
@if(count($acquaRipartoNominativi) > 0)
<tfoot>
<tr class="bg-slate-100 dark:bg-slate-900/40 font-semibold">
<td class="px-2 py-2" colspan="5">Totali</td>
<td class="px-2 py-2 text-right">{{ number_format((float) collect($acquaRipartoNominativi)->sum(fn($r) => (float) ($r['consumo_mc'] ?? 0)), 3, ',', '.') }}</td>
<td class="px-2 py-2 text-right">{{ number_format((float) collect($acquaRipartoNominativi)->sum(fn($r) => (float) ($r['quota_euro'] ?? 0)), 2, ',', '.') }}</td>
</tr>
</tfoot>
@endif
</table>
</div>
</div>
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="mb-3 flex flex-wrap items-center justify-between gap-3">
<div class="text-sm font-semibold text-gray-900 dark:text-gray-100">Versamenti/Letture condomini (con data ricezione e riferimento)</div>
<a href="{{ \App\Filament\Pages\Condomini\LettureServiziArchivio::getUrl() }}"
class="inline-flex items-center rounded-md border border-blue-200 bg-blue-50 px-3 py-1.5 text-xs font-medium text-blue-700 hover:bg-blue-100 dark:border-blue-700/50 dark:bg-blue-900/20 dark:text-blue-200">
Apri archivio letture (filtrato per anno {{ $annoGestioneAttivo }})
</a>
</div>
<div class="overflow-x-auto">
<table class="min-w-full text-xs">
<thead>
<tr class="border-b border-gray-200 dark:border-gray-800">
<th class="px-2 py-2 text-left">Data ricezione</th>
<th class="px-2 py-2 text-left">Servizio</th>
<th class="px-2 py-2 text-left">Unità</th>
<th class="px-2 py-2 text-left">Canale</th>
<th class="px-2 py-2 text-left">Riferimento / immagine</th>
<th class="px-2 py-2 text-left">Periodo</th>
<th class="px-2 py-2 text-right">Lettura/consumo</th>
</tr>
</thead>
<tbody>
@forelse($lettureCondomini as $row)
<tr class="border-b border-gray-100 dark:border-gray-800">
<td class="px-2 py-2">{{ $row['data_ricezione'] ?: '' }}</td>
<td class="px-2 py-2">{{ $row['servizio'] ?: '' }}<br><span class="text-[10px] text-gray-500">Matr. {{ $row['matricola'] ?: '' }}</span></td>
<td class="px-2 py-2">{{ trim((string) ($row['unita'] ?? '')) !== '' ? $row['unita'] : '' }}</td>
<td class="px-2 py-2">{{ strtoupper((string) ($row['canale'] ?? '')) }}</td>
<td class="px-2 py-2 break-all">{{ $row['riferimento'] ?: '' }}</td>
<td class="px-2 py-2">{{ $row['periodo'] ?: '' }}</td>
<td class="px-2 py-2 text-right">
@if(isset($row['consumo_valore']) && $row['consumo_valore'] !== null)
{{ number_format((float) $row['consumo_valore'], 3, ',', '.') }} {{ $row['consumo_unita'] ?: 'mc' }}
@else
@endif
</td>
</tr>
@empty
<tr>
<td colspan="7" class="px-2 py-4 text-center text-gray-500">Nessuna lettura disponibile.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
@endif
@if($acquaTab === 'tariffe')
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="mb-3 text-sm font-semibold text-gray-900 dark:text-gray-100">Tariffe caricate da contratti/fatture</div>
<div class="overflow-x-auto">
<table class="min-w-full text-xs">
<thead>
<tr class="border-b border-gray-200 dark:border-gray-800">
<th class="px-2 py-2 text-left">FE</th>
<th class="px-2 py-2 text-left">Data fattura</th>
<th class="px-2 py-2 text-left">Decorrenza</th>
<th class="px-2 py-2 text-left">Profilo</th>
<th class="px-2 py-2 text-left">Delibere</th>
<th class="px-2 py-2 text-left">IVA</th>
<th class="px-2 py-2 text-right">Scaglioni</th>
<th class="px-2 py-2 text-right">UI1/UI2/UI3/UI4</th>
</tr>
</thead>
<tbody>
@forelse($tariffeRows as $row)
<tr class="border-b border-gray-100 dark:border-gray-800">
<td class="px-2 py-2">#{{ $row['fattura_elettronica_id'] ?? '' }}</td>
<td class="px-2 py-2">{{ $row['data_fattura'] ?: '' }}</td>
<td class="px-2 py-2">{{ $row['decorrenza_tariffe'] ?: '' }}</td>
<td class="px-2 py-2">{{ $row['profilo'] ?: '' }}</td>
<td class="px-2 py-2">
ATO: {{ $row['delibera_ato'] ?: '' }}<br>
ARERA: {{ $row['delibera_arera'] ?: '' }}
</td>
<td class="px-2 py-2">{{ $row['iva_codice'] ?: '' }} @if(isset($row['iva_aliquota']) && $row['iva_aliquota'] !== null)({{ number_format((float) $row['iva_aliquota'], 2, ',', '.') }}%)@endif</td>
<td class="px-2 py-2 text-right">{{ number_format((int) ($row['scaglioni_count'] ?? 0), 0, ',', '.') }}</td>
<td class="px-2 py-2 text-right">
{{ number_format((float) ($row['ui1'] ?? 0), 4, ',', '.') }} /
{{ number_format((float) ($row['ui2'] ?? 0), 4, ',', '.') }} /
{{ number_format((float) ($row['ui3'] ?? 0), 4, ',', '.') }} /
{{ number_format((float) ($row['ui4'] ?? 0), 4, ',', '.') }}
</td>
</tr>
@empty
<tr>
<td colspan="8" class="px-2 py-4 text-center text-gray-500">Nessuna tariffa caricata.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
@endif
@if($acquaTab === 'servizi')
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
<div class="mb-3 text-sm font-semibold text-gray-900 dark:text-gray-100">Servizi / Utenze (anagrafica completa)</div>
{{ $this->table }}
</div>
@endif
</div>
</x-filament-panels::page>