diff --git a/htdocs/admin/limits.php b/htdocs/admin/limits.php index 665db98c8faa5c1440bf305d536784082e9d02eb..c2af8214e55e319105ea5dc2198ce5f204396abb 100644 --- a/htdocs/admin/limits.php +++ b/htdocs/admin/limits.php @@ -1,21 +1,21 @@ <?php /* Copyright (C) 2007-2010 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2009-2012 Regis Houssin <regis@dolibarr.fr> - * Copyright (C) 2010 Juanjo Menent <jmenent@2byte.es> - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ +* Copyright (C) 2010 Juanjo Menent <jmenent@2byte.es> +* +* 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 +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ /** * \file htdocs/admin/limits.php @@ -36,53 +36,53 @@ $action = GETPOST('action','alpha'); if ($action == 'update') { - $error=0; - $MAXDEC=8; - if ($_POST["MAIN_MAX_DECIMALS_UNIT"] > $MAXDEC - || $_POST["MAIN_MAX_DECIMALS_TOT"] > $MAXDEC - || $_POST["MAIN_MAX_DECIMALS_SHOWN"] > $MAXDEC) - { - $error++; - $mesg='<div class="error">'.$langs->trans("ErrorDecimalLargerThanAreForbidden",$MAXDEC).'</div>'; - } - - if ($_POST["MAIN_MAX_DECIMALS_UNIT"] < 0 - || $_POST["MAIN_MAX_DECIMALS_TOT"] < 0 - || $_POST["MAIN_MAX_DECIMALS_SHOWN"] < 0) - { - $langs->load("errors"); - $error++; - $mesg='<div class="error">'.$langs->trans("ErrorNegativeValueNotAllowed").'</div>'; - } - - if ($_POST["MAIN_ROUNDING_RULE_TOT"]) - { - if ($_POST["MAIN_ROUNDING_RULE_TOT"] * pow(10,$_POST["MAIN_MAX_DECIMALS_TOT"]) < 1) - { - $langs->load("errors"); - $error++; - $mesg='<div class="error">'.$langs->trans("ErrorMAIN_ROUNDING_RULE_TOTCanMAIN_MAX_DECIMALS_TOT").'</div>'; - } - } - - if (! $error) - { - dolibarr_set_const($db, "MAIN_MAX_DECIMALS_UNIT", $_POST["MAIN_MAX_DECIMALS_UNIT"],'chaine',0,'',$conf->entity); - dolibarr_set_const($db, "MAIN_MAX_DECIMALS_TOT", $_POST["MAIN_MAX_DECIMALS_TOT"],'chaine',0,'',$conf->entity); - dolibarr_set_const($db, "MAIN_MAX_DECIMALS_SHOWN", $_POST["MAIN_MAX_DECIMALS_SHOWN"],'chaine',0,'',$conf->entity); - - dolibarr_set_const($db, "MAIN_ROUNDING_RULE_TOT", $_POST["MAIN_ROUNDING_RULE_TOT"],'chaine',0,'',$conf->entity); - - Header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup"); - exit; - } + $error=0; + $MAXDEC=8; + if ($_POST["MAIN_MAX_DECIMALS_UNIT"] > $MAXDEC + || $_POST["MAIN_MAX_DECIMALS_TOT"] > $MAXDEC + || $_POST["MAIN_MAX_DECIMALS_SHOWN"] > $MAXDEC) + { + $error++; + $mesg='<div class="error">'.$langs->trans("ErrorDecimalLargerThanAreForbidden",$MAXDEC).'</div>'; + } + + if ($_POST["MAIN_MAX_DECIMALS_UNIT"] < 0 + || $_POST["MAIN_MAX_DECIMALS_TOT"] < 0 + || $_POST["MAIN_MAX_DECIMALS_SHOWN"] < 0) + { + $langs->load("errors"); + $error++; + $mesg='<div class="error">'.$langs->trans("ErrorNegativeValueNotAllowed").'</div>'; + } + + if ($_POST["MAIN_ROUNDING_RULE_TOT"]) + { + if ($_POST["MAIN_ROUNDING_RULE_TOT"] * pow(10,$_POST["MAIN_MAX_DECIMALS_TOT"]) < 1) + { + $langs->load("errors"); + $error++; + $mesg='<div class="error">'.$langs->trans("ErrorMAIN_ROUNDING_RULE_TOTCanMAIN_MAX_DECIMALS_TOT").'</div>'; + } + } + + if (! $error) + { + dolibarr_set_const($db, "MAIN_MAX_DECIMALS_UNIT", $_POST["MAIN_MAX_DECIMALS_UNIT"],'chaine',0,'',$conf->entity); + dolibarr_set_const($db, "MAIN_MAX_DECIMALS_TOT", $_POST["MAIN_MAX_DECIMALS_TOT"],'chaine',0,'',$conf->entity); + dolibarr_set_const($db, "MAIN_MAX_DECIMALS_SHOWN", $_POST["MAIN_MAX_DECIMALS_SHOWN"],'chaine',0,'',$conf->entity); + + dolibarr_set_const($db, "MAIN_ROUNDING_RULE_TOT", $_POST["MAIN_ROUNDING_RULE_TOT"],'chaine',0,'',$conf->entity); + + Header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup"); + exit; + } } /* * View - */ +*/ $form=new Form($db); @@ -110,12 +110,12 @@ if ($action == 'edit') $var=!$var; print '<tr '.$bc[$var].'><td>'; - print $form->textwithpicto($langs->trans("MAIN_MAX_DECIMALS_UNIT"),$langs->trans("ParameterActiveForNextInputOnly")); + print $form->textwithpicto($langs->trans("MAIN_MAX_DECIMALS_UNIT"),$langs->trans("ParameterActiveForNextInputOnly")); print '</td><td><input class="flat" name="MAIN_MAX_DECIMALS_UNIT" size="3" value="' . $conf->global->MAIN_MAX_DECIMALS_UNIT . '"></td></tr>'; $var=!$var; print '<tr '.$bc[$var].'><td>'; - print $form->textwithpicto($langs->trans("MAIN_MAX_DECIMALS_TOT"),$langs->trans("ParameterActiveForNextInputOnly")); + print $form->textwithpicto($langs->trans("MAIN_MAX_DECIMALS_TOT"),$langs->trans("ParameterActiveForNextInputOnly")); print '</td><td><input class="flat" name="MAIN_MAX_DECIMALS_TOT" size="3" value="' . $conf->global->MAIN_MAX_DECIMALS_TOT . '"></td></tr>'; $var=!$var; @@ -123,7 +123,7 @@ if ($action == 'edit') $var=!$var; print '<tr '.$bc[$var].'><td>'; - print $form->textwithpicto($langs->trans("MAIN_ROUNDING_RULE_TOT"),$langs->trans("ParameterActiveForNextInputOnly")); + print $form->textwithpicto($langs->trans("MAIN_ROUNDING_RULE_TOT"),$langs->trans("ParameterActiveForNextInputOnly")); print '</td><td><input class="flat" name="MAIN_ROUNDING_RULE_TOT" size="3" value="' . $conf->global->MAIN_ROUNDING_RULE_TOT . '"></td></tr>'; print '</table>'; @@ -167,6 +167,7 @@ else print '</div>'; } + $vat_rates=array(); // TODO move to DAO class @@ -178,15 +179,15 @@ $sql.=" ORDER BY t.taux ASC"; $resql=$db->query($sql); if ($resql) { - $num = $db->num_rows($resql); - if ($num) - { - for ($i = 0; $i < $num; $i++) - { - $obj = $db->fetch_object($resql); - $vat_rates[$i] = $obj->vat_rate; - } - } + $num = $db->num_rows($resql); + if ($num) + { + for ($i = 0; $i < $num; $i++) + { + $obj = $db->fetch_object($resql); + $vat_rates[$i] = $obj->vat_rate; + } + } } // Show examples @@ -198,56 +199,57 @@ print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU'); print " x ".$langs->trans("Quantity").": ".$qty; print " - ".$langs->trans("VAT").": ".$vat.'%'; print " -> ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n"; -print '<br>'; - -print $langs->trans("VATRoundedByLine").' ('.$langs->trans("DolibarrDefault").')<br><br>'; foreach($vat_rates as $vat) { - for ($qty=1; $qty<=2; $qty++) - { - $s1=10/3; - $s2=2/7; - - // Round by line - $tmparray1=calcul_price_total(1,$qty*price2num($s1,'MU'),0,$vat,0,0,0,'HT',0); - $tmparray2=calcul_price_total(1,$qty*price2num($s2,'MU'),0,$vat,0,0,0,'HT',0); - $total_ht = $tmparray1[0] + $tmparray2[0]; - $total_tva = $tmparray1[1] + $tmparray2[1]; - $total_ttc = $tmparray1[2] + $tmparray2[2]; - - print $langs->trans("UnitPriceOfProduct").": ".(price2num($s1,'MU') + price2num($s2,'MU')); - print " x ".$langs->trans("Quantity").": ".$qty; - print " - ".$langs->trans("VAT").": ".$vat.'%'; - print " -> ".$langs->trans("TotalPriceAfterRounding").": ".$total_ht.' / '.$total_tva.' / '.$total_ttc."<br>\n"; - } + for ($qty=1; $qty<=2; $qty++) + { + $s=10/3; + $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,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[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n"; + } } -print '<br>'.$langs->trans("VATRoundedOnTotal").'<br><br>'; -foreach($vat_rates as $vat) -{ - for ($qty=1; $qty<=2; $qty++) - { - $s1=10/3; - $s2=2/7; - - // Global round - $subtotal_ht = (($qty*price2num($s1,'MU')) + ($qty*price2num($s2,'MU'))); - $tmparray3=calcul_price_total(1,$subtotal_ht,0,$vat,0,0,0,'HT',0); - $total_ht = $tmparray3[0]; - $total_tva = $tmparray3[1]; - $total_ttc = $tmparray3[2]; - - print $langs->trans("UnitPriceOfProduct").": ".price2num($s1+$s2,'MU'); - print " x ".$langs->trans("Quantity").": ".$qty; - print " - ".$langs->trans("VAT").": ".$vat.'%'; - print " -> ".$langs->trans("TotalPriceAfterRounding").": ".$total_ht.' / '.$total_tva.' / '.$total_ttc."<br>\n"; - } -} +// More examples +// This example must be kept for test purpose with current value because value used (2/7, 10/3, and vat 0, 10) +// were calculated to show all possible cases of rounding. If we change this, examples becomes useless or show the same rounding rule. + +/* + $s=10/3;$qty=1;$vat=0; +$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,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[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n"; + +$s=10/3;$qty=2;$vat=0; +$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,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[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n"; + +$s=10/3;$qty=1;$vat=10; +$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,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[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n"; + +$s=10/3;$qty=2;$vat=10; +$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,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[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n"; +*/ + llxFooter(); $db->close(); - ?>