Luca Parisio 9 ماه پیش
والد
کامیت
1849800f03

+ 44 - 25
app/Http/Livewire/Azienda.php

@@ -7,7 +7,8 @@ use Livewire\WithFileUploads;
 use Illuminate\Support\Str;
 
 use App\Models\Azienda as AziendaModel;
-
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\Storage;
 class Azienda extends Component
 {
     use WithFileUploads;
@@ -17,7 +18,6 @@ class Azienda extends Component
     public $ragione_sociale;
     public $nome_associazione;
     public $tipologia;
-    public $discipline;
     public $logo;
     public $temp_logo;
     public $sede_legale_nazione;
@@ -45,7 +45,7 @@ class Azienda extends Component
     public $search = '';
     public $selectedDisciplines = [];
     public $disciplineId = '';
-    public $disciplines = [];
+    public $discipline = [];
     public $activeTab = 'generale';
 
     protected $rules = [
@@ -84,10 +84,6 @@ class Azienda extends Component
         $this->partita_iva = null;
         $this->codice_fiscale = null;
         $this->codice_sdi = null;
-
-        $this->chiusura_anno_fiscale = null;
-        $this->scadenza_abbonamenti = null;
-        $this->scadenza_pagamenti_uscita = null;
     }
 
     public function mount()
@@ -122,9 +118,6 @@ class Azienda extends Component
             $this->codice_fiscale = $this->azienda->codice_fiscale;
             $this->codice_sdi = $this->azienda->codice_sdi;
 
-            $this->chiusura_anno_fiscale = $this->azienda->chiusura_anno_fiscale;
-            $this->scadenza_abbonamenti = $this->azienda->scadenza_abbonamenti;
-            $this->scadenza_pagamenti_uscita = $this->azienda->scadenza_pagamenti_uscita;
 
             if (
                 $this->sede_legale_nazione == $this->sede_operativa_nazione &&
@@ -135,9 +128,9 @@ class Azienda extends Component
             ) {
                 $this->same_address = true;
             }
-
-            if ($this->azienda && $this->azienda->disciplines) {
-                $this->selectedDisciplines = array_map('trim', explode(';', $this->azienda->disciplines));
+            Log::info('Azienda disciplines: ' . json_encode($this->azienda->discipline));
+            if ($this->azienda && $this->azienda->discipline) {
+                $this->selectedDisciplines = array_map('trim', array: explode(';', $this->azienda->discipline));
             }
         } else {
             $this->update = true;
@@ -221,13 +214,13 @@ class Azienda extends Component
     public function save()
     {
         $this->validate();
-
+        Log::info('Saving discipline: ' . json_encode(implode('; ', $this->selectedDisciplines)));
         try {
             $data = [
                 'ragione_sociale' => $this->ragione_sociale,
                 'nome_associazione' => $this->nome_associazione,
                 'tipologia' => $this->tipologia,
-                'disciplines' => implode('; ', $this->selectedDisciplines),
+                'discipline' => implode('; ', $this->selectedDisciplines),
 
                 'sede_legale_nazione' => $this->sede_legale_nazione,
                 'sede_legale_provincia' => $this->sede_legale_provincia,
@@ -241,6 +234,8 @@ class Azienda extends Component
                 'sede_operativa_indirizzo' => $this->sede_operativa_indirizzo,
                 'sede_operativa_cap' => $this->sede_operativa_cap,
 
+                'same_address' => $this->same_address,
+
                 'email' => $this->email,
                 'pec' => $this->pec,
                 'telefono' => $this->telefono,
@@ -249,24 +244,37 @@ class Azienda extends Component
                 'partita_iva' => $this->partita_iva,
                 'codice_fiscale' => $this->codice_fiscale,
                 'codice_sdi' => $this->codice_sdi,
-
-                'chiusura_anno_fiscale' => $this->chiusura_anno_fiscale,
-                'scadenza_abbonamenti' => $this->scadenza_abbonamenti,
-                'scadenza_pagamenti_uscita' => $this->scadenza_pagamenti_uscita,
             ];
-
+            Log::info('Data logo: ' . json_encode(value: $this->temp_logo));
             if ($this->temp_logo) {
                 $folderName = Str::slug($this->nome_associazione);
-
+                Log::info('Folder name: ' . $folderName);
                 $path = 'img/' . $folderName;
                 $fullPath = storage_path('app/public/' . $path);
+                Log::info('Full path: ' . $fullPath);
+                Log::info('Computed Full path: ' . $fullPath);
+
+                Log::info('Directory exists check: ' . (file_exists($fullPath) ? 'Yes' : 'No'));
 
                 if (!file_exists($fullPath)) {
-                    mkdir($fullPath, 0755, true);
+                    $result = mkdir($fullPath, 0755, true);
+                    if ($result === false) {
+                        Log::error('Failed to create directory: ' . $fullPath);
+                        session()->flash('error', 'Errore durante la creazione della cartella del logo.');
+                        return;
+                    }
+                    Log::info('Directory created: ' . $fullPath);
                 }
 
-                $logoPath = $this->temp_logo->store($path, 'public');
-                $data['logo'] = $logoPath;
+                try {
+                    $logoPath = $this->temp_logo->store($path, 'public');
+                    $data['logo'] = $logoPath;
+                    Log::info('Logo path: ' . $logoPath);
+                } catch (\Exception $e) {
+                    Log::error('Error saving logo: ' . $e->getMessage());
+                    session()->flash('error', 'Errore durante il salvataggio del logo: ' . $e->getMessage());
+                    return;
+                }
             }
             if ($this->azienda) {
                 $this->azienda->update($data);
@@ -287,6 +295,7 @@ class Azienda extends Component
         if (empty($this->selectedDisciplines)) {
             return [];
         }
+        Log::info('Selected disciplines: ' . json_encode($this->selectedDisciplines));
 
         return \App\Models\Discipline::whereIn('id', $this->selectedDisciplines)
             ->pluck('name')
@@ -302,7 +311,7 @@ class Azienda extends Component
 
     public function loadDisciplines()
     {
-        $this->disciplines = \App\Models\Discipline::select('id', 'name')->get();
+        $this->discipline = \App\Models\Discipline::select('id', 'name')->get();
     }
 
     public function addDiscipline()
@@ -329,4 +338,14 @@ class Azienda extends Component
     {
         $this->loadDisciplines();
     }
+
+    public function removeLogo()
+    {
+        if ($this->azienda && $this->azienda->logo) {
+            Storage::disk('public')->delete($this->azienda->logo);
+            $this->azienda->logo = null;
+            $this->azienda->save();
+            session()->flash('message', 'Logo rimosso con successo!');
+        }
+    }
 }

+ 37 - 17
app/Http/Livewire/Member.php

@@ -6,6 +6,7 @@ use Livewire\Component;
 use Livewire\Attributes\Url;
 use Livewire\WithFileUploads;
 use Livewire\WithPagination;
+use Illuminate\Support\Facades\Log;
 
 use DateTime;
 
@@ -134,7 +135,7 @@ class Member extends Component
     public $course_name, $course_level_id, $course_type_id, $course_frequency_id;
 
     // Certificates data
-    public $member_certificates = array(), $certificate_type, $certificate_filename_old, $certificate_filename, $certificate_expire_date, $certificate_status, $addCertificate, $updateCertificate, $certificateDataId;
+    public $member_certificates = array(), $certificate_type, $certificate_filename_old, $certificate_filename, $certificate_expire_date, $certificate_status, $addCertificate, $updateCertificate, $certificateDataId, $cardCertificateId;
 
     public $filterCard = [];
     public $filterCategory = [];
@@ -348,11 +349,11 @@ class Member extends Component
             // Carico gli abbonamenti e i mesi
             $period = \Carbon\CarbonPeriod::create($c->date_from, '1 month', $c->date_to);
             $this->course_months_list = [];
-            foreach ($period as $dt) 
+            foreach ($period as $dt)
             {
                 $this->course_months_list[] = $dt->format("m");
             }
-            
+
             $course_subscription_ids = [];
             $this->course_price_list = [];
             if ($c->prices != null)
@@ -860,7 +861,6 @@ class Member extends Component
             'email' => 'required',
             'phone' => 'required',
             'birth_nation_id' => 'required',
-            //'birth_place' => 'required',
             'address' => 'required',
             'zip_code' => 'required',
             'nation_id' => 'required',
@@ -905,12 +905,32 @@ class Member extends Component
             $existingMember = \App\Models\Member::where('fiscal_code', $this->fiscal_code)->first();
             if ($existingMember) {
                 $this->already_existing = true;
+                $this->emit('focus-error-field', 'fiscal_code');
+
                 return;
             }
         }
-        
-        $this->validate($rules);
-        
+
+        if ($this->under18) {
+            $rules['father_name'] = 'required_without:mother_name';
+            $rules['father_email'] = 'required_without:mother_email|email';
+            $rules['father_fiscal_code'] = 'required_without:mother_fiscal_code';
+            $rules['mother_name'] = 'required_without:father_name';
+            $rules['mother_email'] = 'required_without:father_email|email';
+            $rules['mother_fiscal_code'] = 'required_without:father_fiscal_code';
+        }
+
+        try {
+            $this->validate($rules);
+        } catch (\Illuminate\Validation\ValidationException $e) {
+            $this->isSaving = false;
+            $errorFields = array_keys($e->errors());
+            if (!empty($errorFields)) {
+                $this->emit('focus-error-field', $errorFields[0]);
+            }
+            Log::error('Validation failed', ['errors' => $e->errors()]);
+            return;
+        }
         try {
 
             $name = '';
@@ -925,7 +945,7 @@ class Member extends Component
 
             $mother_docs = implode("|", $this->mother_document_files);
 
-            
+
 
             $member = \App\Models\Member::create([
                 'first_name' => strtoupper($this->first_name),
@@ -972,7 +992,7 @@ class Member extends Component
                 'to_complete' => false,
                 'enabled' => $this->enabled
             ]);
-            
+
             session()->flash('success, Tesserato creato');
             updateMemberData($member->id);
             $this->resetFields();
@@ -1230,7 +1250,7 @@ class Member extends Component
             session()->flash('success', "Tesserato eliminato");
             $this->emit('reload');
         } catch (\Exception $e) {
-            session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
+            session()->flash('error', 'Errore (' . $e->getMessage() . ')');
         }
     }
 
@@ -1252,7 +1272,7 @@ class Member extends Component
                 \App\Models\Member::find($id)->delete();
             }
         } catch (\Exception $e) {
-            session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
+            session()->flash('error', 'Errore (' . $e->getMessage() . ')');
         }
         $this->multipleAction = '';
     }
@@ -1454,7 +1474,7 @@ class Member extends Component
             \App\Models\MemberCard::find($id)->delete();
             session()->flash('success', "Tesserato eliminato");
         } catch (\Exception $e) {
-            session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
+            session()->flash('error', 'Errore (' . $e->getMessage() . ')');
         }
     }
 
@@ -1501,7 +1521,7 @@ class Member extends Component
             $mc->months = json_encode($this->course_months);
             $mc->when = json_encode($this->course_when);
             $mc->save();
-            
+
             // Se il corso ha associato una categoria iscrivo anche al gruppo
             $c = \App\Models\Course::findOrFail($this->course_course_id);
             if ($c) {
@@ -1553,7 +1573,7 @@ class Member extends Component
                 $rate->note = '';
                 $rate->status = 0;
                 $rate->save();
-                
+
                 $start = date('Y-m-d', strtotime("+" . $r->months . " months", strtotime($start)));
 
                 if ($start > $this->course_date_to)
@@ -1678,7 +1698,7 @@ class Member extends Component
             \App\Models\MemberCourse::find($id)->delete();
             session()->flash('success', "Corso eliminato");
         } catch (\Exception $e) {
-            session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
+            session()->flash('error', 'Errore (' . $e->getMessage() . ')');
         }
     }
 
@@ -1812,7 +1832,7 @@ class Member extends Component
             \App\Models\MemberCertificate::find($id)->delete();
             session()->flash('success', "Tesserato eliminato");
         } catch (\Exception $e) {
-            session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
+            session()->flash('error', 'Errore (' . $e->getMessage() . ')');
         }
     }
 
@@ -1868,7 +1888,7 @@ class Member extends Component
             \App\Models\MemberCategory::find($id)->delete();
             session()->flash('success', "Associazione eliminata");
         } catch (\Exception $e) {
-            session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
+            session()->flash('error', 'Errore (' . $e->getMessage() . ')');
         }
     }
 

+ 2 - 4
app/Models/Azienda.php

@@ -27,6 +27,7 @@ class Azienda extends Model
         'sede_operativa_indirizzo',
         'sede_operativa_cap',
 
+        'same_address',
         'email',
         'pec',
         'telefono',
@@ -35,10 +36,7 @@ class Azienda extends Model
         'partita_iva',
         'codice_fiscale',
         'codice_sdi',
-
-        'chiusura_anno_fiscale',
-        'scadenza_abbonamenti',
-        'scadenza_pagamenti_uscita',
+        'discipline',
     ];
 
     protected $casts = [

+ 48 - 0
database/migrations/2025_04_14_000000_updating_fields_aziendas_table.php

@@ -0,0 +1,48 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+
+return new class extends Migration {
+
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('aziendas', function (Blueprint $table) {
+            // Remove accounting configuration columns
+            $table->dropColumn([
+                'chiusura_anno_fiscale',
+                'scadenza_abbonamenti',
+                'scadenza_pagamenti_uscita'
+            ]);
+
+            // Add same_address boolean column
+            $table->boolean('same_address')->default(false);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('aziendas', function (Blueprint $table) {
+            // Add back accounting configuration columns
+            $table->date('chiusura_anno_fiscale')->nullable();
+            $table->date('scadenza_abbonamenti')->nullable();
+            $table->date('scadenza_pagamenti_uscita')->nullable();
+
+            // Remove same_address column
+            $table->dropColumn('same_address');
+        });
+    }
+};

+ 2 - 2
resources/views/layouts/app.blade.php

@@ -389,11 +389,11 @@
         <li class="user--boxlist_item">
             <a href="/profile">Profilo</a>
         </li>
-{{--         @if(Auth::user()->level == env('LEVEL_ADMIN', 0))
+        @if(Auth::user()->level == env('LEVEL_ADMIN', 0))
             <li class="user--boxlist_item">
                 <a href="/azienda">Azienda</a>
             </li>
-        @endif --}}
+        @endif
         <li class="user--boxlist_item">
             <a href="/logout">Logout</a>
         </li>

+ 77 - 65
resources/views/livewire/azienda.blade.php

@@ -1,6 +1,5 @@
 <div>
 
-    <div class="row mt-4">
         <div class="col-md-12">
             <div class="card">
                 <div class="card-body">
@@ -20,46 +19,50 @@
                         <form wire:submit.prevent="save">
                             <div class="row mb-4">
                                 <div class="col-md-4">
-                                    <div class="logo-container mb-3">
-                                        @if($azienda && $azienda->logo_url)
-                                            <img src="{{ $azienda->logo_url }}" alt="Logo" class="img-thumbnail" style="max-width: 200px;">
-                                        @else
-                                            <div class="mb-3">
+                                    <div class="logo-container mb-3 d-flex align-items-center">
+                                        <div class="me-3">
+                                            <img src="{{ asset('storage/' . $azienda->logo) }}" alt="Logo" style="height: 200px; width: 200px;border-radius: 10px;">
+                                        </div>
+                                        <div class="flex-grow-1 d-flex flex-column justify-content-center">
+                                            <div class="mt-2">
                                                 <label class="form-label">Logo</label>
-                                                <input type="file" class="form-control" wire:model="temp_logo">
                                             </div>
-                                        @endif
+                                            <input type="file" class="form-control form-control-lg rounded-pill" wire:model="temp_logo" style="width: 300px;">
+                                            @if ($temp_logo)
+                                                <img src="{{ $temp_logo->temporaryUrl() }}" class="mt-2" style="max-width: 200px; max-height: 200px;">
+                                            @endif
+                                        </div>
                                     </div>
-
                                 </div>
                             </div>
 
+
                             <div class="mb-4">
 
                                 <div class="row">
                                     <div class="col-md-6 mb-3">
                                         <label class="form-label">Ragione sociale*</label>
-                                        <input type="text" class="form-control @error('ragione_sociale') is-invalid @enderror"
+                                        <input type="text" class="form-control form-control-lg rounded-pill @error('ragione_sociale') is-invalid @enderror"
                                                 wire:model="ragione_sociale">
                                         @error('ragione_sociale') <span class="text-danger">{{ $message }}</span> @enderror
                                     </div>
                                     <div class="col-md-6 mb-3">
                                         <label class="form-label">Nome associazione/società</label>
-                                        <input type="text" class="form-control" wire:model="nome_associazione">
+                                        <input type="text" class="form-control form-control-lg rounded-pill" wire:model="nome_associazione">
                                     </div>
                                 </div>
                                 <div class="row">
                                     <div class="col-md-6 mb-3">
                                         <label class="form-label">Tipologia* (ASD/SSD/Polisportiva ecc.)</label>
-                                        <input type="text" class="form-control" wire:model="tipologia">
+                                        <input type="text" class="form-control form-control-lg rounded-pill" wire:model="tipologia">
                                     </div>
                                     <div class="col-md-6  mb-3">
                                         <label class="form-label">Discipline</label>
                                         <div wire:ignore>
-                                            <select class="form-select discipline-select" multiple wire:model="selectedDisciplines">
-                                                @forelse($disciplines as $discipline)
-                                                    <option value="{{ $discipline->id }}">
-                                                        {{ $discipline->name }}
+                                            <select class="form-select discipline-select rounded-pill" style="border-radius: 20px;" multiple wire:model="selectedDisciplines">
+                                                @forelse($discipline as $disciplineScelte)
+                                                    <option value="{{ $disciplineScelte->id }}">
+                                                        {{ $disciplineScelte->name }}
                                                     </option>
                                                 @empty
                                                     <option disabled>Nessuna disciplina trovata</option>
@@ -71,27 +74,27 @@
                             </div>
                             <h5 class="mb-3">Sede legale</h5>
                             <div class="row">
-                                <div class="col-md-4 mb-3">
+                                <div class="col-md-3 mb-3">
                                     <label class="form-label">Nazione</label>
-                                    <input type="text" class="form-control" wire:model="sede_legale_nazione">
+                                    <input type="text" class="form-control rounded-pill" wire:model="sede_legale_nazione">
                                 </div>
-                                <div class="col-md-4 mb-3">
+                                <div class="col-md-3 mb-3">
                                     <label class="form-label">Provincia</label>
-                                    <input type="text" class="form-control" wire:model="sede_legale_provincia">
+                                    <input type="text" class="form-control rounded-pill" wire:model="sede_legale_provincia">
                                 </div>
-                                <div class="col-md-4 mb-3">
+                                <div class="col-md-6 mb-3">
                                     <label class="form-label">Comune</label>
-                                    <input type="text" class="form-control" wire:model="sede_legale_comune">
+                                    <input type="text" class="form-control rounded-pill" wire:model="sede_legale_comune">
                                 </div>
                             </div>
                             <div class="row">
-                                <div class="col-md-8 mb-3">
+                                <div class="col-md-6 mb-3">
                                     <label class="form-label">Indirizzo</label>
-                                    <input type="text" class="form-control" wire:model="sede_legale_indirizzo">
+                                    <input type="text" class="form-control rounded-pill" wire:model="sede_legale_indirizzo">
                                 </div>
-                                <div class="col-md-4 mb-3">
+                                <div class="col-md-3 mb-3">
                                     <label class="form-label">CAP</label>
-                                    <input type="text" class="form-control" wire:model="sede_legale_cap">
+                                    <input type="text" class="form-control rounded-pill" wire:model="sede_legale_cap">
                                 </div>
                             </div>
 
@@ -105,27 +108,27 @@
                             @if(!$same_address)
                                 <h5 class="mb-3">Sede operativa</h5>
                                 <div class="row">
-                                    <div class="col-md-4 mb-3">
+                                    <div class="col-md-3 mb-3">
                                         <label class="form-label">Nazione</label>
-                                        <input type="text" class="form-control" wire:model="sede_operativa_nazione">
+                                        <input type="text" class="form-control rounded-pill" wire:model="sede_operativa_nazione">
                                     </div>
-                                    <div class="col-md-4 mb-3">
+                                    <div class="col-md-3 mb-3">
                                         <label class="form-label">Provincia</label>
-                                        <input type="text" class="form-control" wire:model="sede_operativa_provincia">
+                                        <input type="text" class="form-control rounded-pill" wire:model="sede_operativa_provincia">
                                     </div>
-                                    <div class="col-md-4 mb-3">
+                                    <div class="col-md-6 mb-3">
                                         <label class="form-label">Comune</label>
-                                        <input type="text" class="form-control" wire:model="sede_operativa_comune">
+                                        <input type="text" class="form-control rounded-pill" wire:model="sede_operativa_comune">
                                     </div>
                                 </div>
                                 <div class="row">
-                                    <div class="col-md-8 mb-3">
+                                    <div class="col-md-6 mb-3">
                                         <label class="form-label">Indirizzo</label>
-                                        <input type="text" class="form-control" wire:model="sede_operativa_indirizzo">
+                                        <input type="text" class="form-control rounded-pill" wire:model="sede_operativa_indirizzo">
                                     </div>
-                                    <div class="col-md-4 mb-3">
+                                    <div class="col-md-3 mb-3">
                                         <label class="form-label">CAP</label>
-                                        <input type="text" class="form-control" wire:model="sede_operativa_cap">
+                                        <input type="text" class="form-control rounded-pill" wire:model="sede_operativa_cap">
                                     </div>
                                 </div>
                             @endif
@@ -134,13 +137,13 @@
                             <div class="row">
                                 <div class="col-md-6 mb-3">
                                     <label class="form-label">Email*</label>
-                                    <input type="email" class="form-control @error('email') is-invalid @enderror"
+                                    <input type="email" class="form-control rounded-pill @error('email') is-invalid @enderror"
                                             wire:model="email">
                                     @error('email') <span class="text-danger">{{ $message }}</span> @enderror
                                 </div>
                                 <div class="col-md-6 mb-3">
                                     <label class="form-label">Pec*</label>
-                                    <input type="email" class="form-control @error('pec') is-invalid @enderror"
+                                    <input type="email" class="form-control rounded-pill @error('pec') is-invalid @enderror"
                                             wire:model="pec">
                                     @error('pec') <span class="text-danger">{{ $message }}</span> @enderror
                                 </div>
@@ -148,11 +151,11 @@
                             <div class="row">
                                 <div class="col-md-6 mb-3">
                                     <label class="form-label">Telefono</label>
-                                    <input type="text" class="form-control" wire:model="telefono">
+                                    <input type="text" class="form-control rounded-pill" wire:model="telefono">
                                 </div>
                                 <div class="col-md-6 mb-3">
                                     <label class="form-label">Cellulare*</label>
-                                    <input type="text" class="form-control @error('cellulare') is-invalid @enderror"
+                                    <input type="text" class="form-control rounded-pill @error('cellulare') is-invalid @enderror"
                                             wire:model="cellulare">
                                     @error('cellulare') <span class="text-danger">{{ $message }}</span> @enderror
                                 </div>
@@ -160,38 +163,22 @@
 
                             <h5 class="mb-3">Dati fiscali</h5>
                             <div class="row">
-                                <div class="col-md-4 mb-3">
+                                <div class="col-md-3 mb-3">
                                     <label class="form-label">Partita IVA</label>
-                                    <input type="text" class="form-control" wire:model="partita_iva">
+                                    <input type="text" class="form-control rounded-pill" wire:model="partita_iva">
                                 </div>
-                                <div class="col-md-4 mb-3">
+                                <div class="col-md-3 mb-3">
                                     <label class="form-label">Codice fiscale</label>
-                                    <input type="text" class="form-control" wire:model="codice_fiscale">
+                                    <input type="text" class="form-control rounded-pill" wire:model="codice_fiscale">
                                 </div>
-                                <div class="col-md-4 mb-3">
+                                <div class="col-md-3 mb-3">
                                     <label class="form-label">Codice SDI</label>
-                                    <input type="text" class="form-control" wire:model="codice_sdi">
+                                    <input type="text" class="form-control rounded-pill" wire:model="codice_sdi">
                                 </div>
                             </div>
 
-                            <h5 class="mb-3">Configurazione contabilità</h5>
-                            <div class="row">
-                                <div class="col-md-4 mb-3">
-                                    <label class="form-label">Chiusura anno fiscale</label>
-                                    <input type="date" class="form-control" wire:model="chiusura_anno_fiscale">
-                                </div>
-                                <div class="col-md-4 mb-3">
-                                    <label class="form-label">Scadenza abbonamenti</label>
-                                    <input type="date" class="form-control" wire:model="scadenza_abbonamenti">
-                                </div>
-                                <div class="col-md-4 mb-3">
-                                    <label class="form-label">Scadenza pagamenti in uscita</label>
-                                    <input type="date" class="form-control" wire:model="scadenza_pagamenti_uscita">
-                                </div>
-                            </div>
-
-                            <div class="mt-4">
-                                <button type="submit" class="btn btn-primary">Salva</button>
+                            <div class="mt-4 d-flex justify-content-end">
+                                <button type="submit" class="btn text-light" style="background-color:#0C6197 ">Salva</button>
                             </div>
                         </form>
                     </div>
@@ -199,7 +186,32 @@
             </div>
         </div>
     </div>
-</div>
+    <style>
+        /* Custom CSS for rounded multi-select */
+        .discipline-select {
+            border-radius: 20px !important;
+        }
+
+        /* If using Select2 */
+        .discipline-select + .select2-container .select2-selection {
+            border-radius: 20px !important;
+        }
+        .discipline-select + .select2-container .select2-dropdown {
+            border-radius: 15px !important;
+            overflow: hidden;
+        }
+
+        /* If using Choices.js */
+        .discipline-select + .choices {
+            border-radius: 20px !important;
+        }
+        .discipline-select + .choices .choices__inner {
+            border-radius: 20px !important;
+        }
+        .discipline-select + .choices .choices__list--dropdown {
+            border-radius: 15px !important;
+        }
+        </style>
 @push('scripts')
     <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
     <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

+ 66 - 5
resources/views/livewire/member.blade.php

@@ -1251,7 +1251,7 @@
                                                                     @endif
                                                                 </td>
                                                             </tr>
-                                                        
+
                                                         @endif
 
                                                     @endforeach
@@ -1323,9 +1323,9 @@
                                                                     </select>
                                                                 </div>
                                                             @endif
-                                                            
+
                                                         </div>
-                                                        
+
                                                     </div>
                                                     @if($course_course_id > 0)
                                                         <div class="row mt-4">
@@ -1344,9 +1344,9 @@
                                                                 <label for="course_price" class="form-label">Costo mensile</label>
                                                                 <input class="form-control" type="text" id="course_price" placeholder="Costo mensile" wire:model="course_price" onkeyup="onlyNumberAmount(this)">
                                                             </div>
-                                                            
+
                                                         </div>
-                                                    
+
                                                         @if(false)
                                                             <div class="row mt-4 course--duration">
                                                                 <div class="col-md-12">
@@ -1919,6 +1919,16 @@
         color: black;
         font-weight:normal;
     }
+
+    .persistent-invalid
+    {
+        border-color: #dc3545 !important;
+        padding-right: calc(1.5em + 0.75rem) !important;
+        background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") !important;
+        background-repeat: no-repeat !important;
+        background-position: right calc(0.375em + 0.1875rem) center !important;
+        background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) !important;
+    }
     </style>
     <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
     <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
@@ -2661,6 +2671,57 @@
         $(document).ready(function() {
             setupBackButtonHandlers();
         });
+        document.addEventListener('livewire:load', () => {
+    Livewire.on('focus-error-field', (fieldId) => {
+        console.log('Validation errors received:', fieldId);
+        let element;
+
+        if (typeof fieldId === 'string') {
+            element = document.getElementById(fieldId);
+        } else if (Array.isArray(fieldId) && fieldId.length > 0) {
+            const firstFieldId = fieldId[0];
+            element = document.getElementById(firstFieldId);
+            fieldId = firstFieldId; // Use the first fieldId for highlighting
+        }
 
+        if (element) {
+            element.focus();
+            element.scrollIntoView({
+                behavior: 'smooth',
+                block: 'center'
+            });
+
+            // Add the is-invalid class to highlight the field
+            element.classList.add('is-invalid');
+
+            // Also highlight the label
+            const label = document.querySelector(`label[for="${fieldId}"]`);
+            if (label) {
+                label.classList.add('text-danger');
+            }
+
+            // Prevent the class from being removed
+            const preserveInvalidClass = () => {
+                if (!element.classList.contains('is-invalid')) {
+                    element.classList.add('is-invalid');
+                }
+            };
+
+            // Set an interval to ensure the class stays applied
+            const intervalId = setInterval(preserveInvalidClass, 100);
+
+            // Stop preserving after user interaction
+            element.addEventListener('input', () => {
+                clearInterval(intervalId);
+                // Optional: Remove the highlighting when user edits the field
+                // element.classList.remove('is-invalid');
+                // if (label) label.classList.remove('text-danger');
+            });
+
+        } else {
+            console.warn('Element with id ' + fieldId + ' not found');
+        }
+    });
+});
     </script>
 @endpush