From 1b30c1adb43016e4e9d818169fe849d57986c482 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur <eldy@destailleur.fr> Date: Sat, 12 Mar 2016 20:49:38 +0100 Subject: [PATCH] Fix regression on vat calculation when invoice was not a situation invoice --- htdocs/accountancy/journal/sellsjournal.php | 4 ++-- htdocs/compta/facture.php | 4 ++-- htdocs/compta/facture/class/facture.class.php | 13 ++++++++++--- htdocs/compta/journal/sellsjournal.php | 4 ++-- .../core/modules/facture/doc/pdf_crabe.modules.php | 8 +++++--- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 61f503f5fcb..d0c65e8e909 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -141,8 +141,8 @@ if ($result) { // Situation invoices handling $line = new FactureLigne($db); - $line->fetch($obj->rowid); - $prev_progress = $line->get_prev_progress(); + $line->fetch($obj->fdid); // id of line + $prev_progress = $line->get_prev_progress($obj->rowid); // id of invoice if ($obj->type == Facture::TYPE_SITUATION) { // Avoid divide by 0 if ($obj->situation_percent == 0) { diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 951270c19fe..b45ce4a33e3 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -1564,7 +1564,7 @@ if (empty($reshook)) $line = new FactureLigne($db); $line->fetch(GETPOST('lineid')); - $percent = $line->get_prev_progress(); + $percent = $line->get_prev_progress($object->id); if (GETPOST('progress') < $percent) { @@ -1682,7 +1682,7 @@ if (empty($reshook)) { foreach ($object->lines as $line) { - $percent = $line->get_prev_progress(); + $percent = $line->get_prev_progress($object->id); if (GETPOST('all_progress') < $percent) { $mesg = '<div class="warning">' . $langs->trans("CantBeLessThanMinPercent") . '</div>'; $result = -1; diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 7c761ccb40f..0f41620bd89 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -4256,15 +4256,22 @@ class FactureLigne extends CommonInvoiceLine } /** - * Returns situation_percent of the previous line + * Returns situation_percent of the previous line. + * Warning: If invoice is a replacement invoice, this->fk_prev_id is id of the replaced line. * - * @return int >= 0 + * @param int $invoiceid Invoice id + * @return int >= 0 */ - function get_prev_progress() + function get_prev_progress($invoiceid) { if (is_null($this->fk_prev_id) || empty($this->fk_prev_id) || $this->fk_prev_id == "") { return 0; } else { + // If invoice is a not a situation invoice, this->fk_prev_id is used for something else + $tmpinvoice=new Facture($this->db); + $tmpinvoice->fetch($invoiceid); + if ($tmpinvoice->type != Facture::TYPE_SITUATION) return 0; + $sql = 'SELECT situation_percent FROM ' . MAIN_DB_PREFIX . 'facturedet WHERE rowid=' . $this->fk_prev_id; $resql = $this->db->query($sql); if ($resql && $resql->num_rows > 0) { diff --git a/htdocs/compta/journal/sellsjournal.php b/htdocs/compta/journal/sellsjournal.php index cddbdcaa064..c0ebdb1aa3a 100644 --- a/htdocs/compta/journal/sellsjournal.php +++ b/htdocs/compta/journal/sellsjournal.php @@ -166,8 +166,8 @@ if ($result) // Situation invoices handling $line = new FactureLigne($db); - $line->fetch($obj->id); - $prev_progress = $line->get_prev_progress(); + $line->fetch($obj->id); // id of line + $prev_progress = $line->get_prev_progress($obj->rowid); // id on invoice if ($obj->type==Facture::TYPE_SITUATION) { // Avoid divide by 0 if ($obj->situation_percent == 0) { diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 8637f02bebc..c627da68418 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -167,7 +167,7 @@ class pdf_crabe extends ModelePDFFactures function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0) { global $user,$langs,$conf,$mysoc,$db,$hookmanager; - + if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1'; @@ -540,13 +540,14 @@ class pdf_crabe extends ModelePDFFactures $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->postotalht, 3, $total_excl_tax, 0, 'R', 0); // Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva - $prev_progress = $object->lines[$i]->get_prev_progress(); + $prev_progress = $object->lines[$i]->get_prev_progress($object->id); if ($prev_progress > 0) // Compute progress from previous situation { $tvaligne = $object->lines[$i]->total_tva * ($object->lines[$i]->situation_percent - $prev_progress) / $object->lines[$i]->situation_percent; } else { $tvaligne = $object->lines[$i]->total_tva; } + $localtax1ligne=$object->lines[$i]->total_localtax1; $localtax2ligne=$object->lines[$i]->total_localtax2; $localtax1_rate=$object->lines[$i]->localtax1_tx; @@ -1103,7 +1104,8 @@ class pdf_crabe extends ModelePDFFactures } } } - //} + + //} // VAT foreach($this->tva as $tvakey => $tvaval) { -- GitLab