971 lines
60 KiB
PHP
971 lines
60 KiB
PHP
<x-app-layout>
|
|
<x-slot name="header">
|
|
<div class="flex justify-between items-center">
|
|
<h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
|
|
{{ __('Dashboard Stabile') }} - {{ $stabile->denominazione }}
|
|
</h2>
|
|
<div class="flex space-x-2">
|
|
<a href="{{ route('admin.stabili.edit', $stabile) }}"
|
|
class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded transition-colors">
|
|
<i class="fas fa-edit mr-2"></i>Modifica
|
|
</a>
|
|
<a href="{{ route('admin.stabili.index') }}"
|
|
class="bg-gray-500 hover:bg-gray-700 text-white font-bold py-2 px-4 rounded transition-colors">
|
|
<i class="fas fa-arrow-left mr-2"></i>Lista
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</x-slot>
|
|
|
|
<div class="py-6">
|
|
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
|
|
|
|
{{-- KPI Dashboard --}}
|
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-4 mb-6">
|
|
{{-- Unità Immobiliari --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-4">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-home text-2xl text-blue-500"></i>
|
|
</div>
|
|
<div class="ml-3 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Unità</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">{{ $kpi['totale_unita'] ?? 0 }}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Chiavi --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-4">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-key text-2xl text-yellow-500"></i>
|
|
</div>
|
|
<div class="ml-3 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Chiavi</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">{{ $kpi['totale_chiavi'] ?? 0 }}</dd>
|
|
<dd class="text-xs text-green-600">{{ $kpi['chiavi_disponibili'] ?? 0 }} disponibili</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Fondi --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-4">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-piggy-bank text-2xl text-green-500"></i>
|
|
</div>
|
|
<div class="ml-3 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Fondi</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">{{ $kpi['totale_fondi'] ?? 0 }}</dd>
|
|
<dd class="text-xs text-green-600">€ {{ number_format($kpi['saldo_totale'] ?? 0, 0, ',', '.') }}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Contatori --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-4">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-tachometer-alt text-2xl text-purple-500"></i>
|
|
</div>
|
|
<div class="ml-3 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Contatori</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">{{ $kpi['totale_contatori'] ?? 0 }}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Tabelle Millesimali --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-4">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-table text-2xl text-indigo-500"></i>
|
|
</div>
|
|
<div class="ml-3 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Tabelle</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">{{ $kpi['totale_tabelle_millesimali'] ?? 0 }}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Tab Navigation --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="border-b border-gray-200 dark:border-gray-700">
|
|
<nav class="-mb-px flex space-x-8 px-6">
|
|
<button class="tab-button active border-blue-500 text-blue-600 whitespace-nowrap border-b-2 py-4 px-1 text-sm font-medium" data-tab="panoramica">
|
|
<i class="fas fa-chart-line mr-2"></i>Panoramica
|
|
</button>
|
|
<button class="tab-button border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 whitespace-nowrap border-b-2 py-4 px-1 text-sm font-medium" data-tab="millesimi">
|
|
<i class="fas fa-table mr-2"></i>Tabelle Millesimali
|
|
</button>
|
|
<button class="tab-button border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 whitespace-nowrap border-b-2 py-4 px-1 text-sm font-medium" data-tab="contatori">
|
|
<i class="fas fa-tachometer-alt mr-2"></i>Contatori
|
|
</button>
|
|
<button class="tab-button border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 whitespace-nowrap border-b-2 py-4 px-1 text-sm font-medium" data-tab="chiavi">
|
|
<i class="fas fa-key mr-2"></i>Chiavi
|
|
</button>
|
|
<button class="tab-button border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 whitespace-nowrap border-b-2 py-4 px-1 text-sm font-medium" data-tab="fondi">
|
|
<i class="fas fa-piggy-bank mr-2"></i>Fondi
|
|
</button>
|
|
<button class="tab-button border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 whitespace-nowrap border-b-2 py-4 px-1 text-sm font-medium" data-tab="import">
|
|
<i class="fas fa-download mr-2"></i>Import GESCON
|
|
</button>
|
|
</nav>
|
|
</div>
|
|
|
|
{{-- Tab Content --}}
|
|
<div class="p-6">
|
|
{{-- Tab Panoramica --}}
|
|
<div id="tab-panoramica" class="tab-content">
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
|
{{-- Info Generali --}}
|
|
<div>
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">
|
|
<i class="fas fa-info-circle mr-2"></i>Informazioni Generali
|
|
</h3>
|
|
<div class="bg-gray-50 dark:bg-gray-700 rounded-lg p-4">
|
|
<dl class="space-y-3">
|
|
<div class="flex justify-between">
|
|
<dt class="text-sm text-gray-600 dark:text-gray-400">Codice Stabile:</dt>
|
|
<dd class="text-sm font-medium text-gray-900 dark:text-gray-100">{{ $stabile->codice_stabile }}</dd>
|
|
</div>
|
|
<div class="flex justify-between">
|
|
<dt class="text-sm text-gray-600 dark:text-gray-400">Codice Fiscale:</dt>
|
|
<dd class="text-sm font-medium text-gray-900 dark:text-gray-100">{{ $stabile->codice_fiscale ?? '-' }}</dd>
|
|
</div>
|
|
<div class="flex justify-between">
|
|
<dt class="text-sm text-gray-600 dark:text-gray-400">Anno Costruzione:</dt>
|
|
<dd class="text-sm font-medium text-gray-900 dark:text-gray-100">{{ $stabile->anno_costruzione ?? '-' }}</dd>
|
|
</div>
|
|
<div class="flex justify-between">
|
|
<dt class="text-sm text-gray-600 dark:text-gray-400">Superficie Totale:</dt>
|
|
<dd class="text-sm font-medium text-gray-900 dark:text-gray-100">
|
|
{{ $stabile->superficie_totale ? number_format($stabile->superficie_totale, 0, ',', '.') . ' m²' : '-' }}
|
|
</dd>
|
|
</div>
|
|
<div class="flex justify-between">
|
|
<dt class="text-sm text-gray-600 dark:text-gray-400">Stato:</dt>
|
|
<dd>
|
|
<span class="px-2 py-1 text-xs rounded-full
|
|
{{ $stabile->stato === 'attivo' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800' }}">
|
|
{{ ucfirst($stabile->stato) }}
|
|
</span>
|
|
</dd>
|
|
</div>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Ubicazione --}}
|
|
<div>
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">
|
|
<i class="fas fa-map-marker-alt mr-2"></i>Ubicazione
|
|
</h3>
|
|
<div class="bg-gray-50 dark:bg-gray-700 rounded-lg p-4">
|
|
<dl class="space-y-3">
|
|
<div class="flex justify-between">
|
|
<dt class="text-sm text-gray-600 dark:text-gray-400">Indirizzo:</dt>
|
|
<dd class="text-sm font-medium text-gray-900 dark:text-gray-100">{{ $stabile->indirizzo }}</dd>
|
|
</div>
|
|
<div class="flex justify-between">
|
|
<dt class="text-sm text-gray-600 dark:text-gray-400">Città:</dt>
|
|
<dd class="text-sm font-medium text-gray-900 dark:text-gray-100">{{ $stabile->citta }}</dd>
|
|
</div>
|
|
<div class="flex justify-between">
|
|
<dt class="text-sm text-gray-600 dark:text-gray-400">CAP:</dt>
|
|
<dd class="text-sm font-medium text-gray-900 dark:text-gray-100">{{ $stabile->cap }}</dd>
|
|
</div>
|
|
<div class="flex justify-between">
|
|
<dt class="text-sm text-gray-600 dark:text-gray-400">Provincia:</dt>
|
|
<dd class="text-sm font-medium text-gray-900 dark:text-gray-100">{{ $stabile->provincia ?? '-' }}</dd>
|
|
</div>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@if($stabile->note)
|
|
<div class="mt-6">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">
|
|
<i class="fas fa-sticky-note mr-2"></i>Note
|
|
</h3>
|
|
<div class="bg-gray-50 dark:bg-gray-700 rounded-lg p-4">
|
|
<p class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->note }}</p>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
|
|
{{-- Tab Tabelle Millesimali --}}
|
|
<div id="tab-millesimi" class="tab-content hidden">
|
|
<div class="flex justify-between items-center mb-4">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
|
<i class="fas fa-table mr-2"></i>Tabelle Millesimali
|
|
</h3>
|
|
<button class="bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded"
|
|
onclick="openModalTabella()">
|
|
<i class="fas fa-plus mr-2"></i>Nuova Tabella
|
|
</button>
|
|
</div>
|
|
|
|
<div class="bg-white dark:bg-gray-800 shadow overflow-hidden sm:rounded-md">
|
|
<ul class="divide-y divide-gray-200 dark:divide-gray-700">
|
|
@forelse($stabile->tabelleMillesimali ?? [] as $tabella)
|
|
<li class="px-6 py-4">
|
|
<div class="flex items-center justify-between">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-table text-lg text-indigo-500"></i>
|
|
</div>
|
|
<div class="ml-4">
|
|
<div class="text-sm font-medium text-gray-900 dark:text-gray-100">
|
|
{{ $tabella->nome }}
|
|
</div>
|
|
<div class="text-sm text-gray-500 dark:text-gray-400">
|
|
{{ $tabella->descrizione ?? 'Nessuna descrizione' }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="flex items-center space-x-2">
|
|
<span class="px-2 py-1 text-xs rounded-full bg-blue-100 text-blue-800">
|
|
{{ $tabella->dettagliMillesimi->count() }} unità
|
|
</span>
|
|
<button class="text-blue-600 hover:text-blue-900"
|
|
onclick="viewTabella({{ $tabella->id }})">
|
|
<i class="fas fa-eye"></i>
|
|
</button>
|
|
<button class="text-green-600 hover:text-green-900"
|
|
onclick="editTabella({{ $tabella->id }})">
|
|
<i class="fas fa-edit"></i>
|
|
</button>
|
|
<button class="text-red-600 hover:text-red-900"
|
|
onclick="deleteTabella({{ $tabella->id }})">
|
|
<i class="fas fa-trash"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
@empty
|
|
<li class="px-6 py-4 text-center text-gray-500 dark:text-gray-400">
|
|
<i class="fas fa-table text-4xl mb-2"></i>
|
|
<p>Nessuna tabella millesimale configurata</p>
|
|
<p class="text-sm">Crea la prima tabella per iniziare</p>
|
|
</li>
|
|
@endforelse
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Tab Contatori --}}
|
|
<div id="tab-contatori" class="tab-content hidden">
|
|
<div class="flex justify-between items-center mb-4">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
|
<i class="fas fa-tachometer-alt mr-2"></i>Contatori e Letture
|
|
</h3>
|
|
<button class="bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded"
|
|
onclick="openModalContatore()">
|
|
<i class="fas fa-plus mr-2"></i>Nuovo Contatore
|
|
</button>
|
|
</div>
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
@forelse($stabile->contatori ?? [] as $contatore)
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-4">
|
|
<div class="flex items-center justify-between mb-3">
|
|
<h4 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
|
{{ $contatore->nome }}
|
|
</h4>
|
|
<span class="px-2 py-1 text-xs rounded-full
|
|
{{ $contatore->stato === 'attivo' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800' }}">
|
|
{{ ucfirst($contatore->stato) }}
|
|
</span>
|
|
</div>
|
|
<div class="space-y-2">
|
|
<div class="flex justify-between text-sm">
|
|
<span class="text-gray-600 dark:text-gray-400">Tipo:</span>
|
|
<span class="font-medium">{{ ucfirst($contatore->tipo) }}</span>
|
|
</div>
|
|
<div class="flex justify-between text-sm">
|
|
<span class="text-gray-600 dark:text-gray-400">Ubicazione:</span>
|
|
<span class="font-medium">{{ $contatore->ubicazione }}</span>
|
|
</div>
|
|
<div class="flex justify-between text-sm">
|
|
<span class="text-gray-600 dark:text-gray-400">Ultima lettura:</span>
|
|
<span class="font-medium">
|
|
{{ $contatore->lettureContatore->first()?->valore ?? '-' }}
|
|
{{ $contatore->unita_misura }}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="mt-4 flex space-x-2">
|
|
<button class="flex-1 bg-blue-500 hover:bg-blue-700 text-white text-xs py-1 px-2 rounded"
|
|
onclick="addLettura({{ $contatore->id }})">
|
|
<i class="fas fa-plus mr-1"></i>Lettura
|
|
</button>
|
|
<button class="bg-gray-500 hover:bg-gray-700 text-white text-xs py-1 px-2 rounded"
|
|
onclick="viewContatore({{ $contatore->id }})">
|
|
<i class="fas fa-eye"></i>
|
|
</button>
|
|
<button class="bg-green-500 hover:bg-green-700 text-white text-xs py-1 px-2 rounded"
|
|
onclick="editContatore({{ $contatore->id }})">
|
|
<i class="fas fa-edit"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@empty
|
|
<div class="col-span-full text-center text-gray-500 dark:text-gray-400 py-8">
|
|
<i class="fas fa-tachometer-alt text-4xl mb-2"></i>
|
|
<p>Nessun contatore configurato</p>
|
|
<p class="text-sm">Aggiungi il primo contatore per iniziare</p>
|
|
</div>
|
|
@endforelse
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Tab Chiavi --}}
|
|
<div id="tab-chiavi" class="tab-content hidden">
|
|
<div class="flex justify-between items-center mb-4">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
|
<i class="fas fa-key mr-2"></i>Gestione Chiavi
|
|
</h3>
|
|
<button class="bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded"
|
|
onclick="openModalChiave()">
|
|
<i class="fas fa-plus mr-2"></i>Nuova Chiave
|
|
</button>
|
|
</div>
|
|
|
|
<div class="bg-white dark:bg-gray-800 shadow overflow-hidden sm:rounded-md">
|
|
<ul class="divide-y divide-gray-200 dark:divide-gray-700">
|
|
@forelse($stabile->chiavi ?? [] as $chiave)
|
|
<li class="px-6 py-4">
|
|
<div class="flex items-center justify-between">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-key text-lg
|
|
{{ $chiave->stato === 'disponibile' ? 'text-green-500' :
|
|
($chiave->stato === 'in_uso' ? 'text-yellow-500' : 'text-red-500') }}"></i>
|
|
</div>
|
|
<div class="ml-4">
|
|
<div class="text-sm font-medium text-gray-900 dark:text-gray-100">
|
|
{{ $chiave->codice }} - {{ $chiave->descrizione }}
|
|
</div>
|
|
<div class="text-sm text-gray-500 dark:text-gray-400">
|
|
Tipo: {{ ucfirst($chiave->tipo) }}
|
|
@if($chiave->zona)
|
|
| Zona: {{ $chiave->zona }}
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="flex items-center space-x-2">
|
|
<span class="px-2 py-1 text-xs rounded-full
|
|
{{ $chiave->stato === 'disponibile' ? 'bg-green-100 text-green-800' :
|
|
($chiave->stato === 'in_uso' ? 'bg-yellow-100 text-yellow-800' : 'bg-red-100 text-red-800') }}">
|
|
{{ ucfirst(str_replace('_', ' ', $chiave->stato)) }}
|
|
</span>
|
|
@if($chiave->stato === 'disponibile')
|
|
<button class="text-blue-600 hover:text-blue-900"
|
|
onclick="assegnaChiave({{ $chiave->id }})">
|
|
<i class="fas fa-hand-paper"></i>
|
|
</button>
|
|
@elseif($chiave->stato === 'in_uso')
|
|
<button class="text-orange-600 hover:text-orange-900"
|
|
onclick="restituisciChiave({{ $chiave->id }})">
|
|
<i class="fas fa-undo"></i>
|
|
</button>
|
|
@endif
|
|
<button class="text-green-600 hover:text-green-900"
|
|
onclick="editChiave({{ $chiave->id }})">
|
|
<i class="fas fa-edit"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
@empty
|
|
<li class="px-6 py-4 text-center text-gray-500 dark:text-gray-400">
|
|
<i class="fas fa-key text-4xl mb-2"></i>
|
|
<p>Nessuna chiave registrata</p>
|
|
<p class="text-sm">Aggiungi la prima chiave per iniziare</p>
|
|
</li>
|
|
@endforelse
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Tab Fondi --}}
|
|
<div id="tab-fondi" class="tab-content hidden">
|
|
<div class="flex justify-between items-center mb-4">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
|
<i class="fas fa-piggy-bank mr-2"></i>Fondi Condominiali
|
|
</h3>
|
|
<button class="bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded"
|
|
onclick="openModalFondo()">
|
|
<i class="fas fa-plus mr-2"></i>Nuovo Fondo
|
|
</button>
|
|
</div>
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
@forelse($stabile->fondiCondominiali ?? [] as $fondo)
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-4">
|
|
<div class="flex items-center justify-between mb-3">
|
|
<h4 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
|
{{ $fondo->nome }}
|
|
</h4>
|
|
<span class="px-2 py-1 text-xs rounded-full
|
|
{{ $fondo->stato === 'attivo' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800' }}">
|
|
{{ ucfirst($fondo->stato) }}
|
|
</span>
|
|
</div>
|
|
<div class="space-y-2">
|
|
<div class="flex justify-between text-sm">
|
|
<span class="text-gray-600 dark:text-gray-400">Tipo:</span>
|
|
<span class="font-medium">{{ ucfirst($fondo->tipo) }}</span>
|
|
</div>
|
|
<div class="flex justify-between text-sm">
|
|
<span class="text-gray-600 dark:text-gray-400">Saldo:</span>
|
|
<span class="font-medium {{ $fondo->saldo_attuale >= 0 ? 'text-green-600' : 'text-red-600' }}">
|
|
€ {{ number_format($fondo->saldo_attuale, 2, ',', '.') }}
|
|
</span>
|
|
</div>
|
|
@if($fondo->obiettivo_saldo)
|
|
<div class="flex justify-between text-sm">
|
|
<span class="text-gray-600 dark:text-gray-400">Obiettivo:</span>
|
|
<span class="font-medium">€ {{ number_format($fondo->obiettivo_saldo, 2, ',', '.') }}</span>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
<div class="mt-4 flex space-x-2">
|
|
<button class="flex-1 bg-blue-500 hover:bg-blue-700 text-white text-xs py-1 px-2 rounded"
|
|
onclick="viewMovimenti({{ $fondo->id }})">
|
|
<i class="fas fa-list mr-1"></i>Movimenti
|
|
</button>
|
|
<button class="bg-green-500 hover:bg-green-700 text-white text-xs py-1 px-2 rounded"
|
|
onclick="editFondo({{ $fondo->id }})">
|
|
<i class="fas fa-edit"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@empty
|
|
<div class="col-span-full text-center text-gray-500 dark:text-gray-400 py-8">
|
|
<i class="fas fa-piggy-bank text-4xl mb-2"></i>
|
|
<p>Nessun fondo configurato</p>
|
|
<p class="text-sm">Crea il primo fondo per iniziare</p>
|
|
</div>
|
|
@endforelse
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Tab Import GESCON --}}
|
|
<div id="tab-import" class="tab-content hidden">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">
|
|
<i class="fas fa-download mr-2"></i>Import da GESCON
|
|
</h3>
|
|
|
|
<div class="bg-yellow-50 dark:bg-yellow-900 border border-yellow-200 dark:border-yellow-700 rounded-lg p-4 mb-6">
|
|
<div class="flex">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-exclamation-triangle text-yellow-400"></i>
|
|
</div>
|
|
<div class="ml-3">
|
|
<h3 class="text-sm font-medium text-yellow-800 dark:text-yellow-200">
|
|
Attenzione
|
|
</h3>
|
|
<div class="mt-2 text-sm text-yellow-700 dark:text-yellow-300">
|
|
<p>L'importazione sovrascriverà i dati esistenti. Assicurati di aver fatto un backup.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
<div class="bg-white dark:bg-gray-800 p-6 rounded-lg shadow">
|
|
<h4 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">
|
|
<i class="fas fa-home mr-2"></i>Dati Stabile
|
|
</h4>
|
|
<p class="text-sm text-gray-600 dark:text-gray-400 mb-4">
|
|
Importa i dati base dello stabile dal database GESCON
|
|
</p>
|
|
<button class="w-full bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
|
|
onclick="importStabile()">
|
|
<i class="fas fa-download mr-2"></i>Importa Dati Stabile
|
|
</button>
|
|
</div>
|
|
|
|
<div class="bg-white dark:bg-gray-800 p-6 rounded-lg shadow">
|
|
<h4 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">
|
|
<i class="fas fa-table mr-2"></i>Tabelle Millesimali
|
|
</h4>
|
|
<p class="text-sm text-gray-600 dark:text-gray-400 mb-4">
|
|
Importa le tabelle millesimali esistenti
|
|
</p>
|
|
<button class="w-full bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded"
|
|
onclick="importMillesimi()">
|
|
<i class="fas fa-download mr-2"></i>Importa Millesimi
|
|
</button>
|
|
</div>
|
|
|
|
<div class="bg-white dark:bg-gray-800 p-6 rounded-lg shadow">
|
|
<h4 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">
|
|
<i class="fas fa-users mr-2"></i>Unità e Soggetti
|
|
</h4>
|
|
<p class="text-sm text-gray-600 dark:text-gray-400 mb-4">
|
|
Importa unità immobiliari e anagrafica condòmini
|
|
</p>
|
|
<button class="w-full bg-purple-500 hover:bg-purple-700 text-white font-bold py-2 px-4 rounded"
|
|
onclick="importUnita()">
|
|
<i class="fas fa-download mr-2"></i>Importa Unità
|
|
</button>
|
|
</div>
|
|
|
|
<div class="bg-white dark:bg-gray-800 p-6 rounded-lg shadow">
|
|
<h4 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">
|
|
<i class="fas fa-euro-sign mr-2"></i>Dati Finanziari
|
|
</h4>
|
|
<p class="text-sm text-gray-600 dark:text-gray-400 mb-4">
|
|
Importa movimenti e situazione debitoria
|
|
</p>
|
|
<button class="w-full bg-orange-500 hover:bg-orange-700 text-white font-bold py-2 px-4 rounded"
|
|
onclick="importFinanziari()">
|
|
<i class="fas fa-download mr-2"></i>Importa Finanziari
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="import-progress" class="hidden mt-6">
|
|
<div class="bg-blue-50 dark:bg-blue-900 border border-blue-200 dark:border-blue-700 rounded-lg p-4">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-spinner fa-spin text-blue-400"></i>
|
|
</div>
|
|
<div class="ml-3">
|
|
<h3 class="text-sm font-medium text-blue-800 dark:text-blue-200">
|
|
Importazione in corso...
|
|
</h3>
|
|
<div class="mt-2 text-sm text-blue-700 dark:text-blue-300">
|
|
<p id="import-status">Preparazione...</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Strutture --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-building text-3xl text-purple-500"></i>
|
|
</div>
|
|
<div class="ml-5 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Strutture</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
|
@if(isset($kpi['strutture_fisiche']['palazzina']))
|
|
{{ $kpi['strutture_fisiche']['palazzina'] }} palazzine
|
|
@else
|
|
Non configurate
|
|
@endif
|
|
</dd>
|
|
<dd class="text-sm text-gray-500">
|
|
@if(isset($kpi['strutture_fisiche']['scala']))
|
|
{{ $kpi['strutture_fisiche']['scala'] }} scale
|
|
@endif
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Unità --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<div class="flex items-center">
|
|
<div class="flex-shrink-0">
|
|
<i class="fas fa-home text-3xl text-orange-500"></i>
|
|
</div>
|
|
<div class="ml-5 w-0 flex-1">
|
|
<dl>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400 truncate">Unità Immobiliari</dt>
|
|
<dd class="text-lg font-medium text-gray-900 dark:text-gray-100">{{ $stabile->numero_unita ?? 0 }}</dd>
|
|
<dd class="text-sm text-gray-500">{{ $stabile->numero_piani ?? 0 }} piani</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Menu Gestione Avanzata --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">Gestione Avanzata Stabile</h3>
|
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
|
|
|
|
{{-- Gestione Chiavi --}}
|
|
<a href="{{ route('admin.stabili.chiavi.index', $stabile) }}"
|
|
class="group relative bg-blue-50 dark:bg-blue-900/20 p-6 rounded-lg border border-blue-200 dark:border-blue-800 hover:bg-blue-100 dark:hover:bg-blue-900/40 transition-colors">
|
|
<div>
|
|
<span class="rounded-lg inline-flex p-3 bg-blue-500 text-white group-hover:bg-blue-600">
|
|
<i class="fas fa-key text-xl"></i>
|
|
</span>
|
|
</div>
|
|
<div class="mt-8">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">Gestione Chiavi</h3>
|
|
<p class="mt-2 text-sm text-gray-500 dark:text-gray-400">
|
|
Archivio chiavi con QR Code, tracking movimenti, tipologie
|
|
</p>
|
|
</div>
|
|
</a>
|
|
|
|
{{-- Fondi Condominiali --}}
|
|
<a href="{{ route('admin.stabili.fondi.index', $stabile) }}"
|
|
class="group relative bg-green-50 dark:bg-green-900/20 p-6 rounded-lg border border-green-200 dark:border-green-800 hover:bg-green-100 dark:hover:bg-green-900/40 transition-colors">
|
|
<div>
|
|
<span class="rounded-lg inline-flex p-3 bg-green-500 text-white group-hover:bg-green-600">
|
|
<i class="fas fa-piggy-bank text-xl"></i>
|
|
</span>
|
|
</div>
|
|
<div class="mt-8">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">Fondi Condominiali</h3>
|
|
<p class="mt-2 text-sm text-gray-500 dark:text-gray-400">
|
|
Gestione fondi gerarchici, ordinario, riserva, specifici
|
|
</p>
|
|
</div>
|
|
</a>
|
|
|
|
{{-- Struttura Fisica --}}
|
|
<a href="{{ route('admin.stabili.struttura.index', $stabile) }}"
|
|
class="group relative bg-purple-50 dark:bg-purple-900/20 p-6 rounded-lg border border-purple-200 dark:border-purple-800 hover:bg-purple-100 dark:hover:bg-purple-900/40 transition-colors">
|
|
<div>
|
|
<span class="rounded-lg inline-flex p-3 bg-purple-500 text-white group-hover:bg-purple-600">
|
|
<i class="fas fa-building text-xl"></i>
|
|
</span>
|
|
</div>
|
|
<div class="mt-8">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">Struttura Fisica</h3>
|
|
<p class="mt-2 text-sm text-gray-500 dark:text-gray-400">
|
|
Palazzine, scale, piani, auto-generazione unità
|
|
</p>
|
|
</div>
|
|
</a>
|
|
|
|
{{-- Gestione Classica --}}
|
|
<a href="{{ route('admin.stabili.edit', $stabile) }}"
|
|
class="group relative bg-gray-50 dark:bg-gray-900/20 p-6 rounded-lg border border-gray-200 dark:border-gray-800 hover:bg-gray-100 dark:hover:bg-gray-900/40 transition-colors">
|
|
<div>
|
|
<span class="rounded-lg inline-flex p-3 bg-gray-500 text-white group-hover:bg-gray-600">
|
|
<i class="fas fa-edit text-xl"></i>
|
|
</span>
|
|
</div>
|
|
<div class="mt-8">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">Modifica Stabile</h3>
|
|
<p class="mt-2 text-sm text-gray-500 dark:text-gray-400">
|
|
Dati anagrafici, contatti, configurazione base
|
|
</p>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium
|
|
{{ $stabile->stato === 'attivo' ? 'bg-green-100 text-green-800 dark:bg-green-800 dark:text-green-100' : 'bg-red-100 text-red-800 dark:bg-red-800 dark:text-red-100' }}">
|
|
{{ ucfirst($stabile->stato) }}
|
|
</span>
|
|
</dd>
|
|
</div>
|
|
</dl>
|
|
</div>
|
|
|
|
<div class="bg-gray-50 dark:bg-gray-700 p-4 rounded-lg">
|
|
<h4 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-3">Indirizzo</h4>
|
|
<dl class="space-y-2">
|
|
<div>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400">Indirizzo:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->indirizzo }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400">Città:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->citta }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400">CAP:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->cap }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400">Provincia:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->provincia ?? '-' }}</dd>
|
|
</div>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Note -->
|
|
@if($stabile->note)
|
|
<div class="bg-gray-50 dark:bg-gray-700 p-4 rounded-lg mb-6">
|
|
<h4 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-3">Note</h4>
|
|
<p class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->note }}</p>
|
|
</div>
|
|
@endif
|
|
|
|
<!-- Informazioni Sistema -->
|
|
<div class="bg-gray-50 dark:bg-gray-700 p-4 rounded-lg">
|
|
<h4 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-3">Informazioni Sistema</h4>
|
|
<dl class="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
<div>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400">Creato il:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->created_at->format('d/m/Y H:i') }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400">Ultimo aggiornamento:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->updated_at->format('d/m/Y H:i') }}</dd>
|
|
</div>
|
|
@if($stabile->old_id)
|
|
<div>
|
|
<dt class="text-sm font-medium text-gray-500 dark:text-gray-400">Old ID:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->old_id }}</dd>
|
|
</div>
|
|
@endif
|
|
</dl>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Informazioni Stabile Classiche --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100 mb-4">Informazioni Generali</h3>
|
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
{{-- Dati Anagrafici --}}
|
|
<div>
|
|
<h4 class="text-sm font-medium text-gray-500 dark:text-gray-400 mb-2">Dati Anagrafici</h4>
|
|
<dl class="space-y-2">
|
|
<div>
|
|
<dt class="text-xs text-gray-400">ID Stabile:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->id }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs text-gray-400">Codice Fiscale:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->codice_fiscale ?? '-' }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs text-gray-400">CF Amministratore:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->cod_fisc_amministratore ?? '-' }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs text-gray-400">Stato:</dt>
|
|
<dd class="text-sm">
|
|
<span class="px-2 py-1 text-xs rounded-full
|
|
{{ $stabile->stato === 'attivo' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800' }}">
|
|
{{ ucfirst($stabile->stato) }}
|
|
</span>
|
|
</dd>
|
|
</div>
|
|
</dl>
|
|
</div>
|
|
|
|
{{-- Indirizzo --}}
|
|
<div>
|
|
<h4 class="text-sm font-medium text-gray-500 dark:text-gray-400 mb-2">Ubicazione</h4>
|
|
<dl class="space-y-2">
|
|
<div>
|
|
<dt class="text-xs text-gray-400">Indirizzo:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->indirizzo }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs text-gray-400">Città:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->citta }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs text-gray-400">CAP:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->cap }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs text-gray-400">Provincia:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->provincia ?? '-' }}</dd>
|
|
</div>
|
|
</dl>
|
|
</div>
|
|
|
|
{{-- Info Tecniche --}}
|
|
<div>
|
|
<h4 class="text-sm font-medium text-gray-500 dark:text-gray-400 mb-2">Dati Tecnici</h4>
|
|
<dl class="space-y-2">
|
|
<div>
|
|
<dt class="text-xs text-gray-400">Anno Costruzione:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->anno_costruzione ?? '-' }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs text-gray-400">Superficie Totale:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">
|
|
{{ $stabile->superficie_totale ? number_format($stabile->superficie_totale, 0, ',', '.') . ' m²' : '-' }}
|
|
</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs text-gray-400">Ascensori:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->numero_ascensori ?? 0 }}</dd>
|
|
</div>
|
|
<div>
|
|
<dt class="text-xs text-gray-400">Garage/Box:</dt>
|
|
<dd class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->numero_garage ?? 0 }}</dd>
|
|
</div>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
|
|
@if($stabile->note)
|
|
<div class="mt-6 pt-6 border-t border-gray-200 dark:border-gray-700">
|
|
<h4 class="text-sm font-medium text-gray-500 dark:text-gray-400 mb-2">Note</h4>
|
|
<p class="text-sm text-gray-900 dark:text-gray-100">{{ $stabile->note }}</p>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Azioni Rapide --}}
|
|
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
|
|
<div class="p-6">
|
|
<div class="flex justify-between items-center">
|
|
<h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">Azioni Rapide</h3>
|
|
<div class="space-x-2">
|
|
<a href="{{ route('admin.stabili.edit', $stabile) }}"
|
|
class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded transition-colors">
|
|
<i class="fas fa-edit mr-2"></i>Modifica Stabile
|
|
</a>
|
|
<a href="{{ route('admin.stabili.index') }}"
|
|
class="bg-gray-500 hover:bg-gray-700 text-white font-bold py-2 px-4 rounded transition-colors">
|
|
<i class="fas fa-arrow-left mr-2"></i>Torna alla Lista
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Modali per CRUD operazioni --}}
|
|
@include('admin.stabili.modals.tabella-millesimale')
|
|
@include('admin.stabili.modals.contatore')
|
|
@include('admin.stabili.modals.chiave')
|
|
@include('admin.stabili.modals.fondo')
|
|
|
|
{{-- Scripts per Tab e AJAX --}}
|
|
<script>
|
|
// Tab Management
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const tabButtons = document.querySelectorAll('.tab-button');
|
|
const tabContents = document.querySelectorAll('.tab-content');
|
|
|
|
tabButtons.forEach(button => {
|
|
button.addEventListener('click', function() {
|
|
const tabId = this.getAttribute('data-tab');
|
|
|
|
// Reset all tabs
|
|
tabButtons.forEach(btn => {
|
|
btn.classList.remove('active', 'border-blue-500', 'text-blue-600');
|
|
btn.classList.add('border-transparent', 'text-gray-500');
|
|
});
|
|
|
|
tabContents.forEach(content => {
|
|
content.classList.add('hidden');
|
|
});
|
|
|
|
// Activate selected tab
|
|
this.classList.add('active', 'border-blue-500', 'text-blue-600');
|
|
this.classList.remove('border-transparent', 'text-gray-500');
|
|
|
|
document.getElementById('tab-' + tabId).classList.remove('hidden');
|
|
});
|
|
});
|
|
});
|
|
|
|
// Tabelle Millesimali
|
|
function openModalTabella(id = null) {
|
|
document.getElementById('modal-tabella').classList.remove('hidden');
|
|
if (id) {
|
|
fetch(`/admin/stabili/{{ $stabile->id }}/tabelle-millesimali/${id}`)
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
document.getElementById('tabella_nome').value = data.nome;
|
|
document.getElementById('tabella_descrizione').value = data.descrizione || '';
|
|
document.getElementById('tabella_id').value = id;
|
|
});
|
|
}
|
|
}
|
|
|
|
// Import GESCON
|
|
function importStabile() {
|
|
showImportProgress('Importazione dati stabile...');
|
|
|
|
fetch(`/admin/stabili/{{ $stabile->id }}/import/stabile`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'X-CSRF-TOKEN': '{{ csrf_token() }}'
|
|
}
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
hideImportProgress();
|
|
if (data.success) {
|
|
alert('Importazione completata con successo!');
|
|
location.reload();
|
|
} else {
|
|
alert('Errore durante l\'importazione: ' + data.message);
|
|
}
|
|
})
|
|
.catch(error => {
|
|
hideImportProgress();
|
|
alert('Errore di connessione: ' + error.message);
|
|
});
|
|
}
|
|
|
|
function showImportProgress(message) {
|
|
document.getElementById('import-progress').classList.remove('hidden');
|
|
document.getElementById('import-status').textContent = message;
|
|
}
|
|
|
|
function hideImportProgress() {
|
|
document.getElementById('import-progress').classList.add('hidden');
|
|
}
|
|
|
|
// Generic close modal function
|
|
function closeModal(modalId) {
|
|
document.getElementById(modalId).classList.add('hidden');
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
.tab-button.active {
|
|
border-color: #3B82F6;
|
|
color: #2563EB;
|
|
}
|
|
</style>
|
|
</x-app-layout> |