FabioFratini 9 місяців тому
батько
коміт
253b9c31a7

+ 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!');
+        }
+    }
 }

+ 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

@@ -385,11 +385,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>