From 717684ad61f94ca3c66a3a70b4953741aacf376a Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 21 Jun 2016 10:29:47 +0200 Subject: [PATCH 1/5] FIX: vat should be same sign as total --- htdocs/core/lib/tax.lib.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php index 2387332e670de..de0425c0d5d27 100644 --- a/htdocs/core/lib/tax.lib.php +++ b/htdocs/core/lib/tax.lib.php @@ -329,7 +329,7 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, { $oldrowid=$assoc['rowid']; $list[$assoc['rate']]['totalht'] += $assoc['total_ht']; - $list[$assoc['rate']]['vat'] += $assoc['total_vat']; + $list[$assoc['rate']]['vat'] += ($assoc['total_ht'] < 0 ? -1 * $assoc['total_vat']:$assoc['total_vat']); $list[$assoc['rate']]['localtax1'] += $assoc['total_localtax1']; $list[$assoc['rate']]['localtax2'] += $assoc['total_localtax2']; } @@ -348,7 +348,7 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $list[$assoc['rate']]['descr'][] = $assoc['descr']; $list[$assoc['rate']]['totalht_list'][] = $assoc['total_ht']; - $list[$assoc['rate']]['vat_list'][] = $assoc['total_vat']; + $list[$assoc['rate']]['vat_list'][] = ($assoc['total_ht'] < 0 ? -1 * $assoc['total_vat']:$assoc['total_vat']); $list[$assoc['rate']]['localtax1_list'][] = $assoc['total_localtax1']; $list[$assoc['rate']]['localtax2_list'][] = $assoc['total_localtax2']; @@ -474,7 +474,7 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, { $oldrowid=$assoc['rowid']; $list[$assoc['rate']]['totalht'] += $assoc['total_ht']; - $list[$assoc['rate']]['vat'] += $assoc['total_vat']; + $list[$assoc['rate']]['vat'] += ($assoc['total_ht'] < 0 ? -1 * $assoc['total_vat']:$assoc['total_vat']); $list[$assoc['rate']]['localtax1'] += $assoc['total_localtax1']; $list[$assoc['rate']]['localtax2'] += $assoc['total_localtax2']; } @@ -493,7 +493,7 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $list[$assoc['rate']]['descr'][] = $assoc['descr']; $list[$assoc['rate']]['totalht_list'][] = $assoc['total_ht']; - $list[$assoc['rate']]['vat_list'][] = $assoc['total_vat']; + $list[$assoc['rate']]['vat_list'][] = ($assoc['total_ht'] < 0 ? -1 * $assoc['total_vat']:$assoc['total_vat']); $list[$assoc['rate']]['localtax1_list'][] = $assoc['total_localtax1']; $list[$assoc['rate']]['localtax2_list'][] = $assoc['total_localtax2']; From 7e82d071a725748ac4e5c1acdab7bd92571ee4a8 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 21 Jun 2016 13:13:45 +0200 Subject: [PATCH 2/5] Check if vat negative before --- htdocs/core/lib/tax.lib.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php index de0425c0d5d27..21df48b18ed96 100644 --- a/htdocs/core/lib/tax.lib.php +++ b/htdocs/core/lib/tax.lib.php @@ -329,7 +329,7 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, { $oldrowid=$assoc['rowid']; $list[$assoc['rate']]['totalht'] += $assoc['total_ht']; - $list[$assoc['rate']]['vat'] += ($assoc['total_ht'] < 0 ? -1 * $assoc['total_vat']:$assoc['total_vat']); + $list[$assoc['rate']]['vat'] += ($assoc['total_ht'] < 0 && $assoc['total_vat'] > 0) ? -1 * $assoc['total_vat']:$assoc['total_vat']; $list[$assoc['rate']]['localtax1'] += $assoc['total_localtax1']; $list[$assoc['rate']]['localtax2'] += $assoc['total_localtax2']; } @@ -348,7 +348,7 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $list[$assoc['rate']]['descr'][] = $assoc['descr']; $list[$assoc['rate']]['totalht_list'][] = $assoc['total_ht']; - $list[$assoc['rate']]['vat_list'][] = ($assoc['total_ht'] < 0 ? -1 * $assoc['total_vat']:$assoc['total_vat']); + $list[$assoc['rate']]['vat_list'][] = ($assoc['total_ht'] < 0 && $assoc['total_vat'] > 0) ? -1 * $assoc['total_vat']:$assoc['total_vat']; $list[$assoc['rate']]['localtax1_list'][] = $assoc['total_localtax1']; $list[$assoc['rate']]['localtax2_list'][] = $assoc['total_localtax2']; @@ -474,7 +474,7 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, { $oldrowid=$assoc['rowid']; $list[$assoc['rate']]['totalht'] += $assoc['total_ht']; - $list[$assoc['rate']]['vat'] += ($assoc['total_ht'] < 0 ? -1 * $assoc['total_vat']:$assoc['total_vat']); + $list[$assoc['rate']]['vat'] += ($assoc['total_ht'] < 0 && $assoc['total_vat'] > 0) ? -1 * $assoc['total_vat']:$assoc['total_vat']; $list[$assoc['rate']]['localtax1'] += $assoc['total_localtax1']; $list[$assoc['rate']]['localtax2'] += $assoc['total_localtax2']; } @@ -493,7 +493,7 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $list[$assoc['rate']]['descr'][] = $assoc['descr']; $list[$assoc['rate']]['totalht_list'][] = $assoc['total_ht']; - $list[$assoc['rate']]['vat_list'][] = ($assoc['total_ht'] < 0 ? -1 * $assoc['total_vat']:$assoc['total_vat']); + $list[$assoc['rate']]['vat_list'][] = ($assoc['total_ht'] < 0 && $assoc['total_vat'] > 0) ? -1 * $assoc['total_vat']:$assoc['total_vat']; $list[$assoc['rate']]['localtax1_list'][] = $assoc['total_localtax1']; $list[$assoc['rate']]['localtax2_list'][] = $assoc['total_localtax2']; From 72be8e7fb85770919530b62e9d4a2f3605f2740f Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 21 Jun 2016 13:56:57 +0200 Subject: [PATCH 3/5] FIX: vat should be negative for credit notes --- htdocs/compta/facture/class/facture.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index eee909645d71f..c3084fe725422 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2386,9 +2386,9 @@ function updateline($rowid, $desc, $pu, $qty, $remise_percent, $date_start, $dat $this->line->date_start = $date_start; $this->line->date_end = $date_end; $this->line->total_ht = (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_ht):$total_ht); // For credit note and if qty is negative, total is negative - $this->line->total_tva = $total_tva; - $this->line->total_localtax1 = $total_localtax1; - $this->line->total_localtax2 = $total_localtax2; + $this->line->total_tva = (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_tva):$total_tva); // For credit note and if qty is negative, total is negative + $this->line->total_localtax1 = (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_localtax1):$total_localtax1); // For credit note and if qty is negative, total is negative + $this->line->total_localtax2 = (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_localtax2):$total_localtax2); // For credit note and if qty is negative, total is negative $this->line->total_ttc = (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_ttc):$total_ttc); $this->line->info_bits = $info_bits; $this->line->special_code = $special_code; From a47e8368d76f3e67fef08fae621c9adea79ad12e Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 21 Jun 2016 14:03:19 +0200 Subject: [PATCH 4/5] secure addline function as well --- htdocs/compta/facture/class/facture.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index c3084fe725422..c60761c9154ed 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2215,10 +2215,10 @@ function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1=0, $txlocaltax2=0, $f $this->line->rang=$rangtouse; $this->line->info_bits=$info_bits; $this->line->fk_remise_except=$fk_remise_except; - $this->line->total_ht= (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_ht):$total_ht); // For credit note and if qty is negative, total is negative - $this->line->total_tva= $total_tva; - $this->line->total_localtax1=$total_localtax1; - $this->line->total_localtax2=$total_localtax2; + $this->line->total_ht=(($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_ht):$total_ht); // For credit note and if qty is negative, total is negative + $this->line->total_tva=(($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_tva):$total_tva); // For credit note and if qty is negative, total is negative + $this->line->total_localtax1=(($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_localtax1):$total_localtax1); // For credit note and if qty is negative, total is negative + $this->line->total_localtax2=(($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_localtax2):$total_localtax2); // For credit note and if qty is negative, total is negative $this->line->localtax1_type = $localtaxes_type[0]; $this->line->localtax2_type = $localtaxes_type[2]; $this->line->total_ttc= (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_ttc):$total_ttc); From 17ba9718627bcd48941aefedb3365397cadb7b40 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 21 Jun 2016 14:20:25 +0200 Subject: [PATCH 5/5] also secure localtaxes in reports --- htdocs/core/lib/tax.lib.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php index 21df48b18ed96..e5af6f7375cde 100644 --- a/htdocs/core/lib/tax.lib.php +++ b/htdocs/core/lib/tax.lib.php @@ -330,8 +330,8 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $oldrowid=$assoc['rowid']; $list[$assoc['rate']]['totalht'] += $assoc['total_ht']; $list[$assoc['rate']]['vat'] += ($assoc['total_ht'] < 0 && $assoc['total_vat'] > 0) ? -1 * $assoc['total_vat']:$assoc['total_vat']; - $list[$assoc['rate']]['localtax1'] += $assoc['total_localtax1']; - $list[$assoc['rate']]['localtax2'] += $assoc['total_localtax2']; + $list[$assoc['rate']]['localtax1'] += ($assoc['total_ht'] < 0 && $assoc['total_localtax1'] > 0) ? -1 * $assoc['total_localtax1']:$assoc['total_localtax1']; + $list[$assoc['rate']]['localtax2'] += ($assoc['total_ht'] < 0 && $assoc['total_localtax2'] > 0) ? -1 * $assoc['total_localtax2']:$assoc['total_localtax2']; } $list[$assoc['rate']]['dtotal_ttc'][] = $assoc['total_ttc']; $list[$assoc['rate']]['dtype'][] = $assoc['dtype']; @@ -349,8 +349,8 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $list[$assoc['rate']]['totalht_list'][] = $assoc['total_ht']; $list[$assoc['rate']]['vat_list'][] = ($assoc['total_ht'] < 0 && $assoc['total_vat'] > 0) ? -1 * $assoc['total_vat']:$assoc['total_vat']; - $list[$assoc['rate']]['localtax1_list'][] = $assoc['total_localtax1']; - $list[$assoc['rate']]['localtax2_list'][] = $assoc['total_localtax2']; + $list[$assoc['rate']]['localtax1_list'][] = ($assoc['total_ht'] < 0 && $assoc['total_localtax1'] > 0) ? -1 * $assoc['total_localtax1']:$assoc['total_localtax1']; + $list[$assoc['rate']]['localtax2_list'][] = ($assoc['total_ht'] < 0 && $assoc['total_localtax2'] > 0) ? -1 * $assoc['total_localtax2']:$assoc['total_localtax2']; $list[$assoc['rate']]['pid'][] = $assoc['pid']; $list[$assoc['rate']]['pref'][] = $assoc['pref']; @@ -475,8 +475,8 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $oldrowid=$assoc['rowid']; $list[$assoc['rate']]['totalht'] += $assoc['total_ht']; $list[$assoc['rate']]['vat'] += ($assoc['total_ht'] < 0 && $assoc['total_vat'] > 0) ? -1 * $assoc['total_vat']:$assoc['total_vat']; - $list[$assoc['rate']]['localtax1'] += $assoc['total_localtax1']; - $list[$assoc['rate']]['localtax2'] += $assoc['total_localtax2']; + $list[$assoc['rate']]['localtax1'] += ($assoc['total_ht'] < 0 && $assoc['total_localtax1'] > 0) ? -1 * $assoc['total_localtax1']:$assoc['total_localtax1']; + $list[$assoc['rate']]['localtax2'] += ($assoc['total_ht'] < 0 && $assoc['total_localtax2'] > 0) ? -1 * $assoc['total_localtax2']:$assoc['total_localtax2']; } $list[$assoc['rate']]['dtotal_ttc'][] = $assoc['total_ttc']; $list[$assoc['rate']]['dtype'][] = $assoc['dtype']; @@ -494,8 +494,8 @@ function vat_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $list[$assoc['rate']]['totalht_list'][] = $assoc['total_ht']; $list[$assoc['rate']]['vat_list'][] = ($assoc['total_ht'] < 0 && $assoc['total_vat'] > 0) ? -1 * $assoc['total_vat']:$assoc['total_vat']; - $list[$assoc['rate']]['localtax1_list'][] = $assoc['total_localtax1']; - $list[$assoc['rate']]['localtax2_list'][] = $assoc['total_localtax2']; + $list[$assoc['rate']]['localtax1_list'][] = ($assoc['total_ht'] < 0 && $assoc['total_localtax1'] > 0) ? -1 * $assoc['total_localtax1']:$assoc['total_localtax1']; + $list[$assoc['rate']]['localtax2_list'][] = ($assoc['total_ht'] < 0 && $assoc['total_localtax2'] > 0) ? -1 * $assoc['total_localtax2']:$assoc['total_localtax2']; $list[$assoc['rate']]['pid'][] = $assoc['pid']; $list[$assoc['rate']]['pref'][] = $assoc['pref'];