';
print '';
@@ -142,6 +169,44 @@ else
}
+// Show examples
+print ''.$langs->trans("Examples").": \n";
+
+$s=2/7;$qty=1;$vat=0;
+$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,'HT',0);
+print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
+print " x ".$langs->trans("Quantity").": ".$qty;
+print " - ".$langs->trans("VAT").": ".$vat;
+print " -> ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[2]." \n";
+
+$s=10/3;$qty=1;$vat=0;
+$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,'HT',0);
+print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
+print " x ".$langs->trans("Quantity").": ".$qty;
+print " - ".$langs->trans("VAT").": ".$vat;
+print " -> ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[2]." \n";
+
+$s=10/3;$qty=2;$vat=0;
+$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,'HT',0);
+print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
+print " x ".$langs->trans("Quantity").": ".$qty;
+print " - ".$langs->trans("VAT").": ".$vat;
+print " -> ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[2]." \n";
+
+$s=10/3;$qty=1;$vat=10;
+$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,'HT',0);
+print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
+print " x ".$langs->trans("Quantity").": ".$qty;
+print " - ".$langs->trans("VAT").": ".$vat;
+print " -> ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[2]." \n";
+
+$s=10/3;$qty=2;$vat=10;
+$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,'HT',0);
+print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
+print " x ".$langs->trans("Quantity").": ".$qty;
+print " - ".$langs->trans("VAT").": ".$vat;
+print " -> ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[2]." \n";
+
$db->close();
llxFooter('$Date$ - $Revision$');
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index fde126f8b77..804e31c3fbf 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -713,6 +713,9 @@ MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add ... after this number if you want to see ... when number is truncated when shown on screen)
MAIN_DISABLE_PDF_COMPRESSION=Use PDF compression for generated PDF files.
+MAIN_ROUNDING_RULE_TOT = Size of rounding range (for rare countries where rounding is done on something else than base 10)
+UnitPriceOfProduct=Net unit price of a product
+TotalPriceAfterRounding=Total price inc. tax after rounding
ParameterActiveForNextInputOnly=Parameter effective for next input only
NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
NoEventFoundWithCriteria=No security event has been found for such search criterias.
diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang
index eb2b7ff4528..05e1450075f 100644
--- a/htdocs/langs/en_US/main.lang
+++ b/htdocs/langs/en_US/main.lang
@@ -428,6 +428,7 @@ NotAllowed=Not allowed
ReadPermissionNotAllowed=Read permission not allowed
AmountInCurrency=Amount in %s currency
Example=Example
+Examples=Examples
NoExample=No example
FindBug=Report a bug
NbOfThirdParties=Number of third parties
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index ccb9264d152..33d4c55ba08 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -713,6 +713,9 @@ MAIN_MAX_DECIMALS_UNIT = Nombre de décimales maximum pour les prix unitaires
MAIN_MAX_DECIMALS_TOT = Nombre de décimales maximum pour les prix totaux
MAIN_MAX_DECIMALS_SHOWN = Nombre de décimales maximum pour les montant affichés à l'écran (Mettre ... après ce nombre max si vous voulez voir ... quand le nombre est tronqué à l'affichage écran)
MAIN_DISABLE_PDF_COMPRESSION = Utiliser la compression PDF pour les fichiers PDF générés.
+MAIN_ROUNDING_RULE_TOT = Taille du pas des arrondis (pour les très rares pays qui arrondissent sur une autre base que la base 10)
+UnitPriceOfProduct=Prix unitaire HT d'un produit
+TotalPriceAfterRounding=Prix total TTC après arrondis
ParameterActiveForNextInputOnly = Parametre effectif pour les prochaines saisies uniquement
NoEventOrNoAuditSetup = Aucun évenement d'audit de sécurité n'a été enregistré. Ceci peut etre normal si l'audit n'a pas été activé dans la configuration - sécurité - audit.
NoEventFoundWithCriteria = Aucun évenement d'audit de sécurité trouvé avec ces critères.
diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang
index e55bf746ff3..449842410ef 100644
--- a/htdocs/langs/fr_FR/main.lang
+++ b/htdocs/langs/fr_FR/main.lang
@@ -427,6 +427,7 @@ NotAllowed=Non autorisé
ReadPermissionNotAllowed=Lecture non autorisée
AmountInCurrency=Montants exprimés en %s
Example=Exemple
+Examples=Exemples
NoExample=Pas d'exemple
FindBug=Signaler un bug
NbOfThirdParties=Nombre de tiers
diff --git a/htdocs/lib/price.lib.php b/htdocs/lib/price.lib.php
index 1733674eaa7..9e34dccf19f 100644
--- a/htdocs/lib/price.lib.php
+++ b/htdocs/lib/price.lib.php
@@ -27,8 +27,7 @@
/**
* \brief Permet de calculer les parts total HT, TVA et TTC d'une ligne de
* facture, propale, commande ou autre depuis:
- * quantity, unit price, remise_percent_ligne, txtva, remise_percent_global, price_base_type, info_bits
- * \param qty Quantity
+ * quantity, unit price, remise_percent_ligne, txtva, remise_percent_global, price_base_type, info_bits * \param qty Quantity
* \param pu Prix unitaire (HT ou TTC selon price_base_type)
* \param remise_percent_ligne Remise ligne
* \param txtva Taux tva
@@ -59,7 +58,13 @@ function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_pe
$result[0] = price2num($tot_avec_remise, 'MT');
$result[2] = price2num($tot_avec_remise * ( 1 + ( (($info_bits & 1)?0:$txtva) / 100)), 'MT'); // Selon TVA NPR ou non
$result2bis= price2num($tot_avec_remise * ( 1 + ( $txtva / 100)), 'MT'); // Si TVA consideree normale (non NPR)
- $result[1] = $result2bis - $result[0];
+ if (! empty($conf->global->MAIN_ROUNDING_RULE_TOT))
+ {
+ $result[0]=round($result[0]/$conf->global->MAIN_ROUNDING_RULE_TOT, 0)*$conf->global->MAIN_ROUNDING_RULE_TOT;
+ $result[2]=round($result[2]/$conf->global->MAIN_ROUNDING_RULE_TOT, 0)*$conf->global->MAIN_ROUNDING_RULE_TOT;
+ $result2bis=round($result2bis/$conf->global->MAIN_ROUNDING_RULE_TOT, 0)*$conf->global->MAIN_ROUNDING_RULE_TOT;
+ }
+ $result[1] = $result2bis - $result[0]; // Total VAT = TTC - HT
$result[3] = price2num($pu, 'MU');
$result[5] = price2num($pu * ( 1 + ((($info_bits & 1)?0:$txtva) / 100)), 'MU'); // Selon TVA NPR ou non
@@ -68,8 +73,7 @@ function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_pe
}
else
{
- // On cacule a l'envers en partant du prix TTC
- // Utilise pour les produits a prix TTC reglemente (livres, ...)
+ // On calcule à l'envers en partant du prix TTC
$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));
@@ -82,7 +86,13 @@ function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_pe
$result[2] = price2num($tot_avec_remise, 'MT');
$result[0] = price2num($tot_avec_remise / ( 1 + ((($info_bits & 1)?0:$txtva) / 100)), 'MT'); // Selon TVA NPR ou non
$result0bis= price2num($tot_avec_remise / ( 1 + ($txtva / 100)), 'MT'); // Si TVA consideree normale (non NPR)
- $result[1] = $result[2] - $result0bis;
+ if (! empty($conf->global->MAIN_ROUNDING_RULE_TOT))
+ {
+ $result0bis=round($result0bis/$conf->global->MAIN_ROUNDING_RULE_TOT, 0)*$conf->global->MAIN_ROUNDING_RULE_TOT;
+ $result[0]=round($result[0]/$conf->global->MAIN_ROUNDING_RULE_TOT, 0)*$conf->global->MAIN_ROUNDING_RULE_TOT;
+ $result[2]=round($result[2]/$conf->global->MAIN_ROUNDING_RULE_TOT, 0)*$conf->global->MAIN_ROUNDING_RULE_TOT;
+ }
+ $result[1] = $result[2] - $result0bis; // Total VAT = TTC - HT
$result[5] = price2num($pu, 'MU');
$result[3] = price2num($pu / ( 1 + ((($info_bits & 1)?0:$txtva) / 100)), 'MU'); // Selon TVA NPR ou non