149 lines
11 KiB
PHP
149 lines
11 KiB
PHP
<x-filament-panels::page>
|
||
@php($stats = $this->stats)
|
||
@php($contratti = $this->contrattiRows)
|
||
@php($scadenze = $this->upcomingScadenze)
|
||
|
||
<div class="space-y-6">
|
||
<div class="rounded-2xl border border-slate-200 bg-gradient-to-r from-cyan-50 via-white to-emerald-50 p-5">
|
||
<div class="flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between">
|
||
<div>
|
||
<div class="text-sm font-semibold uppercase tracking-[0.18em] text-slate-500">Stabile</div>
|
||
<h2 class="mt-2 text-2xl font-semibold text-slate-900">HUB Contratti {{ $this->stabileAttivo?->denominazione ? '· ' . $this->stabileAttivo->denominazione : '' }}</h2>
|
||
<p class="mt-2 max-w-3xl text-sm text-slate-600">Qui registriamo il contratto, i riferimenti tecnici e le scadenze operative da inviare anche al calendario. Il collegamento documentale e contabile parte da qui.</p>
|
||
</div>
|
||
<div class="rounded-xl border border-white/70 bg-white/80 px-4 py-3 shadow-sm">
|
||
<div class="text-xs uppercase tracking-wide text-slate-500">Collegamenti</div>
|
||
<div class="mt-2 text-sm text-slate-700">Fornitore, manutentore, servizio, utenza, documento e codici tecnici nello stesso record.</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mt-5 grid gap-3 md:grid-cols-2 xl:grid-cols-4">
|
||
<div class="rounded-xl border bg-white p-4">
|
||
<div class="text-xs uppercase tracking-wide text-slate-500">Contratti</div>
|
||
<div class="mt-2 text-2xl font-semibold text-slate-900">{{ $stats['totale'] ?? 0 }}</div>
|
||
</div>
|
||
<div class="rounded-xl border bg-white p-4">
|
||
<div class="text-xs uppercase tracking-wide text-slate-500">Attivi</div>
|
||
<div class="mt-2 text-2xl font-semibold text-slate-900">{{ $stats['attivi'] ?? 0 }}</div>
|
||
</div>
|
||
<div class="rounded-xl border bg-white p-4">
|
||
<div class="text-xs uppercase tracking-wide text-slate-500">Scadenze 45 gg</div>
|
||
<div class="mt-2 text-2xl font-semibold text-slate-900">{{ $stats['scadenze'] ?? 0 }}</div>
|
||
</div>
|
||
<div class="rounded-xl border bg-white p-4">
|
||
<div class="text-xs uppercase tracking-wide text-slate-500">Documenti contratto</div>
|
||
<div class="mt-2 text-2xl font-semibold text-slate-900">{{ $stats['documenti'] ?? 0 }}</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid gap-6 xl:grid-cols-[minmax(0,1.4fr)_minmax(320px,0.6fr)]">
|
||
<x-filament::section>
|
||
<x-slot name="heading">Registro contratti</x-slot>
|
||
<x-slot name="description">MVP: contratto, riferimenti essenziali, documento principale e generazione scadenze.</x-slot>
|
||
|
||
<div class="space-y-4">
|
||
@forelse($contratti as $contratto)
|
||
<div class="rounded-xl border border-slate-200 bg-white p-4">
|
||
<div class="flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between">
|
||
<div>
|
||
<div class="flex flex-wrap items-center gap-2">
|
||
<div class="text-lg font-semibold text-slate-900">{{ $contratto->titolo }}</div>
|
||
<span class="inline-flex items-center rounded-full bg-{{ $this->contractBadgeColor($contratto->stato) }}-50 px-2.5 py-1 text-xs font-semibold text-{{ $this->contractBadgeColor($contratto->stato) }}-700">
|
||
{{ strtoupper($contratto->stato) }}
|
||
</span>
|
||
<span class="inline-flex items-center rounded-full bg-slate-100 px-2.5 py-1 text-xs font-medium text-slate-700">
|
||
{{ $this->contractTypeLabel($contratto->tipo_contratto) }}
|
||
</span>
|
||
</div>
|
||
<div class="mt-2 text-sm text-slate-600">
|
||
{{ $contratto->servizio_label ?: 'Servizio non specificato' }}
|
||
@if($contratto->fornitore)
|
||
· {{ $contratto->fornitore->ragione_sociale ?: trim(($contratto->fornitore->nome ?? '') . ' ' . ($contratto->fornitore->cognome ?? '')) }}
|
||
@endif
|
||
</div>
|
||
</div>
|
||
<div class="text-sm text-slate-500 lg:text-right">
|
||
<div>Decorrenza: {{ $contratto->decorrenza_dal?->format('d/m/Y') ?: '—' }}</div>
|
||
<div>Fine: {{ $contratto->decorrenza_al?->format('d/m/Y') ?: ($contratto->rinnovo_automatico ? 'rinnovo automatico' : '—') }}</div>
|
||
<div>Frequenza: {{ $contratto->frequenza_scadenze ? str_replace('_', ' ', $contratto->frequenza_scadenze) : '—' }}</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mt-4 grid gap-3 md:grid-cols-2 xl:grid-cols-4 text-sm">
|
||
<div>
|
||
<div class="text-xs uppercase tracking-wide text-slate-500">Codice</div>
|
||
<div class="mt-1 font-medium text-slate-900">{{ $contratto->codice_contratto ?: '—' }}</div>
|
||
</div>
|
||
<div>
|
||
<div class="text-xs uppercase tracking-wide text-slate-500">Riferimento</div>
|
||
<div class="mt-1 font-medium text-slate-900">{{ $contratto->riferimento_esterno ?: '—' }}</div>
|
||
</div>
|
||
<div>
|
||
<div class="text-xs uppercase tracking-wide text-slate-500">Importo</div>
|
||
<div class="mt-1 font-medium text-slate-900">{{ $contratto->importo_periodico !== null ? '€ ' . number_format((float) $contratto->importo_periodico, 2, ',', '.') : '—' }}</div>
|
||
</div>
|
||
<div>
|
||
<div class="text-xs uppercase tracking-wide text-slate-500">Documento</div>
|
||
<div class="mt-1 font-medium text-slate-900">{{ $contratto->documentoPrincipale?->numero_protocollo ?: ($contratto->documentoPrincipale?->nome ?: '—') }}</div>
|
||
</div>
|
||
</div>
|
||
|
||
@if(!empty($contratto->codici_collegati))
|
||
<div class="mt-4 flex flex-wrap gap-2">
|
||
@foreach($contratto->codici_collegati as $code)
|
||
<span class="inline-flex items-center rounded-full bg-cyan-50 px-3 py-1 text-xs font-medium text-cyan-800">
|
||
{{ $code['chiave'] ?? 'Dato' }}: {{ $code['valore'] ?? '—' }}
|
||
</span>
|
||
@endforeach
|
||
</div>
|
||
@endif
|
||
|
||
@if($contratto->note)
|
||
<div class="mt-4 rounded-lg bg-slate-50 px-3 py-2 text-sm text-slate-600">{{ $contratto->note }}</div>
|
||
@endif
|
||
</div>
|
||
@empty
|
||
<div class="rounded-xl border border-dashed bg-white px-4 py-10 text-center text-sm text-slate-500">Nessun contratto registrato per lo stabile attivo.</div>
|
||
@endforelse
|
||
</div>
|
||
</x-filament::section>
|
||
|
||
<div class="space-y-6">
|
||
<x-filament::section>
|
||
<x-slot name="heading">Scadenze programmate</x-slot>
|
||
<x-slot name="description">Le nuove scadenze vengono registrate sulla tabella calendario operativa.</x-slot>
|
||
|
||
<div class="space-y-3">
|
||
@forelse($scadenze as $scadenza)
|
||
<div class="rounded-xl border bg-white px-4 py-3">
|
||
<div class="flex items-start justify-between gap-3">
|
||
<div>
|
||
<div class="text-sm font-semibold text-slate-900">{{ $scadenza->stabileContratto?->titolo ?: $scadenza->descrizione_sintetica }}</div>
|
||
<div class="mt-1 text-xs text-slate-500">{{ $scadenza->stabileContratto?->tipo_contratto ? $this->contractTypeLabel($scadenza->stabileContratto->tipo_contratto) : 'Scadenza contratto' }}</div>
|
||
</div>
|
||
<div class="text-sm font-semibold text-slate-900">{{ $scadenza->data_scadenza?->format('d/m/Y') ?: '—' }}</div>
|
||
</div>
|
||
@if(!empty($scadenza->legacy_payload['codice_contratto']))
|
||
<div class="mt-2 text-xs text-slate-500">Codice: {{ $scadenza->legacy_payload['codice_contratto'] }}</div>
|
||
@endif
|
||
</div>
|
||
@empty
|
||
<div class="rounded-xl border border-dashed bg-white px-4 py-6 text-sm text-slate-500">Nessuna scadenza contrattuale registrata.</div>
|
||
@endforelse
|
||
</div>
|
||
</x-filament::section>
|
||
|
||
<x-filament::section>
|
||
<x-slot name="heading">Copertura dati</x-slot>
|
||
<div class="space-y-3 text-sm text-slate-600">
|
||
<div class="rounded-xl border bg-white px-4 py-3">Per acqua, energia e altri impianti usa i codici collegati per registrare POD, PDR, matricole, codice cliente, numero utenza e riferimenti bolletta.</div>
|
||
<div class="rounded-xl border bg-white px-4 py-3">Il SIA resta sul fornitore; qui teniamo i dati specifici del singolo contratto dello stabile.</div>
|
||
<div class="rounded-xl border bg-white px-4 py-3">Il documento principale può essere un PDF già registrato nell’archivio documentale con categoria contratto.</div>
|
||
</div>
|
||
</x-filament::section>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</x-filament-panels::page>
|