setup viste

This commit is contained in:
2026-06-10 14:03:43 +02:00
parent 0dd567cf7a
commit 43a2c81312
17 changed files with 1306 additions and 582 deletions
+74 -11
View File
@@ -5,6 +5,10 @@
@php
$canWriteEventi = Auth::user()->canManage('eventi');
$canDeleteEventi = Auth::user()->canDelete('eventi');
$vistaDefaultJson = isset($vista) ? $vista->toJson() : 'null';
$visibleColumnsJson = json_encode($visibleColumns ?? []);
$tableColumnsJson = json_encode($tableColumns ?? []);
$entityType = $entityType ?? 'eventi';
@endphp
@section('content')
@@ -20,6 +24,9 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
<div class="card-header">
<h3 class="card-title">Tutti gli Eventi</h3>
<div class="card-tools">
<button type="button" class="btn btn-sm btn-secondary mr-1" onclick="$('#table-settings-modal').modal('show')" title="Impostazioni tabella">
<i class="fas fa-cog"></i>
</button>
<a href="/eventi/calendar" class="btn btn-sm btn-outline-primary mr-2">
<i class="fas fa-calendar-alt mr-1"></i> Calendario
</a>
@@ -75,10 +82,10 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
</div>
</form>
<table class="table table-bordered table-hover">
<table class="table table-bordered table-hover" id="eventi-table">
<thead class="thead-light">
<tr>
<th style="width: 40px;">
<th style="width: 40px;" data-column="select">
@if($canDeleteEventi)
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="select-all" onchange="toggleSelectAll(this)">
@@ -86,7 +93,8 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
</div>
@endif
</th>
<th>
@if(in_array('nome_evento', $visibleColumns))
<th data-column="nome_evento" data-sortable="true">
<a href="{{ request()->fullUrlWithQuery(['sort' => 'nome_evento', 'direction' => request('sort') === 'nome_evento' && request('direction') === 'asc' ? 'desc' : 'asc']) }}" class="text-dark">
Nome Evento
@if(request('sort') === 'nome_evento')
@@ -96,7 +104,9 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
@endif
</a>
</th>
<th>
@endif
@if(in_array('descrizione_evento', $visibleColumns))
<th data-column="descrizione_evento" data-sortable="true">
<a href="{{ request()->fullUrlWithQuery(['sort' => 'descrizione_evento', 'direction' => request('sort') === 'descrizione_evento' && request('direction') === 'asc' ? 'desc' : 'asc']) }}" class="text-dark">
Descrizione
@if(request('sort') === 'descrizione_evento')
@@ -106,7 +116,9 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
@endif
</a>
</th>
<th>
@endif
@if(in_array('tipo_evento', $visibleColumns))
<th data-column="tipo_evento" data-sortable="true">
<a href="{{ request()->fullUrlWithQuery(['sort' => 'tipo_evento', 'direction' => request('sort') === 'tipo_evento' && request('direction') === 'asc' ? 'desc' : 'asc']) }}" class="text-dark">
Tipologia
@if(request('sort') === 'tipo_evento')
@@ -116,7 +128,9 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
@endif
</a>
</th>
<th>
@endif
@if(in_array('tipo_recorrenza', $visibleColumns))
<th data-column="tipo_recorrenza" data-sortable="true">
<a href="{{ request()->fullUrlWithQuery(['sort' => 'tipo_recorrenza', 'direction' => request('sort') === 'tipo_recorrenza' && request('direction') === 'asc' ? 'desc' : 'asc']) }}" class="text-dark">
Ricorrenza
@if(request('sort') === 'tipo_recorrenza')
@@ -126,7 +140,9 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
@endif
</a>
</th>
<th>
@endif
@if(in_array('gruppi', $visibleColumns))
<th data-column="gruppi">
<a href="{{ request()->fullUrlWithQuery(['sort' => 'gruppi', 'direction' => request('sort') === 'gruppi' && request('direction') === 'asc' ? 'desc' : 'asc']) }}" class="text-dark">
Gruppi
@if(request('sort') === 'gruppi')
@@ -136,7 +152,9 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
@endif
</a>
</th>
<th>
@endif
@if(in_array('responsabili', $visibleColumns))
<th data-column="responsabili">
<a href="{{ request()->fullUrlWithQuery(['sort' => 'responsabili', 'direction' => request('sort') === 'responsabili' && request('direction') === 'asc' ? 'desc' : 'asc']) }}" class="text-dark">
Responsabili
@if(request('sort') === 'responsabili')
@@ -146,8 +164,12 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
@endif
</a>
</th>
<th>Tag</th>
<th style="width: 120px;">
@endif
@if(in_array('tag', $visibleColumns))
<th data-column="tag">Tag</th>
@endif
@if(in_array('created_at', $visibleColumns))
<th style="width: 120px;" data-column="created_at">
<a href="{{ request()->fullUrlWithQuery(['sort' => 'created_at', 'direction' => request('sort') === 'created_at' && request('direction') === 'asc' ? 'desc' : 'asc']) }}" class="text-dark">
Creato
@if(request('sort') === 'created_at')
@@ -157,6 +179,7 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
@endif
</a>
</th>
@endif
<th style="width: 120px;">Azioni</th>
</tr>
</thead>
@@ -171,6 +194,7 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
</div>
@endif
</td>
@if(in_array('nome_evento', $visibleColumns))
<td>
<a href="/eventi/{{ $evento->id }}">
<i class="fas fa-calendar mr-1 text-primary"></i>
@@ -180,7 +204,11 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
<span class="badge badge-success ml-1">Incluso</span>
@endif
</td>
@endif
@if(in_array('descrizione_evento', $visibleColumns))
<td>{{ Str::limit($evento->descrizione_evento, 50) ?: '-' }}</td>
@endif
@if(in_array('tipo_evento', $visibleColumns))
<td>
@if($evento->tipo_evento)
@php
@@ -195,6 +223,8 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
<span class="text-muted">-</span>
@endif
</td>
@endif
@if(in_array('tipo_recorrenza', $visibleColumns))
<td>
@if($evento->tipo_recorrenza && $evento->tipo_recorrenza !== 'singolo')
<span class="badge badge-info">{{ $evento->periodicita_label }}</span>
@@ -202,6 +232,8 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
<span class="badge badge-secondary">Singolo</span>
@endif
</td>
@endif
@if(in_array('gruppi', $visibleColumns))
<td>
@forelse($evento->gruppi->take(2) as $gruppo)
<a href="/gruppi/{{ $gruppo->id }}">
@@ -214,6 +246,8 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
<small class="text-muted">+{{ $evento->gruppi->count() - 2 }}</small>
@endif
</td>
@endif
@if(in_array('responsabili', $visibleColumns))
<td>
@forelse($evento->responsabili->take(2) as $resp)
<small>{{ $resp->nome_completo }}</small><br>
@@ -224,12 +258,17 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
<small class="text-muted">+{{ $evento->responsabili->count() - 2 }} altri</small>
@endif
</td>
@endif
@if(in_array('tag', $visibleColumns))
<td>
@foreach($evento->tags as $tag)
<a href="{{ route('eventi.index', ['tag[]' => $tag->slug]) }}" class="badge" style="background-color: {{ $tag->color ?? '#6c757d' }}; color: #fff;">{{ $tag->name }}</a>
@endforeach
</td>
@endif
@if(in_array('created_at', $visibleColumns))
<td><small class="text-muted">{{ $evento->created_at->format('d/m/Y') }}</small></td>
@endif
<td>
<a href="{{ url('/eventi/' . $evento->id) }}" class="btn btn-xs btn-info" title="Visualizza">
<i class="fas fa-eye"></i>
@@ -249,7 +288,7 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
</tr>
@empty
<tr>
<td colspan="10" class="text-center text-muted py-4">
<td colspan="20" class="text-center text-muted py-4">
<i class="fas fa-calendar fa-2x mb-2"></i>
<p class="mb-0">Nessun evento trovato</p>
</td>
@@ -284,6 +323,10 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
</div>
</div>
@include('partials.table-settings')
<div id="vista-data" style="display:none;">{{ $vistaDefaultJson }}</div>
<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog">
@if($canDeleteEventi)
<div class="modal-dialog" role="document">
@@ -309,6 +352,7 @@ $canDeleteEventi = Auth::user()->canDelete('eventi');
@endsection
@section('scripts')
<script src="{{ asset('js/column-manager.js') }}"></script>
<script>
function toggleSelectAll(source) {
document.querySelectorAll('.row-checkbox').forEach(cb => cb.checked = source.checked);
@@ -374,5 +418,24 @@ function exportSelectedIcs() {
document.body.appendChild(form);
form.submit();
}
document.addEventListener('DOMContentLoaded', function () {
const table = document.getElementById('eventi-table');
if (table) {
window.columnManager = new ColumnManager('eventi-table', {
entityType: 'eventi',
storageKey: 'cm_eventi',
resizable: true,
reorderable: true,
});
initTableSettings();
}
});
window.printWithCurrentSettings = function () {
if (window.columnManager) {
window.columnManager.printWithSettings();
}
};
</script>
@endsection