From 85da803077751003f9099f3f7de88e0f4577fafc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 29 Mar 2007 23:34:09 +0000 Subject: [PATCH] Fix: debut de correction sur pb arrondis --- htdocs/lib/functions.inc.php | 13 ++--- htdocs/lib/price.lib.php | 105 ++++++++++++++++++----------------- 2 files changed, 58 insertions(+), 60 deletions(-) diff --git a/htdocs/lib/functions.inc.php b/htdocs/lib/functions.inc.php index 8acd48cdc09..d2bf92c922d 100644 --- a/htdocs/lib/functions.inc.php +++ b/htdocs/lib/functions.inc.php @@ -1842,15 +1842,12 @@ function price($amount, $html=0, $outlangs='') // On pose par defaut 2 decimales $decimal = 2; - $amount = ereg_replace(',','.',$amount); - $datas = explode('.',$amount); - $cents = $datas[1]; - // On augmente au besoin - if ($cents > 99 ) - $decimal = 3; + $amount = ereg_replace(',','\.',$amount); + $datas = split('\.',$amount); + $decpart = $datas[1]; - if ($cents > 999 ) - $decimal = 4; + // On augmente au besoin si il y a plus de 2 décimales + if (strlen($decpart) > 2) $decimal=strlen($decpart); // Formate nombre if ($html) diff --git a/htdocs/lib/price.lib.php b/htdocs/lib/price.lib.php index 3de62d6dc60..dbafff80f06 100644 --- a/htdocs/lib/price.lib.php +++ b/htdocs/lib/price.lib.php @@ -1,6 +1,6 @@ - * Copyright (C) 2006 Laurent Destailleur + * Copyright (C) 2006-2007 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,70 +21,71 @@ */ /** - \file htdocs/lib/price.lib.php - \brief Librairie contenant les fonctions pour calculer un prix. - \author Rodolphe Quiedeville. - \version $Revision$ - - Ensemble des fonctions permettant de calculer un prix. + \file htdocs/lib/price.lib.php + \brief Librairie contenant les fonctions pour calculer un prix. + \author Rodolphe Quiedeville. + \version $Revision$ + + Ensemble des fonctions permettant de calculer un prix. */ /** - \brief Permet de calculer les parts total HT, TVA et TTC d'une ligne de - facture, propale ou autre depuis: - Prix unitaire, quantité, remise_percent_ligne, txtva, remise_percent_global. - \param qty - \param pu - \param remise_percent_ligne - \param txtva - \param remise_percent_global - \param price_base_type indique si on calcule sur le HT ou le TTC - \param pu_ttc prix de unitaire TTC - \return result[0] total_ht - result[1] total_tva - result[2] total_ttc + \brief Permet de calculer les parts total HT, TVA et TTC d'une ligne de + facture, propale, commande ou autre depuis: + quantité, prix unitaire, remise_percent_ligne, txtva, remise_percent_global + \param qty Quantité + \param pu Prix unitaire HT + \param remise_percent_ligne Remise ligne + \param txtva Taux tva + \param remise_percent_global 0 + \param price_base_type HT=on calcule sur le HT, TTC=on calcule sur le TTC + \param pu_ttc Prix unitaire TTC + \return result[0,1,2] (total_ht, total_tva, total_ttc) */ function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_percent_global=0, $price_base_type='HT', $pu_ttc=0) { - $result=array(); + $maxdecimalfortotal=2; + + $result=array(); - if ($price_base_type =='HT') - { - // On travaille par defaut en partant du prix HT - $tot_sans_remise = $pu * $qty; - $tot_avec_remise_ligne = $tot_sans_remise * ( 1 - ($remise_percent_ligne / 100)); - $tot_avec_remise = $tot_avec_remise_ligne * ( 1 - ($remise_percent_global / 100)); - $result[0] = round($tot_avec_remise, 2); - $result[2] = round($tot_avec_remise * ( 1 + ($txtva / 100)), 2); - $result[1] = $result[2] - $result[0]; - } - else - { - // On cacule à l'envers en partant du prix TTC - // Utilise pour les produits a prix TTC reglemente (livres, ...) + if ($price_base_type =='HT') + { + // On travaille par defaut en partant du prix HT + $tot_sans_remise = $pu * $qty; + $tot_avec_remise_ligne = $tot_sans_remise * ( 1 - ($remise_percent_ligne / 100)); + $tot_avec_remise = $tot_avec_remise_ligne * ( 1 - ($remise_percent_global / 100)); + $result[0] = round($tot_avec_remise, $maxdecimalfortotal); + $result[2] = round($tot_avec_remise * ( 1 + ($txtva / 100)), $maxdecimalfortotal); + $result[1] = $result[2] - $result[0]; + } + else + { + // On cacule à l'envers en partant du prix TTC + // Utilise pour les produits a prix TTC reglemente (livres, ...) - $tot_sans_remise = $pu_ttc * $qty; - $tot_avec_remise_ligne = $tot_sans_remise * ( 1 - ($remise_percent_ligne / 100)); - $tot_avec_remise = $tot_avec_remise_ligne * ( 1 - ($remise_percent_global / 100)); + $tot_sans_remise = $pu_ttc * $qty; + $tot_avec_remise_ligne = $tot_sans_remise * ( 1 - ($remise_percent_ligne / 100)); + $tot_avec_remise = $tot_avec_remise_ligne * ( 1 - ($remise_percent_global / 100)); - $result[2] = round($tot_avec_remise, 2); - $result[0] = round($tot_avec_remise / ( 1 + ($txtva / 100)), 2); - $result[1] = $result[2] - $result[0]; - } + $result[2] = round($tot_avec_remise, $maxdecimalfortotal); + $result[0] = round($tot_avec_remise / ( 1 + ($txtva / 100)), $maxdecimalfortotal); + $result[1] = $result[2] - $result[0]; + } - return $result; + return $result; } + /** - \brief Permet de calculer un prix. - \param products - \param remise_percent - \param remise_absolue - \return result[0] total_ht - result[1] total_tva - result[2] total_ttc - result[5] tableau des totaux par tva - \deprecated + \brief Permet de calculer un prix. + \param products + \param remise_percent + \param remise_absolue + \return result[0] total_ht + result[1] total_tva + result[2] total_ttc + result[5] tableau des totaux par tva + \deprecated */ function calcul_price($products, $remise_percent, $remise_absolue=0) {