Aggiunto pulsante Aggiorna prezzi in row-list documenti

This commit is contained in:
MatteoPistorello 2023-09-25 16:53:28 +02:00
parent 631c057634
commit af2be23336
12 changed files with 760 additions and 116 deletions

View File

@ -641,19 +641,15 @@ switch (post('op')) {
break;
case 'edit-price':
$righe = $post['righe'];
$righe = (array) post('righe');
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
$articolo = Articolo::find($riga['id']);
} else {
$originale = ArticoloOriginale::find(post('idarticolo'));
$articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
if ($articolo['prezzo_unitario'] != $riga['price']) {
if ($articolo->prezzo_unitario != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
@ -672,5 +668,85 @@ switch (post('op')) {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
case 'update-price':
$dir = 'entrata';
$id_anagrafica = $contratto->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
$numero_totale = 0;
$id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
// CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0;
$sconto = 0;
if ($riga->isArticolo()) {
// Prezzi netti clienti / listino fornitore
$prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
FROM mg_prezzi_articoli
WHERE id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
if ($prezzi) {
foreach ($prezzi as $prezzo) {
if ($riga->qta >= $prezzo['minimo'] && $riga->qta <= $prezzo['massimo']) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
}
}
if (empty($prezzo_unitario)) {
// Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
FROM mg_listini
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
if ($listino) {
$prezzo_unitario = $listino['prezzo_unitario_listino'];
$sconto = $listino['sconto_percentuale_listino'];
}
}
$prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $riga->articolo->prezzo_vendita_ivato : $riga->articolo->prezzo_vendita);
$riga->setPrezzoUnitario($prezzo_unitario, $riga->idiva);
if ($dir == 'entrata') {
$riga->costo_unitario = $riga->articolo->prezzo_acquisto;
}
}
// Aggiunta sconto combinato se è presente un piano di sconto nell'anagrafica
$piano_sconto = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_piani_sconto ON an_anagrafiche.id_piano_sconto_vendite=mg_piani_sconto.id WHERE idanagrafica='.prepare($id_anagrafica));
if (!empty($piano_sconto)) {
$sconto = parseScontoCombinato($piano_sconto['prc_guadagno'].'+'.$sconto);
}
$riga->setSconto($sconto, 'PRC');
$riga->save();
++$numero_totale;
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} elseif ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}

View File

@ -342,7 +342,11 @@ if (!$block_edit && sizeof($righe) > 0) {
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
'.tr('Confronta prezzi').'
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="aggiorna_righe" onclick="aggiornaRighe(getSelectData());">
'.tr('Aggiorna prezzi').'
</button>
</div>';
}
@ -381,6 +385,34 @@ function confrontaRighe(id) {
openModal("'.tr('Confronta prezzi').'", "'.$module->fileurl('modals/confronta_righe.php').'?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&righe=" + id);
}
function aggiornaRighe(id) {
swal({
title: "'.tr('Aggiornare prezzi di queste righe?').'",
html: "'.tr('Confermando verranno aggiornati i prezzi delle righe secondo i listini ed i prezzi predefiniti collegati all\'articolo e ai piani sconto collegati all\'anagrafica.').'",
type: "warning",
showCancelButton: true,
confirmButtonText: "'.tr('Sì').'"
}).then(function () {
$.ajax({
url: globals.rootdir + "/actions.php",
type: "POST",
data: {
id_module: globals.id_module,
id_record: globals.id_record,
op: "update-price",
righe: id,
},
success: function (response) {
renderMessages();
caricaRighe(null);
},
error: function() {
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
}
function rimuoviRiga(id) {
swal({
@ -401,11 +433,12 @@ function rimuoviRiga(id) {
righe: id,
},
success: function (response) {
content_was_modified = false;
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -430,10 +463,12 @@ function duplicaRiga(id) {
righe: id,
},
success: function (response) {
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -470,10 +505,12 @@ $(".check").on("change", function() {
$("#elimina_righe").removeClass("disabled");
$("#duplica_righe").removeClass("disabled");
$("#confronta_righe").removeClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
} else {
$("#elimina_righe").addClass("disabled");
$("#duplica_righe").addClass("disabled");
$("#confronta_righe").addClass("disabled");
$("#aggiorna_righe").addClass("disabled");
}
});

View File

@ -661,19 +661,15 @@ switch (filter('op')) {
break;
case 'edit-price':
$righe = $post['righe'];
$righe = (array) post('righe');
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
$articolo = Articolo::find($riga['id']);
} else {
$originale = ArticoloOriginale::find(post('idarticolo'));
$articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
if ($articolo['prezzo_unitario'] != $riga['price']) {
if ($articolo->prezzo_unitario != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
@ -692,6 +688,88 @@ switch (filter('op')) {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
case 'update-price':
$id_anagrafica = $ddt->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
$numero_totale = 0;
$id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
// CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0;
$sconto = 0;
if ($riga->isArticolo()) {
// Prezzi netti clienti / listino fornitore
$prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
FROM mg_prezzi_articoli
WHERE id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
if ($prezzi) {
foreach ($prezzi as $prezzo) {
if ($riga->qta >= $prezzo['minimo'] && $riga->qta <= $prezzo['massimo']) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
}
}
if (empty($prezzo_unitario)) {
// Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
FROM mg_listini
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
if ($listino) {
$prezzo_unitario = $listino['prezzo_unitario_listino'];
$sconto = $listino['sconto_percentuale_listino'];
}
}
if ($dir == 'entrata') {
$prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $riga->articolo->prezzo_vendita_ivato : $riga->articolo->prezzo_vendita);
$riga->costo_unitario = $riga->articolo->prezzo_acquisto;
} else {
$prezzo_unitario = $prezzo_unitario ?: $riga->articolo->prezzo_acquisto;
}
$riga->setPrezzoUnitario($prezzo_unitario, $riga->idiva);
}
// Aggiunta sconto combinato se è presente un piano di sconto nell'anagrafica
$join = ($dir == 'entrata' ? 'id_piano_sconto_vendite' : 'id_piano_sconto_acquisti');
$piano_sconto = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_piani_sconto ON an_anagrafiche.'.$join.'=mg_piani_sconto.id WHERE idanagrafica='.prepare($id_anagrafica));
if (!empty($piano_sconto)) {
$sconto = parseScontoCombinato($piano_sconto['prc_guadagno'].'+'.$sconto);
}
$riga->setSconto($sconto, 'PRC');
$riga->save();
++$numero_totale;
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} elseif ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}

View File

@ -388,11 +388,14 @@ if (!$block_edit && sizeof($righe) > 0) {
</button>';
if ($dir == 'entrata') {
echo '
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>';
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
'.tr('Confronta prezzi').'
</button>';
}
echo '
<button type="button" class="btn btn-xs btn-default disabled" id="aggiorna_righe" onclick="aggiornaRighe(getSelectData());">
'.tr('Aggiorna prezzi').'
</button>
</div>';
}
echo '
@ -430,6 +433,35 @@ function confrontaRighe(id) {
openModal("'.tr('Confronta prezzi').'", "'.$module->fileurl('modals/confronta_righe.php').'?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&righe=" + id);
}
function aggiornaRighe(id) {
swal({
title: "'.tr('Aggiornare prezzi di queste righe?').'",
html: "'.tr('Confermando verranno aggiornati i prezzi delle righe secondo i listini ed i prezzi predefiniti collegati all\'articolo e ai piani sconto collegati all\'anagrafica.').'",
type: "warning",
showCancelButton: true,
confirmButtonText: "'.tr('Sì').'"
}).then(function () {
$.ajax({
url: globals.rootdir + "/actions.php",
type: "POST",
data: {
id_module: globals.id_module,
id_record: globals.id_record,
op: "update-price",
righe: id,
},
success: function (response) {
renderMessages();
caricaRighe(null);
},
error: function() {
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
}
function rimuoviRiga(id) {
swal({
title: "'.tr('Rimuovere queste righe?').'",
@ -449,11 +481,12 @@ function rimuoviRiga(id) {
righe: id,
},
success: function (response) {
content_was_modified = false;
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -478,10 +511,12 @@ function duplicaRiga(id) {
righe: id,
},
success: function (response) {
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -534,10 +569,12 @@ $(".check").on("change", function() {
$("#elimina_righe").removeClass("disabled");
$("#duplica_righe").removeClass("disabled");
$("#confronta_righe").removeClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
} else {
$("#elimina_righe").addClass("disabled");
$("#duplica_righe").addClass("disabled");
$("#confronta_righe").addClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
}
});

View File

@ -1055,19 +1055,15 @@ switch ($op) {
break;
case 'edit-price':
$righe = $post['righe'];
$righe = (array) post('righe');
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
$articolo = Articolo::find($riga['id']);
} else {
$originale = ArticoloOriginale::find(post('idarticolo'));
$articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
if ($articolo['prezzo_unitario'] != $riga['price']) {
if ($articolo->prezzo_unitario != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
@ -1086,6 +1082,87 @@ switch ($op) {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
case 'update-price':
$id_anagrafica = $fattura->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
$numero_totale = 0;
$id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
// CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0;
$sconto = 0;
if ($riga->isArticolo()) {
// Prezzi netti clienti / listino fornitore
$prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
FROM mg_prezzi_articoli
WHERE id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
if ($prezzi) {
foreach ($prezzi as $prezzo) {
if ($riga->qta >= $prezzo['minimo'] && $riga->qta <= $prezzo['massimo']) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
}
}
if (empty($prezzo_unitario)) {
// Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
FROM mg_listini
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
if ($listino) {
$prezzo_unitario = $listino['prezzo_unitario_listino'];
$sconto = $listino['sconto_percentuale_listino'];
}
}
if ($dir == 'entrata') {
$prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $riga->articolo->prezzo_vendita_ivato : $riga->articolo->prezzo_vendita);
$riga->costo_unitario = $riga->articolo->prezzo_acquisto;
} else {
$prezzo_unitario = $prezzo_unitario ?: $riga->articolo->prezzo_acquisto;
}
$riga->setPrezzoUnitario($prezzo_unitario, $riga->idiva);
}
// Aggiunta sconto combinato se è presente un piano di sconto nell'anagrafica
$join = ($dir == 'entrata' ? 'id_piano_sconto_vendite' : 'id_piano_sconto_acquisti');
$piano_sconto = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_piani_sconto ON an_anagrafiche.'.$join.'=mg_piani_sconto.id WHERE idanagrafica='.prepare($id_anagrafica));
if (!empty($piano_sconto)) {
$sconto = parseScontoCombinato($piano_sconto['prc_guadagno'].'+'.$sconto);
}
$riga->setSconto($sconto, 'PRC');
$riga->save();
++$numero_totale;
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} elseif ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}

View File

@ -507,11 +507,14 @@ if (!$block_edit && sizeof($righe) > 0) {
</button>';
if ($direzione == 'entrata') {
echo '
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>';
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
'.tr('Confronta prezzi').'
</button>';
}
echo '
<button type="button" class="btn btn-xs btn-default disabled" id="aggiorna_righe" onclick="aggiornaRighe(getSelectData());">
'.tr('Aggiorna prezzi').'
</button>
</div>';
}
echo '
@ -549,6 +552,35 @@ function confrontaRighe(id) {
openModal("'.tr('Confronta prezzi').'", "'.$module->fileurl('modals/confronta_righe.php').'?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&righe=" + id);
}
function aggiornaRighe(id) {
swal({
title: "'.tr('Aggiornare prezzi di queste righe?').'",
html: "'.tr('Confermando verranno aggiornati i prezzi delle righe secondo i listini ed i prezzi predefiniti collegati all\'articolo e ai piani sconto collegati all\'anagrafica.').'",
type: "warning",
showCancelButton: true,
confirmButtonText: "'.tr('Sì').'"
}).then(function () {
$.ajax({
url: globals.rootdir + "/actions.php",
type: "POST",
data: {
id_module: globals.id_module,
id_record: globals.id_record,
op: "update-price",
righe: id,
},
success: function (response) {
renderMessages();
caricaRighe(null);
},
error: function() {
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
}
function rimuoviRiga(id) {
swal({
title: "'.tr('Rimuovere queste righe?').'",
@ -568,11 +600,12 @@ function rimuoviRiga(id) {
righe: id,
},
success: function (response) {
content_was_modified = false;
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -597,10 +630,12 @@ function duplicaRiga(id) {
righe: id,
},
success: function (response) {
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -653,10 +688,12 @@ $(".check").on("change", function() {
$("#elimina_righe").removeClass("disabled");
$("#duplica_righe").removeClass("disabled");
$("#confronta_righe").removeClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
} else {
$("#elimina_righe").addClass("disabled");
$("#duplica_righe").addClass("disabled");
$("#confronta_righe").addClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
}
});

View File

@ -1145,19 +1145,15 @@ switch (post('op')) {
break;
case 'edit-price':
$righe = $post['righe'];
$righe = (array) post('righe');
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
$articolo = Articolo::find($riga['id']);
} else {
$originale = ArticoloOriginale::find(post('idarticolo'));
$articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
if ($articolo['prezzo_unitario'] != $riga['price']) {
if ($articolo->prezzo_unitario != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
@ -1176,5 +1172,85 @@ switch (post('op')) {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
case 'update-price':
$dir = 'entrata';
$id_anagrafica = $intervento->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
$numero_totale = 0;
$id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
// CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0;
$sconto = 0;
if ($riga->isArticolo()) {
// Prezzi netti clienti / listino fornitore
$prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
FROM mg_prezzi_articoli
WHERE id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
if ($prezzi) {
foreach ($prezzi as $prezzo) {
if ($riga->qta >= $prezzo['minimo'] && $riga->qta <= $prezzo['massimo']) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
}
}
if (empty($prezzo_unitario)) {
// Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
FROM mg_listini
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
if ($listino) {
$prezzo_unitario = $listino['prezzo_unitario_listino'];
$sconto = $listino['sconto_percentuale_listino'];
}
}
$prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $riga->articolo->prezzo_vendita_ivato : $riga->articolo->prezzo_vendita);
$riga->setPrezzoUnitario($prezzo_unitario, $riga->idiva);
if ($dir == 'entrata') {
$riga->costo_unitario = $riga->articolo->prezzo_acquisto;
}
}
// Aggiunta sconto combinato se è presente un piano di sconto nell'anagrafica
$piano_sconto = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_piani_sconto ON an_anagrafiche.id_piano_sconto_vendite=mg_piani_sconto.id WHERE idanagrafica='.prepare($id_anagrafica));
if (!empty($piano_sconto)) {
$sconto = parseScontoCombinato($piano_sconto['prc_guadagno'].'+'.$sconto);
}
$riga->setSconto($sconto, 'PRC');
$riga->save();
++$numero_totale;
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} elseif ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}

View File

@ -279,14 +279,15 @@ if (!$block_edit && sizeof($righe) > 0) {
<button type="button" class="btn btn-xs btn-default disabled" id="elimina_righe" onclick="rimuoviRiga(getSelectData());">
<i class="fa fa-trash"></i>
</button>';
if ($direzione == 'entrata') {
echo '
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>';
}
echo '
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
'.tr('Confronta prezzi').'
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="aggiorna_righe" onclick="aggiornaRighe(getSelectData());">
'.tr('Aggiorna prezzi').'
</button>
</div>';
}
echo '
@ -324,6 +325,35 @@ function confrontaRighe(id) {
openModal("'.tr('Confronta prezzi').'", "'.$module->fileurl('modals/confronta_righe.php').'?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&righe=" + id);
}
function aggiornaRighe(id) {
swal({
title: "'.tr('Aggiornare prezzi di queste righe?').'",
html: "'.tr('Confermando verranno aggiornati i prezzi delle righe secondo i listini ed i prezzi predefiniti collegati all\'articolo e ai piani sconto collegati all\'anagrafica.').'",
type: "warning",
showCancelButton: true,
confirmButtonText: "'.tr('Sì').'"
}).then(function () {
$.ajax({
url: globals.rootdir + "/actions.php",
type: "POST",
data: {
id_module: globals.id_module,
id_record: globals.id_record,
op: "update-price",
righe: id,
},
success: function (response) {
renderMessages();
caricaRighe(null);
},
error: function() {
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
}
function rimuoviRiga(id) {
swal({
title: "'.tr('Rimuovere queste righe?').'",
@ -343,11 +373,12 @@ function rimuoviRiga(id) {
righe: id,
},
success: function (response) {
content_was_modified = false;
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -372,10 +403,12 @@ function duplicaRiga(id) {
righe: id,
},
success: function (response) {
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -420,10 +453,12 @@ $(".check").on("change", function() {
$("#elimina_righe").removeClass("disabled");
$("#duplica_righe").removeClass("disabled");
$("#confronta_righe").removeClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
} else {
$("#elimina_righe").addClass("disabled");
$("#duplica_righe").addClass("disabled");
$("#confronta_righe").addClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
}
});

View File

@ -716,19 +716,15 @@ switch (post('op')) {
break;
case 'edit-price':
$righe = $post['righe'];
$righe = (array) post('righe');
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
$articolo = Articolo::find($riga['id']);
} else {
$originale = ArticoloOriginale::find(post('idarticolo'));
$articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
if ($articolo['prezzo_unitario'] != $riga['price']) {
if ($articolo->prezzo_unitario != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
@ -749,42 +745,84 @@ switch (post('op')) {
break;
// Duplica ordine
case 'copy':
$new = $ordine->replicate();
$new->numero = Ordine::getNextNumero(post('data'), $ordine->tipo->dir, $ordine->id_segment);
$new->numero_esterno = Ordine::getNextNumeroSecondario(post('data'), $ordine->tipo->dir, $ordine->id_segment);
$new->idstatoordine = post('idstatoordine');
$new->data = post('data');
$new->save();
case 'update-price':
$id_anagrafica = $ordine->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
$numero_totale = 0;
$id_righe = (array) post('righe');
$id_record = $new->id;
foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
if (!empty(post('copia_righe'))) {
$righe = $ordine->getRighe();
foreach ($righe as $riga) {
$new_riga = $riga->replicate();
$new_riga->setDocument($new);
// CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0;
$sconto = 0;
if ($riga->isArticolo()) {
// Prezzi netti clienti / listino fornitore
$prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
FROM mg_prezzi_articoli
WHERE id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
$new_riga->qta_evasa = 0;
$new_riga->save();
if ($prezzi) {
foreach ($prezzi as $prezzo) {
if ($riga->qta >= $prezzo['minimo'] && $riga->qta <= $prezzo['massimo']) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
}
}
if (empty($prezzo_unitario)) {
// Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
FROM mg_listini
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
if ($listino) {
$prezzo_unitario = $listino['prezzo_unitario_listino'];
$sconto = $listino['sconto_percentuale_listino'];
}
}
if ($dir == 'entrata') {
$prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $riga->articolo->prezzo_vendita_ivato : $riga->articolo->prezzo_vendita);
$riga->costo_unitario = $riga->articolo->prezzo_acquisto;
} else {
$prezzo_unitario = $prezzo_unitario ?: $riga->articolo->prezzo_acquisto;
}
$riga->setPrezzoUnitario($prezzo_unitario, $riga->idiva);
}
// Aggiunta sconto combinato se è presente un piano di sconto nell'anagrafica
$join = ($dir == 'entrata' ? 'id_piano_sconto_vendite' : 'id_piano_sconto_acquisti');
$piano_sconto = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_piani_sconto ON an_anagrafiche.'.$join.'=mg_piani_sconto.id WHERE idanagrafica='.prepare($id_anagrafica));
if (!empty($piano_sconto)) {
$sconto = parseScontoCombinato($piano_sconto['prc_guadagno'].'+'.$sconto);
}
$riga->setSconto($sconto, 'PRC');
$riga->save();
++$numero_totale;
}
//copia allegati
if (!empty(post('copia_allegati'))) {
$allegati = $ordine->uploads();
foreach ($allegati as $allegato) {
$allegato->copia([
'id_module' => $new->getModule()->id,
'id_record' => $new->id,
]);
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} elseif ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
flash()->info(tr('Aggiunto ordine numero _NUM_!', [
'_NUM_' => $new->numero,
]));
break;
}
}

View File

@ -434,11 +434,14 @@ if (!$block_edit && sizeof($righe) > 0) {
</button>';
if ($direzione == 'entrata') {
echo '
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
</button>';
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
'.tr('Confronta prezzi').'
</button>';
}
echo '
<button type="button" class="btn btn-xs btn-default disabled" id="aggiorna_righe" onclick="aggiornaRighe(getSelectData());">
'.tr('Aggiorna prezzi').'
</button>
</div>';
}
echo '
@ -476,6 +479,36 @@ function confrontaRighe(id) {
openModal("'.tr('Confronta prezzi').'", "'.$module->fileurl('modals/confronta_righe.php').'?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&righe=" + id);
}
function aggiornaRighe(id) {
swal({
title: "'.tr('Aggiornare prezzi di queste righe?').'",
html: "'.tr('Confermando verranno aggiornati i prezzi delle righe secondo i listini ed i prezzi predefiniti collegati all\'articolo e ai piani sconto collegati all\'anagrafica.').'",
type: "warning",
showCancelButton: true,
confirmButtonText: "'.tr('Sì').'"
}).then(function () {
$.ajax({
url: globals.rootdir + "/actions.php",
type: "POST",
dataType: "json",
data: {
id_module: globals.id_module,
id_record: globals.id_record,
op: "update-price",
righe: id,
},
success: function (response) {
renderMessages();
caricaRighe(null);
},
error: function() {
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
}
function rimuoviRiga(id) {
swal({
title: "'.tr('Rimuovere queste righe?').'",
@ -495,11 +528,12 @@ function rimuoviRiga(id) {
righe: id,
},
success: function (response) {
content_was_modified = false;
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -524,10 +558,12 @@ function duplicaRiga(id) {
righe: id,
},
success: function (response) {
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -580,10 +616,12 @@ $(".check").on("change", function() {
$("#elimina_righe").removeClass("disabled");
$("#duplica_righe").removeClass("disabled");
$("#confronta_righe").removeClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
} else {
$("#elimina_righe").addClass("disabled");
$("#duplica_righe").addClass("disabled");
$("#confronta_righe").addClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
}
});

View File

@ -516,19 +516,15 @@ switch (post('op')) {
break;
case 'edit-price':
$righe = $post['righe'];
$righe = (array) post('righe');
$numero_totale = 0;
foreach ($righe as $riga) {
if (($riga['id']) != null) {
$articolo = Articolo::find($riga['id']);
} else {
$originale = ArticoloOriginale::find(post('idarticolo'));
$articolo = Articolo::build($fattura, $originale);
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
if ($articolo['prezzo_unitario'] != $riga['price']) {
if ($articolo->prezzo_unitario != $riga['price']) {
$articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
$articolo->save();
++$numero_totale;
@ -548,4 +544,84 @@ switch (post('op')) {
}
break;
}
case 'update-price':
$dir = 'entrata';
$id_anagrafica = $preventivo->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
$numero_totale = 0;
$id_righe = (array) post('righe');
foreach ($id_righe as $id_riga) {
$riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
// CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0;
$sconto = 0;
if ($riga->isArticolo()) {
// Prezzi netti clienti / listino fornitore
$prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
FROM mg_prezzi_articoli
WHERE id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
if ($prezzi) {
foreach ($prezzi as $prezzo) {
if ($riga->qta >= $prezzo['minimo'] && $riga->qta <= $prezzo['massimo']) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
$prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale'];
continue;
}
}
}
if (empty($prezzo_unitario)) {
// Prezzi listini clienti
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
FROM mg_listini
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($riga->idarticolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
if ($listino) {
$prezzo_unitario = $listino['prezzo_unitario_listino'];
$sconto = $listino['sconto_percentuale_listino'];
}
}
$prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $riga->articolo->prezzo_vendita_ivato : $riga->articolo->prezzo_vendita);
$riga->setPrezzoUnitario($prezzo_unitario, $riga->idiva);
if ($dir == 'entrata') {
$riga->costo_unitario = $riga->articolo->prezzo_acquisto;
}
}
// Aggiunta sconto combinato se è presente un piano di sconto nell'anagrafica
$piano_sconto = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_piani_sconto ON an_anagrafiche.id_piano_sconto_vendite=mg_piani_sconto.id WHERE idanagrafica='.prepare($id_anagrafica));
if (!empty($piano_sconto)) {
$sconto = parseScontoCombinato($piano_sconto['prc_guadagno'].'+'.$sconto);
}
$riga->setSconto($sconto, 'PRC');
$riga->save();
++$numero_totale;
}
if ($numero_totale > 1) {
flash()->info(tr('_NUM_ prezzi modificati!', [
'_NUM_' => $numero_totale,
]));
} elseif ($numero_totale == 1) {
flash()->info(tr('_NUM_ prezzo modificato!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun prezzo modificato!'));
}
break;
}

View File

@ -453,7 +453,11 @@ if (!$block_edit && sizeof($righe) > 0) {
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="confronta_righe" onclick="confrontaRighe(getSelectData());">
Confronta prezzi
'.tr('Confronta prezzi').'
</button>
<button type="button" class="btn btn-xs btn-default disabled" id="aggiorna_righe" onclick="aggiornaRighe(getSelectData());">
'.tr('Aggiorna prezzi').'
</button>
</div>';
}
@ -492,6 +496,36 @@ function confrontaRighe(id) {
openModal("'.tr('Confronta prezzi').'", "'.$module->fileurl('modals/confronta_righe.php').'?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&righe=" + id);
}
function aggiornaRighe(id) {
swal({
title: "'.tr('Aggiornare prezzi di queste righe?').'",
html: "'.tr('Confermando verranno aggiornati i prezzi delle righe secondo i listini ed i prezzi predefiniti collegati all\'articolo e ai piani sconto collegati all\'anagrafica.').'",
type: "warning",
showCancelButton: true,
confirmButtonText: "'.tr('Sì').'"
}).then(function () {
$.ajax({
url: globals.rootdir + "/actions.php",
type: "POST",
dataType: "json",
data: {
id_module: globals.id_module,
id_record: globals.id_record,
op: "update-price",
righe: id,
},
success: function (response) {
renderMessages();
caricaRighe(null);
},
error: function() {
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
}
function rimuoviRiga(id) {
swal({
title: "'.tr('Rimuovere queste righe?').'",
@ -511,11 +545,12 @@ function rimuoviRiga(id) {
righe: id,
},
success: function (response) {
content_was_modified = false;
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -540,10 +575,12 @@ function duplicaRiga(id) {
righe: id,
},
success: function (response) {
location.reload();
renderMessages();
caricaRighe(null);
},
error: function() {
location.reload();
renderMessages();
caricaRighe(null);
}
});
}).catch(swal.noop);
@ -580,10 +617,12 @@ $(".check").on("change", function() {
$("#elimina_righe").removeClass("disabled");
$("#duplica_righe").removeClass("disabled");
$("#confronta_righe").removeClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
} else {
$("#elimina_righe").addClass("disabled");
$("#duplica_righe").addClass("disabled");
$("#confronta_righe").addClass("disabled");
$("#aggiorna_righe").removeClass("disabled");
}
});