Aggiunto elenco righe evase in importazione

This commit is contained in:
Dasc3er 2021-07-20 09:28:37 +02:00
parent 20ca61c5d3
commit 1e6833e80f
1 changed files with 172 additions and 135 deletions

View File

@ -34,15 +34,21 @@ $final_module = Modules::get($name);
// IVA predefinita // IVA predefinita
$id_iva = $id_iva ?: setting('Iva predefinita'); $id_iva = $id_iva ?: setting('Iva predefinita');
$righe_totali = $documento->getRighe();
if ($final_module['name'] == 'Interventi') { if ($final_module['name'] == 'Interventi') {
$righe = $documento->getRighe()->where('qta_rimanente', '>', 0)->where('is_descrizione', '=', 0); $righe = $righe_totali->where('is_descrizione', '=', 0)
->where('qta_rimanente', '>', 0);
$righe_evase = $righe_totali->where('is_descrizione', '=', 0)
->where('qta_rimanente', '=', 0);
} elseif ($final_module['name'] == 'Ordini fornitore') { } elseif ($final_module['name'] == 'Ordini fornitore') {
$righe = $documento->getRighe(); $righe = $righe_totali;
$righe_evase = collect();
} else { } else {
$righe = $documento->getRighe()->where('qta_rimanente', '>', 0); $righe = $righe_totali->where('qta_rimanente', '>', 0);
$righe_evase = $righe_totali->where('qta_rimanente', '=', 0);
} }
if (empty($righe)) { if ($righe->isEmpty()) {
echo ' echo '
<p>'.tr('Non ci sono elementi da evadere').'...</p>'; <p>'.tr('Non ci sono elementi da evadere').'...</p>';
@ -355,21 +361,56 @@ echo '
</table> </table>
</div>'; </div>';
echo ' // Elenco righe evase completametne
<div class="alert alert-warning hidden" id="articoli_sottoscorta"> if (!$righe_evase->isEmpty()) {
<table class="table table-condensed"> echo '
<thead> <div class="box box-info collapsable collapsed-box">
<tr> <div class="box-header with-border">
<th>'.tr('Articolo').'</th> <h3 class="box-title">' . tr('Righe evase completamente') . '</h3>
<th class="text-center tip" width="150" title="'.tr('Quantità richiesta').'">'.tr('Q.').'</th> <div class="box-tools pull-right">
<th class="text-center tip" width="150" title="'.tr('Quantità disponibile nel magazzino del gestionale').'">'.tr('Q. magazzino').'</th> <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-plus"></i></button>
<th class="text-center" width="150">'.tr('Scarto').'</th> </div>
</tr> </div>
</thead>
<tbody></tbody> <table class="box-body table table-striped table-hover table-condensed">
</table> <thead>
</div>'; <tr>
<th>'.tr('Descrizione').'</th>
<th width="10%" class="text-center">'.tr('Q.').'</th>
</tr>
</thead>
<tbody>';
foreach ($righe_evase as $riga) {
echo '
<tr>
<td>'.$riga->descrizione.'</td>
<td class="text-center">'.numberFormat($riga->qta, 'qta').' '.$riga->um.'</td>
</tr>';
}
echo '
</tbody>
</table>
</div>';
}
// Gestione articolo sottoscorta
echo '
<div class="alert alert-warning hidden" id="articoli_sottoscorta">
<table class="table table-condensed">
<thead>
<tr>
<th>'.tr('Articolo').'</th>
<th class="text-center tip" width="150" title="'.tr('Quantità richiesta').'">'.tr('Q.').'</th>
<th class="text-center tip" width="150" title="'.tr('Quantità disponibile nel magazzino del gestionale').'">'.tr('Q. magazzino').'</th>
<th class="text-center" width="150">'.tr('Scarto').'</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>';
echo ' echo '
@ -386,10 +427,7 @@ echo '
echo ' echo '
<script>$(document).ready(init)</script>'; <script>$(document).ready(init)</script>';
echo ' // Individuazione scorte
<script type="text/javascript">
';
$articoli = $documento->articoli->groupBy('idarticolo'); $articoli = $documento->articoli->groupBy('idarticolo');
$scorte = []; $scorte = [];
foreach ($articoli as $elenco) { foreach ($articoli as $elenco) {
@ -407,144 +445,144 @@ foreach ($articoli as $elenco) {
} }
echo ' echo '
var scorte = '.json_encode($scorte).'; <script type="text/javascript">
var abilita_scorte = '.intval(!$documento::$movimenta_magazzino && !empty($options['tipo_documento_finale']) && $options['tipo_documento_finale']::$movimenta_magazzino).'; var scorte = '.json_encode($scorte).';
var permetti_documento_vuoto = '.intval(!empty($options['allow-empty'])).';
var abilita_scorte = '.intval(!$documento::$movimenta_magazzino && !empty($options['tipo_documento_finale']) && $options['tipo_documento_finale']::$movimenta_magazzino).';
function controllaMagazzino() { function controllaMagazzino() {
if(!abilita_scorte) return; if(!abilita_scorte) return;
let righe = $("#righe_documento_importato tr"); let righe = $("#righe_documento_importato tr");
// Lettura delle righe selezionate per l\'improtazione // Lettura delle righe selezionate per l\'improtazione
let richieste = {}; let richieste = {};
for(const r of righe) { for(const r of righe) {
let riga = $(r); let riga = $(r);
let id = $(riga).data("local_id"); let id = $(riga).data("local_id");
let id_articolo = riga.find("[id^=id_articolo_]").text(); let id_articolo = riga.find("[id^=id_articolo_]").text();
if (!$("#checked_" + id).is(":checked") || !id_articolo) { if (!$("#checked_" + id).is(":checked") || !id_articolo) {
continue; continue;
}
let qta = parseFloat(riga.find("input[id^=qta_]").val());
richieste[id_articolo] = richieste[id_articolo] ? richieste[id_articolo] + qta : qta;
} }
let qta = parseFloat(riga.find("input[id^=qta_]").val()); let sottoscorta = $("#articoli_sottoscorta");
richieste[id_articolo] = richieste[id_articolo] ? richieste[id_articolo] + qta : qta; let body = sottoscorta.find("tbody");
} body.html("");
let sottoscorta = $("#articoli_sottoscorta"); for(const id_articolo in richieste) {
let body = sottoscorta.find("tbody"); let qta_scorta = parseFloat(scorte[id_articolo]["qta"]);
body.html(""); let qta_richiesta = parseFloat(richieste[id_articolo]);
if ((qta_richiesta > qta_scorta) && (scorte[id_articolo]["servizio"] !== 1)) {
body.append(`<tr>
<td>` + scorte[id_articolo]["descrizione"] + `</td>
<td class="text-right">` + qta_richiesta.toLocale() + `</td>
<td class="text-right">` + qta_scorta.toLocale() + `</td>
<td class="text-right">` + (qta_richiesta - qta_scorta).toLocale() + `</td>
</tr>`);
}
}
for(const id_articolo in richieste) { if (body.html()) {
let qta_scorta = parseFloat(scorte[id_articolo]["qta"]); sottoscorta.removeClass("hidden");
let qta_richiesta = parseFloat(richieste[id_articolo]); } else {
if ((qta_richiesta > qta_scorta) && (scorte[id_articolo]["servizio"] !== 1) ) { sottoscorta.addClass("hidden");
body.append(`<tr>
<td>` + scorte[id_articolo]["descrizione"] + `</td>
<td class="text-right">` + qta_richiesta.toLocale() + `</td>
<td class="text-right">` + qta_scorta.toLocale() + `</td>
<td class="text-right">` + (qta_richiesta - qta_scorta).toLocale() + `</td>
</tr>`);
} }
} }
if (body.html()) { $("input[name=righe]").each(function() {
sottoscorta.removeClass("hidden"); ricalcolaTotaleRiga($(this).val());
} else { });
sottoscorta.addClass("hidden");
}
}
$("input[name=righe]").each(function() {
ricalcolaTotaleRiga($(this).val());
});
function ricalcolaTotaleRiga(r) {
let prezzo_unitario = $("#prezzo_unitario_" + r).val();
let sconto = $("#sconto_unitario_" + r).val();
let max_qta_input = $("#max_qta_" + r);
let qta_max = max_qta_input.val();
prezzo_unitario = parseFloat(prezzo_unitario);
sconto = parseFloat(sconto);
qta_max = parseFloat(qta_max);
let prezzo_scontato = prezzo_unitario - sconto;
let qta = ($("#qta_" + r).val()).toEnglish();
// Se inserisco una quantità da evadere maggiore di quella rimanente, la imposto al massimo possibile
if (qta > qta_max) {
qta = qta_max;
$("#qta_" + r).val(qta);
}
// Se tolgo la spunta della casella dell\'evasione devo azzerare i conteggi
if (isNaN(qta) || !$("#checked_" + r).is(":checked")) {
qta = 0;
}
let serial_select = $("#serial_" + r);
serial_select.selectClear();
serial_select.select2("destroy");
serial_select.data("maximum", qta);
start_superselect();
let subtotale = (prezzo_scontato * qta).toLocale();
$("#subtotale_" + r).html(subtotale + " " + globals.currency);
ricalcolaTotale();
}
function ricalcolaTotale() {
let totale = 0.00;
let totale_qta = 0;
$("input[id*=qta_]").each(function() {
let qta = ($(this).val()).toEnglish();
let r = $(this).attr("id").replace("qta_", "");
if (!$("#checked_" + r).is(":checked") || isNaN(qta)) {
qta = 0;
}
function ricalcolaTotaleRiga(r) {
let prezzo_unitario = $("#prezzo_unitario_" + r).val(); let prezzo_unitario = $("#prezzo_unitario_" + r).val();
let sconto = $("#sconto_unitario_" + r).val(); let sconto = $("#sconto_unitario_" + r).val();
let max_qta_input = $("#max_qta_" + r);
let qta_max = max_qta_input.val();
prezzo_unitario = parseFloat(prezzo_unitario); prezzo_unitario = parseFloat(prezzo_unitario);
sconto = parseFloat(sconto); sconto = parseFloat(sconto);
qta_max = parseFloat(qta_max);
let prezzo_scontato = prezzo_unitario - sconto; let prezzo_scontato = prezzo_unitario - sconto;
if(prezzo_scontato) { let qta = ($("#qta_" + r).val()).toEnglish();
totale += prezzo_scontato * qta;
// Se inserisco una quantità da evadere maggiore di quella rimanente, la imposto al massimo possibile
if (qta > qta_max) {
qta = qta_max;
$("#qta_" + r).val(qta);
} }
totale_qta += qta; // Se tolgo la spunta della casella dell\'evasione devo azzerare i conteggi
}); if (isNaN(qta) || !$("#checked_" + r).is(":checked")) {
qta = 0;
}
$("#totale").html((totale.toLocale()) + " " + globals.currency);'; let serial_select = $("#serial_" + r);
serial_select.selectClear();
serial_select.select2("destroy");
serial_select.data("maximum", qta);
start_superselect();
if (empty($options['allow-empty'])) { let subtotale = (prezzo_scontato * qta).toLocale();
echo '
if (totale_qta > 0) {
$("#submit_btn").show();
} else {
$("#submit_btn").hide();
}';
}
echo ' $("#subtotale_" + r).html(subtotale + " " + globals.currency);
controllaMagazzino();
}
ricalcolaTotale();
ricalcolaTotale();
}
function ricalcolaTotale() {
let totale = 0.00;
let totale_qta = 0;
$("input[id*=qta_]").each(function() {
let qta = ($(this).val()).toEnglish();
let r = $(this).attr("id").replace("qta_", "");
if (!$("#checked_" + r).is(":checked") || isNaN(qta)) {
qta = 0;
}
let prezzo_unitario = $("#prezzo_unitario_" + r).val();
let sconto = $("#sconto_unitario_" + r).val();
prezzo_unitario = parseFloat(prezzo_unitario);
sconto = parseFloat(sconto);
let prezzo_scontato = prezzo_unitario - sconto;
if(prezzo_scontato) {
totale += prezzo_scontato * qta;
}
totale_qta += qta;
});
$("#totale").html((totale.toLocale()) + " " + globals.currency);
if (!permetti_documento_vuoto) {
if (totale_qta > 0) {
$("#submit_btn").show();
} else {
$("#submit_btn").hide();
}
}
controllaMagazzino();
}
ricalcolaTotale();
$(document).ready(function(){ $(document).ready(function(){
if(input("id_ritenuta_acconto").get()){ if(input("id_ritenuta_acconto").get()) {
$("#calcolo_ritenuta_acconto").prop("required", true); $("#calcolo_ritenuta_acconto").prop("required", true);
} else{ } else{
$("#calcolo_ritenuta_acconto").prop("required", false); $("#calcolo_ritenuta_acconto").prop("required", false);
@ -552,9 +590,8 @@ ricalcolaTotale();
} }
$("#id_ritenuta_acconto").on("change", function(){ $("#id_ritenuta_acconto").on("change", function(){
if(input("id_ritenuta_acconto").get()){ if(input("id_ritenuta_acconto").get()) {
$("#calcolo_ritenuta_acconto").prop("required", true); $("#calcolo_ritenuta_acconto").prop("required", true);
} else{ } else{
$("#calcolo_ritenuta_acconto").prop("required", false); $("#calcolo_ritenuta_acconto").prop("required", false);
input("calcolo_ritenuta_acconto").set(""); input("calcolo_ritenuta_acconto").set("");