fino a eventi e report prima del tipo di eventi

This commit is contained in:
2026-05-26 11:47:36 +02:00
parent 0bed099d05
commit f088dba4bf
47 changed files with 1733 additions and 6899 deletions
+108 -5
View File
@@ -121,6 +121,43 @@ $canDeleteGruppi = Auth::user()->canDelete('gruppi');
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-header">
<h3 class="card-title"><i class="fas fa-camera mr-2"></i>Avatar</h3>
</div>
<div class="card-body text-center">
@if($gruppo->avatar_url)
<img src="{{ $gruppo->avatar_url }}"
alt="{{ $gruppo->nome }}"
class="img-thumbnail mb-2"
style="max-width: 120px; max-height: 120px; object-fit: cover; border-radius: 50%;">
<br>
<form id="remove-avatar-form" class="d-inline">
<button type="button" class="btn btn-danger btn-sm" onclick="removeAvatar()">
<i class="fas fa-trash mr-1"></i>Rimuovi
</button>
</form>
@else
<div class="bg-secondary d-flex align-items-center justify-content-center mb-3"
style="width: 120px; height: 120px; margin: 0 auto; border-radius: 50%;">
<i class="fas fa-folder fa-4x text-white"></i>
</div>
@endif
<form id="avatar-upload-form" enctype="multipart/form-data">
@csrf
<div class="custom-file mb-2">
<input type="file" class="custom-file-input" id="avatar-input" name="avatar" accept="image/jpeg,image/png,image/gif,image/webp">
<label class="custom-file-label" for="avatar-input">Scegli immagine...</label>
</div>
<button type="button" class="btn btn-primary btn-sm" onclick="uploadAvatar()">
<i class="fas fa-upload mr-1"></i>Carica
</button>
</form>
<div id="avatar-message" class="mt-2"></div>
</div>
</div>
</div>
@php
$incontroEvento = $gruppo->eventi->where('is_incontro_gruppo', true)->first();
@@ -155,6 +192,9 @@ $canDeleteGruppi = Auth::user()->canDelete('gruppi');
<span class="badge badge-info ml-1">Mensile</span>
@elseif($incontroEvento->tipo_recorrenza === 'annuale')
{{ $incontroEvento->mese_annuale_label }}
@if($incontroEvento->giorno_mese)
, giorno {{ $incontroEvento->giorno_mese }}
@endif
<span class="badge badge-info ml-1">Annuale</span>
@elseif($incontroEvento->tipo_recorrenza === 'altro')
{{ $incontroEvento->giorno_settimana_label }}
@@ -503,13 +543,76 @@ function previewDocumento(id, mimeType) {
document.getElementById('previewDownloadBtn').href = downloadUrl;
document.getElementById('previewModalTitle').textContent = 'Anteprima';
if (mimeType && mimeType.startsWith('image/')) {
document.getElementById('previewDownloadBtn').style.display = 'inline-block';
} else {
document.getElementById('previewDownloadBtn').style.display = 'none';
}
document.getElementById('previewDownloadBtn').style.display = 'inline-block';
$('#previewModal').modal('show');
}
document.getElementById('avatar-input').addEventListener('change', function(e) {
if (e.target.files.length > 0) {
var label = e.target.files[0].name;
var next = e.target.nextElementSibling;
if (next && next.classList.contains('custom-file-label')) {
next.textContent = label;
}
}
});
function uploadAvatar() {
var input = document.getElementById('avatar-input');
if (!input.files.length) {
document.getElementById('avatar-message').innerHTML = '<span class="text-danger">Seleziona un\'immagine</span>';
return;
}
var formData = new FormData();
formData.append('avatar', input.files[0]);
formData.append('_token', '{{ csrf_token() }}');
document.getElementById('avatar-message').innerHTML = '<span class="text-info"><i class="fas fa-spinner fa-spin"></i> Caricamento...</span>';
fetch('{{ url('/gruppi/' . $gruppo->id . '/avatar') }}', {
method: 'POST',
body: formData,
headers: { 'X-Requested-With': 'XMLHttpRequest' },
})
.then(response => response.json())
.then(data => {
if (data.success) {
document.getElementById('avatar-message').innerHTML = '<span class="text-success">Avatar caricato!</span>';
setTimeout(function() { window.location.reload(); }, 1000);
} else {
document.getElementById('avatar-message').innerHTML = '<span class="text-danger">' + (data.message || 'Errore') + '</span>';
}
})
.catch(error => {
document.getElementById('avatar-message').innerHTML = '<span class="text-danger">Errore: ' + error + '</span>';
});
}
function removeAvatar() {
if (!confirm('Rimuovere l\'avatar?')) return;
fetch('{{ url('/gruppi/' . $gruppo->id . '/avatar') }}', {
method: 'DELETE',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}',
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'application/json',
},
})
.then(response => response.json())
.then(data => {
if (data.success) {
document.getElementById('avatar-message').innerHTML = '<span class="text-success">Avatar rimosso!</span>';
setTimeout(function() { window.location.reload(); }, 1000);
} else {
document.getElementById('avatar-message').innerHTML = '<span class="text-danger">' + (data.message || 'Errore') + '</span>';
}
})
.catch(error => {
document.getElementById('avatar-message').innerHTML = '<span class="text-danger">Errore: ' + error + '</span>';
});
}
</script>
@endsection