164 lines
12 KiB
PHP
164 lines
12 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-3">
|
|
<div>
|
|
<div class="text-sm font-semibold text-slate-900">Archivio assistenza TecnoRepair</div>
|
|
<div class="text-xs text-slate-500">Elenco filtrabile delle schede legacy importate da MDB e collegate al fornitore operativo, tipicamente NETHOME.</div>
|
|
</div>
|
|
<div class="rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-[11px] text-slate-600">
|
|
Import comando: <span class="font-mono text-slate-800">{{ $this->importCommandHint }}</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-3 grid grid-cols-2 gap-2 md:grid-cols-4">
|
|
<div class="rounded-lg border bg-slate-50 px-3 py-2 text-xs">Totali: <span class="font-semibold">{{ $counters['all'] ?? 0 }}</span></div>
|
|
<div class="rounded-lg border bg-rose-50 px-3 py-2 text-xs text-rose-800">Aperti: <span class="font-semibold">{{ $counters['open'] ?? 0 }}</span></div>
|
|
<div class="rounded-lg border bg-amber-50 px-3 py-2 text-xs text-amber-800">In attesa: <span class="font-semibold">{{ $counters['waiting'] ?? 0 }}</span></div>
|
|
<div class="rounded-lg border bg-emerald-50 px-3 py-2 text-xs text-emerald-800">Chiusi: <span class="font-semibold">{{ $counters['closed'] ?? 0 }}</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="grid gap-4 xl:grid-cols-[minmax(0,1.4fr)_minmax(320px,0.9fr)]">
|
|
<div class="rounded-xl border bg-white p-4">
|
|
<div class="flex flex-wrap items-center gap-2">
|
|
<input type="text" wire:model.live.debounce.300ms="search" class="min-w-[240px] flex-1 rounded-lg border-gray-300 text-sm" placeholder="Cerca scheda, cliente, seriale, modello, difetto" />
|
|
<select wire:model.live="status" class="rounded-lg border-gray-300 text-sm">
|
|
<option value="all">Tutti gli stati</option>
|
|
<option value="open">Aperti</option>
|
|
<option value="waiting">In attesa</option>
|
|
<option value="closed">Chiusi</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="mt-4 overflow-x-auto">
|
|
<table class="min-w-full border-collapse border text-xs">
|
|
<thead>
|
|
<tr class="bg-slate-100 text-slate-700">
|
|
<th class="border px-2 py-2 text-left">Scheda</th>
|
|
<th class="border px-2 py-2 text-left">Cliente</th>
|
|
<th class="border px-2 py-2 text-left">Prodotto</th>
|
|
<th class="border px-2 py-2 text-left">Seriali</th>
|
|
<th class="border px-2 py-2 text-left">Stato</th>
|
|
<th class="border px-2 py-2 text-left">Fornitore</th>
|
|
<th class="border px-2 py-2 text-left">Azioni</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse($this->rows as $scheda)
|
|
<tr class="{{ $scheda->row_classes }}">
|
|
<td class="border px-2 py-2 align-top">
|
|
<div class="font-medium text-slate-900">{{ $scheda->display_title }}</div>
|
|
<div class="text-[11px] text-slate-500">Ingresso {{ optional($scheda->date_received)->format('d/m/Y') ?: '-' }}</div>
|
|
</td>
|
|
<td class="border px-2 py-2 align-top">
|
|
<div>{{ $scheda->customer_name ?: '-' }}</div>
|
|
<div class="text-[11px] text-slate-500">{{ $scheda->customer_phone ?: ($scheda->customer_email ?: 'recapito non presente') }}</div>
|
|
</td>
|
|
<td class="border px-2 py-2 align-top">
|
|
<div>{{ $scheda->product_model ?: '-' }}</div>
|
|
<div class="text-[11px] text-slate-500">{{ $scheda->product_code ?: 'codice non presente' }}</div>
|
|
</td>
|
|
<td class="border px-2 py-2 align-top">{{ $scheda->serial_label }}</td>
|
|
<td class="border px-2 py-2 align-top">
|
|
<span class="inline-flex rounded-full border px-2 py-1 text-[11px] font-medium {{ $scheda->status_badge_classes }}">{{ $scheda->status_label ?: 'Stato non indicato' }}</span>
|
|
</td>
|
|
<td class="border px-2 py-2 align-top">
|
|
@if($scheda->fornitore)
|
|
<div class="font-medium">{{ $scheda->fornitore->ragione_sociale ?: ('Fornitore #' . $scheda->fornitore->id) }}</div>
|
|
@if($scheda->fornitore->is_tecnorepair_primary)
|
|
<div class="text-[11px] text-emerald-700">Centro primario</div>
|
|
@endif
|
|
@else
|
|
-
|
|
@endif
|
|
</td>
|
|
<td class="border px-2 py-2 align-top">
|
|
<button type="button" wire:click="apriScheda({{ (int) $scheda->id }})" class="inline-flex items-center rounded-md bg-slate-800 px-2 py-1 text-[11px] font-medium text-white hover:bg-slate-700">Scheda</button>
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr>
|
|
<td colspan="7" class="border px-2 py-6 text-center text-sm text-slate-500">Nessuna scheda legacy importata. Usa il comando indicato sopra per caricare l'archivio TecnoRepair.</td>
|
|
</tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="rounded-xl border bg-white p-4">
|
|
@php($selected = $this->selectedScheda)
|
|
@if(! $selected)
|
|
<div class="rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-800">
|
|
Seleziona una riga dall'elenco per aprire la scheda tecnica legacy con cliente, seriali, allegati e note operative.
|
|
</div>
|
|
@else
|
|
<div class="flex items-start justify-between gap-3">
|
|
<div>
|
|
<div class="text-lg font-semibold text-slate-900">{{ $selected->display_title }}</div>
|
|
<div class="mt-1 text-xs text-slate-500">Importata da {{ $selected->imported_from_path ?: 'sorgente sconosciuta' }}</div>
|
|
</div>
|
|
<span class="inline-flex rounded-full border px-2 py-1 text-[11px] font-medium {{ $selected->status_badge_classes }}">{{ $selected->status_label ?: 'Stato non indicato' }}</span>
|
|
</div>
|
|
|
|
<div class="mt-4 grid gap-3 sm:grid-cols-2">
|
|
<div class="rounded-lg border bg-slate-50 p-3">
|
|
<div class="text-[11px] font-semibold uppercase tracking-wide text-slate-500">Cliente</div>
|
|
<div class="mt-1 text-sm font-medium text-slate-900">{{ $selected->customer_name ?: '-' }}</div>
|
|
<div class="mt-1 text-xs text-slate-600">{{ $selected->customer_phone ?: '-' }}</div>
|
|
<div class="text-xs text-slate-600">{{ $selected->customer_phone_alt ?: '-' }}</div>
|
|
<div class="text-xs text-slate-600">{{ $selected->customer_email ?: '-' }}</div>
|
|
</div>
|
|
<div class="rounded-lg border bg-slate-50 p-3">
|
|
<div class="text-[11px] font-semibold uppercase tracking-wide text-slate-500">Prodotto</div>
|
|
<div class="mt-1 text-sm font-medium text-slate-900">{{ $selected->product_model ?: '-' }}</div>
|
|
<div class="mt-1 text-xs text-slate-600">Codice {{ $selected->product_code ?: '-' }}</div>
|
|
<div class="text-xs text-slate-600">Seriali {{ $selected->serial_label }}</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-4 rounded-lg border bg-white p-3">
|
|
<div class="text-[11px] font-semibold uppercase tracking-wide text-slate-500">Difetto segnalato</div>
|
|
<div class="mt-1 whitespace-pre-wrap text-sm text-slate-800">{{ $selected->defect_reported ?: 'Non valorizzato' }}</div>
|
|
</div>
|
|
|
|
<div class="mt-3 rounded-lg border bg-white p-3">
|
|
<div class="text-[11px] font-semibold uppercase tracking-wide text-slate-500">Riparazione / comunicazioni</div>
|
|
<div class="mt-1 whitespace-pre-wrap text-sm text-slate-800">{{ $selected->repair_description ?: 'Nessuna descrizione riparazione' }}</div>
|
|
@if($selected->communications)
|
|
<div class="mt-3 whitespace-pre-wrap rounded-md bg-slate-50 p-3 text-xs text-slate-700">{{ $selected->communications }}</div>
|
|
@endif
|
|
</div>
|
|
|
|
<div class="mt-3 rounded-lg border bg-white p-3">
|
|
<div class="text-[11px] font-semibold uppercase tracking-wide text-slate-500">Fornitore e allegati</div>
|
|
<div class="mt-1 text-sm text-slate-800">
|
|
@if($selected->fornitore)
|
|
@php($fornitoreUrl = $this->getFornitoreUrl((int) $selected->fornitore->id))
|
|
@if($fornitoreUrl)
|
|
<a href="{{ $fornitoreUrl }}" class="font-medium text-sky-700 hover:text-sky-600">{{ $selected->fornitore->ragione_sociale ?: ('Fornitore #' . $selected->fornitore->id) }}</a>
|
|
@else
|
|
{{ $selected->fornitore->ragione_sociale ?: ('Fornitore #' . $selected->fornitore->id) }}
|
|
@endif
|
|
@else
|
|
Nessun fornitore collegato
|
|
@endif
|
|
</div>
|
|
|
|
<div class="mt-3 space-y-2">
|
|
@forelse($selected->allegati as $allegato)
|
|
<div class="rounded-md border bg-slate-50 px-3 py-2 text-xs text-slate-700">
|
|
<div class="font-medium">{{ $allegato->file_name ?: 'Allegato legacy' }}</div>
|
|
<div class="text-slate-500">{{ $allegato->file_path ?: 'Percorso non disponibile' }}</div>
|
|
</div>
|
|
@empty
|
|
<div class="text-xs text-slate-500">Nessun allegato legacy indicizzato.</div>
|
|
@endforelse
|
|
</div>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</x-filament-panels::page> |