471 lines
33 KiB
PHP
471 lines
33 KiB
PHP
<x-filament-panels::page>
|
|
<div class="space-y-4" wire:key="amministratori-superadmin-5tabs-shell">
|
|
|
|
{{-- STICKY HEADER BANNER - IMPERSONIFICAZIONE CONTESTUALE ATTIVA --}}
|
|
@if(session('impersonator_id'))
|
|
<div class="sticky top-0 z-50 rounded-xl border border-amber-400 bg-amber-500 p-3 text-white shadow-lg flex flex-wrap items-center justify-between gap-3">
|
|
<div class="flex items-center gap-2 text-xs font-bold">
|
|
<span class="text-base">⚠️</span>
|
|
<span>MODALITÀ IMPERSONIFICAZIONE ATTIVA: Stai operando nel contesto dello studio amministrato.</span>
|
|
</div>
|
|
<a
|
|
href="{{ route('impersonate.leave') }}"
|
|
class="inline-flex items-center gap-1.5 rounded-lg bg-slate-900 px-3 py-1.5 text-xs font-bold text-white shadow hover:bg-slate-800 transition"
|
|
>
|
|
↩️ TORNA A SUPER ADMIN
|
|
</a>
|
|
</div>
|
|
@endif
|
|
|
|
{{-- BARRA PULSANTINI ICONICI COMPATTI (SENZA SCROLL ORIZZONTALE) --}}
|
|
<div class="rounded-xl border bg-white p-2.5 shadow-sm">
|
|
<div class="flex flex-wrap items-center gap-1.5">
|
|
<button
|
|
type="button"
|
|
wire:click="apriTab('elenco')"
|
|
class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-bold transition {{ $activeTab === 'elenco' ? 'bg-slate-900 text-white shadow' : 'bg-slate-100 text-slate-700 hover:bg-slate-200' }}"
|
|
>
|
|
🏢 Elenco
|
|
</button>
|
|
<button
|
|
type="button"
|
|
wire:click="apriTab('scheda')"
|
|
class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-bold transition {{ $activeTab === 'scheda' ? 'bg-slate-900 text-white shadow' : 'bg-slate-100 text-slate-700 hover:bg-slate-200' }}"
|
|
>
|
|
✏️ Modifica {{ $selectedAmministratoreId ? "(#{$selectedAmministratoreId})" : '' }}
|
|
</button>
|
|
<button
|
|
type="button"
|
|
wire:click="apriTab('stabili')"
|
|
class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-bold transition {{ $activeTab === 'stabili' ? 'bg-slate-900 text-white shadow' : 'bg-slate-100 text-slate-700 hover:bg-slate-200' }}"
|
|
>
|
|
📊 Stabili & Fornitori
|
|
</button>
|
|
<button
|
|
type="button"
|
|
wire:click="apriTab('moduli')"
|
|
class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-bold transition {{ $activeTab === 'moduli' ? 'bg-emerald-700 text-white shadow' : 'bg-emerald-50 text-emerald-800 hover:bg-emerald-100' }}"
|
|
>
|
|
🛡️ Moduli & Scadenze
|
|
</button>
|
|
<button
|
|
type="button"
|
|
wire:click="apriTab('acl')"
|
|
class="inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-bold transition {{ $activeTab === 'acl' ? 'bg-sky-700 text-white shadow' : 'bg-sky-50 text-sky-800 hover:bg-sky-100' }}"
|
|
>
|
|
🔑 Matrice ACL
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- TAB 1: 🏢 ELENCO AMMINISTRATORI --}}
|
|
@if($activeTab === 'elenco')
|
|
<div class="rounded-xl border bg-white p-4 shadow-sm">
|
|
<div class="mb-3 flex items-center justify-between">
|
|
<div>
|
|
<h2 class="text-base font-bold text-slate-900">Amministratori Stabili Censiti</h2>
|
|
<p class="text-xs text-slate-500">Cliccando su ✏️ Modifica su qualunque riga, il sistema seleziona l'amministratore e passa automagicamente al TAB 2.</p>
|
|
</div>
|
|
</div>
|
|
{{ $this->table }}
|
|
</div>
|
|
@endif
|
|
|
|
{{-- TAB 2: ✏️ SCHEDA DETTAGLIO & EDITING INLINE --}}
|
|
@if($activeTab === 'scheda')
|
|
@if($selectedAmministratoreId && !empty($editForm))
|
|
<div class="rounded-xl border border-slate-300 bg-white p-5 shadow-md">
|
|
<div class="mb-4 flex flex-wrap items-center justify-between gap-3 border-b pb-3">
|
|
<div class="flex items-center gap-3">
|
|
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-slate-900 text-white font-bold text-lg">
|
|
#{{ $editForm['id'] ?? '' }}
|
|
</div>
|
|
<div>
|
|
<h3 class="text-lg font-bold text-slate-900">
|
|
SCHEDA DETTAGLIO: {{ strtoupper($editForm['cognome'] ?? '') }} {{ strtoupper($editForm['nome'] ?? '') }}
|
|
</h3>
|
|
<div class="flex items-center gap-2 text-xs text-slate-600">
|
|
<span>Codice Univoco: <strong class="font-mono text-slate-900">{{ $editForm['codice_univoco'] ?? '-' }}</strong></span>
|
|
<span>•</span>
|
|
<span>Studio: <strong>{{ $editForm['denominazione_studio'] ?? '-' }}</strong></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="flex flex-wrap gap-2">
|
|
<button
|
|
type="button"
|
|
wire:click="impersonaSelected"
|
|
class="inline-flex items-center gap-1.5 rounded-lg bg-amber-500 px-3 py-1.5 text-xs font-bold text-white hover:bg-amber-600 shadow"
|
|
>
|
|
⚡ IMPERSONA SENZA PASSWORD
|
|
</button>
|
|
<button
|
|
type="button"
|
|
wire:click="inviaCredenzialiSelected"
|
|
class="inline-flex items-center gap-1.5 rounded-lg bg-sky-600 px-3 py-1.5 text-xs font-bold text-white hover:bg-sky-500 shadow"
|
|
>
|
|
📧 INVIA CREDIENZIALI
|
|
</button>
|
|
<button
|
|
type="button"
|
|
wire:click="resetPasswordSelected"
|
|
class="inline-flex items-center gap-1.5 rounded-lg bg-slate-700 px-3 py-1.5 text-xs font-bold text-white hover:bg-slate-600 shadow"
|
|
>
|
|
🔑 RESET PASSWORD
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- FORM INPUTS IN-PLACE --}}
|
|
<div class="grid grid-cols-1 gap-4 md:grid-cols-3 text-xs">
|
|
<div>
|
|
<label class="block font-semibold text-slate-700">Nome</label>
|
|
<input type="text" wire:model="editForm.nome" class="mt-1 w-full rounded-md border-slate-300 text-sm focus:border-slate-800 focus:ring-slate-800">
|
|
</div>
|
|
<div>
|
|
<label class="block font-semibold text-slate-700">Cognome</label>
|
|
<input type="text" wire:model="editForm.cognome" class="mt-1 w-full rounded-md border-slate-300 text-sm focus:border-slate-800 focus:ring-slate-800">
|
|
</div>
|
|
<div>
|
|
<label class="block font-semibold text-slate-700">Denominazione Studio</label>
|
|
<input type="text" wire:model="editForm.denominazione_studio" class="mt-1 w-full rounded-md border-slate-300 text-sm focus:border-slate-800 focus:ring-slate-800">
|
|
</div>
|
|
|
|
<div>
|
|
<label class="block font-semibold text-slate-700">Codice Fiscale Studio</label>
|
|
<input type="text" wire:model="editForm.codice_fiscale_studio" class="mt-1 w-full rounded-md border-slate-300 text-sm font-mono focus:border-slate-800 focus:ring-slate-800">
|
|
</div>
|
|
<div>
|
|
<label class="block font-semibold text-slate-700">Partita IVA Studio</label>
|
|
<input type="text" wire:model="editForm.partita_iva" class="mt-1 w-full rounded-md border-slate-300 text-sm font-mono focus:border-slate-800 focus:ring-slate-800">
|
|
</div>
|
|
<div>
|
|
<label class="block font-semibold text-slate-700">Email Login Studio</label>
|
|
<input type="email" wire:model="editForm.user_email" class="mt-1 w-full rounded-md border-slate-300 text-sm focus:border-slate-800 focus:ring-slate-800">
|
|
</div>
|
|
|
|
<div class="md:col-span-2">
|
|
<label class="block font-semibold text-slate-700">Indirizzo Studio</label>
|
|
<input type="text" wire:model="editForm.indirizzo_studio" class="mt-1 w-full rounded-md border-slate-300 text-sm focus:border-slate-800 focus:ring-slate-800">
|
|
</div>
|
|
<div>
|
|
<label class="block font-semibold text-slate-700">Città / CAP / PR</label>
|
|
<div class="mt-1 flex gap-2">
|
|
<input type="text" wire:model="editForm.citta_studio" placeholder="Città" class="w-1/2 rounded-md border-slate-300 text-sm">
|
|
<input type="text" wire:model="editForm.cap_studio" placeholder="CAP" class="w-1/4 rounded-md border-slate-300 text-sm">
|
|
<input type="text" wire:model="editForm.provincia_studio" placeholder="PR" class="w-1/4 rounded-md border-slate-300 text-sm">
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="block font-semibold text-slate-700">Telefono Studio</label>
|
|
<input type="text" wire:model="editForm.telefono_studio" class="mt-1 w-full rounded-md border-slate-300 text-sm focus:border-slate-800 focus:ring-slate-800">
|
|
</div>
|
|
<div>
|
|
<label class="block font-semibold text-slate-700">PEC Studio</label>
|
|
<input type="email" wire:model="editForm.pec_studio" class="mt-1 w-full rounded-md border-slate-300 text-sm focus:border-slate-800 focus:ring-slate-800">
|
|
</div>
|
|
<div>
|
|
<label class="block font-semibold text-slate-700">Stato Studio</label>
|
|
<div class="mt-2 flex items-center gap-2">
|
|
<input type="checkbox" wire:model="editForm.attivo" id="chk-attivo" class="rounded border-slate-300 text-slate-800 focus:ring-slate-800">
|
|
<label for="chk-attivo" class="text-xs text-slate-700">Studio Attivo & Abilitato ad Import Stabili</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- PERCORSI ARCHIVIO TENANT CANONICI --}}
|
|
<div class="mt-5 rounded-lg border border-slate-200 bg-slate-900 p-3 text-xs text-slate-200">
|
|
<div class="font-bold text-amber-400 mb-1">PERCORSI ARCHIVIO TENANT & BACKUP DEDICATO:</div>
|
|
<div class="font-mono space-y-1">
|
|
<div>• Cartella Stabile: <span class="text-emerald-400">storage/app/private/amministratori/{{ $editForm['codice_univoco'] ?? '00000001' }}/</span></div>
|
|
<div>• Documenti: <span class="text-emerald-400">storage/app/private/amministratori/{{ $editForm['codice_univoco'] ?? '00000001' }}/documenti/</span></div>
|
|
<div>• Backups SQLite: <span class="text-emerald-400">storage/app/private/amministratori/{{ $editForm['codice_univoco'] ?? '00000001' }}/database/backups/</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- PULSANTI DI AZIONE --}}
|
|
<div class="mt-5 flex flex-wrap items-center justify-between gap-3 border-t pt-4">
|
|
<button
|
|
type="button"
|
|
wire:click="salvaSchedaInPlace"
|
|
class="inline-flex items-center rounded-lg bg-emerald-700 px-4 py-2 text-xs font-bold text-white hover:bg-emerald-600 shadow"
|
|
>
|
|
✓ SALVA SCHEDA AMMINISTRATORE
|
|
</button>
|
|
<button
|
|
type="button"
|
|
wire:click="impersonaSelected"
|
|
class="inline-flex items-center gap-1 rounded-lg bg-amber-500 px-4 py-2 text-xs font-bold text-white hover:bg-amber-600 shadow"
|
|
>
|
|
⚡ IMPERSONA STUDIO {{ strtoupper($editForm['cognome'] ?? '') }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
@else
|
|
<div class="rounded-xl border bg-white p-8 text-center text-slate-500 text-sm">
|
|
Nessun amministratore selezionato. Seleziona una riga nel TAB 1 per aprire la scheda qui.
|
|
</div>
|
|
@endif
|
|
@endif
|
|
|
|
{{-- TAB 3: 📊 STABILI & ARCHIVIO FORNITORI RISERVATI DELLO STUDIO --}}
|
|
@if($activeTab === 'stabili')
|
|
<div class="rounded-xl border border-slate-300 bg-white p-5 shadow-sm space-y-5">
|
|
<div class="border-b pb-3">
|
|
<h3 class="text-base font-bold text-slate-900">
|
|
STABILI E ARCHIVIO FORNITORI RISERVATI DELLO STUDIO #{{ $selectedAmministratoreId }} ({{ strtoupper($editForm['cognome'] ?? 'TORDINI') }} {{ strtoupper($editForm['nome'] ?? 'CECILIA') }})
|
|
</h3>
|
|
<p class="text-xs text-slate-500">Stabili condominiali gestiti ed archivio ditte accreditati riservati per lo studio.</p>
|
|
</div>
|
|
|
|
{{-- TABELLA STABILI CONDOMINIALI GESTITI DYNAMICAMENTE --}}
|
|
@php
|
|
$stabiliReal = \App\Models\Stabile::query()->orderBy('codice_stabile')->get();
|
|
@endphp
|
|
<div>
|
|
<h4 class="text-xs font-bold uppercase text-slate-700 mb-2">🏢 Stabili Condominiali Gestiti dallo Studio ({{ count($stabiliReal) }} Stabili):</h4>
|
|
<div class="rounded-lg border overflow-hidden">
|
|
<table class="w-full text-left text-xs">
|
|
<thead class="bg-slate-100 font-bold text-slate-800 border-b">
|
|
<tr>
|
|
<th class="p-2.5">COD.</th>
|
|
<th class="p-2.5">DENOMINAZIONE STABILE</th>
|
|
<th class="p-2.5">CODICE FISCALE</th>
|
|
<th class="p-2.5">STUDIO ASSEGNATO</th>
|
|
<th class="p-2.5">BANCA PRINCIPALE & IBAN</th>
|
|
<th class="p-2.5">CASSE (anagr_casse)</th>
|
|
<th class="p-2.5 text-right">AZIONI SUPERADMIN</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="divide-y font-mono">
|
|
@php
|
|
$tuttiAmministratori = \App\Models\Amministratore::query()->orderBy('id')->get();
|
|
@endphp
|
|
@foreach($stabiliReal as $st)
|
|
@php
|
|
$adv = is_array($st->configurazione_avanzata) ? $st->configurazione_avanzata : [];
|
|
$casse = $adv['conti_correnti']['anagr_casse'] ?? [];
|
|
$currentAmm = $tuttiAmministratori->firstWhere('id', $st->amministratore_id);
|
|
@endphp
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-2.5 font-bold text-slate-900">{{ $st->codice_stabile }}</td>
|
|
<td class="p-2.5 font-sans font-semibold text-slate-800">{{ $st->denominazione }}</td>
|
|
<td class="p-2.5 text-slate-700">{{ $st->codice_fiscale ?: '-' }}</td>
|
|
<td class="p-2.5 font-sans">
|
|
<span class="inline-flex items-center rounded bg-slate-900 px-2 py-0.5 text-[11px] font-bold text-white">
|
|
#{{ $st->amministratore_id ?? 'N/A' }} — {{ $currentAmm?->denominazione_studio ?: ($currentAmm?->nome . ' ' . $currentAmm?->cognome ?: 'Studio Non Assegnato') }}
|
|
</span>
|
|
</td>
|
|
<td class="p-2.5 text-slate-700">
|
|
@if($st->iban_principale)
|
|
<span class="font-bold text-slate-900">{{ $st->banca_principale ?: 'Banca' }}:</span> {{ $st->iban_principale }}
|
|
@else
|
|
<span class="text-slate-400">Nessun IBAN registrato</span>
|
|
@endif
|
|
</td>
|
|
<td class="p-2.5 font-sans">
|
|
@if(!empty($casse))
|
|
<div class="flex flex-wrap gap-1">
|
|
@foreach($casse as $c)
|
|
<span class="inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-bold font-mono {{ $c['codice'] === 'CCB' ? 'bg-sky-100 text-sky-800' : ($c['codice'] === 'CCP' ? 'bg-amber-100 text-amber-800' : 'bg-slate-200 text-slate-700') }}" title="{{ $c['descrizione'] }}">
|
|
{{ $c['codice'] }}
|
|
</span>
|
|
@endforeach
|
|
</div>
|
|
@else
|
|
<span class="text-slate-400 text-[11px]">-</span>
|
|
@endif
|
|
</td>
|
|
<td class="p-2.5 font-sans text-right">
|
|
<select
|
|
wire:change="spostaStabile({{ $st->id }}, $event.target.value)"
|
|
class="rounded-md border border-slate-300 bg-amber-50 text-slate-900 font-bold text-xs py-1 px-2 focus:ring-2 focus:ring-amber-500 shadow-xs"
|
|
>
|
|
<option value="">🔄 Sposta Stabile a...</option>
|
|
@foreach($tuttiAmministratori as $ammOption)
|
|
<option value="{{ $ammOption->id }}" {{ $st->amministratore_id == $ammOption->id ? 'selected' : '' }}>
|
|
Studio #{{ $ammOption->id }} - {{ $ammOption->denominazione_studio ?: ($ammOption->nome . ' ' . $ammOption->cognome) }}
|
|
</option>
|
|
@endforeach
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- ARCHIVIO FORNITORI RISERVATI --}}
|
|
<div class="rounded-lg border bg-slate-50 p-4 text-xs space-y-2">
|
|
<h4 class="font-bold text-slate-800">🛠️ Fornitori Accreditati Riservati per lo Studio:</h4>
|
|
<p class="text-slate-600">
|
|
Totale <strong>370 fornitori</strong> censiti ed isolati in via esclusiva per lo studio di Cecilia Tordini (#13).
|
|
Il matching delle Fatture Elettroniche (FE) avviene tramite il Codice Fiscale dello stabile e la P.IVA del fornitore.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
{{-- TAB 4: 🛡️ GESTIONE MODULI ABILITATI E DATE DI SCADENZA LICENZA STUDIO #13 --}}
|
|
@if($activeTab === 'moduli')
|
|
<div class="rounded-xl border border-emerald-300 bg-white p-5 shadow-sm space-y-5">
|
|
<div class="flex items-center justify-between border-b pb-3">
|
|
<div>
|
|
<h3 class="text-base font-bold text-emerald-900">GESTIONE MODULI ABILITATI E DATE DI SCADENZA LICENZA STUDIO #{{ $selectedAmministratoreId }}</h3>
|
|
<p class="text-xs text-slate-500">Pannello CRUD SuperAdmin per attivare/disattivare i singoli moduli e rinnovare le licenze di studio.</p>
|
|
</div>
|
|
<span class="rounded-full bg-emerald-100 px-3 py-1 text-xs font-bold text-emerald-800">
|
|
SuperAdmin License Engine
|
|
</span>
|
|
</div>
|
|
|
|
<div class="rounded-lg border overflow-hidden">
|
|
<table class="w-full text-left text-xs">
|
|
<thead class="bg-slate-100 font-bold text-slate-800 border-b">
|
|
<tr>
|
|
<th class="p-3">MODULO / ABILITAZIONE APPLICATIVA</th>
|
|
<th class="p-3">STATO</th>
|
|
<th class="p-3">DATA SCADENZA</th>
|
|
<th class="p-3">AZIONI SUPERADMIN</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="divide-y">
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-semibold text-slate-900">📩 Scarico FE Cassetto Fiscale & XML SDI</td>
|
|
<td class="p-3"><span class="rounded-full bg-emerald-100 px-2.5 py-0.5 font-bold text-emerald-800">Attivo</span></td>
|
|
<td class="p-3 font-mono font-bold text-slate-700">31/12/2027</td>
|
|
<td class="p-3 flex gap-2">
|
|
<button type="button" class="rounded bg-slate-800 px-2 py-1 text-white font-bold">Rinnova</button>
|
|
<button type="button" class="rounded bg-rose-100 text-rose-700 px-2 py-1 font-bold">Disabilita</button>
|
|
</td>
|
|
</tr>
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-semibold text-slate-900">🏦 Integrazione Multi-Banca & Import CBI</td>
|
|
<td class="p-3"><span class="rounded-full bg-emerald-100 px-2.5 py-0.5 font-bold text-emerald-800">Attivo</span></td>
|
|
<td class="p-3 font-mono font-bold text-slate-700">31/12/2027</td>
|
|
<td class="p-3 flex gap-2">
|
|
<button type="button" class="rounded bg-slate-800 px-2 py-1 text-white font-bold">Rinnova</button>
|
|
<button type="button" class="rounded bg-rose-100 text-rose-700 px-2 py-1 font-bold">Disabilita</button>
|
|
</td>
|
|
</tr>
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-semibold text-slate-900">📑 Visure Catastali Sister & Planimetrie</td>
|
|
<td class="p-3"><span class="rounded-full bg-emerald-100 px-2.5 py-0.5 font-bold text-emerald-800">Attivo</span></td>
|
|
<td class="p-3 font-mono font-bold text-slate-700">30/06/2027</td>
|
|
<td class="p-3 flex gap-2">
|
|
<button type="button" class="rounded bg-slate-800 px-2 py-1 text-white font-bold">Rinnova</button>
|
|
<button type="button" class="rounded bg-rose-100 text-rose-700 px-2 py-1 font-bold">Disabilita</button>
|
|
</td>
|
|
</tr>
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-semibold text-slate-900">📞 Integrazione Centralino PBX / CTI</td>
|
|
<td class="p-3"><span class="rounded-full bg-slate-200 px-2.5 py-0.5 font-bold text-slate-600">Disabilitato</span></td>
|
|
<td class="p-3 font-mono text-slate-400">--/--/----</td>
|
|
<td class="p-3">
|
|
<button type="button" class="rounded bg-emerald-700 px-2.5 py-1 text-white font-bold">Attiva Modulo</button>
|
|
</td>
|
|
</tr>
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-semibold text-slate-900">🔄 Pipeline Importazione Legacy MDB Gescon (import-gescon)</td>
|
|
<td class="p-3"><span class="rounded-full bg-emerald-100 px-2.5 py-0.5 font-bold text-emerald-800">Attivo</span></td>
|
|
<td class="p-3 font-mono font-bold text-slate-700">31/12/2026</td>
|
|
<td class="p-3 flex gap-2">
|
|
<button type="button" class="rounded bg-slate-800 px-2 py-1 text-white font-bold">Rinnova Permesso</button>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="pt-3 border-t">
|
|
<button type="button" class="rounded-lg bg-emerald-800 px-4 py-2 text-white text-xs font-bold shadow">
|
|
✓ SALVA CONFIGURAZIONE MODULI & SCADENZE
|
|
</button>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
{{-- TAB 5: 🔑 CONFIGURAZIONE ACL PERMESSI E VISIBILITÀ MENÙ DI SISTEMA PER STUDIO #13 --}}
|
|
@if($activeTab === 'acl')
|
|
<div class="rounded-xl border border-sky-300 bg-white p-5 shadow-sm space-y-5">
|
|
<div class="flex items-center justify-between border-b pb-3">
|
|
<div>
|
|
<h3 class="text-base font-bold text-sky-900">CONFIGURAZIONE ACL PERMESSI E VISIBILITÀ MENÙ DI SISTEMA PER STUDIO #{{ $selectedAmministratoreId }}</h3>
|
|
<p class="text-xs text-slate-500">Matrice permessi modulari (Spatie ACL su DB PostgreSQL / MySQL) per definire visibilità ed accessi.</p>
|
|
</div>
|
|
<span class="rounded-full bg-sky-100 px-3 py-1 text-xs font-bold text-sky-800">
|
|
PostgreSQL ACL Engine
|
|
</span>
|
|
</div>
|
|
|
|
<div class="rounded-lg border overflow-hidden">
|
|
<table class="w-full text-left text-xs">
|
|
<thead class="bg-slate-100 font-bold text-slate-800 border-b">
|
|
<tr>
|
|
<th class="p-3">MENÙ / SEZIONE DI SISTEMA</th>
|
|
<th class="p-3 text-center">LETTURA</th>
|
|
<th class="p-3 text-center">MODIFICA</th>
|
|
<th class="p-3 text-center">CANCELLAZIONE</th>
|
|
<th class="p-3">PERMESSO SPATIE REGISTRATO</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="divide-y font-mono">
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-sans font-bold text-slate-900">🏢 Anagrafica Stabili & Unità Immobiliare</td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 font-mono text-slate-700">manage-stabili</td>
|
|
</tr>
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-sans font-bold text-slate-900">👥 Condomini, Inquilini & Comproprietà</td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 font-mono text-slate-700">manage-condomini</td>
|
|
</tr>
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-sans font-bold text-slate-900">🛠️ Anagrafica Fornitori Accreditati</td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 font-mono text-slate-700">manage-fornitori</td>
|
|
</tr>
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-sans font-bold text-slate-900">📄 Fatture Elettroniche & Registri</td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 font-mono text-slate-700">manage-fe</td>
|
|
</tr>
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-sans font-bold text-slate-900">🏛️ Tabelle Millesimali & Voci di Spesa</td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 font-mono text-slate-700">manage-tabelle</td>
|
|
</tr>
|
|
<tr class="hover:bg-slate-50">
|
|
<td class="p-3 font-sans font-bold text-slate-900">🔄 Modulo Importazione Legacy MDB (import-gescon)</td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" checked class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 text-center"><input type="checkbox" class="rounded border-slate-300 text-sky-600 focus:ring-sky-500"></td>
|
|
<td class="p-3 font-mono text-slate-700">import-gescon</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="pt-3 border-t">
|
|
<button type="button" class="rounded-lg bg-sky-800 px-4 py-2 text-white text-xs font-bold shadow">
|
|
✓ AGGIORNA E SALVA MATRICE PERMESSI ACL
|
|
</button>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
</div>
|
|
</x-filament-panels::page>
|