netgescon-day0/resources/views/filament/pages/superadmin/controllo-qualita.blade.php

122 lines
7.2 KiB
PHP

<x-filament-panels::page>
<div class="space-y-4">
<div class="rounded-xl border bg-white p-4 dark:border-white/10 dark:bg-gray-900">
<div class="mb-3 text-sm font-semibold text-gray-900 dark:text-white">Scansione qualità (Filament SuperAdmin)</div>
<div class="grid grid-cols-1 gap-3 md:grid-cols-3">
<label class="text-xs text-gray-600 dark:text-gray-300">
Percorsi
<input wire:model.defer="path" type="text" class="mt-1 w-full rounded-md border-gray-300 text-sm dark:border-white/10 dark:bg-gray-800" />
</label>
<label class="text-xs text-gray-600 dark:text-gray-300">
Severità
<select wire:model.defer="severity" class="mt-1 w-full rounded-md border-gray-300 text-sm dark:border-white/10 dark:bg-gray-800">
<option value="all">Tutte</option>
<option value="critical">Critical</option>
<option value="error">Error</option>
<option value="warning">Warning</option>
<option value="info">Info</option>
</select>
</label>
<label class="text-xs text-gray-600 dark:text-gray-300">
Modulo
<select wire:model.defer="module" class="mt-1 w-full rounded-md border-gray-300 text-sm dark:border-white/10 dark:bg-gray-800">
<option value="all">Tutti</option>
<option value="gescon-import">Gescon Import</option>
<option value="stabili">Stabili</option>
<option value="contabilita-gescon">Contabilità Gescon</option>
<option value="supporto">Supporto</option>
</select>
</label>
<label class="text-xs text-gray-600 dark:text-gray-300">
Menù
<select wire:model.defer="menu" class="mt-1 w-full rounded-md border-gray-300 text-sm dark:border-white/10 dark:bg-gray-800">
<option value="all">Tutti</option>
<option value="stabili">Stabili</option>
<option value="condomini">Condomini</option>
<option value="contabilita">Contabilità</option>
<option value="supporto">Supporto</option>
<option value="gescon-import">Gescon Import</option>
</select>
</label>
<label class="text-xs text-gray-600 dark:text-gray-300">
Stabile QA
<input wire:model.defer="stabile" type="text" placeholder="es. GES00148, 148, 0021" class="mt-1 w-full rounded-md border-gray-300 text-sm dark:border-white/10 dark:bg-gray-800" />
</label>
<label class="text-xs text-gray-600 dark:text-gray-300">
Anno QA
<input wire:model.defer="anno" type="text" placeholder="es. 2025" class="mt-1 w-full rounded-md border-gray-300 text-sm dark:border-white/10 dark:bg-gray-800" />
</label>
<label class="flex items-center gap-2 self-end text-xs text-gray-700 dark:text-gray-300">
<input wire:model.defer="includeDataChecks" type="checkbox" class="rounded border-gray-300" />
Controlli integrità archivi/procedure
</label>
<div class="self-end">
<x-filament::button wire:click="runScan" icon="heroicon-o-magnifying-glass">
Avvia scansione
</x-filament::button>
</div>
</div>
</div>
<div class="grid grid-cols-2 gap-3 md:grid-cols-5">
<div class="rounded-lg border bg-white p-3 dark:border-white/10 dark:bg-gray-900">
<div class="text-[11px] text-gray-500">File scansionati</div>
<div class="text-lg font-semibold">{{ (int) ($summary['total_scanned_files'] ?? 0) }}</div>
</div>
<div class="rounded-lg border bg-white p-3 dark:border-white/10 dark:bg-gray-900">
<div class="text-[11px] text-gray-500">Problemi</div>
<div class="text-lg font-semibold">{{ (int) ($summary['total_issues'] ?? 0) }}</div>
</div>
<div class="rounded-lg border bg-white p-3 dark:border-white/10 dark:bg-gray-900">
<div class="text-[11px] text-gray-500">Critical</div>
<div class="text-lg font-semibold text-red-600">{{ (int) (($summary['by_severity']['critical'] ?? 0)) }}</div>
</div>
<div class="rounded-lg border bg-white p-3 dark:border-white/10 dark:bg-gray-900">
<div class="text-[11px] text-gray-500">Error</div>
<div class="text-lg font-semibold text-orange-600">{{ (int) (($summary['by_severity']['error'] ?? 0)) }}</div>
</div>
<div class="rounded-lg border bg-white p-3 dark:border-white/10 dark:bg-gray-900">
<div class="text-[11px] text-gray-500">Warning</div>
<div class="text-lg font-semibold text-amber-600">{{ (int) (($summary['by_severity']['warning'] ?? 0)) }}</div>
</div>
</div>
<div class="rounded-xl border bg-white p-4 dark:border-white/10 dark:bg-gray-900">
<div class="mb-3 text-sm font-semibold">Risultati</div>
<div class="mb-3 text-xs text-gray-500 dark:text-gray-400">
Filtro QA attivo: stabile <span class="font-semibold">{{ $stabile !== '' ? $stabile : 'tutti' }}</span>, anno <span class="font-semibold">{{ $anno !== '' ? $anno : 'tutti' }}</span>.
</div>
<div class="space-y-3">
@forelse($results as $fileResult)
<div class="rounded-lg border p-3 dark:border-white/10">
<div class="mb-2 text-xs font-medium text-gray-700 dark:text-gray-200">{{ $fileResult['file'] ?? '—' }}</div>
<div class="space-y-2">
@foreach(($fileResult['issues'] ?? []) as $issue)
<div class="rounded-md border-l-4 border-gray-300 bg-gray-50 p-2 text-xs dark:bg-white/5">
<div class="font-semibold">
{{ strtoupper((string)($issue['severity'] ?? 'info')) }} · {{ $issue['name'] ?? 'Issue' }}
</div>
<div class="text-gray-700 dark:text-gray-300">{{ $issue['description'] ?? '' }}</div>
@if(!empty($issue['suggestion']))
<div class="mt-1 text-gray-500">Suggerimento: {{ $issue['suggestion'] }}</div>
@endif
</div>
@endforeach
</div>
</div>
@empty
<div class="text-sm text-gray-500">Nessun risultato disponibile.</div>
@endforelse
</div>
</div>
</div>
</x-filament-panels::page>