From a4205728200be3dec8198ae546268bcc6362d955 Mon Sep 17 00:00:00 2001 From: Fabio Lovato Date: Thu, 14 Jun 2018 14:56:15 +0200 Subject: [PATCH] Corretto problema arrotondamento iva --- lib/functions.php | 6 ++---- modules/contratti/row-list.php | 2 +- modules/ddt/row-list.php | 2 +- modules/fatture/actions.php | 15 ++++++++------- modules/fatture/modutil.php | 6 +++--- modules/fatture/row-list.php | 6 ++++-- modules/ordini/row-list.php | 2 +- modules/preventivi/row-list.php | 2 +- 8 files changed, 21 insertions(+), 20 deletions(-) diff --git a/lib/functions.php b/lib/functions.php index 1e8eacf2c..603ad4491 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -645,7 +645,7 @@ function isAjaxRequest() * * @return float */ -function sum($first, $second = null, $decimals = null) +function sum($first, $second = null, $decimals = 4) { $first = (array) $first; $second = (array) $second; @@ -654,9 +654,7 @@ function sum($first, $second = null, $decimals = null) $result = 0; - if (!is_numeric($decimals)) { - $decimals = is_numeric($decimals) ? $decimals : Translator::getFormatter()->getPrecision(); - } + $decimals = is_numeric($decimals) ? $decimals : Translator::getFormatter()->getPrecision(); $bcadd = function_exists('bcadd'); diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php index 29271d368..0e85e1205 100644 --- a/modules/contratti/row-list.php +++ b/modules/contratti/row-list.php @@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php'; /* ARTICOLI + RIGHE GENERICHE */ -$rs = $dbo->fetchArray('SELECT *, round(iva,'.Settings::get('Cifre decimali per importi').') AS iva, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo), "") AS codice FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record).' ORDER BY `order`'); +$rs = $dbo->fetchArray('SELECT *, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo), "") AS codice FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record).' ORDER BY `order`'); echo ' diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php index 85fad83e3..7c6850a15 100644 --- a/modules/ddt/row-list.php +++ b/modules/ddt/row-list.php @@ -19,7 +19,7 @@ echo ' /* Articoli e righe generiche */ -$q_art = 'SELECT *, round(iva,'.Settings::get('Cifre decimali per importi').') AS iva, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice FROM `dt_righe_ddt` WHERE idddt='.prepare($id_record).' ORDER BY `order`'; +$q_art = 'SELECT *, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice FROM `dt_righe_ddt` WHERE idddt='.prepare($id_record).' ORDER BY `order`'; $rs = $dbo->fetchArray($q_art); if (!empty($rs)) { diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 1994bd14b..a7da07e6a 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -633,13 +633,14 @@ switch (post('op')) { // Aggiunta riga preventivo sul documento $query = 'INSERT INTO co_righe_documenti(iddocumento, idpreventivo, idconto, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idritenutaacconto, ritenutaacconto, idrivalsainps, rivalsainps, `order`) VALUES('.prepare($id_record).', '.prepare($idpreventivo).', '.prepare($idconto).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; $dbo->query($query); - - // Aggiorno lo stato degli interventi collegati al preventivo se ce ne sono - $query2 = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL'; - $rs2 = $dbo->fetchArray($query2); - for ($j = 0; $j < sizeof($rs2); ++$j) { - $dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id IN (SELECT idintervento FROM co_preventivi_interventi WHERE idpreventivo=".prepare($rs2[$j]['idpreventivo']).')'); - } + } + + // Aggiorno lo stato degli interventi collegati al preventivo se ce ne sono + $query2 = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL'; + $rs2 = $dbo->fetchArray($query2); + + for ($j = 0; $j < sizeof($rs2); ++$j) { + $dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id IN (SELECT idintervento FROM co_preventivi_interventi WHERE idpreventivo=".prepare($rs2[$j]['idpreventivo']).')'); } $_SESSION['infos'][] = tr('Preventivo _NUM_ aggiunto!', [ diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index 33fb85bef..4c330d39c 100644 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -298,7 +298,7 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0) // Lettura iva delle righe in fattura $query = 'SELECT iva FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento); $rs = $dbo->fetchArray($query); - $iva_fattura = sum(array_column($rs, 'iva'), null, 2) + $iva_rivalsainps - $iva_indetraibile_fattura; + $iva_fattura = sum(array_column($rs, 'iva'), null) + $iva_rivalsainps - $iva_indetraibile_fattura; // Imposto i segni + e - in base se la fattura è di acquisto o vendita if ($dir == 'uscita') { @@ -493,7 +493,7 @@ function get_totale_fattura($iddocumento) global $dbo; // Sommo l'iva di ogni riga al totale - $query = 'SELECT SUM(ROUND(iva, 2)) AS iva FROM co_righe_documenti GROUP BY iddocumento HAVING iddocumento='.prepare($iddocumento); + $query = 'SELECT SUM(iva) AS iva FROM co_righe_documenti GROUP BY iddocumento HAVING iddocumento='.prepare($iddocumento); $rs = $dbo->fetchArray($query); // Aggiungo la rivalsa inps se c'è @@ -510,7 +510,7 @@ function get_totale_fattura($iddocumento) $iva_rivalsainps += $rsr[$r]['rivalsainps'] / 100 * $rsi[0]['percentuale']; } - $iva = sum($rs[0]['iva'], null, 2); + $iva = $rs[0]['iva']; $totale_iva = sum($iva, $iva_rivalsainps); $totale = sum([ diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index d605c02f0..69b0e825b 100644 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -5,7 +5,8 @@ include_once __DIR__.'/../../core.php'; /* Righe fattura */ -$rs = $dbo->fetchArray('SELECT *, round(iva,'.Settings::get('Cifre decimali per importi').') AS iva, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),"") AS codice, (SELECT descrizione FROM co_pianodeiconti3 WHERE co_pianodeiconti3.id=IF(co_righe_documenti.idconto = 0, (SELECT idconto FROM co_documenti WHERE iddocumento='.prepare($id_record).' LIMIT 1), co_righe_documenti.idconto)) AS descrizione_conto FROM `co_righe_documenti` WHERE iddocumento='.prepare($id_record).' ORDER BY `order`'); +//$rs = $dbo->fetchArray('SELECT *, round(iva,'.Settings::get('Cifre decimali per importi').') AS iva, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),"") AS codice, (SELECT descrizione FROM co_pianodeiconti3 WHERE co_pianodeiconti3.id=IF(co_righe_documenti.idconto = 0, (SELECT idconto FROM co_documenti WHERE iddocumento='.prepare($id_record).' LIMIT 1), co_righe_documenti.idconto)) AS descrizione_conto FROM `co_righe_documenti` WHERE iddocumento='.prepare($id_record).' ORDER BY `order`'); +$rs = $dbo->fetchArray('SELECT *, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),"") AS codice, (SELECT descrizione FROM co_pianodeiconti3 WHERE co_pianodeiconti3.id=IF(co_righe_documenti.idconto = 0, (SELECT idconto FROM co_documenti WHERE iddocumento='.prepare($id_record).' LIMIT 1), co_righe_documenti.idconto)) AS descrizione_conto FROM `co_righe_documenti` WHERE iddocumento='.prepare($id_record).' ORDER BY `order`'); echo '
@@ -214,7 +215,8 @@ if (!empty($rs)) { if (empty($r['is_descrizione'])) { echo ' '.Translator::numberToLocale($r['iva']).' € -
'.$r['desc_iva'].''; +
'.$r['desc_iva'].' + '.$r['iva'].''; } echo ' diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php index 79256b7bc..a13728f3e 100644 --- a/modules/ordini/row-list.php +++ b/modules/ordini/row-list.php @@ -19,7 +19,7 @@ echo ' '; -$q = 'SELECT *, round(iva,'.Settings::get('Cifre decimali per importi').') AS iva, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, (SELECT codice FROM mg_articoli WHERE mg_articoli.id=`or_righe_ordini`.`idarticolo`) AS codice FROM `or_righe_ordini` WHERE idordine='.prepare($id_record).' ORDER BY `order`'; +$q = 'SELECT *, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, (SELECT codice FROM mg_articoli WHERE mg_articoli.id=`or_righe_ordini`.`idarticolo`) AS codice FROM `or_righe_ordini` WHERE idordine='.prepare($id_record).' ORDER BY `order`'; $rs = $dbo->fetchArray($q); if (!empty($rs)) { diff --git a/modules/preventivi/row-list.php b/modules/preventivi/row-list.php index 7eeb7fe4b..b4f875e60 100644 --- a/modules/preventivi/row-list.php +++ b/modules/preventivi/row-list.php @@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php'; /* ARTICOLI + RIGHE GENERICHE */ -$q_art = 'SELECT *, round(iva,'.Settings::get('Cifre decimali per importi').') AS iva, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo), "") AS codice FROM co_righe_preventivi WHERE idpreventivo='.prepare($id_record).' ORDER BY `order`'; +$q_art = 'SELECT *, round(sconto_unitario,'.Settings::get('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.Settings::get('Cifre decimali per importi').') AS sconto, round(subtotale,'.Settings::get('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo), "") AS codice FROM co_righe_preventivi WHERE idpreventivo='.prepare($id_record).' ORDER BY `order`'; $rs = $dbo->fetchArray($q_art); echo '