netgescon-master/resources/views/admin/stabili/create.blade.php

809 lines
44 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@extends('admin.layouts.netgescon')
@section('title', isset($stabile) ? 'Modifica Stabile' : 'Nuovo Stabile')
@section('page-title', isset($stabile) ? 'Modifica Stabile' : 'Nuovo Stabile')
@section('breadcrumb')
<li class="text-gray-600">
<a href="{{ route('admin.stabili.index') }}" class="hover:text-blue-600">
<i class="fas fa-building mr-2"></i>
Stabili
</a>
</li>
@if(isset($stabile))
<li class="text-gray-600">
<i class="fas fa-chevron-right mx-2"></i>
<a href="{{ route('admin.stabili.show', $stabile) }}" class="hover:text-blue-600">
{{ Str::limit($stabile->denominazione, 30) }}
</a>
</li>
<li class="text-gray-600">
<i class="fas fa-chevron-right mx-2"></i>
Modifica
</li>
@else
<li class="text-gray-600">
<i class="fas fa-chevron-right mx-2"></i>
Nuovo Stabile
</li>
@endif
@endsection
@section('content')
<div class="space-y-6">
<!-- Header -->
<div class="flex justify-between items-center">
<div>
<h1 class="text-2xl font-bold text-gray-900">
@if(isset($stabile))
Modifica Stabile
@else
Nuovo Stabile
@endif
</h1>
<p class="text-gray-600 mt-1">
@if(isset($stabile))
Modifica i dati di: {{ $stabile->denominazione }}
@else
Compila tutti i campi per aggiungere un nuovo condominio al sistema
@endif
</p>
</div>
<div class="flex space-x-3">
@if(isset($stabile))
<a href="{{ route('admin.stabili.show', $stabile) }}"
class="netgescon-btn netgescon-btn-secondary">
<i class="fas fa-eye mr-2"></i>
Visualizza
</a>
@endif
<a href="{{ route('admin.stabili.index') }}"
class="netgescon-btn netgescon-btn-secondary">
<i class="fas fa-arrow-left mr-2"></i>
Torna alla Lista
</a>
</div>
</div>
<!-- Form Unificato -->
<div class="bg-white rounded-lg shadow-sm border">
<form method="POST"
action="{{ isset($stabile) ? route('admin.stabili.update', $stabile) : route('admin.stabili.store') }}"
class="space-y-6">
@csrf
@if(isset($stabile))
@method('PUT')
@endif
<!-- Tabs Navigation -->
<div class="border-b border-gray-200 px-6 pt-6">
<nav class="-mb-px flex space-x-8" aria-label="Tabs" role="tablist">
<button type="button" class="netgescon-tab-btn active" data-tab="dati-generali" role="tab">
<i class="fas fa-info-circle mr-2"></i>
Dati Generali
</button>
<button type="button" class="netgescon-tab-btn" data-tab="palazzine" role="tab">
<i class="fas fa-building mr-2"></i>
Palazzine
</button>
<button type="button" class="netgescon-tab-btn" data-tab="dati-bancari" role="tab">
<i class="fas fa-university mr-2"></i>
Dati Bancari
</button>
<button type="button" class="netgescon-tab-btn" data-tab="tabelle-millesimali" role="tab">
<i class="fas fa-table mr-2"></i>
Tabelle Millesimali
</button>
@if(isset($stabile))
<button type="button" class="netgescon-tab-btn" data-tab="unita-immobiliari" role="tab">
<i class="fas fa-home mr-2"></i>
Unità Immobiliari
</button>
<button type="button" class="netgescon-tab-btn" data-tab="gestione-documentale" role="tab">
<i class="fas fa-folder-open mr-2"></i>
Gestione Documentale
</button>
@endif
</nav>
</div>
<!-- Tab Content -->
<div class="px-6 pb-6">
<!-- Dati Generali -->
<div id="dati-generali" class="netgescon-tab-content active">
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<!-- Sezione Identificazione -->
<div class="md:col-span-2">
<h4 class="text-lg font-semibold text-gray-900 mb-4 border-b pb-2">
<i class="fas fa-id-card text-blue-600 mr-2"></i>
Dati Identificativi
</h4>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Denominazione Stabile <span class="text-red-500">*</span>
</label>
<input type="text" name="denominazione" required
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Nome del condominio"
value="{{ old('denominazione', $stabile->denominazione ?? '') }}">
@error('denominazione')
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
@enderror
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Codice Stabile <span class="text-red-500">*</span>
</label>
<input type="text" name="codice_stabile" required
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Codice identificativo univoco"
value="{{ old('codice_stabile', $stabile->codice_stabile ?? '') }}">
@error('codice_stabile')
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
@enderror
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Tipo Stabile</label>
<select name="tipo_stabile"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
<option value="">Seleziona tipo</option>
<option value="residenziale" {{ old('tipo_stabile', $stabile->tipo_stabile ?? '') == 'residenziale' ? 'selected' : '' }}>Residenziale</option>
<option value="commerciale" {{ old('tipo_stabile', $stabile->tipo_stabile ?? '') == 'commerciale' ? 'selected' : '' }}>Commerciale</option>
<option value="misto" {{ old('tipo_stabile', $stabile->tipo_stabile ?? '') == 'misto' ? 'selected' : '' }}>Misto</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Data Costruzione</label>
<input type="date" name="data_costruzione"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
value="{{ old('data_costruzione', $stabile->data_costruzione ?? '') }}">
</div>
<!-- Sezione Indirizzo -->
<div class="md:col-span-2 mt-6">
<h4 class="text-lg font-semibold text-gray-900 mb-4 border-b pb-2">
<i class="fas fa-map-marker-alt text-green-600 mr-2"></i>
Indirizzo Completo
</h4>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Via/Piazza <span class="text-red-500">*</span>
</label>
<input type="text" name="indirizzo" required
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Via/Piazza e numero civico"
value="{{ old('indirizzo', $stabile->indirizzo ?? '') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">CAP</label>
<input type="text" name="cap"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="00000"
maxlength="5"
value="{{ old('cap', $stabile->cap ?? '') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Città <span class="text-red-500">*</span>
</label>
<input type="text" name="citta" required
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Nome della città"
value="{{ old('citta', $stabile->citta ?? '') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Provincia</label>
<input type="text" name="provincia"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="XX"
maxlength="2"
value="{{ old('provincia', $stabile->provincia ?? '') }}">
</div>
<!-- Sezione Dati Catastali -->
<div class="md:col-span-2 mt-6">
<h4 class="text-lg font-semibold text-gray-900 mb-4 border-b pb-2">
<i class="fas fa-file-alt text-purple-600 mr-2"></i>
Dati Catastali
</h4>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Foglio</label>
<input type="text" name="foglio"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Foglio catastale"
value="{{ old('foglio', $stabile->foglio ?? '') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Particella</label>
<input type="text" name="particella"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Particella catastale"
value="{{ old('particella', $stabile->particella ?? '') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Subalterno</label>
<input type="text" name="subalterno"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Subalterno catastale"
value="{{ old('subalterno', $stabile->subalterno ?? '') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Codice Fiscale</label>
<input type="text" name="codice_fiscale"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Codice fiscale condominio"
value="{{ old('codice_fiscale', $stabile->codice_fiscale ?? '') }}">
</div>
<div class="md:col-span-2">
<label class="block text-sm font-medium text-gray-700 mb-2">Note</label>
<textarea name="note" rows="3"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Note aggiuntive sul condominio">{{ old('note', $stabile->note ?? '') }}</textarea>
</div>
</div>
</div>
<!-- Palazzine -->
<div id="palazzine" class="netgescon-tab-content hidden">
<div class="space-y-6">
<div class="flex justify-between items-center">
<h4 class="text-lg font-semibold text-gray-900">
<i class="fas fa-building text-blue-600 mr-2"></i>
Gestione Palazzine
</h4>
<button type="button" onclick="aggiungiPalazzina()"
class="bg-green-600 hover:bg-green-700 text-white px-4 py-2 rounded-lg flex items-center space-x-2">
<i class="fas fa-plus"></i>
<span>Aggiungi Palazzina</span>
</button>
</div>
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4">
<p class="text-sm text-blue-800">
<i class="fas fa-info-circle mr-2"></i>
<strong>Gerarchia:</strong> STABILE PALAZZINE SCALE INTERNI/LOCALI<br>
Ogni palazzina rappresenta un edificio separato del condominio.
Dopo la creazione, le unità immobiliari verranno generate automaticamente.
</p>
</div>
<!-- Container per le palazzine -->
<div id="palazzine-container">
<!-- Palazzina template che verrà clonata -->
<div class="palazzina-item bg-white border border-gray-200 rounded-lg p-6" data-index="0">
<div class="flex justify-between items-start mb-4">
<h5 class="text-md font-semibold text-gray-800">Palazzina 1</h5>
<button type="button" onclick="rimuoviPalazzina(0)"
class="text-red-600 hover:text-red-800 hidden">
<i class="fas fa-trash"></i>
</button>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Nome Palazzina <span class="text-red-500">*</span>
</label>
<input type="text" name="palazzine[0][nome]" required
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="es: Via Roma 15"
value="Palazzina A">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Codice <span class="text-red-500">*</span>
</label>
<input type="text" name="palazzine[0][codice]" required
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="A"
value="A">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Numero Scale <span class="text-red-500">*</span>
</label>
<input type="number" name="palazzine[0][numero_scale]" required min="1" max="5"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
value="1"
onchange="aggiornaUnitaPalazzina(0)">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Numero Piani <span class="text-red-500">*</span>
</label>
<input type="number" name="palazzine[0][numero_piani]" required min="1" max="20"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
value="3"
onchange="aggiornaUnitaPalazzina(0)">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Unità per Piano <span class="text-red-500">*</span>
</label>
<input type="number" name="palazzine[0][unita_per_piano]" required min="1" max="10"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
value="2"
onchange="aggiornaUnitaPalazzina(0)">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Tipo Palazzina</label>
<select name="palazzine[0][tipo]"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
<option value="principale" selected>Principale</option>
<option value="secondaria">Secondaria</option>
<option value="pertinenze">Pertinenze</option>
</select>
</div>
</div>
<div class="mt-4">
<label class="block text-sm font-medium text-gray-700 mb-2">Note/Descrizione</label>
<textarea name="palazzine[0][note]" rows="2"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Note aggiuntive su questa palazzina"></textarea>
</div>
<!-- Riepilogo unità -->
<div class="mt-4 bg-gray-50 border border-gray-200 rounded-lg p-3">
<div class="flex items-center justify-between">
<span class="text-sm font-medium text-gray-700">Unità totali in questa palazzina:</span>
<span id="unita-palazzina-0" class="text-lg font-semibold text-blue-600">6</span>
</div>
<p class="text-xs text-gray-500 mt-1">Scale × Piani × Unità per Piano = Totale Unità</p>
</div>
</div>
</div>
<!-- Riepilogo generale -->
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4">
<div class="flex items-center justify-between">
<span class="text-sm font-medium text-blue-800">Totale Unità Immobiliari (Tutte le Palazzine):</span>
<span id="totale-generale-unita" class="text-xl font-bold text-blue-900">6</span>
</div>
<p class="text-xs text-green-600 mt-1">
Conferma la creazione per generare automaticamente tutte le unità immobiliari
</p>
</div>
</div>
</div>
<!-- Dati Bancari -->
<div id="dati-bancari" class="netgescon-tab-content hidden">
<div class="space-y-6">
<div class="flex justify-between items-center">
<h4 class="text-lg font-semibold text-gray-900">
<i class="fas fa-university text-blue-600 mr-2"></i>
Conti Bancari del Condominio
</h4>
</div>
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4">
<p class="text-sm text-blue-800">
<i class="fas fa-info-circle mr-2"></i>
Configura i conti bancari utilizzati per la gestione finanziaria del condominio.
</p>
</div>
<!-- Conto Principale -->
<div class="bg-white border border-gray-200 rounded-lg p-6">
<h5 class="text-md font-semibold text-gray-800 mb-4">Conto Principale</h5>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Banca</label>
<input type="text" name="banca_principale"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Nome della banca"
value="{{ old('banca_principale', $stabile->banca_principale ?? '') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">IBAN</label>
<input type="text" name="iban_principale"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="IT00 0000 0000 0000 0000 0000 000"
value="{{ old('iban_principale', $stabile->iban_principale ?? '') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Intestatario</label>
<input type="text" name="intestatario_principale"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Intestatario del conto"
value="{{ old('intestatario_principale', $stabile->intestatario_principale ?? '') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Tipo Conto</label>
<select name="tipo_conto_principale"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
<option value="ordinario" {{ old('tipo_conto_principale', $stabile->tipo_conto_principale ?? '') == 'ordinario' ? 'selected' : '' }}>Ordinario</option>
<option value="straordinario" {{ old('tipo_conto_principale', $stabile->tipo_conto_principale ?? '') == 'straordinario' ? 'selected' : '' }}>Straordinario</option>
<option value="misto" {{ old('tipo_conto_principale', $stabile->tipo_conto_principale ?? '') == 'misto' ? 'selected' : '' }}>Misto</option>
</select>
</div>
</div>
</div>
</div>
</div>
<!-- Tabelle Millesimali -->
<div id="tabelle-millesimali" class="netgescon-tab-content hidden">
<div class="space-y-6">
<div class="flex justify-between items-center">
<h4 class="text-lg font-semibold text-gray-900">
<i class="fas fa-table text-blue-600 mr-2"></i>
Tabelle Millesimali
</h4>
<button type="button" onclick="aggiungiTabella()"
class="bg-green-600 hover:bg-green-700 text-white px-4 py-2 rounded-lg flex items-center space-x-2">
<i class="fas fa-plus"></i>
<span>Aggiungi Tabella</span>
</button>
</div>
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4">
<p class="text-sm text-blue-800">
<i class="fas fa-info-circle mr-2"></i>
Le tabelle millesimali definiscono le quote di partecipazione alle spese comuni.
Puoi configurare tabelle diverse per diversi tipi di spese.
</p>
</div>
<!-- Tabella Generale -->
<div class="bg-white border border-gray-200 rounded-lg p-6">
<h5 class="text-md font-semibold text-gray-800 mb-4">Tabella Generale</h5>
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Nome Tabella <span class="text-red-500">*</span></label>
<input type="text" name="nome_tabella_generale"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Tabella Generale"
value="{{ old('nome_tabella_generale', $stabile->nome_tabella_generale ?? 'Tabella Generale') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Tipologia <span class="text-red-500">*</span></label>
<select name="tipologia_tabella_generale"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
<option value="generale" selected>Generale</option>
<option value="specifica">Specifica</option>
<option value="personalizzata">Personalizzata</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Metodo Calcolo <span class="text-red-500">*</span></label>
<select name="metodo_calcolo_generale"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
<option value="superficie_commerciale" selected>Superficie Commerciale</option>
<option value="superficie_reale">Superficie Reale</option>
<option value="vani_catastali">Vani Catastali</option>
<option value="valore_catastale">Valore Catastale</option>
</select>
</div>
</div>
<div class="mt-4">
<label class="block text-sm font-medium text-gray-700 mb-2">Data Approvazione</label>
<input type="date" name="data_approvazione_generale"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
value="{{ old('data_approvazione_generale', $stabile->data_approvazione_generale ?? '') }}">
</div>
<div class="mt-4">
<label class="flex items-center">
<input type="checkbox" name="tabella_principale" value="1"
class="rounded border-gray-300 text-blue-600 shadow-sm focus:border-blue-300 focus:ring focus:ring-blue-200 focus:ring-opacity-50"
{{ old('tabella_principale', $stabile->tabella_principale ?? true) ? 'checked' : '' }}>
<span class="ml-2 text-sm text-gray-600">Tabella principale</span>
</label>
</div>
<div class="mt-4">
<label class="flex items-center">
<input type="checkbox" name="attiva" value="1"
class="rounded border-gray-300 text-blue-600 shadow-sm focus:border-blue-300 focus:ring focus:ring-blue-200 focus:ring-opacity-50"
{{ old('attiva', $stabile->attiva ?? true) ? 'checked' : '' }}>
<span class="ml-2 text-sm text-gray-600">Attiva</span>
</label>
</div>
<div class="mt-4">
<label class="block text-sm font-medium text-gray-700 mb-2">Descrizione/Note</label>
<textarea name="descrizione_tabella_generale" rows="3"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Descrizione della tabella e criteri di calcolo utilizzati">{{ old('descrizione_tabella_generale', $stabile->descrizione_tabella_generale ?? '') }}</textarea>
</div>
</div>
</div>
</div>
@if(isset($stabile))
<!-- Unità Immobiliari (Solo in modalità edit) -->
<div id="unita-immobiliari" class="netgescon-tab-content hidden">
<div class="space-y-6">
<div class="flex justify-between items-center">
<h4 class="text-lg font-semibold text-gray-900">
<i class="fas fa-home text-blue-600 mr-2"></i>
Unità Immobiliari
</h4>
<button type="button"
class="netgescon-btn netgescon-btn-primary">
<i class="fas fa-plus mr-2"></i>
Nuova Unità
</button>
</div>
<div class="loading" style="display: none;">
<div class="text-center py-8">
<i class="fas fa-spinner fa-spin text-3xl text-blue-600"></i>
<p class="text-gray-600 mt-2">Caricamento unità immobiliari...</p>
</div>
</div>
<div class="ajax-content">
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4">
<p class="text-sm text-blue-800">
<i class="fas fa-info-circle mr-2"></i>
Clicca su questa tab per caricare dinamicamente l'elenco delle unità immobiliari di questo stabile.
</p>
</div>
</div>
</div>
</div>
<!-- Gestione Documentale -->
<div id="gestione-documentale" class="netgescon-tab-content hidden">
@include('admin.stabili.tabs.gestione-documentale')
</div>
@endif
</div>
<!-- Form Actions -->
<div class="flex justify-between items-center bg-gray-50 px-6 py-4 border-t">
<a href="{{ route('admin.stabili.index') }}"
class="netgescon-btn netgescon-btn-secondary">
<i class="fas fa-times mr-2"></i>
Annulla
</a>
<div class="space-x-3">
@if(isset($stabile))
<a href="{{ route('admin.stabili.show', $stabile) }}"
class="netgescon-btn netgescon-btn-secondary">
<i class="fas fa-eye mr-2"></i>
Visualizza
</a>
@endif
<button type="submit" class="netgescon-btn netgescon-btn-primary">
<i class="fas fa-save mr-2"></i>
{{ isset($stabile) ? 'Aggiorna Stabile' : 'Crea Stabile' }}
</button>
</div>
</div>
</form>
</div>
</div>
<!-- Script per gestione tabs e funzionalità -->
<script>
document.addEventListener('DOMContentLoaded', function() {
const tabButtons = document.querySelectorAll('.netgescon-tab-btn');
const tabContents = document.querySelectorAll('.netgescon-tab-content');
tabButtons.forEach(button => {
button.addEventListener('click', function() {
const targetTab = this.getAttribute('data-tab');
// Rimuovi classe active da tutti i bottoni
tabButtons.forEach(btn => {
btn.classList.remove('active');
});
// Aggiungi classe active al bottone cliccato
this.classList.add('active');
// Nascondi tutti i contenuti dei tab
tabContents.forEach(content => {
content.classList.remove('active');
content.classList.add('hidden');
});
// Mostra il contenuto del tab selezionato
const targetContent = document.getElementById(targetTab);
if (targetContent) {
targetContent.classList.add('active');
targetContent.classList.remove('hidden');
// Carica contenuto dinamico per tab edit-only
@if(isset($stabile))
if (targetTab === 'unita-immobiliari' && !targetContent.dataset.loaded) {
loadUnitaImmobiliari({{ $stabile->id }});
targetContent.dataset.loaded = 'true';
} else if (targetTab === 'gestione-documentale' && !targetContent.dataset.loaded) {
loadDocumentiCollegati({{ $stabile->id }});
targetContent.dataset.loaded = 'true';
}
@endif
}
});
});
// Inizializza i calcoli per le palazzine
aggiornaUnitaPalazzina(0);
aggiornaTotaleGenerale();
});
let contatorePalazzine = 1;
function aggiornaUnitaPalazzina(index) {
const palazzina = document.querySelector(`.palazzina-item[data-index="${index}"]`);
if (!palazzina) return;
const scale = parseInt(palazzina.querySelector(`input[name="palazzine[${index}][numero_scale]"]`).value) || 0;
const piani = parseInt(palazzina.querySelector(`input[name="palazzine[${index}][numero_piani]"]`).value) || 0;
const unitaPiano = parseInt(palazzina.querySelector(`input[name="palazzine[${index}][unita_per_piano]"]`).value) || 0;
const totale = scale * piani * unitaPiano;
const spanTotale = document.getElementById(`unita-palazzina-${index}`);
if (spanTotale) {
spanTotale.textContent = totale;
}
aggiornaTotaleGenerale();
}
function aggiornaTotaleGenerale() {
let totaleGenerale = 0;
document.querySelectorAll('.palazzina-item').forEach((palazzina, index) => {
const spanTotale = document.getElementById(`unita-palazzina-${index}`);
if (spanTotale) {
totaleGenerale += parseInt(spanTotale.textContent) || 0;
}
});
const spanGenerale = document.getElementById('totale-generale-unita');
if (spanGenerale) {
spanGenerale.textContent = totaleGenerale;
}
}
function aggiungiPalazzina() {
const container = document.getElementById('palazzine-container');
const template = container.querySelector('.palazzina-item');
const nuovaPalazzina = template.cloneNode(true);
// Aggiorna l'indice
nuovaPalazzina.setAttribute('data-index', contatorePalazzine);
// Aggiorna il titolo
nuovaPalazzina.querySelector('h5').textContent = `Palazzina ${contatorePalazzine + 1}`;
// Aggiorna i nomi dei campi
const inputs = nuovaPalazzina.querySelectorAll('input, textarea, select');
inputs.forEach(input => {
if (input.name) {
input.name = input.name.replace(/\[\d+\]/, `[${contatorePalazzine}]`);
}
if (input.onchange) {
input.setAttribute('onchange', `aggiornaUnitaPalazzina(${contatorePalazzine})`);
}
});
// Aggiorna gli ID
const spanTotale = nuovaPalazzina.querySelector('[id^="unita-palazzina-"]');
if (spanTotale) {
spanTotale.id = `unita-palazzina-${contatorePalazzine}`;
}
// Aggiorna il bottone rimuovi
const btnRimuovi = nuovaPalazzina.querySelector('button[onclick^="rimuoviPalazzina"]');
if (btnRimuovi) {
btnRimuovi.setAttribute('onclick', `rimuoviPalazzina(${contatorePalazzine})`);
btnRimuovi.classList.remove('hidden');
}
// Resetta i valori
nuovaPalazzina.querySelectorAll('input[type="text"], textarea').forEach(input => {
if (input.name.includes('[nome]')) {
input.value = `Palazzina ${String.fromCharCode(65 + contatorePalazzine)}`;
} else if (input.name.includes('[codice]')) {
input.value = String.fromCharCode(65 + contatorePalazzine);
} else {
input.value = '';
}
});
container.appendChild(nuovaPalazzina);
contatorePalazzine++;
// Aggiorna il calcolo
aggiornaUnitaPalazzina(contatorePalazzine - 1);
}
function rimuoviPalazzina(index) {
const palazzina = document.querySelector(`.palazzina-item[data-index="${index}"]`);
if (palazzina && document.querySelectorAll('.palazzina-item').length > 1) {
palazzina.remove();
aggiornaTotaleGenerale();
}
}
function aggiungiTabella() {
alert('Funzionalità aggiungi tabella in sviluppo');
}
@if(isset($stabile))
// Funzioni AJAX per caricamento contenuto dinamico
function loadUnitaImmobiliari(stabileId) {
const container = document.getElementById('unita-immobiliari');
const loadingDiv = container.querySelector('.loading');
const contentDiv = container.querySelector('.ajax-content');
if (loadingDiv) loadingDiv.style.display = 'block';
fetch(`/admin/stabili/${stabileId}/unita-immobiliari`)
.then(response => response.text())
.then(html => {
if (contentDiv) {
contentDiv.innerHTML = html;
if (loadingDiv) loadingDiv.style.display = 'none';
}
})
.catch(error => {
console.error('Errore caricamento unità immobiliari:', error);
if (contentDiv) {
contentDiv.innerHTML = '<div class="text-red-600 p-4">Errore nel caricamento dei dati</div>';
}
if (loadingDiv) loadingDiv.style.display = 'none';
});
}
function loadDocumentiCollegati(stabileId) {
const container = document.getElementById('gestione-documentale');
const loadingDiv = container.querySelector('.loading');
const contentDiv = container.querySelector('.ajax-content');
if (loadingDiv) loadingDiv.style.display = 'block';
fetch(`/admin/stabili/${stabileId}/documenti`)
.then(response => response.text())
.then(html => {
if (contentDiv) {
contentDiv.innerHTML = html;
if (loadingDiv) loadingDiv.style.display = 'none';
}
})
.catch(error => {
console.error('Errore caricamento documenti:', error);
if (contentDiv) {
contentDiv.innerHTML = '<div class="text-red-600 p-4">Errore nel caricamento dei documenti</div>';
}
if (loadingDiv) loadingDiv.style.display = 'none';
});
}
@endif
</script>
@endsection