Gestione quantità secondaria

This commit is contained in:
MatteoPistorello 2023-05-02 14:55:21 +02:00
parent 81053404e2
commit 5cb487d5c4
3 changed files with 41 additions and 5 deletions

View File

@ -17,6 +17,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
$articolo = $database->selectOne('mg_articoli', '*', ['id' => $result['idarticolo']]);
$width = $options['dir'] == 'uscita' && $articolo['fattore_um_secondaria'] ? 3 : 4;
// Descrizione
echo App::internalLoad('descrizione.php', $result, $options);
@ -26,21 +29,49 @@ echo App::internalLoad('conti.php', $result, $options);
// Iva
echo '
<div class="row">
<div class="col-md-4 '.(!empty($options['nascondi_prezzi']) ? 'hidden' : '').'">
<div class="col-md-'.$width.' '.(!empty($options['nascondi_prezzi']) ? 'hidden' : '').'">
{[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$result['idiva'].'", "ajax-source": "iva", "select-options": '.json_encode($options['select-options']['iva']).' ]}
</div>';
// Quantità
echo '
<div class="col-md-4">
<div class="col-md-'.$width.'">
{[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.abs((float) $result['qta']).'", "decimals": "qta"'.(isset($result['max_qta']) ? ', "icon-after": "<span class=\"tip\" title=\"'.tr("L'elemento è collegato a un documento: la quantità massima ammessa è relativa allo stato di evasione dell'elemento nel documento di origine (quantità dell'elemento / quantità massima ammessa)").'\">/ '.numberFormat(abs((float) $result['max_qta']), 'qta').' <i class=\"fa fa-question-circle-o\"></i></span>"' : '').', "min-value": "'.abs((float) $result['qta_evasa']).'" ]}
</div>';
// Unità di misura
echo '
<div class="col-md-4">
<div class="col-md-'.$width.'">
{[ "type": "select", "label": "'.tr('Unità di misura').'", "icon-after": "add|'.Modules::get('Unità di misura')['id'].'", "name": "um", "value": "'.$result['um'].'", "ajax-source": "misure" ]}
</div>';
// Unità di misura
if ($options['dir'] == 'uscita' && $articolo['fattore_um_secondaria']) {
echo '
<div class="col-md-3">
{[ "type": "number", "label": "'.tr('Q.tà secondaria').'", "name": "fattore_um_secondaria", "value": "'.abs((float)$articolo['fattore_um_secondaria'] * $result['qta']).'", "icon-after": "'.$articolo['um_secondaria'].'" ]}
</div>
<script>
input("fattore_um_secondaria").on("change", function() {
let articolo = input("idarticolo").getData();
let qta = input(this).get() / articolo.fattore_um_secondaria;
if (input("qta").get() != qta) {
input("qta").set(qta);
}
});
input("qta").on("change", function() {
let articolo = input("idarticolo").getData();
let fattore_um_secondaria = input(this).get() * articolo.fattore_um_secondaria;
if (input("fattore_um_secondaria").get() != fattore_um_secondaria) {
input("fattore_um_secondaria").set(fattore_um_secondaria);
}
});
</script>';
}
echo '
</div>';
$is_nota = $options['is_nota'] ?: 0;

View File

@ -86,6 +86,7 @@ switch ($resource) {
$query .= '
round(mg_articoli.qta,'.setting('Cifre decimali per quantità').") AS qta,
mg_articoli.um,
mg_articoli.fattore_um_secondaria,
mg_articoli.servizio,
mg_articoli.idconto_vendita,

View File

@ -238,14 +238,18 @@ class FatturaOrdinaria extends FatturaElettronica
// Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito)
// TODO: per migliorare la visualizzazione, sarebbe da lasciare negativo il prezzo e invertire gli sconti.
$prezzo = $totale_righe > 0 ? $riga['PrezzoUnitario'] : -$riga['PrezzoUnitario'];
$qta = $riga['Quantita'] ?: 1;
$qta = (!empty($articolo->um) && !empty($articolo->fattore_um_secondaria) && $riga['UnitaMisura'] == $articolo->um_secondaria) ? $riga['Quantita'] / $articolo->fattore_um_secondaria : ($riga['Quantita'] ?: 1);
// Prezzo e quantità
$obj->prezzo_unitario = $prezzo;
$obj->qta = $qta;
if (!empty($riga['UnitaMisura'])) {
$obj->um = $riga['UnitaMisura'];
if (!empty($articolo->um) && !empty($articolo->fattore_um_secondaria) && $riga['UnitaMisura'] == $articolo->um_secondaria) {
$obj->um = $articolo->um;
} else {
$obj->um = $riga['UnitaMisura'];
}
}
// Sconti e maggiorazioni