fix error

This commit is contained in:
2026-06-02 20:29:47 +02:00
parent 3fb653f4bf
commit aa4e582925
23 changed files with 278 additions and 5790 deletions
+117 -29
View File
@@ -232,24 +232,20 @@
<button type="button" class="btn btn-xs btn-warning" onclick="editGruppoInline({{ $gruppo->id }})" title="Modifica">
<i class="fas fa-edit"></i>
</button>
<form action="/individui/{{ $individuo->id }}/gruppi/{{ $gruppo->id }}" method="POST" class="mb-0">
@csrf @method('DELETE')
<button type="submit" class="btn btn-xs btn-danger" onclick="return confirm('Rimuovere da questo gruppo?')" title="Rimuovi">
<i class="fas fa-trash"></i>
</button>
</form>
<button type="button" class="btn btn-xs btn-danger" onclick="deleteGruppoFromEdit({{ $individuo->id }}, {{ $gruppo->id }})" title="Rimuovi">
<i class="fas fa-trash"></i>
</button>
</td>
</tr>
<tr id="gruppo-edit-{{ $gruppo->id }}" style="display:none;">
<td colspan="5">
<form action="/individui/{{ $individuo->id }}/gruppi/{{ $gruppo->id }}" method="POST" class="mb-0">
@csrf @method('PUT')
<div class="mb-0">
<div class="row">
<div class="col-md-4">
<input type="text" class="form-control form-control-sm" value="{{ $gruppo->nome }}" disabled>
</div>
<div class="col-md-3">
<select name="ruolo_ids[]" class="form-control form-control-sm" multiple size="3">
<select id="edit-ruoli-{{ $gruppo->id }}" class="form-control form-control-sm" multiple size="3">
@php $selectedRuoliIds = $individuo->getRuoloIdsForGruppo($gruppo->id) @endphp
@foreach(\App\Models\Ruolo::attive() as $ruolo)
<option value="{{ $ruolo->id }}" {{ in_array($ruolo->id, $selectedRuoliIds) ? 'selected' : '' }}>{{ $ruolo->nome }}</option>
@@ -257,14 +253,14 @@
</select>
</div>
<div class="col-md-3">
<input type="date" name="data_adesione" class="form-control form-control-sm" value="{{ $gruppo->pivot->data_adesione }}">
<input type="date" id="edit-data-{{ $gruppo->id }}" class="form-control form-control-sm" value="{{ $gruppo->pivot->data_adesione }}">
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-xs btn-success"><i class="fas fa-check mr-1"></i>Salva</button>
<button type="button" class="btn btn-xs btn-success" onclick="submitEditGruppo({{ $gruppo->id }})"><i class="fas fa-check mr-1"></i>Salva</button>
<button type="button" class="btn btn-xs btn-secondary" onclick="cancelEditGruppo({{ $gruppo->id }})"><i class="fas fa-times"></i></button>
</div>
</div>
</form>
</div>
</td>
</tr>
@endforeach
@@ -288,18 +284,13 @@
</div>
<div class="card-body p-0">
<div id="documento-add-form" style="display:none;" class="p-3 bg-light border-bottom">
<form action="/documenti" method="POST" enctype="multipart/form-data" class="mb-0">
@csrf
<input type="hidden" name="_redirect" value="{{ url()->current() }}">
<input type="hidden" name="visibilita" value="individuo">
<input type="hidden" name="visibilita_target_id" value="{{ $individuo->id }}">
<input type="hidden" name="visibilita_target_type" value="App\Models\Individuo">
<div class="mb-0">
<div class="row">
<div class="col-md-3">
<input type="text" name="nome_file" class="form-control form-control-sm" placeholder="Nome documento" required>
<input type="text" id="doc-nome-file" class="form-control form-control-sm" placeholder="Nome documento">
</div>
<div class="col-md-3">
<select name="tipologia" class="form-control form-control-sm" required>
<select id="doc-tipologia" class="form-control form-control-sm">
<option value="">Tipologia...</option>
<option value="documento">Documento</option>
<option value="avatar">Avatar</option>
@@ -309,14 +300,14 @@
</select>
</div>
<div class="col-md-4">
<input type="file" name="file" class="form-control form-control-sm" required>
<input type="file" id="doc-file" class="form-control form-control-sm">
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-xs btn-success"><i class="fas fa-upload mr-1"></i>Carica</button>
<button type="button" class="btn btn-xs btn-success" onclick="submitUploadDocumentoIndividuo()"><i class="fas fa-upload mr-1"></i>Carica</button>
<button type="button" class="btn btn-xs btn-secondary" onclick="hideDocumentoForm()"><i class="fas fa-times"></i></button>
</div>
</div>
</form>
</div>
</div>
@if($individuo->documenti->count() > 0)
<table class="table table-bordered table-hover table-striped mb-0">
@@ -347,12 +338,9 @@
<i class="fas fa-eye"></i>
</button>
@endif
<form action="/documenti/{{ $documento->id }}" method="POST" class="d-inline">
@csrf @method('DELETE')
<button type="submit" class="btn btn-xs btn-danger" onclick="return confirm('Eliminare questo documento?')" title="Elimina">
<i class="fas fa-trash"></i>
</button>
</form>
<button type="button" class="btn btn-xs btn-danger" onclick="deleteDocumentoFromEdit({{ $documento->id }})" title="Elimina">
<i class="fas fa-trash"></i>
</button>
</td>
</tr>
@endforeach
@@ -714,5 +702,105 @@ function deleteAvatar() {
alert('Errore: ' + error);
});
}
function deleteGruppoFromEdit(individuoId, gruppoId) {
if (!confirm('Rimuovere da questo gruppo?')) return;
fetch('/individui/' + individuoId + '/gruppi/' + gruppoId, {
method: 'DELETE',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}',
'Accept': 'application/json'
}
})
.then(response => {
if (!response.ok) return response.text().then(text => { throw new Error(text); });
return response.json();
})
.then(data => {
if (data.success) window.location.reload();
else alert(data.error || 'Errore');
})
.catch(error => alert('Errore: ' + error.message));
}
function submitEditGruppo(gruppoId) {
var ruoloSelect = document.getElementById('edit-ruoli-' + gruppoId);
var dataInput = document.getElementById('edit-data-' + gruppoId);
var formData = new URLSearchParams();
var selectedRuoli = Array.from(ruoloSelect.selectedOptions).map(opt => opt.value).filter(v => v);
selectedRuoli.forEach(function(ruoloId) {
formData.append('ruolo_ids[]', ruoloId);
});
formData.append('data_adesione', dataInput ? dataInput.value : '');
fetch('/individui/{{ $individuo->id }}/gruppi/' + gruppoId, {
method: 'PUT',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}',
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded'
},
body: formData.toString()
})
.then(response => {
if (!response.ok) return response.text().then(text => { throw new Error(text); });
return response.json();
})
.then(data => {
if (data.success) window.location.reload();
else alert(data.error || 'Errore');
})
.catch(error => alert('Errore: ' + error.message));
}
function submitUploadDocumentoIndividuo() {
var nomeFile = document.getElementById('doc-nome-file');
var tipologia = document.getElementById('doc-tipologia');
var fileInput = document.getElementById('doc-file');
if (!nomeFile.value || !tipologia.value || !fileInput.files[0]) {
alert('Compila tutti i campi');
return;
}
var formData = new FormData();
formData.append('_token', '{{ csrf_token() }}');
formData.append('_redirect', '{{ url()->current() }}');
formData.append('visibilita', 'individuo');
formData.append('visibilita_target_id', '{{ $individuo->id }}');
formData.append('visibilita_target_type', 'App\\Models\\Individuo');
formData.append('nome_file', nomeFile.value);
formData.append('tipologia', tipologia.value);
formData.append('file', fileInput.files[0]);
document.getElementById('documento-add-form').querySelector('.btn-success').disabled = true;
fetch('/documenti', {
method: 'POST',
body: formData,
headers: { 'Accept': 'application/json' }
})
.then(function() { window.location.reload(); })
.catch(function() { window.location.reload(); });
}
function deleteDocumentoFromEdit(documentoId) {
if (!confirm('Eliminare questo documento?')) return;
var formData = new FormData();
formData.append('_token', '{{ csrf_token() }}');
formData.append('_method', 'DELETE');
formData.append('_redirect', '{{ url()->current() }}');
fetch('/documenti/' + documentoId, {
method: 'POST',
body: formData,
headers: { 'Accept': 'application/json' }
})
.then(function() { window.location.reload(); })
.catch(function() { window.location.reload(); });
}
</script>
@endsection