modifiche siderbar e correzioni
This commit is contained in:
@@ -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');
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user