Przeglądaj źródła

anagrafiche residenza

FabioFratini 7 miesięcy temu
rodzic
commit
c0934616df

+ 8 - 2
app/Http/Livewire/Traits/HasAnagrafica.php

@@ -49,6 +49,7 @@ trait HasAnagrafica{
     public $anag_foreign_birth_city;
     public $anag_foreign_residence_country;
     public $anag_foreign_residence_city;
+    public $anag_residenza_tipo;
 
     public function editAnagrafica($anagrafica)
     {
@@ -98,6 +99,8 @@ trait HasAnagrafica{
             $this->anag_foreign_birth_city = $anag->anag_foreign_birth_city;
             $this->anag_foreign_residence_country = $anag->anag_foreign_residence_country;
             $this->anag_foreign_residence_city = $anag->anag_foreign_residence_city;
+            $this->anag_residenza_tipo = $anag->residenza_tipo;
+
         }
         $this->emit('load-anagrafica-modal');
         $this->emit('change-visualization', $this->anag_type);
@@ -159,7 +162,8 @@ trait HasAnagrafica{
                 'anag_foreign_birth_country' => $this->anag_foreign_birth_country,
                 'anag_foreign_birth_city' => $this->anag_foreign_birth_city,
                 'anag_foreign_residence_country' => $this->anag_foreign_residence_country,
-                'anag_foreign_residence_city' => $this->anag_foreign_residence_city
+                'anag_foreign_residence_city' => $this->anag_foreign_residence_city,
+                'residenza_tipo' => $this->anag_residenza_tipo
             ]);
         } else {
             $anagrafica = \App\Models\Anagrafica::create([
@@ -199,7 +203,8 @@ trait HasAnagrafica{
                 'sede_legale_prov_id' => $this->anag_sede_legale_prov_id,
                 'sede_legale_address' => $this->anag_sede_legale_address,
                 'sede_legale_cap' => $this->anag_sede_legale_cap,
-                'phone' => $this->anag_phone
+                'phone' => $this->anag_phone,
+                'residenza_tipo' => $this->anag_residenza_tipo
             ]);
             $set = false;
 
@@ -592,5 +597,6 @@ trait HasAnagrafica{
         $this->anag_sede_legale_address = '';
         $this->anag_sede_legale_cap = '';
         $this->anag_phone = '';
+        $this->anag_residenza_tipo = '';
     }
 }

+ 2 - 1
app/Models/Anagrafica.php

@@ -60,7 +60,8 @@ public $timestamps = false;
         'anag_foreign_birth_country',
         'anag_foreign_birth_city',
         'anag_foreign_residence_country',
-        'anag_foreign_residence_city'
+        'anag_foreign_residence_city',
+        'residenza_tipo'
     ];
 
     public function birth_town_id_value()

+ 30 - 0
database/migrations/2025_07_02_091612_add_residenza_tipo_to_anagrafiche_table.php

@@ -0,0 +1,30 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+
+    public function up()
+    {
+        Schema::table('fcf_reports_anagraficas', function (Blueprint $table) {
+            $table->string('residenza_tipo')->nullable();
+        });
+
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('fcf_reports_anagraficas', function (Blueprint $table) {
+            //
+        });
+    }
+};

+ 60 - 40
resources/views/components/report/anagrafica/anagrafica-modal.blade.php

@@ -62,14 +62,29 @@
                                     <label for="anag_nazionalita" class="form-label">Nazionalità</label>
                                 </div>
                                 <div class="col-md-8">
-                                    <select class="form-control" style="width:100%" wire:model="anag_nazionalita">
+                                    <select class="form-control" style="width:100%" wire:model="anag_nazionalita" onchange="toggleNationalityFields()">
                                         <option value="">
                                         <option value="0">Italiana
                                         <option value="1">Straniera
                                     </select>
                                 </div>
                             </div>
-                            <div class="row mt-3">
+
+                            <!-- Campi sempre visibili per nascita -->
+                            <div class="row mt-3" id="pippo">
+                                <div class="col-md-4">
+                                    <label for="anag_birth_town_id" class="form-label">Comune di nascita</label>
+                                </div>
+                                <div class="col-md-8">
+                                    <select class="form-control anag_birth_town_id" wire:model="anag_birth_town_id"
+                                        style="width:100%">
+                                        <option value="{{ $anag_birth_town_id }}">
+                                            {{ $this->getLocalita($anag_birth_town_id) }}
+                                    </select>
+                                </div>
+                            </div>
+
+                            <div class="row mt-3" id="foreignBirthCountry" style="display: none;">
                                 <div class="col-md-4">
                                     <label for="anag_foreign_birth_country" class="form-label">Paese di nascita</label>
                                 </div>
@@ -82,28 +97,47 @@
                                     </select>
                                 </div>
                             </div>
+
+                            <div class="row mt-3" id="foreignBirthCity" style="display: none;">
+                                <div class="col-md-4">
+                                    <label for="anag_foreign_birth_city" class="form-label">Città di nascita</label>
+                                </div>
+                                <div class="col-md-8">
+                                    <input class="form-control" type="text" id="anag_foreign_birth_city"
+                                        wire:model="anag_foreign_birth_city">
+                                </div>
+                            </div>
+
+                            <!-- Selector per tipo di residenza -->
                             <div class="row mt-3">
                                 <div class="col-md-4">
-                                    <label for="anag_birth_town_id" class="form-label">Comune di nascita (se Italia)</label>
+                                    <label for="anag_residenza_tipo" class="form-label">Tipo residenza</label>
                                 </div>
                                 <div class="col-md-8">
-                                    <select class="form-control anag_birth_town_id" wire:model="anag_birth_town_id"
-                                        style="width:100%">
-                                        <option value="{{ $anag_birth_town_id }}">
-                                            {{ $this->getLocalita($anag_birth_town_id) }}
+                                    <select class="form-control" style="width:100%" wire:model="anag_residenza_tipo" onchange="toggleResidenceFields()">
+                                        <option value="">Seleziona tipo</option>
+                                        <option value="0">Italiana</option>
+                                        <option value="1">Straniera</option>
                                     </select>
                                 </div>
                             </div>
-                            <div class="row mt-3">
+
+                            <!-- Campi residenza italiana -->
+                            <div class="row mt-3" id="italianResidenceFields" style="display: none;">
                                 <div class="col-md-4">
-                                    <label for="anag_foreign_birth_city" class="form-label">Luogo di nascita (se estero)</label>
+                                    <label for="anag_residenza_town_id" class="form-label">Comune di residenza</label>
                                 </div>
                                 <div class="col-md-8">
-                                    <input class="form-control" type="text" id="anag_foreign_birth_city"
-                                        wire:model="anag_foreign_birth_city">
+                                    <select class="form-control select2 anag_residenza_town_id"
+                                        wire:model="anag_residenza_town_id" style="width:100%">
+                                        <option value="{{ $anag_residenza_town_id }}">
+                                            {{ $this->getLocalita($anag_residenza_town_id) }}
+                                    </select>
                                 </div>
                             </div>
-                            <div class="row mt-3">
+
+                            <!-- Campi residenza straniera -->
+                            <div class="row mt-3" id="foreignResidenceCountry" style="display: none;">
                                 <div class="col-md-4">
                                     <label for="anag_foreign_residence_country" class="form-label">Paese di residenza</label>
                                 </div>
@@ -118,22 +152,9 @@
                                 </div>
                             </div>
 
-                            <div class="row mt-3">
-                                <div class="col-md-4">
-                                    <label for="anag_residenza_town_id" class="form-label">Comune di residenza (se Italia)</label>
-                                </div>
-                                <div class="col-md-8">
-                                    <select class="form-control select2 anag_residenza_town_id"
-                                        wire:model="anag_residenza_town_id" style="width:100%">
-                                        <option value="{{ $anag_residenza_town_id }}" id="anag_residenza_town_id">
-                                            {{ $this->getLocalita($anag_residenza_town_id) }}
-                                    </select>
-                                </div>
-                            </div>
-
-                            <div class="row mt-3">
+                            <div class="row mt-3" id="foreignResidenceCity" style="display: none;">
                                 <div class="col-md-4">
-                                    <label for="anag_foreign_residence_city" class="form-label">Luogo di residenza (se estero)</label>
+                                    <label for="anag_foreign_residence_city" class="form-label">Città di residenza</label>
                                 </div>
                                 <div class="col-md-8">
                                     <input class="form-control" type="text" id="anag_foreign_residence_city"
@@ -263,8 +284,7 @@
                             </div>
                             <div class="row mt-3">
                                 <div class="col-md-4">
-                                    <label for="anag_documento_rilasciato_da_altro" class="form-label">Rilasciato da
-                                        altro</label>
+                                    <label for="anag_documento_rilasciato_da_altro" class="form-label">Rilasciato da altro</label>
                                 </div>
                                 <div class="col-md-8">
                                     <input class="form-control" type="text" id="anag_documento_rilasciato_da_altro"
@@ -273,8 +293,7 @@
                             </div>
                             <div class="row mt-3">
                                 <div class="col-md-4">
-                                    <label for="anag_documento_rilasciato_da_di_foreign_localita" class="form-label">Comune
-                                        di</label>
+                                    <label for="anag_documento_rilasciato_da_di_foreign_localita" class="form-label">Comune di rilascio</label>
                                 </div>
                                 <div class="col-md-8">
                                     <select class="form-control  anag_documento_rilasciato_da_di_foreign_localita"
@@ -285,7 +304,7 @@
                             </div>
                             <div class="row mt-3">
                                 <div class="col-md-4">
-                                    <label for="anag_foreign_country" class="form-label">Nazionalità</label>
+                                    <label for="anag_foreign_country" class="form-label">Nazionalità documento</label>
                                 </div>
                                 <div class="col-md-8">
                                     <select class="form-control" style="width:100%" wire:model="anag_foreign_country">
@@ -315,6 +334,8 @@
                                 </div>
                             </div>
                         </div>
+
+                        <!-- SEZIONE PERSONA GIURIDICA -->
                         <div id="boxPersonaGiuridica">
                             <div class="row mt-3">
                                 <div class="col-md-4">
@@ -339,7 +360,7 @@
                                     <label for="nazionalita" class="form-label">Paese Sede Legale</label>
                                 </div>
                                 <div class="col-md-8">
-                                    <select class="form-control" style="width:100%" wire:model="nazionalita">
+                                    <select class="form-control" style="width:100%" wire:model="nazionalita" onchange="toggleCompanyFields()">
                                         <option value="">
                                         <option value="0">Italia
                                         <option value="1">Estero
@@ -349,8 +370,7 @@
 
                             <div class="row mt-3" id="foreignPGResidenceCountry" style="display: none;">
                                 <div class="col-md-4">
-                                    <label for="anag_foreign_residence_country" class="form-label">Paese straniero sede
-                                        legale</label>
+                                    <label for="anag_foreign_residence_country" class="form-label">Paese straniero sede legale</label>
                                 </div>
                                 <div class="col-md-8">
                                     <select class="form-control" style="width:100%"
@@ -365,14 +385,14 @@
 
                             <div class="row mt-3" id="foreignPGResidenceCity" style="display: none;">
                                 <div class="col-md-4">
-                                    <label for="anag_foreign_residence_city" class="form-label">Città straniera sede
-                                        legale</label>
+                                    <label for="anag_foreign_residence_city_legal" class="form-label">Città straniera sede legale</label>
                                 </div>
                                 <div class="col-md-8">
                                     <input class="form-control" type="text" id="anag_foreign_residence_city_legal"
                                         wire:model="anag_foreign_residence_city">
                                 </div>
                             </div>
+
                             <div class="row mt-3">
                                 <div class="col-md-4">
                                     <label for="anag_sede_legale_address" class="form-label">Indirizzo sede legale</label>
@@ -382,6 +402,7 @@
                                         wire:model="anag_sede_legale_address">
                                 </div>
                             </div>
+
                             <div id="italianAddressFields">
                                 <div class="row mt-3">
                                     <div class="col-md-4">
@@ -405,8 +426,7 @@
                                 </div>
                                 <div class="row mt-3">
                                     <div class="col-md-4">
-                                        <label for="anag_sede_legale_prov_id" class="form-label">Provincia sede
-                                            legale</label>
+                                        <label for="anag_sede_legale_prov_id" class="form-label">Provincia sede legale</label>
                                     </div>
                                     <div class="col-md-8">
                                         <select class="form-control select2 anag_sede_legale_prov_id"
@@ -418,6 +438,7 @@
                                     </div>
                                 </div>
                             </div>
+
                             <div class="row mt-3">
                                 <div class="col-md-4">
                                     <label for="anag_phone" class="form-label">Telefono</label>
@@ -426,7 +447,6 @@
                                     <input class="form-control" type="text" id="anag_phone" wire:model="anag_phone">
                                 </div>
                             </div>
-
                         </div>
 
                     </div>

+ 185 - 134
resources/views/livewire/report.blade.php

@@ -247,147 +247,196 @@
             }
         });
         Livewire.on('load-anagrafica-modal', () => {
-            const modalsAnag = [
-                "anag_birth_town_id",
-                "anag_residenza_town_id",
-                "anag_documento_rilasciato_da_di_foreign_localita",
-                "anag_sede_legale_town_id",
-                "anag_foreign_birth_country",
-                "anag_foreign_residence_country",
-                "anag_pg_foreign_residence_country"
-            ];
-
-            const countryFields = [
-                "anag_foreign_birth_country",
-                "anag_foreign_residence_country"
-            ];
-
-            function modalsAnagSelect(value) {
-                $('.' + value).select2({
-                    dropdownParent: $("#anagraficaParte"),
-                    theme: 'bootstrap4',
-                    ajax: {
-                        url: '/localita',
-                        dataType: 'json'
-                    },
-                    width: '100%'
-                }).on('change', function (e) {
-                    var data = $('.' + value).select2("val");
-                    @this.set(value, data);
-                });
-
-                const currentValue = $('.' + value).val();
-                const currentText = $('.' + value).find('option:selected').text();
-                if (currentValue) {
-                    let option = new Option(currentText, currentValue, true, true);
-                    $('.' + value).append(option).trigger('change');
-                }
-            }
-
-            function initializeCountrySelects(value) {
-                $('.' + value).select2({
-                    dropdownParent: $("#anagraficaParte .modal-content"),
-                    theme: 'bootstrap4',
-                    ajax: {
-                        url: '/countries',
-                        dataType: 'json'
-                    },
-                    width: '100%'
-                }).on('change', function (e) {
-                    var data = $('.' + value).select2("val");
-                    @this.set(value, data);
-                });
+    const modalsAnag = [
+        "anag_birth_town_id",
+        "anag_residenza_town_id",
+        "anag_documento_rilasciato_da_di_foreign_localita",
+        "anag_sede_legale_town_id",
+        "anag_foreign_birth_country",
+        "anag_foreign_residence_country",
+        "anag_pg_foreign_residence_country"
+    ];
+
+    const countryFields = [
+        "anag_foreign_birth_country",
+        "anag_foreign_residence_country"
+    ];
+
+    function modalsAnagSelect(value) {
+        $('.' + value).select2({
+            dropdownParent: $("#anagraficaParte"),
+            theme: 'bootstrap4',
+            ajax: {
+                url: '/localita',
+                dataType: 'json'
+            },
+            width: '100%'
+        }).on('change', function (e) {
+            var data = $('.' + value).select2("val");
+            @this.set(value, data);
+        });
 
-                const currentValue = $('.' + value).val();
-                const currentText = $('.' + value).find('option:selected').text();
-                if (currentValue) {
-                    let option = new Option(currentText, currentValue, true, true);
-                    $('.' + value).append(option).trigger('change');
-                }
-            }
+        const currentValue = $('.' + value).val();
+        const currentText = $('.' + value).find('option:selected').text();
+        if (currentValue) {
+            let option = new Option(currentText, currentValue, true, true);
+            $('.' + value).append(option).trigger('change');
+        }
+    }
+
+    function initializeCountrySelects(value) {
+        $('.' + value).select2({
+            dropdownParent: $("#anagraficaParte .modal-content"),
+            theme: 'bootstrap4',
+            ajax: {
+                url: '/countries',
+                dataType: 'json'
+            },
+            width: '100%'
+        }).on('change', function (e) {
+            var data = $('.' + value).select2("val");
+            @this.set(value, data);
+        });
 
-            function initializeModalState() {
-                const currentType = $('input[name="anag_type"]:checked').val();
-                if (currentType == 0 || !currentType) {
-                    $("#boxPersonaFisica").show();
-                    $("#boxPersonaGiuridica").hide();
+        const currentValue = $('.' + value).val();
+        const currentText = $('.' + value).find('option:selected').text();
+        if (currentValue) {
+            let option = new Option(currentText, currentValue, true, true);
+            $('.' + value).append(option).trigger('change');
+        }
+    }
+
+    // Funzione per gestire la visibilità dei campi di nascita
+    function toggleNationalityFields() {
+        const nationality = $('select[wire\\:model="anag_nazionalita"]').val();
+        const foreignBirthCountry = $("#foreignBirthCountry");
+        const foreignBirthCity = $("#foreignBirthCity");
+        const italianBirthTown = $("#pippo");
+
+        if (nationality === '1') { // Straniera
+            foreignBirthCountry.show();
+            foreignBirthCity.show();
+            italianBirthTown.hide();
+        } else { // Italiana o non selezionata
+            foreignBirthCountry.hide();
+            foreignBirthCity.hide();
+            italianBirthTown.show();
+        }
+    }
+
+    // Funzione per gestire la visibilità dei campi di residenza
+    function toggleResidenceFields() {
+        const residenceType = $('select[wire\\:model="anag_residenza_tipo"]').val();
+        const italianFields = $("#italianResidenceFields");
+        const foreignCountry = $("#foreignResidenceCountry");
+        const foreignCity = $("#foreignResidenceCity");
+
+        // Nascondi tutti i campi
+        italianFields.hide();
+        foreignCountry.hide();
+        foreignCity.hide();
+
+        // Mostra i campi appropriati
+        if (residenceType === '0') { // Italiana
+            italianFields.show();
+        } else if (residenceType === '1') { // Straniera
+            foreignCountry.show();
+            foreignCity.show();
+        }
+    }
+
+    function initializeModalState() {
+        const currentType = $('input[name="anag_type"]:checked').val();
+        if (currentType == 0 || !currentType) {
+            $("#boxPersonaFisica").show();
+            $("#boxPersonaGiuridica").hide();
+        } else {
+            $("#boxPersonaFisica").hide();
+            $("#boxPersonaGiuridica").show();
+        }
 
-                } else {
-                    $("#boxPersonaFisica").hide();
-                    $("#boxPersonaGiuridica").show();
-                }
+        setTimeout(() => {
+            modalsAnag.forEach(modalsAnagSelect);
+        }, 100);
+
+        setTimeout(() => {
+            countryFields.forEach(initializeCountrySelects);
+        }, 100);
+
+        // Inizializza la visibilità dei campi basata sui valori attuali
+        setTimeout(() => {
+            toggleNationalityFields();
+            toggleResidenceFields();
+        }, 200);
+    }
+
+    initializeModalState();
+
+    $('input[name="anag_type"]').change(function () {
+        var x = $('input[name="anag_type"]:checked').val();
+        if (x == 0) {
+            $("#boxPersonaFisica").show();
+            $("#boxPersonaGiuridica").hide();
+            @this.changeAnagType(0);
+        } else {
+            $("#boxPersonaFisica").hide();
+            $("#boxPersonaGiuridica").show();
+            setTimeout(() => {
+                modalsAnag.forEach(modalsAnagSelect);
+            }, 100);
+            @this.changeAnagType(1);
+        }
+    });
+
+    // Event listener per la nazionalità (nascita)
+    $('select[wire\\:model="anag_nazionalita"]').change(function () {
+        toggleNationalityFields();
+    });
+
+    // Event listener per il tipo di residenza
+    $('select[wire\\:model="anag_residenza_tipo"]').change(function () {
+        toggleResidenceFields();
+    });
+
+    Livewire.on('change-visualization', (type) => {
+        $('input:radio[name="anag_type"]').filter('[value="' + type + '"]').prop('checked', true);
+        if (type == 0) {
+            $("#boxPersonaFisica").show();
+            $("#boxPersonaGiuridica").hide();
+        } else {
+            $("#boxPersonaFisica").hide();
+            $("#boxPersonaGiuridica").show();
+            setTimeout(() => {
+                modalsAnag.forEach(modalsAnagSelect);
+            }, 100);
+        }
+    });
+
+    // Gestione per le aziende (persona giuridica)
+    $('select[wire\\:model="nazionalita"]').change(function () {
+        const isPGStraniera = $(this).val() === "1";
+        $("#foreignPGResidenceCountry")[isPGStraniera ? 'show' : 'hide']();
+        $("#foreignPGResidenceCity")[isPGStraniera ? 'show' : 'hide']();
+        $("#italianAddressFields")[isPGStraniera ? 'hide' : 'show']();
+
+        if (!isPGStraniera) {
+            @this.set('anag_foreign_residence_country', '');
+            @this.set('anag_foreign_residence_city', '');
+        }
+    });
 
-                setTimeout(() => {
-                    modalsAnag.forEach(modalsAnagSelect);
-                }, 100);
+    $('#anagraficaParte').on('show.bs.modal', function () {
+        initializeModalState();
+    });
 
-                setTimeout(() => {
-                    countryFields.forEach(initializeCountrySelects);
-                }, 100);
+    $('#anagraficaParte').on('hidden.bs.modal', function () {
+        modalsAnag.forEach(value => {
+            if ($('.' + value).data('select2')) {
+                $('.' + value).select2('destroy');
             }
-
-            initializeModalState();
-
-            $('input[name="anag_type"]').change(function () {
-                var x = $('input[name="anag_type"]:checked').val();
-                if (x == 0) {
-                    $("#boxPersonaFisica").show();
-                    $("#boxPersonaGiuridica").hide();
-                    @this.changeAnagType(0);
-                } else {
-                    $("#boxPersonaFisica").hide();
-                    $("#boxPersonaGiuridica").show();
-                    setTimeout(() => {
-                        modalsAnag.forEach(modalsAnagSelect);
-                    }, 100);
-                    @this.changeAnagType(1);
-                }
-            });
-
-            Livewire.on('change-visualization', (type) => {
-                $('input:radio[name="anag_type"]').filter('[value="' + type + '"]').prop('checked', true);
-                if (type == 0) {
-                    $("#boxPersonaFisica").show();
-                    $("#boxPersonaGiuridica").hide();
-                } else {
-                    $("#boxPersonaFisica").hide();
-                    $("#boxPersonaGiuridica").show();
-                    setTimeout(() => {
-                        modalsAnag.forEach(modalsAnagSelect);
-                    }, 100);
-                }
-            });
-
-            $('select[wire\\:model="nazionalita"]').change(function () {
-                const isPGStraniera = $(this).val() === "1";
-                $("#foreignPGResidenceCountry")[isPGStraniera ? 'show' : 'hide']();
-                $("#foreignPGResidenceCity")[isPGStraniera ? 'show' : 'hide']();
-
-                if (isPGStraniera) {
-                    $(".anag_sede_legale_town_id").closest('.row').hide();
-                    $(".anag_sede_legale_cap").closest('.row').hide();
-                    $(".anag_sede_legale_prov_id").closest('.row').hide();
-                } else {
-                    $(".anag_sede_legale_town_id").closest('.row').show();
-                    $(".anag_sede_legale_cap").closest('.row').show();
-                    $(".anag_sede_legale_prov_id").closest('.row').show();
-                    @this.set('anag_foreign_residence_country', '');
-                    @this.set('anag_foreign_residence_city', '');
-                }
-            });
-
-            $('#anagraficaParte').on('show.bs.modal', function () {
-                initializeModalState();
-            });
-
-            $('#anagraficaParte').on('hidden.bs.modal', function () {
-                modalsAnag.forEach(value => {
-                    if ($('.' + value).data('select2')) {
-                        $('.' + value).select2('destroy');
-                    }
-                });
-            });
         });
+    });
+});
 
         Livewire.on('load-select-modal', () => {
 
@@ -776,6 +825,8 @@
             @this.set('valida_al', $(this).val());
         });
 
+
+
     </script>
 
 @endpush