modifiche siderbar e correzioni

This commit is contained in:
2026-05-26 12:28:39 +02:00
parent f088dba4bf
commit 85dd9c2ee6
119 changed files with 14461 additions and 42 deletions
+8 -5
View File
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Models\Evento;
use App\Models\Gruppo;
use App\Models\Individuo;
use App\Models\TipologiaEvento;
use Illuminate\Http\Request;
class EventoController extends Controller
@@ -28,7 +29,7 @@ class EventoController extends Controller
$sortBy = $request->get('sort', 'created_at');
$sortDir = $request->get('direction', 'desc');
$allowedSorts = ['nome_evento', 'descrizione_evento', 'tipo_recorrenza', 'data_specifica', 'created_at'];
$allowedSorts = ['nome_evento', 'descrizione_evento', 'tipo_evento', 'tipo_recorrenza', 'data_specifica', 'created_at'];
if ($sortBy === 'gruppi') {
$query->withCount('gruppi')->orderBy('gruppi_count', $sortDir === 'asc' ? 'asc' : 'desc');
@@ -52,8 +53,9 @@ class EventoController extends Controller
$gruppi = Gruppo::orderBy('nome')->get();
$individui = Individuo::orderBy('cognome')->orderBy('nome')->get();
$selectedGruppo = $request->query('gruppo_id') ? Gruppo::find($request->query('gruppo_id')) : null;
$tipologieEventi = TipologiaEvento::attive();
return view('eventi.create', compact('gruppi', 'individui', 'selectedGruppo'));
return view('eventi.create', compact('gruppi', 'individui', 'selectedGruppo', 'tipologieEventi'));
}
public function store(Request $request)
@@ -62,7 +64,7 @@ class EventoController extends Controller
$data = $request->validate([
'nome_evento' => 'required|string|max:255',
'descrizione_evento' => 'nullable|string|max:255',
'tipo_evento' => 'nullable|string|max:100',
'tipo_evento' => 'nullable|exists:tipologie_eventi,nome',
'tipo_recorrenza' => 'nullable|in:singolo,settimanale,mensile,annuale,altro',
'giorno_settimana' => 'nullable|integer|min:0|max:6',
'giorno_mese' => 'nullable|integer|min:1|max:31',
@@ -128,8 +130,9 @@ class EventoController extends Controller
$evento = Evento::with(['gruppi', 'responsabili', 'documenti'])->findOrFail($evento);
$gruppi = Gruppo::orderBy('nome')->get();
$individui = Individuo::orderBy('cognome')->orderBy('nome')->get();
$tipologieEventi = TipologiaEvento::attive();
return view('eventi.edit', compact('evento', 'gruppi', 'individui'));
return view('eventi.edit', compact('evento', 'gruppi', 'individui', 'tipologieEventi'));
}
public function update(Request $request, $evento)
@@ -140,7 +143,7 @@ class EventoController extends Controller
$data = $request->validate([
'nome_evento' => 'required|string|max:255',
'descrizione_evento' => 'nullable|string|max:255',
'tipo_evento' => 'nullable|string|max:100',
'tipo_evento' => 'nullable|exists:tipologie_eventi,nome',
'tipo_recorrenza' => 'nullable|in:singolo,settimanale,mensile,annuale,altro',
'giorno_settimana' => 'nullable|integer|min:0|max:6',
'giorno_mese' => 'nullable|integer|min:1|max:31',
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Models\AppSetting;
use App\Models\Ruolo;
use App\Models\TipologiaDocumento;
use App\Models\TipologiaEvento;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
@@ -15,10 +16,11 @@ class ImpostazioniController extends Controller
$this->authorizeWrite('viste');
$tipologie = TipologiaDocumento::orderBy('ordine')->get();
$tipologieEventi = TipologiaEvento::orderBy('ordine')->get();
$ruoli = Ruolo::orderBy('ordine')->get();
$appSettings = AppSetting::first();
return view('impostazioni.index', compact('tipologie', 'ruoli', 'appSettings'));
return view('impostazioni.index', compact('tipologie', 'tipologieEventi', 'ruoli', 'appSettings'));
}
public function saveAppSettings(Request $request)
@@ -185,6 +187,72 @@ class ImpostazioniController extends Controller
return response()->json(['success' => true]);
}
public function tipologieEventiStore(Request $request)
{
$this->authorizeWrite('viste');
$validated = $request->validate([
'nome' => 'required|string|max:50|unique:tipologie_eventi,nome',
'descrizione' => 'nullable|string|max:255',
]);
$maxOrdine = TipologiaEvento::max('ordine') ?? 0;
TipologiaEvento::create([
'nome' => $validated['nome'],
'descrizione' => $validated['descrizione'] ?? null,
'ordine' => $maxOrdine + 1,
'attiva' => true,
]);
return redirect('/impostazioni#tipologie-eventi')->with('success', 'Tipologia evento aggiunta.');
}
public function tipologieEventiUpdate(Request $request, $id)
{
$this->authorizeWrite('viste');
$tipologia = TipologiaEvento::findOrFail($id);
$validated = $request->validate([
'nome' => 'required|string|max:50|unique:tipologie_eventi,nome,' . $id,
'descrizione' => 'nullable|string|max:255',
'attiva' => 'boolean',
]);
$tipologia->update($validated);
return redirect('/impostazioni#tipologie-eventi')->with('success', 'Tipologia evento aggiornata.');
}
public function tipologieEventiDestroy($id)
{
$this->authorizeDelete('viste');
$tipologia = TipologiaEvento::findOrFail($id);
$count = $tipologia->eventi()->count();
if ($count > 0) {
return redirect('/impostazioni#tipologie-eventi')->with('error', 'Impossibile eliminare: ' . $count . ' eventi associati.');
}
$tipologia->delete();
return redirect('/impostazioni#tipologie-eventi')->with('success', 'Tipologia evento eliminata.');
}
public function tipologieEventiReorder(Request $request)
{
$this->authorizeWrite('viste');
$order = $request->input('order', []);
foreach ($order as $index => $id) {
TipologiaEvento::where('id', $id)->update(['ordine' => $index]);
}
return response()->json(['success' => true]);
}
public function uploadLogo(Request $request)
{
$this->authorizeWrite('viste');
+5
View File
@@ -38,6 +38,11 @@ class Evento extends Model
'is_incontro_gruppo' => 'boolean',
];
public function tipologiaEvento(): BelongsTo
{
return $this->belongsTo(TipologiaEvento::class, 'tipo_evento', 'nome');
}
public function tenant(): BelongsTo
{
return $this->belongsTo(Tenant::class);
+35
View File
@@ -0,0 +1,35 @@
<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class TipologiaEvento extends Model
{
protected $table = 'tipologie_eventi';
protected $fillable = ['nome', 'descrizione', 'ordine', 'attiva'];
protected $casts = [
'attiva' => 'boolean',
'ordine' => 'integer',
];
public function eventi(): HasMany
{
return $this->hasMany(Evento::class, 'tipo_evento', 'nome');
}
public static function attive(): \Illuminate\Database\Eloquent\Collection
{
return static::where('attiva', true)->orderBy('ordine')->get();
}
public static function opzioni(): array
{
return static::attive()->pluck('nome')->toArray();
}
}