netgescon-day0/resources/views/filament/pages/condomini/contratti-hub.blade.php

149 lines
11 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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 nellarchivio documentale con categoria contratto.</div>
</div>
</x-filament::section>
</div>
</div>
</div>
</x-filament-panels::page>