Modifi calcul_price_total pour calculer en TTC

This commit is contained in:
Rodolphe Quiedeville 2006-12-15 11:59:39 +00:00
parent e6c29cf43a
commit 158b3a9a6b

View File

@ -1,5 +1,5 @@
<?php <?php
/* Copyright (C) 2002-2004 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 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
@ -21,136 +21,155 @@
*/ */
/** /**
\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 ou autre depuis:
Prix unitaire, quantité, remise_percent_ligne, txtva, remise_percent_global. Prix unitaire, quantité, remise_percent_ligne, txtva, remise_percent_global.
\param qty \param qty
\param pu \param pu
\param remise_percent_ligne \param remise_percent_ligne
\param txtva \param txtva
\param remise_percent_global \param remise_percent_global
\return result[0] total_ht \param price_base_type indique si on calcule sur le HT ou le TTC
result[1] total_tva \param pu_ttc prix de unitaire TTC
result[2] total_ttc \return result[0] total_ht
result[1] total_tva
result[2] total_ttc
*/ */
function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_percent_global=0) function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_percent_global=0, $price_base_type='HT', $pu_ttc=0)
{ {
$result=array(); $result=array();
$tot_sans_remise = $pu * $qty;
$tot_avec_remise_ligne = $tot_sans_remise * ( 1 - ($remise_percent_ligne / 100)); if ($price_base_type =='HT')
$tot_avec_remise = $tot_avec_remise_ligne * ( 1 - ($remise_percent_global / 100)); {
$result[0] = round($tot_avec_remise, 2); // On travaille par defaut en partant du prix HT
$result[2] = round($tot_avec_remise * ( 1 + ($txtva / 100)), 2); $tot_sans_remise = $pu * $qty;
$result[1] = $result[2] - $result[0]; $tot_avec_remise_ligne = $tot_sans_remise * ( 1 - ($remise_percent_ligne / 100));
return $result; $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, ...)
$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];
}
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)
{ {
$total_ht = 0; $total_ht = 0;
$amount_ht = 0; $amount_ht = 0;
$total_tva = 0; $total_tva = 0;
$total_ttc = 0; $total_ttc = 0;
$total_remise = 0; $total_remise = 0;
$result[5] = array(); $result[5] = array();
if ( sizeof( $products ) ) if ( sizeof( $products ) )
{
foreach ($products as $product)
{ {
foreach ($products as $product) $prod_price = $product[0]; // Prix unitaire HT apres remise % de ligne
{ $prod_qty = $product[1];
$prod_price = $product[0]; // Prix unitaire HT apres remise % de ligne $prod_txtva = $product[2];
$prod_qty = $product[1];
$prod_txtva = $product[2]; // montant total HT de la ligne
$line_price_ht = $prod_qty * $prod_price;
// montant total HT de la ligne
$line_price_ht = $prod_qty * $prod_price; // incrémentation montant HT hors remise de l'ensemble
$amount_ht += $line_price_ht;
// incrémentation montant HT hors remise de l'ensemble
$amount_ht += $line_price_ht; // si une remise relative est consentie sur l'ensemble
if ($remise_percent > 0)
// si une remise relative est consentie sur l'ensemble {
if ($remise_percent > 0) // calcul de la remise sur la ligne
{ $line_remise = ($line_price_ht * $remise_percent / 100);
// calcul de la remise sur la ligne // soustraction de cette remise au montant HT de la ligne
$line_remise = ($line_price_ht * $remise_percent / 100); $line_price_ht -= $line_remise;
// soustraction de cette remise au montant HT de la ligne // incrémentation du montant total de remise sur l'ensemble
$line_price_ht -= $line_remise; $total_remise += $line_remise;
// incrémentation du montant total de remise sur l'ensemble }
$total_remise += $line_remise; // incrémentation du montant HT remisé de l'ensemble
} $total_ht += $line_price_ht;
// incrémentation du montant HT remisé de l'ensemble
$total_ht += $line_price_ht; // calcul de la TVA sur la ligne
$line_tva = ($line_price_ht * (abs($prod_txtva) / 100));
// calcul de la TVA sur la ligne
$line_tva = ($line_price_ht * (abs($prod_txtva) / 100)); // incrémentation du montant TTC de la valeur HT, on traite la TVA ensuite
$total_ttc += $line_price_ht;
// incrémentation du montant TTC de la valeur HT, on traite la TVA ensuite
$total_ttc += $line_price_ht; // traitement de la tva non perçue récupérable
if ( $prod_txtva >= 0 )
// traitement de la tva non perçue récupérable {
if ( $prod_txtva >= 0 ) // ce n'est pas une TVA non perçue récupérable,
{ // donc on incrémente le total TTC de l'ensemble, de la valeur de TVA de la ligne
// ce n'est pas une TVA non perçue récupérable, $total_ttc += $line_tva;
// donc on incrémente le total TTC de l'ensemble, de la valeur de TVA de la ligne }
$total_ttc += $line_tva;
} // dans tous les cas, on incrémente le total de TVA
$total_tva += $line_tva;
// dans tous les cas, on incrémente le total de TVA
$total_tva += $line_tva; // on incrémente le tableau de différentiation des taux de TVA
// s'il faut rassembler les tva facturables ou non, du même taux
// on incrémente le tableau de différentiation des taux de TVA // dans un même ligne du tableau, remplacer la ligne suivante par :
// s'il faut rassembler les tva facturables ou non, du même taux // $result[5][abs($prod_txtva)] += $line_tva;
// dans un même ligne du tableau, remplacer la ligne suivante par : $result[5][$prod_txtva] += $line_tva;
// $result[5][abs($prod_txtva)] += $line_tva;
$result[5][$prod_txtva] += $line_tva; $i++;
$i++;
}
} }
}
/*
* Si remise absolue, on la retire /*
*/ * Si remise absolue, on la retire
$total_ht -= $remise_absolue; */
$total_ht -= $remise_absolue;
/*
* Gestion des arrondis sur total des prix /*
*/ * Gestion des arrondis sur total des prix
$total_ht = round($total_ht, 2); */
$total_tva = round($total_tva, 2); $total_ht = round($total_ht, 2);
$total_ttc = $total_ht + $total_tva; $total_tva = round($total_tva, 2);
$total_ttc = $total_ht + $total_tva;
// Renvoi réponse
$result[0] = $total_ht; // Renvoi réponse
$result[1] = $total_tva; $result[0] = $total_ht;
$result[2] = $total_ttc; $result[1] = $total_tva;
$result[2] = $total_ttc;
$result[3] = $total_remise;
$result[4] = $amount_ht; $result[3] = $total_remise;
$result[4] = $amount_ht;
return $result;
return $result;
} }