Gestione prezzi articolo per barcode

This commit is contained in:
Dasc3er 2020-08-27 10:08:26 +02:00
parent 06c5ca882e
commit aed205162c
2 changed files with 187 additions and 98 deletions

View File

@ -123,7 +123,7 @@ $("#idarticolo").on("change", function() {
} else {
verificaPrezzoArticolo();
}
})
});
$("#costo_unitario").val($data.prezzo_acquisto);
$("#descrizione_riga").val($data.descrizione);
@ -153,7 +153,7 @@ $("#idarticolo").on("change", function() {
}
});
$("#qta").on("change", function() {
$(document).on("change", "input[name^=qta], input[name^=prezzo_unitario]", function() {
verificaPrezzoArticolo();
});
@ -225,7 +225,7 @@ function aggiornaPrezzoArticolo() {
let qta = $("#qta").val().toEnglish();
let prezzo_previsto = getPrezzoPerQuantita(qta);
$("#prezzo_unitario").val(prezzo_previsto);
$("#prezzo_unitario").val(prezzo_previsto).trigger("change");
}
/**

View File

@ -37,6 +37,8 @@ echo '
echo '
<script>
var direzione = "'.$options['dir'].'";
$(document).ready(function(){
init();
@ -57,7 +59,6 @@ echo '
}
});
var dir = "'.$options['dir'].'";
$("#barcode").off("keyup").on("keyup", function (event) {
let key = window.event ? event.keyCode : event.which; // IE vs Netscape/Firefox/Opera
$("#articolo-missing").addClass("hidden");
@ -104,10 +105,10 @@ echo '
qta_input.val(nuova_qta).trigger("change");
} else {
let prezzo_unitario = (dir === "uscita") ? result.prezzo_acquisto : result.prezzo_vendita;
let prezzo_unitario = (direzione === "uscita") ? result.prezzo_acquisto : result.prezzo_vendita;
let info_prezzi;
if(dir == "entrata") {
if(direzione == "entrata") {
info_prezzi = "Acquisto: " + result.prezzo_acquisto + " &euro;";
}else{
info_prezzi = "Vendita: " + result.prezzo_vendita + " &euro;";
@ -130,6 +131,16 @@ echo '
restart_inputs();
$(".modal-body button").attr("disabled", false);
// Gestione dinamica dei prezzi
let tr = $("#riga_barcode_" + result.id);
ottieniPrezziArticolo(result.id, tr).then(function() {
if ($(tr).find("input[name^=prezzo_unitario]").val().toEnglish() === 0){
aggiornaPrezzoArticolo(tr);
} else {
verificaPrezzoArticolo(tr);
}
});
}
barcodeReset();
@ -140,6 +151,11 @@ echo '
});
});
$(document).on("change", "input[name^=qta], input[name^=prezzo_unitario]", function() {
let tr = $(this).closest("tr");
verificaPrezzoArticolo(tr);
});
function barcodeReset() {
setTimeout(function(){
$("#barcode")
@ -159,6 +175,79 @@ echo '
}
}
}
/**
* Restituisce il prezzo registrato per una specifica quantità dell\'articolo.
*/
function getPrezzoPerQuantita(qta, tr) {
const data = $(tr).find("input[name^=prezzo_unitario]").data("prezzi");
if (!data) return 0;
let prezzo_predefinito = null;
let prezzo_selezionato = null;
for (const prezzo of data) {
if (prezzo.minimo == null && prezzo.massimo == null) {
prezzo_predefinito = prezzo.prezzo_unitario;
continue;
}
if (qta >= prezzo.minimo && qta <= prezzo.massimo) {
prezzo_selezionato = prezzo.prezzo_unitario;
}
}
if (prezzo_selezionato == null) {
prezzo_selezionato = prezzo_predefinito;
}
return parseFloat(prezzo_selezionato);
}
/**
* Funzione per registrare localmente i prezzi definiti per l\'articolo in relazione ad una specifica anagrafica.
*/
function ottieniPrezziArticolo(id_articolo, tr) {
return $.get(globals.rootdir + "/ajax_complete.php?module=Articoli&op=prezzi_articolo&id_anagrafica='.$options['idanagrafica'].'&id_articolo=" + id_articolo + "&dir=" + direzione, function(response) {
const data = JSON.parse(response);
$(tr).find("input[name^=prezzo_unitario]").data("prezzi", data);
});
}
/**
* Funzione per verificare se il prezzo unitario corrisponde a quello registrato per l\'articolo, e proporre in automatico una correzione.
*/
function verificaPrezzoArticolo(tr) {
let qta = $(tr).find("input[name^=qta]").val().toEnglish();
let prezzo_previsto = getPrezzoPerQuantita(qta, tr);
let prezzo_unitario_input = $(tr).find("input[name^=prezzo_unitario]");
let prezzo_unitario = prezzo_unitario_input.val().toEnglish();
let div = prezzo_unitario_input.closest("div").parent().find("div[id*=errors]");
if (prezzo_previsto === prezzo_unitario) {
div.css("padding-top", "0");
div.html("");
return;
}
div.css("padding-top", "5px");
div.html(`<small>'.tr('Prezzo registrato').': ` + prezzo_previsto.toLocale() + globals.currency + `<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo(this)"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
}
/**
* Funzione per aggiornare il prezzo unitario sulla base dei valori automatici.
*/
function aggiornaPrezzoArticolo(button) {
let tr = $(button).closest("tr");
let qta = tr.find("input[name^=qta]").val().toEnglish();
let prezzo_previsto = getPrezzoPerQuantita(qta, tr);
tr.find("input[name^=prezzo_unitario]").val(prezzo_previsto).trigger("change");
}
</script>
<table class="hidden">