Skip to content

Commit 1eb8da9

Browse files
committed
fix: salvataggio conti in plugin Registrazioni
1 parent b087bab commit 1eb8da9

2 files changed

Lines changed: 156 additions & 15 deletions

File tree

plugins/registrazioni/actions.php

Lines changed: 62 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,71 @@
3434
$conti_cespiti = (array) post('idconto_cespiti');
3535
$cespiti = (array) post('is_cespite');
3636

37-
foreach ($conti as $id_riga => $conto) {
38-
$riga = RigaArticolo::find($id_riga) ?: Riga::find($id_riga);
39-
$riga = $riga ?: Sconto::find($id_riga);
40-
41-
// Modifica descrizione fornitore
42-
$riga->id_conto = $cespiti[$id_riga] ? $conti_cespiti[$id_riga] : $conto;
43-
$riga->is_cespite = $cespiti[$id_riga] ?? 0;
44-
$riga->save();
45-
}
37+
$errori = [];
38+
$righe_aggiornate = 0;
4639

47-
$fattura = Fattura::find($id_record);
40+
try {
41+
foreach ($conti as $id_riga => $conto) {
42+
$riga = RigaArticolo::find($id_riga) ?: Riga::find($id_riga);
43+
$riga = $riga ?: Sconto::find($id_riga);
4844

49-
if ($fattura->stato->getTranslation('title') != 'Bozza') {
50-
$fattura->gestoreMovimenti = new GestoreMovimenti($fattura);
51-
$fattura->gestoreMovimenti->registra();
52-
}
45+
if (!$riga) {
46+
$errori[] = tr('Riga _ID_ non trovata', ['_ID_' => $id_riga]);
47+
continue;
48+
}
49+
50+
$is_cespite = !empty($cespiti[$id_riga]);
51+
$conto_selezionato = $is_cespite ? ($conti_cespiti[$id_riga] ?? null) : $conto;
52+
53+
// Validazione lato server
54+
if (empty($conto_selezionato)) {
55+
$tipo_conto = $is_cespite ? tr('conto cespite') : tr('conto');
56+
$errori[] = tr('Riga _ID_: selezionare un _TIPO_', [
57+
'_ID_' => $id_riga,
58+
'_TIPO_' => $tipo_conto
59+
]);
60+
continue;
61+
}
62+
63+
// Verifica che il conto esista nel database
64+
$conto_exists = $dbo->fetchOne('SELECT id FROM co_pianodeiconti3 WHERE id = ?', [$conto_selezionato]);
65+
if (!$conto_exists) {
66+
$errori[] = tr('Riga _ID_: il conto selezionato non è valido', ['_ID_' => $id_riga]);
67+
continue;
68+
}
5369

54-
flash()->info(tr('Salvataggio completato!'));
70+
// Aggiorna la riga
71+
$riga->id_conto = $conto_selezionato;
72+
$riga->is_cespite = $is_cespite ? 1 : 0;
73+
$riga->save();
74+
75+
$righe_aggiornate++;
76+
}
77+
78+
if (!empty($errori)) {
79+
flash()->error(tr('Errori durante il salvataggio:').'<ul><li>'.implode('</li><li>', $errori).'</li></ul>');
80+
} else {
81+
$fattura = Fattura::find($id_record);
82+
83+
if ($fattura->stato->getTranslation('title') != 'Bozza') {
84+
try {
85+
$fattura->gestoreMovimenti = new GestoreMovimenti($fattura);
86+
$fattura->gestoreMovimenti->registra();
87+
} catch (Exception $e) {
88+
flash()->error(tr('Errore durante la registrazione dei movimenti contabili: _ERROR_', ['_ERROR_' => $e->getMessage()]));
89+
break;
90+
}
91+
}
92+
93+
if ($righe_aggiornate > 0) {
94+
flash()->info(tr('Salvataggio completato! _NUM_ righe aggiornate.', ['_NUM_' => $righe_aggiornate]));
95+
} else {
96+
flash()->warning(tr('Nessuna riga è stata aggiornata.'));
97+
}
98+
}
99+
} catch (Exception $e) {
100+
flash()->error(tr('Errore durante il salvataggio: _ERROR_', ['_ERROR_' => $e->getMessage()]));
101+
}
55102

56103
break;
57104
}

plugins/registrazioni/edit.php

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,24 +163,118 @@ function copy() {
163163
}
164164
}
165165
166+
// Funzione per validare i conti prima del submit
167+
function validateConti() {
168+
let valid = true;
169+
let errors = [];
170+
171+
// Controlla ogni riga
172+
$("input[name^=\'is_cespite\']").each(function() {
173+
const id = $(this).attr("name").match(/\[(.*?)\]/)[1];
174+
const is_cespite = $(this).val() == 1;
175+
176+
let conto_selezionato = null;
177+
178+
if (is_cespite) {
179+
// Verifica conto cespite
180+
const select_cespite = $("#select-conto-cespite-" + id).find("select");
181+
conto_selezionato = select_cespite.val();
182+
183+
if (!conto_selezionato || conto_selezionato == \'\') {
184+
valid = false;
185+
errors.push(\'Riga \' + id + \': selezionare un conto cespite\');
186+
select_cespite.addClass(\'parsley-error\');
187+
} else {
188+
select_cespite.removeClass(\'parsley-error\');
189+
}
190+
} else {
191+
// Verifica conto standard
192+
const select_standard = $("#select-conto-standard-" + id).find("select");
193+
conto_selezionato = select_standard.val();
194+
195+
if (!conto_selezionato || conto_selezionato == \'\') {
196+
valid = false;
197+
errors.push(\'Riga \' + id + \': selezionare un conto\');
198+
select_standard.addClass(\'parsley-error\');
199+
} else {
200+
select_standard.removeClass(\'parsley-error\');
201+
}
202+
}
203+
});
204+
205+
if (!valid) {
206+
swal({
207+
type: "error",
208+
title: "<?php echo tr(\'Errori di validazione\'); ?>",
209+
html: "<?php echo tr(\'Correggere i seguenti errori:\'); ?><br><ul><li>" + errors.join("</li><li>") + "</li></ul>"
210+
});
211+
}
212+
213+
return valid;
214+
}
215+
166216
// Gestione del reset del conto quando si cambia lo stato del cespite
167217
$(document).ready(function() {
218+
// Override del submit del form per aggiungere validazione personalizzata
219+
$(\'form\').off(\'submit\').on(\'submit\', function(e) {
220+
e.preventDefault();
221+
222+
// Prima validazione Parsley standard
223+
if (!$(this).parsley().validate()) {
224+
return false;
225+
}
226+
227+
// Poi validazione personalizzata per i conti
228+
if (!validateConti()) {
229+
return false;
230+
}
231+
232+
// Se tutto è valido, procedi con il submit
233+
this.submit();
234+
return true;
235+
});
236+
168237
$("input[name^=\'is_cespite\']").change(function() {
169238
const id = $(this).attr("name").match(/\[(.*?)\]/)[1];
170239
const is_cespite = $(this).val() == 1;
171240
241+
// Rimuovi eventuali errori precedenti
242+
$("#select-conto-standard-" + id).find("select").removeClass(\'parsley-error\');
243+
$("#select-conto-cespite-" + id).find("select").removeClass(\'parsley-error\');
244+
172245
// Mostra/nascondi i selettori appropriati
173246
if (is_cespite) {
174247
$("#select-conto-standard-" + id).hide();
175248
$("#select-conto-standard-" + id).find("select").attr("required", false);
176249
$("#select-conto-cespite-" + id).show();
177250
$("#select-conto-cespite-" + id).find("select").attr("required", true);
251+
252+
// Verifica se ci sono conti cespiti disponibili
253+
const conti_cespiti_disponibili = $("#select-conto-cespite-" + id).find("select option").length;
254+
if (conti_cespiti_disponibili <= 1) { // Solo opzione vuota
255+
swal({
256+
type: "warning",
257+
title: "<?php echo tr(\'Attenzione\'); ?>",
258+
text: "<?php echo tr(\'Non ci sono conti cespiti configurati nel sistema. Configurare prima i conti cespiti nelle impostazioni.\'); ?>"
259+
});
260+
// Ripristina lo stato precedente
261+
$(this).val(0).trigger(\'change\');
262+
return false;
263+
}
178264
} else {
179265
$("#select-conto-standard-" + id).show();
180266
$("#select-conto-standard-" + id).find("select").attr("required", true);
181267
$("#select-conto-cespite-" + id).hide();
182268
$("#select-conto-cespite-" + id).find("select").attr("required", false);
183269
}
270+
271+
// Aggiorna la validazione Parsley
272+
$(\'form\').parsley().refresh();
273+
});
274+
275+
// Gestione del cambio di selezione nei conti per rimuovere errori
276+
$("select[name^=\'idconto\']").change(function() {
277+
$(this).removeClass(\'parsley-error\');
184278
});
185279
});
186280
</script>';

0 commit comments

Comments
 (0)