2
0
forked from Wavyzz/dolibarr

Fix: debut de correction sur pb arrondis

This commit is contained in:
Laurent Destailleur
2007-03-29 23:34:09 +00:00
parent 9212437d9b
commit 85da803077
2 changed files with 58 additions and 60 deletions

View File

@@ -1842,15 +1842,12 @@ function price($amount, $html=0, $outlangs='')
// On pose par defaut 2 decimales // On pose par defaut 2 decimales
$decimal = 2; $decimal = 2;
$amount = ereg_replace(',','.',$amount); $amount = ereg_replace(',','\.',$amount);
$datas = explode('.',$amount); $datas = split('\.',$amount);
$cents = $datas[1]; $decpart = $datas[1];
// On augmente au besoin
if ($cents > 99 )
$decimal = 3;
if ($cents > 999 ) // On augmente au besoin si il y a plus de 2 d<>cimales
$decimal = 4; if (strlen($decpart) > 2) $decimal=strlen($decpart);
// Formate nombre // Formate nombre
if ($html) if ($html)

View File

@@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2002-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2002-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2006 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2006-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@@ -21,70 +21,71 @@
*/ */
/** /**
\file htdocs/lib/price.lib.php \file htdocs/lib/price.lib.php
\brief Librairie contenant les fonctions pour calculer un prix. \brief Librairie contenant les fonctions pour calculer un prix.
\author Rodolphe Quiedeville. \author Rodolphe Quiedeville.
\version $Revision$ \version $Revision$
Ensemble des fonctions permettant de calculer un prix. Ensemble des fonctions permettant de calculer un prix.
*/ */
/** /**
\brief Permet de calculer les parts total HT, TVA et TTC d'une ligne de \brief Permet de calculer les parts total HT, TVA et TTC d'une ligne de
facture, propale ou autre depuis: facture, propale, commande ou autre depuis:
Prix unitaire, quantit<69>, remise_percent_ligne, txtva, remise_percent_global. quantit<69>, prix unitaire, remise_percent_ligne, txtva, remise_percent_global
\param qty \param qty Quantit<69>
\param pu \param pu Prix unitaire HT
\param remise_percent_ligne \param remise_percent_ligne Remise ligne
\param txtva \param txtva Taux tva
\param remise_percent_global \param remise_percent_global 0
\param price_base_type indique si on calcule sur le HT ou le TTC \param price_base_type HT=on calcule sur le HT, TTC=on calcule sur le TTC
\param pu_ttc prix de unitaire TTC \param pu_ttc Prix unitaire TTC
\return result[0] total_ht \return result[0,1,2] (total_ht, total_tva, total_ttc)
result[1] total_tva
result[2] total_ttc
*/ */
function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_percent_global=0, $price_base_type='HT', $pu_ttc=0) 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') if ($price_base_type =='HT')
{ {
// On travaille par defaut en partant du prix HT // On travaille par defaut en partant du prix HT
$tot_sans_remise = $pu * $qty; $tot_sans_remise = $pu * $qty;
$tot_avec_remise_ligne = $tot_sans_remise * ( 1 - ($remise_percent_ligne / 100)); $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_avec_remise = $tot_avec_remise_ligne * ( 1 - ($remise_percent_global / 100));
$result[0] = round($tot_avec_remise, 2); $result[0] = round($tot_avec_remise, $maxdecimalfortotal);
$result[2] = round($tot_avec_remise * ( 1 + ($txtva / 100)), 2); $result[2] = round($tot_avec_remise * ( 1 + ($txtva / 100)), $maxdecimalfortotal);
$result[1] = $result[2] - $result[0]; $result[1] = $result[2] - $result[0];
} }
else else
{ {
// On cacule <20> l'envers en partant du prix TTC // On cacule <20> l'envers en partant du prix TTC
// Utilise pour les produits a prix TTC reglemente (livres, ...) // Utilise pour les produits a prix TTC reglemente (livres, ...)
$tot_sans_remise = $pu_ttc * $qty; $tot_sans_remise = $pu_ttc * $qty;
$tot_avec_remise_ligne = $tot_sans_remise * ( 1 - ($remise_percent_ligne / 100)); $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_avec_remise = $tot_avec_remise_ligne * ( 1 - ($remise_percent_global / 100));
$result[2] = round($tot_avec_remise, 2); $result[2] = round($tot_avec_remise, $maxdecimalfortotal);
$result[0] = round($tot_avec_remise / ( 1 + ($txtva / 100)), 2); $result[0] = round($tot_avec_remise / ( 1 + ($txtva / 100)), $maxdecimalfortotal);
$result[1] = $result[2] - $result[0]; $result[1] = $result[2] - $result[0];
} }
return $result; return $result;
} }
/** /**
\brief Permet de calculer un prix. \brief Permet de calculer un prix.
\param products \param products
\param remise_percent \param remise_percent
\param remise_absolue \param remise_absolue
\return result[0] total_ht \return result[0] total_ht
result[1] total_tva result[1] total_tva
result[2] total_ttc result[2] total_ttc
result[5] tableau des totaux par tva result[5] tableau des totaux par tva
\deprecated \deprecated
*/ */
function calcul_price($products, $remise_percent, $remise_absolue=0) function calcul_price($products, $remise_percent, $remise_absolue=0)
{ {