From af2be23336351f96d60db248a0761ccfe74b4205 Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Mon, 25 Sep 2023 16:53:28 +0200 Subject: [PATCH] Aggiunto pulsante Aggiorna prezzi in row-list documenti --- modules/contratti/actions.php | 88 +++++++++++++++++++++++-- modules/contratti/row-list.php | 49 ++++++++++++-- modules/ddt/actions.php | 90 ++++++++++++++++++++++++-- modules/ddt/row-list.php | 53 ++++++++++++--- modules/fatture/actions.php | 89 ++++++++++++++++++++++++-- modules/fatture/row-list.php | 53 ++++++++++++--- modules/interventi/actions.php | 88 +++++++++++++++++++++++-- modules/interventi/row-list.php | 61 ++++++++++++++---- modules/ordini/actions.php | 110 +++++++++++++++++++++----------- modules/ordini/row-list.php | 54 +++++++++++++--- modules/preventivi/actions.php | 90 ++++++++++++++++++++++++-- modules/preventivi/row-list.php | 51 +++++++++++++-- 12 files changed, 760 insertions(+), 116 deletions(-) diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index 14bc20bf3..3062df780 100644 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -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; } diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php index 82b295fd3..b9a5e12a0 100755 --- a/modules/contratti/row-list.php +++ b/modules/contratti/row-list.php @@ -342,7 +342,11 @@ if (!$block_edit && sizeof($righe) > 0) { + + '; } @@ -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"); } }); diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php index befb1b883..4c49b1c21 100755 --- a/modules/ddt/actions.php +++ b/modules/ddt/actions.php @@ -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; } diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php index b3d08acc3..7bb03afa1 100755 --- a/modules/ddt/row-list.php +++ b/modules/ddt/row-list.php @@ -388,11 +388,14 @@ if (!$block_edit && sizeof($righe) > 0) { '; if ($dir == 'entrata') { echo ' - '; + '; } echo ' + '; } 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"); } }); diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 7a864da5c..4eebe320c 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -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; } diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index 285b9a607..cd57ac1b7 100755 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -507,11 +507,14 @@ if (!$block_edit && sizeof($righe) > 0) { '; if ($direzione == 'entrata') { echo ' - '; + '; } echo ' + '; } 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"); } }); diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index 14fbdac10..29346202a 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -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; } diff --git a/modules/interventi/row-list.php b/modules/interventi/row-list.php index 4dd373e7d..79abce077 100755 --- a/modules/interventi/row-list.php +++ b/modules/interventi/row-list.php @@ -279,14 +279,15 @@ if (!$block_edit && sizeof($righe) > 0) { '; - if ($direzione == 'entrata') { - echo ' - '; - } - echo ' + + + + + '; } 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"); } }); diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php index c23b2d52f..55066f6ea 100755 --- a/modules/ordini/actions.php +++ b/modules/ordini/actions.php @@ -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; -} +} \ No newline at end of file diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php index 15ef3c5f0..387020154 100755 --- a/modules/ordini/row-list.php +++ b/modules/ordini/row-list.php @@ -434,11 +434,14 @@ if (!$block_edit && sizeof($righe) > 0) { '; if ($direzione == 'entrata') { echo ' - '; + '; } echo ' + '; } 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"); } }); diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php index 0b447277f..ef0bdfcef 100755 --- a/modules/preventivi/actions.php +++ b/modules/preventivi/actions.php @@ -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; +} \ No newline at end of file diff --git a/modules/preventivi/row-list.php b/modules/preventivi/row-list.php index 6509aef78..d6732ef08 100755 --- a/modules/preventivi/row-list.php +++ b/modules/preventivi/row-list.php @@ -453,7 +453,11 @@ if (!$block_edit && sizeof($righe) > 0) { + + '; } @@ -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"); } });