mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-01-27 06:04:54 +01:00
Aggiunto colonna sconto per le coppie anagrafica articolo
This commit is contained in:
parent
961249c9b5
commit
f080081653
@ -52,6 +52,10 @@ if (empty($result['idarticolo'])) {
|
||||
ottieniPrezziArticolo("'.$articolo['id'].'").then(function (){
|
||||
verificaPrezzoArticolo();
|
||||
});
|
||||
|
||||
ottieniScontiArticolo("'.$articolo['id'].'").then(function (){
|
||||
verificaScontoArticolo();
|
||||
});
|
||||
});
|
||||
</script>';
|
||||
}
|
||||
@ -111,6 +115,17 @@ $(document).ready(function () {
|
||||
}
|
||||
});
|
||||
|
||||
$("#tipo_sconto").on("change", function() {
|
||||
let $data = $("#idarticolo").selectData();
|
||||
ottieniScontiArticolo($data.id).then(function() {
|
||||
if ($("#sconto").val().toEnglish() === 0){
|
||||
aggiornaScontoArticolo();
|
||||
} else {
|
||||
verificaScontoArticolo();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$("#idarticolo").on("change", function() {
|
||||
// Operazioni sui prezzi in fondo alla pagina
|
||||
let prezzi_precedenti = $("#prezzi_articolo button");
|
||||
@ -136,12 +151,20 @@ $("#idarticolo").on("change", function() {
|
||||
let $data = $(this).selectData();
|
||||
ottieniPrezziArticolo($data.id).then(function() {
|
||||
if ($("#prezzo_unitario").val().toEnglish() === 0){
|
||||
aggiornaPrezzoArticolo();
|
||||
aggiornaPrezzoArticolo()
|
||||
} else {
|
||||
verificaPrezzoArticolo();
|
||||
}
|
||||
});
|
||||
|
||||
ottieniScontiArticolo($data.id).then(function() {
|
||||
if ($("#sconto").val().toEnglish() === 0){
|
||||
aggiornaScontoArticolo();
|
||||
} else {
|
||||
verificaScontoArticolo();
|
||||
}
|
||||
});
|
||||
|
||||
$("#costo_unitario").val($data.prezzo_acquisto);
|
||||
$("#descrizione_riga").val($data.descrizione);
|
||||
|
||||
@ -170,8 +193,9 @@ $("#idarticolo").on("change", function() {
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on("change", "input[name^=qta], input[name^=prezzo_unitario]", function() {
|
||||
$(document).on("change", "input[name^=qta], input[name^=prezzo_unitario], input[name^=sconto]", function() {
|
||||
verificaPrezzoArticolo();
|
||||
verificaScontoArticolo();
|
||||
});
|
||||
|
||||
/**
|
||||
@ -201,6 +225,34 @@ function getPrezzoPerQuantita(qta) {
|
||||
return parseFloat(prezzo_selezionato);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce lo sconto registrato per una specifica quantità dell\'articolo.
|
||||
*/
|
||||
function getScontoPerQuantita(qta) {
|
||||
const data = $("#sconto").data("sconti");
|
||||
if (!data) return 0;
|
||||
|
||||
let sconto_predefinito = null;
|
||||
let sconto_selezionato = null;
|
||||
for (const prezzo of data) {
|
||||
if (prezzo.minimo == null && prezzo.massimo == null) {
|
||||
sconto_predefinito = prezzo.sconto;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (qta >= prezzo.minimo && qta <= prezzo.massimo) {
|
||||
sconto_selezionato = prezzo.sconto;
|
||||
}
|
||||
}
|
||||
|
||||
if (sconto_selezionato == null) {
|
||||
sconto_selezionato = sconto_predefinito;
|
||||
}
|
||||
|
||||
return parseFloat(sconto_selezionato);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Funzione per registrare localmente i prezzi definiti per l\'articolo in relazione ad una specifica anagrafica.
|
||||
*/
|
||||
@ -212,6 +264,18 @@ function ottieniPrezziArticolo(id_articolo) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Funzione per registrare localmente gli sconti definiti per l\'articolo in relazione ad una specifica anagrafica.
|
||||
*/
|
||||
|
||||
function ottieniScontiArticolo(id_articolo) {
|
||||
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);
|
||||
|
||||
$("#sconto").data("sconti", data);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Funzione per verificare se il prezzo unitario corrisponde a quello registrato per l\'articolo, e proporre in automatico una correzione.
|
||||
*/
|
||||
@ -232,7 +296,29 @@ function verificaPrezzoArticolo() {
|
||||
}
|
||||
|
||||
div.css("padding-top", "5px");
|
||||
div.html(`<small class="label label-warning" >'.tr('Prezzo registrato').': ` + prezzo_previsto.toLocale() + globals.currency + `<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo()"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
|
||||
div.html(`<small class="label label-warning" >'.tr('Prezzo suggerito').': ` + prezzo_previsto.toLocale() + globals.currency + `<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo()"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Funzione per verificare se lo sconto unitario corrisponde a quello registrato per l\'articolo, e proporre in automatico una correzione.
|
||||
*/
|
||||
function verificaScontoArticolo() {
|
||||
let qta = $("#qta").val().toEnglish();
|
||||
let sconto_previsto = getScontoPerQuantita(qta);
|
||||
console.log(sconto_previsto);
|
||||
let sconto_input = $("#sconto");
|
||||
let sconto = sconto_input.val().toEnglish();
|
||||
|
||||
let div = sconto_input.parent().next();
|
||||
if (sconto_previsto === sconto || $("#tipo_sconto").val() === "UNT") {
|
||||
div.css("padding-top", "0");
|
||||
div.html("");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
div.css("padding-top", "5px");
|
||||
div.html(`<small class="label label-warning" >'.tr('Sconto suggerito').': ` + sconto_previsto.toLocale() + `%<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaScontoArticolo()"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>`);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -245,6 +331,16 @@ function aggiornaPrezzoArticolo() {
|
||||
$("#prezzo_unitario").val(prezzo_previsto).trigger("change");
|
||||
}
|
||||
|
||||
/**
|
||||
* Funzione per aggiornare lo sconto unitario sulla base dei valori automatici.
|
||||
*/
|
||||
function aggiornaScontoArticolo() {
|
||||
let qta = $("#qta").val().toEnglish();
|
||||
let sconto_previsto = getScontoPerQuantita(qta);
|
||||
|
||||
$("#sconto").val(sconto_previsto).trigger("change");
|
||||
}
|
||||
|
||||
/**
|
||||
* Funzione per l\'aggiornamento dinamico della quantità minima per l\'articolo.
|
||||
*/
|
||||
|
@ -127,7 +127,7 @@ switch ($resource) {
|
||||
|
||||
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||
|
||||
$query = 'SELECT minimo, massimo,
|
||||
$query = 'SELECT minimo, massimo, sconto,
|
||||
'.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
|
||||
FROM mg_prezzi_articoli
|
||||
WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($direzione).' |where|
|
||||
|
@ -69,11 +69,13 @@ switch (filter('op')) {
|
||||
|
||||
// Salvataggio del prezzo predefinito
|
||||
$prezzo_unitario = filter('prezzo_unitario_fisso');
|
||||
$sconto = filter('sconto_fisso');
|
||||
$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione)
|
||||
->first();
|
||||
if (empty($dettaglio_predefinito)) {
|
||||
$dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
|
||||
}
|
||||
$dettaglio_predefinito->sconto = $sconto;
|
||||
$dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario);
|
||||
$dettaglio_predefinito->save();
|
||||
|
||||
@ -84,6 +86,7 @@ switch (filter('op')) {
|
||||
$prezzi_unitari = (array) filter('prezzo_unitario');
|
||||
$minimi = filter('minimo');
|
||||
$massimi = filter('massimo');
|
||||
$sconti = (array) filter('sconto');
|
||||
|
||||
// Rimozione dei prezzi cancellati
|
||||
$registrati = filter('dettaglio');
|
||||
@ -99,6 +102,7 @@ switch (filter('op')) {
|
||||
|
||||
$dettaglio->minimo = $minimi[$key];
|
||||
$dettaglio->massimo = $massimi[$key];
|
||||
$dettaglio->sconto = $sconti[$key];
|
||||
$dettaglio->setPrezzoUnitario($prezzo_unitario);
|
||||
$dettaglio->save();
|
||||
}
|
||||
|
@ -62,15 +62,18 @@ echo '
|
||||
<input type="hidden" name="id_articolo" value="'.$id_articolo.'">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-4">
|
||||
<p>'.tr('Prezzo unitario predefinito: _TOT_', [
|
||||
'_TOT_' => moneyFormat($prezzo_predefinito),
|
||||
]).'</p>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "checkbox", "label": "'.tr("Modifica prezzo per l'anagrafica").'", "name": "modifica_prezzi", "value": "'.intval(!$dettagli->isEmpty() || !empty($dettaglio_predefinito)).'" ]}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{[ "type": "checkbox", "label": "'.tr('Imposta un prezzo unitario fisso').'", "name": "prezzo_fisso", "value": "'.intval($dettagli->count() == 0).'" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
@ -79,8 +82,10 @@ echo '
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "checkbox", "label": "'.tr('Imposta un prezzo unitario fisso').'", "name": "prezzo_fisso", "value": "'.intval($dettagli->count() == 0).'" ]}
|
||||
{[ "type": "number", "label": "'.tr('Sconto predefinito').'", "name": "sconto_fisso", "value": "'.$dettaglio_predefinito->sconto.'", "icon-after": "%"]}
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="box" id="prezzi">
|
||||
@ -106,6 +111,7 @@ echo '
|
||||
<th class="text-center tip" title="'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'">
|
||||
'.tr('Prezzo unitario').' <i class="fa fa-question-circle-o"></i>
|
||||
</th>
|
||||
<th class="text-center">'.tr('Sconto').'</th>
|
||||
<th>#</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -127,7 +133,8 @@ foreach ($dettagli as $key => $dettaglio) {
|
||||
<td>
|
||||
{[ "type": "number", "name": "prezzo_unitario['.$key.']", "icon-after": "'.currency().'", "value": "'.($prezzi_ivati ? $dettaglio->prezzo_unitario_ivato : $dettaglio->prezzo_unitario).'" ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{[ "type": "number", "name": "sconto['.$key.']", "min-value": 0, "value": "'.$dettaglio->sconto.'", "icon-after":"%" ]}
|
||||
<td>
|
||||
<button type="button" class="btn btn-xs btn-danger" onclick="rimuoviPrezzo(this)">
|
||||
<i class="fa fa-trash"></i>
|
||||
@ -168,6 +175,10 @@ echo '
|
||||
{[ "type": "number", "name": "prezzo_unitario[-id-]", "icon-after": "'.currency().'" ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{[ "type": "number", "name": "sconto[-id-]", "min-value": 0, "icon-after": "%" ]}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<button type="button" class="btn btn-xs btn-danger" onclick="rimuoviPrezzo(this)">
|
||||
<i class="fa fa-trash"></i>
|
||||
|
@ -73,6 +73,7 @@ if (!$clienti->isEmpty()) {
|
||||
<th class="text-center" width="210">'.tr('Q.tà minima').'</th>
|
||||
<th class="text-center" width="210">'.tr('Q.tà massima').'</th>
|
||||
<th class="text-center" width="150">'.tr('Prezzo unitario').'</th>
|
||||
<th class="text-center" width="150">'.tr('Sconto').'</th>
|
||||
<th class="text-center" width="150">#</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -84,7 +85,7 @@ if (!$clienti->isEmpty()) {
|
||||
|
||||
echo '
|
||||
<tr data-id_anagrafica="'.$id_cliente.'" data-direzione="entrata">
|
||||
<td colspan="4">
|
||||
<td colspan="5">
|
||||
'.Modules::link('Anagrafiche', $anagrafica->id, $anagrafica->ragione_sociale).'
|
||||
</td>
|
||||
|
||||
@ -121,6 +122,10 @@ if (!$clienti->isEmpty()) {
|
||||
'.moneyFormat($dettaglio->prezzo_unitario).'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
'.numberFormat($dettaglio->sconto).'%
|
||||
</td>
|
||||
|
||||
<td>';
|
||||
|
||||
if (!isset($dettaglio->minimo) && !isset($dettaglio->massimo)) {
|
||||
@ -280,11 +285,11 @@ if (!$fornitori_disponibili->isEmpty()) {
|
||||
if (!empty($prezzi) && !$prezzi->isEmpty()) {
|
||||
echo '
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<th class="text-center">'.tr('Q.tà minima').'</th>
|
||||
<th class="text-center">'.tr('Q.tà massima').'</th>
|
||||
<th class="text-center">'.tr('Prezzo unitario').'</th>
|
||||
<th class="text-center">'.tr('Sconto').'</th>
|
||||
<td></td>
|
||||
</tr>';
|
||||
|
||||
@ -292,7 +297,6 @@ if (!$fornitori_disponibili->isEmpty()) {
|
||||
echo '
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
|
||||
<td class="text-right">
|
||||
'.($dettaglio->minimo ? numberFormat($dettaglio->minimo) : '-').'
|
||||
@ -305,7 +309,9 @@ if (!$fornitori_disponibili->isEmpty()) {
|
||||
<td class="text-right">
|
||||
'.moneyFormat($dettaglio->prezzo_unitario).'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
'.numberFormat($dettaglio->sconto).'%
|
||||
</td>
|
||||
<td>';
|
||||
|
||||
if (!isset($dettaglio->minimo) && !isset($dettaglio->massimo)) {
|
||||
|
@ -326,4 +326,7 @@ UPDATE `zz_modules` SET `options` = 'custom' WHERE `name` = 'Impostazioni';
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_scadenziario`\r\n LEFT JOIN `co_documenti` ON `co_scadenziario`.`iddocumento` = `co_documenti`.`id`\r\n LEFT JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`\r\n LEFT JOIN `co_pagamenti` ON `co_documenti`.`idpagamento` = `co_pagamenti`.`id`\r\n LEFT JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id`\r\n LEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`\r\nWHERE 1=1 AND\r\n (`co_scadenziario`.`scadenza` BETWEEN \'|period_start|\' AND \'|period_end|\' OR ABS(`co_scadenziario`.`pagato`) < ABS(`co_scadenziario`.`da_pagare`)) AND\r\n (`co_statidocumento`.`descrizione` IS NULL OR `co_statidocumento`.`descrizione` IN(\'Emessa\',\'Parzialmente pagato\',\'Pagato\'))\r\nHAVING 2=2\r\nORDER BY `scadenza` ASC' WHERE `zz_modules`.`name` = 'Scadenzario';
|
||||
|
||||
-- Elimino token disabilitati
|
||||
DELETE FROM `zz_tokens` WHERE `zz_tokens`.`enabled` = 0;
|
||||
DELETE FROM `zz_tokens` WHERE `zz_tokens`.`enabled` = 0;
|
||||
|
||||
-- Aggiunto colonna sconto per le coppie anagrafica articolo
|
||||
ALTER TABLE `mg_prezzi_articoli` ADD `sconto` DECIMAL(15,6) NOT NULL AFTER `massimo`;
|
Loading…
x
Reference in New Issue
Block a user