Skip to content

Commit d9fd466

Browse files
committed
refactor: miglioria gestione caricamento articolo
1 parent d17cc66 commit d9fd466

2 files changed

Lines changed: 43 additions & 11 deletions

File tree

modules/articoli/ajax/select.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@
141141
// Se c'è una sede settata, carico tutti gli articoli presenti in quella sede
142142
if (!$sedi_non_impostate) {
143143
$query .= '
144-
LEFT JOIN (SELECT `idarticolo`, `idsede` FROM `mg_movimenti` GROUP BY `idarticolo`) movimenti ON `movimenti`.`idarticolo`=`mg_articoli`.`id`
144+
LEFT JOIN (SELECT `idarticolo`, `idsede` FROM `mg_movimenti` GROUP BY `idarticolo`, `idsede`) movimenti ON `movimenti`.`idarticolo`=`mg_articoli`.`id`
145145
LEFT JOIN `an_sedi` ON `an_sedi`.`id` = `movimenti`.`idsede`';
146146
}
147147

@@ -207,10 +207,11 @@
207207
// Eventuali articoli disabilitati
208208
foreach ($rs as $k => $r) {
209209
// Lettura movimenti delle mie sedi
210-
$qta_sede = $dbo->fetchOne('SELECT SUM(`mg_movimenti`.`qta`) AS qta FROM `mg_movimenti` LEFT JOIN `an_sedi` ON `an_sedi`.`id` = `mg_movimenti`.`idsede` WHERE `mg_movimenti`.`idarticolo` = '.prepare($r['id']).' AND `idsede` = '.prepare($superselect['idsede_partenza']))['qta'];
210+
$qta_sede = $dbo->fetchOne('SELECT IFNULL(SUM(`mg_movimenti`.`qta`), 0) AS qta FROM `mg_movimenti` LEFT JOIN `an_sedi` ON `an_sedi`.`id` = `mg_movimenti`.`idsede` WHERE `mg_movimenti`.`idarticolo` = '.prepare($r['id']).' AND `idsede` = '.prepare($superselect['idsede_partenza']))['qta'];
211211

212212
$rs[$k] = array_merge($r, [
213213
'text' => $r['codice'].' - '.$r['descrizione'].' '.(!$r['servizio'] ? '('.Translator::numberToLocale($qta_sede).(!empty($r['um']) ? ' '.$r['um'] : '').')' : '').($r['codice_fornitore'] ? ' ('.$r['codice_fornitore'].')' : ''),
214+
'qta_sede' => $qta_sede,
214215
'disabled' => $qta_sede <= 0 && !$permetti_movimenti_sotto_zero && !$r['servizio'],
215216
]);
216217
}

modules/movimenti/add.php

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,17 @@ function disabilitaSede(id){
167167
}
168168
});
169169
170+
// Listener per auto-submit quando viene selezionato un articolo da barcode
171+
$("#idarticolo").on("change", function () {
172+
if (window.barcodeAutoSubmit === true) {
173+
window.barcodeAutoSubmit = false;
174+
// Aspetta un momento per assicurarsi che i dati siano disponibili
175+
setTimeout(function(){
176+
salva($("#aggiungi"));
177+
}, 100);
178+
}
179+
});
180+
170181
// Reload pagina appena chiudo il modal
171182
$("#modals > div").on("hidden.bs.modal", function () {
172183
location.reload();
@@ -175,13 +186,23 @@ function disabilitaSede(id){
175186
176187
function ricercaBarcode(barcode) {
177188
// Ricerca via ajax del barcode negli articoli
178-
$.get(globals.rootdir + "/ajax_select.php?op=articoli&search=" + barcode,
179-
function(data){
180-
data = JSON.parse(data);
189+
let options = $("#idarticolo").data("select-options");
190+
$.get(globals.rootdir + "/ajax_select.php", {
191+
op: "articoli",
192+
search: barcode,
193+
options: options
194+
}, function(data){
195+
data = JSON.parse(data);
181196
182197
// Articolo trovato
183198
if(data.results.length === 1) {
184199
let record = data.results[0];
200+
// Usa qta_sede se disponibile, altrimenti qta
201+
record.qta = record.qta_sede !== undefined ? record.qta_sede : (record.qta || 0);
202+
203+
// Imposta un flag per indicare che stiamo facendo un carico automatico da barcode
204+
window.barcodeAutoSubmit = true;
205+
185206
$("#idarticolo").selectSetNew(record.id, record.text, record);
186207
let qta = record.qta-parseFloat($("#qta").val());';
187208

@@ -197,9 +218,6 @@ function(data){
197218
}
198219

199220
echo '
200-
setTimeout(function(){
201-
salva($("#aggiungi"));
202-
},300);
203221
}
204222
205223
// Articolo non trovato
@@ -218,32 +236,45 @@ function(data){
218236
let qta_input = input("qta");
219237
let tipo_movimento = $("#tipo_movimento").val();
220238
239+
// Per i movimenti di carico assicuriamoci di non salvare mai 0 o valori vuoti
240+
let qta_val = parseFloat(qta_input.get()) || 0;
241+
if (tipo_movimento === "carico" && qta_val <= 0) {
242+
qta_input.set(1);
243+
}
244+
221245
await salvaForm("#add-form", {}, button);
222246
223247
let articolo = $("#idarticolo").selectData();
224248
249+
if (!articolo) {
250+
return;
251+
}
252+
225253
let prezzo_acquisto = parseFloat(articolo.prezzo_acquisto);
226254
let prezzo_vendita = parseFloat(articolo.prezzo_vendita);
227255
let iva_vendita = articolo.iva_vendita;
228256
229257
let qta_movimento = qta_input.get();
230258
259+
// Usa qta_sede se disponibile, altrimenti qta
260+
let qta_articolo = articolo.qta_sede !== undefined ? parseFloat(articolo.qta_sede) : parseFloat(articolo.qta || 0);
261+
231262
let alert_type, icon, text, qta_rimanente;
232263
if (tipo_movimento === "carico") {
233264
alert_type = "alert-success";
234265
icon = "fa-arrow-up";
235266
text = "Carico";
236-
qta_rimanente = parseFloat(articolo.qta) + parseFloat(qta_movimento);
267+
qta_rimanente = qta_articolo + parseFloat(qta_movimento);
237268
} else if (tipo_movimento === "scarico") {
238269
alert_type = "alert-danger";
239270
icon = "fa-arrow-down";
240271
text = "Scarico";
241-
qta_rimanente = parseFloat(articolo.qta) - parseFloat(qta_movimento);
272+
qta_rimanente = qta_articolo - parseFloat(qta_movimento);
242273
} else if (tipo_movimento === "spostamento") {
243274
alert_type = "alert-info";
244275
icon = "fa-arrow-down";
245276
text = "Spostamento";
246-
qta_rimanente = parseFloat(articolo.qta);
277+
qta_rimanente = qta_articolo;
247278
}
248279
249280
if (articolo.descrizione) {

0 commit comments

Comments
 (0)