@@ -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