@@ -236,19 +236,30 @@ function getPrezzoPerQuantita(qta) {
236236/**
237237* Restituisce il prezzo del listino registrato per l \'articolo-anagrafica.
238238*/
239- function getPrezzoListino() {
239+ function getPrezzoListino(qta = null ) {
240240 const data = globals.aggiunta_articolo.dettagli;
241241 if (!data) return null;
242242
243- let dettaglio_listino = null;
243+ let dettaglio_predefinito = null;
244+ let dettaglio_selezionato = null;
244245 for (const dettaglio of data) {
245246 if (dettaglio.prezzo_unitario_listino != null) {
246- dettaglio_listino = dettaglio;
247- continue;
247+ if (dettaglio.minimo == null && dettaglio.massimo == null) {
248+ dettaglio_predefinito = dettaglio;
249+ continue;
250+ }
251+
252+ if (qta != null && qta >= dettaglio.minimo && qta <= dettaglio.massimo) {
253+ dettaglio_selezionato = dettaglio;
254+ }
248255 }
249256 }
250257
251- return dettaglio_listino ? parseFloat(dettaglio_listino.prezzo_unitario_listino) : 0;
258+ if (dettaglio_selezionato == null) {
259+ dettaglio_selezionato = dettaglio_predefinito;
260+ }
261+
262+ return dettaglio_selezionato ? parseFloat(dettaglio_selezionato.prezzo_unitario_listino) : 0;
252263}
253264
254265/**
@@ -290,7 +301,7 @@ function getPrezzoUltimo() {
290301/**
291302* Restituisce i prezzi dei listini sempre visibili registrati per l \'articolo.
292303*/
293- function getPrezziListinoVisibili(nome = "") {
304+ function getPrezziListinoVisibili(nome = "", qta = null ) {
294305 const data = globals.aggiunta_articolo.dettagli;
295306 if (!data) return null;
296307
@@ -299,7 +310,25 @@ function getPrezziListinoVisibili(nome = "") {
299310 if (dettaglio.prezzo_unitario_listino_visibile != null) {
300311 if (nome != "") {
301312 if (dettaglio.nome == nome) {
302- dettaglio_prezzi_visibili = parseFloat(dettaglio.prezzo_unitario_listino_visibile);
313+ if (qta != null) {
314+ // Cerca il dettaglio appropriato per la quantità specificata
315+ let dettaglio_predefinito = null;
316+ let dettaglio_selezionato = null;
317+ for (const d of data) {
318+ if (d.prezzo_unitario_listino_visibile != null && d.nome == nome) {
319+ if (d.minimo == null && d.massimo == null) {
320+ dettaglio_predefinito = d;
321+ continue;
322+ }
323+ if (qta >= d.minimo && qta <= d.massimo) {
324+ dettaglio_selezionato = d;
325+ }
326+ }
327+ }
328+ dettaglio_prezzi_visibili = parseFloat((dettaglio_selezionato || dettaglio_predefinito).prezzo_unitario_listino_visibile);
329+ } else {
330+ dettaglio_prezzi_visibili = parseFloat(dettaglio.prezzo_unitario_listino_visibile);
331+ }
303332 continue;
304333 }
305334 } else {
@@ -314,37 +343,59 @@ function getPrezziListinoVisibili(nome = "") {
314343/**
315344* Restituisce lo sconto registrato del listino registrato per l \'articolo-anagrafica.
316345*/
317- function getScontoListino() {
346+ function getScontoListino(qta = null ) {
318347 const data = globals.aggiunta_articolo.dettagli;
319348 if (!data) return null;
320349
321- let dettaglio_listino = null;
350+ let dettaglio_predefinito = null;
351+ let dettaglio_selezionato = null;
322352 for (const dettaglio of data) {
323353 if (dettaglio.sconto_percentuale_listino != null) {
324- dettaglio_listino = dettaglio;
325- continue;
354+ if (dettaglio.minimo == null && dettaglio.massimo == null) {
355+ dettaglio_predefinito = dettaglio;
356+ continue;
357+ }
358+
359+ if (qta != null && qta >= dettaglio.minimo && qta <= dettaglio.massimo) {
360+ dettaglio_selezionato = dettaglio;
361+ }
326362 }
327363 }
328364
329- return dettaglio_listino ? parseFloat(dettaglio_listino.sconto_percentuale_listino) : 0;
365+ if (dettaglio_selezionato == null) {
366+ dettaglio_selezionato = dettaglio_predefinito;
367+ }
368+
369+ return dettaglio_selezionato ? parseFloat(dettaglio_selezionato.sconto_percentuale_listino) : 0;
330370}
331371
332372/**
333373* Restituisce lo sconto registrato del listino sempre visibile dell \'articolo.
334374*/
335- function getScontoListinoVisibile(nome) {
375+ function getScontoListinoVisibile(nome, qta = null ) {
336376 const data = globals.aggiunta_articolo.dettagli;
337377 if (!data) return null;
338378
339- let dettaglio_listino_visibile = null;
379+ let dettaglio_predefinito = null;
380+ let dettaglio_selezionato = null;
340381 for (const dettaglio of data) {
341382 if (dettaglio.nome == nome) {
342- dettaglio_listino_visibile = dettaglio;
343- continue;
383+ if (dettaglio.minimo == null && dettaglio.massimo == null) {
384+ dettaglio_predefinito = dettaglio;
385+ continue;
386+ }
387+
388+ if (qta != null && qta >= dettaglio.minimo && qta <= dettaglio.massimo) {
389+ dettaglio_selezionato = dettaglio;
390+ }
344391 }
345392 }
346393
347- return dettaglio_listino_visibile ? parseFloat(dettaglio_listino_visibile.sconto_percentuale_listino_visibile) : 0;
394+ if (dettaglio_selezionato == null) {
395+ dettaglio_selezionato = dettaglio_predefinito;
396+ }
397+
398+ return dettaglio_selezionato ? parseFloat(dettaglio_selezionato.sconto_percentuale_listino_visibile) : 0;
348399}
349400
350401/**
@@ -381,11 +432,11 @@ function verificaPrezzoArticolo() {
381432
382433 let qta = $("#qta").val().toEnglish();
383434 let prezzo_anagrafica = getPrezzoPerQuantita(qta);
384- let prezzo_listino = getPrezzoListino();
435+ let prezzo_listino = getPrezzoListino(qta );
385436 let prezzo_std = getPrezzoScheda();
386437 let prezzo_last = getPrezzoUltimo();
387438 let prezzo_minimo = parseFloat($("#idarticolo").selectData().minimo_vendita);
388- let prezzi_visibili = getPrezziListinoVisibili();
439+ let prezzi_visibili = getPrezziListinoVisibili("", qta );
389440
390441 if (prezzo_anagrafica || prezzo_listino || prezzo_std || prezzo_last || prezzo_minimo || prezzi_visibili) {
391442 div.html(`<table class="table table-extra-condensed table-prezzi" style="background:#eee; margin-top:-13px;"><tbody>`);
@@ -479,20 +530,20 @@ function verificaScontoArticolo() {
479530 let prezzo_unitario_input = $("#prezzo_unitario");
480531 let prezzo_unitario = prezzo_unitario_input.val().toEnglish();
481532 let prezzo_anagrafica = getPrezzoPerQuantita(qta);
482- let prezzo_listino = getPrezzoListino();
483- let prezzi_visibili = getPrezziListinoVisibili();
533+ let prezzo_listino = getPrezzoListino(qta );
534+ let prezzi_visibili = getPrezziListinoVisibili("", qta );
484535 let sconto_previsto = 0;
485536
486537
487538 if (prezzo_unitario == prezzo_anagrafica.toFixed(2)) {
488539 sconto_previsto = getScontoPerQuantita(qta);
489540 } else if (prezzo_unitario == prezzo_listino.toFixed(2)) {
490- sconto_previsto = getScontoListino();
541+ sconto_previsto = getScontoListino(qta );
491542 } else {
492543 for (const prezzo_visibile of prezzi_visibili) {
493544 let prezzo_listino_visibile = parseFloat(prezzo_visibile.prezzo_unitario_listino_visibile);
494545 if (prezzo_unitario == prezzo_listino_visibile.toFixed(2)) {
495- sconto_previsto = getScontoListinoVisibile(prezzo_visibile.nome);
546+ sconto_previsto = getScontoListinoVisibile(prezzo_visibile.nome, qta );
496547 }
497548 }
498549 }
@@ -517,10 +568,10 @@ function verificaScontoArticolo() {
517568*/
518569function aggiornaPrezzoArticolo(aggiorna = "") {
519570 let prezzo_previsto = 0;
571+ let qta = $("#qta").val().toEnglish();
520572 if (aggiorna == "listino") {
521- prezzo_previsto = getPrezzoListino();
573+ prezzo_previsto = getPrezzoListino(qta );
522574 } else if (aggiorna == "anagrafica") {
523- let qta = $("#qta").val().toEnglish();
524575 prezzo_previsto = getPrezzoPerQuantita(qta);
525576 } else if (aggiorna == "std") {
526577 prezzo_previsto = getPrezzoScheda();
@@ -529,12 +580,11 @@ function aggiornaPrezzoArticolo(aggiorna = "") {
529580 } else if (aggiorna == "minimo") {
530581 prezzo_previsto = parseFloat($("#idarticolo").selectData().minimo_vendita);
531582 } else if (aggiorna != "") {
532- prezzo_previsto = getPrezziListinoVisibili(aggiorna);
583+ prezzo_previsto = getPrezziListinoVisibili(aggiorna, qta );
533584 } else {
534585 // Inserisco il prezzo più basso tra listino e netto cliente, se mancanti imposto il prezzo della scheda articolo
535- let qta = $("#qta").val().toEnglish();
536586 prezzo1 = getPrezzoPerQuantita(qta);
537- prezzo2 = getPrezzoListino();
587+ prezzo2 = getPrezzoListino(qta );
538588 prezzo3 = getPrezzoScheda();
539589 prezzo_previsto = (!prezzo1 ? prezzo2 : (!prezzo2 ? prezzo1 : (prezzo1 > prezzo2 ? prezzo2 : prezzo1)));
540590 prezzo_previsto = (prezzo_previsto ? prezzo_previsto : prezzo3);
@@ -557,20 +607,20 @@ function aggiornaScontoArticolo() {
557607 let prezzo_unitario_input = $("#prezzo_unitario");
558608 let prezzo_unitario = prezzo_unitario_input.val().toEnglish();
559609 let prezzo_anagrafica = getPrezzoPerQuantita(qta);
560- let prezzo_listino = getPrezzoListino();
561- let prezzi_visibili = getPrezziListinoVisibili();
610+ let prezzo_listino = getPrezzoListino(qta );
611+ let prezzi_visibili = getPrezziListinoVisibili("", qta );
562612 let sconto_previsto = 0;
563613
564614
565615 if (prezzo_unitario == prezzo_anagrafica.toFixed(2)) {
566616 sconto_previsto = getScontoPerQuantita(qta);
567617 } else if (prezzo_unitario == prezzo_listino.toFixed(2)) {
568- sconto_previsto = getScontoListino();
618+ sconto_previsto = getScontoListino(qta );
569619 } else {
570620 for (const prezzo_visibile of prezzi_visibili) {
571621 let prezzo_listino_visibile = parseFloat(prezzo_visibile.prezzo_unitario_listino_visibile);
572622 if (prezzo_unitario == prezzo_listino_visibile.toFixed(2)) {
573- sconto_previsto = getScontoListinoVisibile(prezzo_visibile.nome);
623+ sconto_previsto = getScontoListinoVisibile(prezzo_visibile.nome, qta );
574624 }
575625 }
576626 }
0 commit comments