netgescon-day0/resources/views/filament/pages/fornitore/impostazioni-archivio.blade.php

115 lines
8.2 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-lg font-semibold">Impostazioni fornitore e archivio operativo</div>
<div class="text-sm text-gray-600">
@if($this->fornitore)
Qui concentriamo archivio fornitore, moduli attivabili, import TecnoRepair e collegamento Google di {{ $this->fornitore->ragione_sociale ?? ('Fornitore #' . $this->fornitore->id) }}.
@else
Seleziona un fornitore per aprire questa vista.
@endif
</div>
</div>
<div class="flex flex-wrap gap-2">
<a href="{{ $this->getSchedaFornitoreUrl() }}" class="inline-flex items-center rounded-md bg-gray-800 px-3 py-1.5 text-xs font-medium text-white hover:bg-gray-700">Scheda fornitore</a>
<a href="{{ $this->getTicketsUrl() }}" class="inline-flex items-center rounded-md bg-white px-3 py-1.5 text-xs font-medium text-gray-700 ring-1 ring-inset ring-gray-300 hover:bg-gray-50">Ticket</a>
<a href="{{ $this->getProdottiUrl() }}" class="inline-flex items-center rounded-md bg-white px-3 py-1.5 text-xs font-medium text-gray-700 ring-1 ring-inset ring-gray-300 hover:bg-gray-50">Catalogo fornitore</a>
</div>
</div>
</div>
@if($this->missingAdminContext)
<div class="rounded-xl border border-amber-300 bg-amber-50 p-4 text-sm text-amber-800">
Questa vista richiede un fornitore selezionato.
</div>
@else
<div class="grid gap-4 xl:grid-cols-[1.4fr,1fr]">
<div class="space-y-4">
<div class="rounded-xl border bg-white p-4">
<div class="text-sm font-semibold">Archivio fornitore</div>
<div class="mt-1 text-xs text-gray-500">Il fornitore ora ha una struttura archivio dedicata, parallela a quella degli stabili, pronta per rubrica, FE, prodotti, comunicazioni e import tecnici.</div>
<div class="mt-4 space-y-2 text-sm">
@foreach($archiveFolders as $row)
<div class="rounded-lg border bg-slate-50 p-3">
<div class="font-medium text-slate-900">{{ $row['label'] }}</div>
<div class="mt-1 break-all font-mono text-[11px] text-slate-600">{{ $row['path'] }}</div>
</div>
@endforeach
</div>
</div>
<div class="rounded-xl border bg-white p-4">
<div class="text-sm font-semibold">TecnoRepair MDB</div>
<div class="mt-1 text-xs text-gray-500">Puoi caricare un archivio MDB dalla pagina web oppure indicare un percorso già disponibile sul server, poi lanciare la sincronizzazione verso il fornitore.</div>
<div class="mt-4 grid gap-3 md:grid-cols-2">
<label class="block text-sm md:col-span-2">
<span class="mb-1 block font-medium">Percorso MDB attivo</span>
<input type="text" wire:model.defer="tecnorepairMdbPath" class="w-full rounded-lg border-gray-300" placeholder="/percorso/TecnoRepairDB.mdb" />
</label>
<label class="block text-sm md:col-span-2">
<span class="mb-1 block font-medium">Carica archivio MDB</span>
<input type="file" wire:model="tecnorepairMdbUpload" accept=".mdb,application/octet-stream" class="w-full rounded-lg border-gray-300 text-sm" />
</label>
</div>
<div class="mt-4 flex flex-wrap gap-2">
<x-filament::button type="button" color="gray" wire:click="saveUploadedTecnoRepairMdb">Salva MDB in archivio fornitore</x-filament::button>
<x-filament::button type="button" color="primary" wire:click="importTecnoRepairFromArchive(false)">Importa TecnoRepair</x-filament::button>
<x-filament::button type="button" color="info" wire:click="importTecnoRepairFromArchive(true)">Simula import</x-filament::button>
</div>
@if(filled($lastImportOutput))
<div class="mt-4 whitespace-pre-wrap rounded-lg border border-emerald-200 bg-emerald-50 p-3 text-xs text-emerald-900">{{ $lastImportOutput }}</div>
@endif
</div>
</div>
<div class="space-y-4">
<div class="rounded-xl border bg-white p-4">
<div class="text-sm font-semibold">Moduli fornitore</div>
<div class="mt-3 space-y-2">
@foreach($moduleRows as $row)
<div class="rounded-lg border p-3 text-sm">
<div class="flex items-start justify-between gap-3">
<div class="font-medium">{{ $row['module'] }}</div>
<span class="rounded-full bg-slate-100 px-2 py-1 text-[11px] font-semibold text-slate-700">{{ $row['status'] }}</span>
</div>
<div class="mt-1 text-xs text-slate-500">{{ $row['note'] }}</div>
</div>
@endforeach
</div>
</div>
<div class="rounded-xl border bg-white p-4">
<div class="text-sm font-semibold">Google Workspace</div>
@if($googleWorkspaceStatus)
<div class="mt-3 space-y-2 text-sm">
<div><span class="font-medium">Stato:</span> {{ $googleWorkspaceStatus['connected'] ? 'Collegato' : 'Non collegato' }}</div>
<div><span class="font-medium">Account:</span> {{ $googleWorkspaceStatus['email'] !== '' ? $googleWorkspaceStatus['email'] : '-' }}</div>
<div><span class="font-medium">Nome:</span> {{ $googleWorkspaceStatus['name'] !== '' ? $googleWorkspaceStatus['name'] : '-' }}</div>
<div><span class="font-medium">Ultimo collegamento:</span> {{ $googleWorkspaceStatus['connected_at'] !== '' ? $googleWorkspaceStatus['connected_at'] : '-' }}</div>
</div>
<div class="mt-3 flex flex-wrap gap-2">
<a href="{{ $this->getGoogleConnectUrl() }}" class="inline-flex items-center rounded-md bg-white px-3 py-1.5 text-xs font-medium text-gray-700 ring-1 ring-inset ring-gray-300 hover:bg-gray-50">Collega / aggiorna Google</a>
@if($googleWorkspaceStatus['connected'])
<form method="POST" action="{{ $this->getGoogleDisconnectUrl() }}">
@csrf
<button type="submit" class="inline-flex items-center rounded-md bg-rose-600 px-3 py-1.5 text-xs font-medium text-white hover:bg-rose-500">Scollega</button>
</form>
@endif
</div>
<div class="mt-2 text-xs text-gray-500">Questo collegamento prepara la sincronizzazione rubrica lato fornitore e l'uso dei dati anche sul cellulare tramite l'account Google già governato dal backend.</div>
@else
<div class="mt-3 text-sm text-gray-500">Contesto amministratore Google non disponibile per questo fornitore.</div>
@endif
</div>
</div>
</div>
@endif
</div>
</x-filament-panels::page>