netgescon-day0/resources/views/filament/pages/supporto/ticket-scheda.blade.php

143 lines
8.4 KiB
PHP

<x-filament-panels::page>
<div class="space-y-4">
<div class="rounded-xl border bg-white p-4">
<div class="flex flex-wrap items-center justify-between gap-2">
<div>
<div class="text-sm font-semibold">Scheda Ticket</div>
<div class="text-xs text-gray-500">Dettaglio singolo con note, allegati, assegnazione fornitore e interventi.</div>
</div>
<div class="flex flex-wrap gap-2">
<a href="{{ $this->getTicketGestioneUrl() }}" class="inline-flex items-center rounded-md bg-gray-700 px-3 py-1.5 text-xs font-medium text-white hover:bg-gray-600">Torna a Gestione Ticket</a>
<a href="{{ $this->getTicketMobileUrl() }}" class="inline-flex items-center rounded-md bg-indigo-700 px-3 py-1.5 text-xs font-medium text-white hover:bg-indigo-600">Nuovo Ticket</a>
</div>
</div>
</div>
@if(! $this->ticket)
<div class="rounded-xl border border-amber-300 bg-amber-50 p-4 text-sm text-amber-800">
Ticket non selezionato o non accessibile. Apri questa pagina da Gestione Ticket.
</div>
@else
@php($ticket = $this->ticket)
<div class="rounded-xl border bg-white p-4">
<div class="text-lg font-semibold">#{{ $ticket->id }} - {{ $ticket->titolo }}</div>
<div class="mt-1 text-xs text-gray-600">
Stato: {{ $ticket->stato }} · Priorita: {{ $ticket->priorita }}
@if($ticket->categoriaTicket)
· Categoria: {{ $ticket->categoriaTicket->nome }}
@endif
@if($ticket->stabile)
· Stabile: {{ $ticket->stabile->denominazione }}
@endif
</div>
<div class="mt-2 whitespace-pre-wrap text-sm text-gray-700">{{ $ticket->descrizione }}</div>
</div>
<div class="grid gap-4 lg:grid-cols-2">
<div class="rounded-xl border bg-white p-4">
<div class="text-sm font-semibold">2) Assegnazione e intervento</div>
<label class="mt-3 block text-sm">
<span class="mb-1 block font-medium">Assegna ditta/manutentore</span>
<select wire:model.defer="fornitoreId" class="w-full rounded-lg border-gray-300">
<option value="">Seleziona fornitore</option>
@foreach($fornitoriOptions as $f)
<option value="{{ (int) $f['id'] }}">{{ $f['nome'] }}</option>
@endforeach
</select>
</label>
<label class="mt-3 block text-sm">
<span class="mb-1 block font-medium">Note assegnazione/intervento</span>
<textarea rows="3" wire:model.defer="noteAssegnazione" class="w-full rounded-lg border-gray-300" placeholder="Istruzioni operative per il manutentore"></textarea>
</label>
<div class="mt-3">
<x-filament::button wire:click="assegnaFornitore">Assegna fornitore e registra intervento</x-filament::button>
</div>
@if($ticket->assegnatoAFornitore)
<div class="mt-3 rounded-lg border border-emerald-200 bg-emerald-50 p-3 text-xs text-emerald-800">
Fornitore assegnato: {{ $ticket->assegnatoAFornitore->ragione_sociale ?: trim(($ticket->assegnatoAFornitore->nome ?? '') . ' ' . ($ticket->assegnatoAFornitore->cognome ?? '')) }}
</div>
@endif
</div>
<div class="rounded-xl border bg-white p-4">
<div class="text-sm font-semibold">Note interne</div>
<label class="mt-3 block text-sm">
<span class="mb-1 block font-medium">Nuova nota</span>
<textarea rows="4" wire:model.defer="notaInterna" class="w-full rounded-lg border-gray-300" placeholder="Aggiungi aggiornamento interno"></textarea>
</label>
<div class="mt-3">
<x-filament::button color="gray" wire:click="aggiungiNotaInterna">Aggiungi nota</x-filament::button>
</div>
</div>
</div>
<div class="grid gap-4 lg:grid-cols-2">
<div class="rounded-xl border bg-white p-4">
<div class="text-sm font-semibold">Allegati ticket</div>
<label class="mt-3 block text-sm">
<span class="mb-1 block font-medium">Carica foto/documenti</span>
<input type="file" wire:model="nuoviAllegati" multiple accept="image/*,.pdf,.doc,.docx,.xls,.xlsx,.txt" capture="environment" class="w-full rounded-lg border-gray-300 text-sm" />
</label>
<label class="mt-3 block text-sm">
<span class="mb-1 block font-medium">Descrizione allegati</span>
<input type="text" wire:model.defer="descrizioneAllegati" class="w-full rounded-lg border-gray-300" placeholder="Es. foto danno cucina" />
</label>
<div class="mt-3">
<x-filament::button color="success" wire:click="caricaAllegati">Carica allegati</x-filament::button>
</div>
<div class="mt-4 space-y-2">
@forelse($ticket->attachments as $a)
<div class="rounded-md border p-2 text-xs">
<div class="font-medium">{{ $a->original_file_name }}</div>
<div class="text-gray-500">{{ $a->description }}</div>
<a target="_blank" href="{{ route('filament.tickets.attachments.view', ['attachment' => (int) $a->id]) }}" class="text-primary-600 hover:underline">Apri allegato</a>
</div>
@empty
<div class="text-xs text-gray-500">Nessun allegato.</div>
@endforelse
</div>
</div>
<div class="rounded-xl border bg-white p-4">
<div class="text-sm font-semibold">Storico interventi</div>
<div class="mt-3 space-y-2">
@forelse($ticket->interventi as $it)
<div class="rounded-md border p-2 text-xs">
<div class="font-medium">Stato: {{ $it->stato }}</div>
<div>
Fornitore:
{{ optional($it->fornitore)->ragione_sociale ?: trim((optional($it->fornitore)->nome ?? '') . ' ' . (optional($it->fornitore)->cognome ?? '')) ?: 'N/D' }}
</div>
@if($it->note_amministratore)
<div class="mt-1 whitespace-pre-wrap text-gray-600">{{ $it->note_amministratore }}</div>
@endif
</div>
@empty
<div class="text-xs text-gray-500">Nessun intervento registrato.</div>
@endforelse
</div>
</div>
</div>
<div class="rounded-xl border bg-white p-4">
<div class="text-sm font-semibold">Storico note/messaggi ticket</div>
<div class="mt-3 space-y-2">
@forelse($ticket->messages as $msg)
<div class="rounded-md border p-2 text-xs">
<div class="font-medium">{{ optional($msg->user)->name ?: 'Sistema' }}</div>
<div class="mt-1 whitespace-pre-wrap text-gray-700">{{ $msg->messaggio }}</div>
<div class="mt-1 text-gray-500">{{ optional($msg->created_at)->format('d/m/Y H:i') }}</div>
</div>
@empty
<div class="text-xs text-gray-500">Nessuna nota registrata.</div>
@endforelse
</div>
</div>
@endif
</div>
</x-filament-panels::page>