diff --git a/htdocs/admin/limits.php b/htdocs/admin/limits.php
index 39f7941679d..1e1cab8bf3b 100644
--- a/htdocs/admin/limits.php
+++ b/htdocs/admin/limits.php
@@ -168,138 +168,150 @@ else
}
-// Show examples
-print ''.$langs->trans("ExamplesWithCurrentSetup").":
\n";
-
-// Always show vat rates with vat 0
-$s=2/7;$qty=1;$vat=0;
-$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0,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]."
\n";
-
-$s=10/3;$qty=1;$vat=0;
-$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0,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]."
\n";
-
-$s=10/3;$qty=2;$vat=0;
-$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 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]."
\n";
-
-// Add vat rates examples specific to country
-$vat_rates=array();
-
-$sql.="SELECT taux as vat_rate";
-$sql.=" FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_pays as p";
-$sql.=" WHERE t.active=1 AND t.fk_pays = p.rowid AND p.code='".$mysoc->country_code."' AND taux != 0";
-$sql.=" ORDER BY t.taux ASC";
-$resql=$db->query($sql);
-if ($resql)
+if (empty($mysoc->country_code))
{
- $num = $db->num_rows($resql);
- if ($num)
- {
- for ($i = 0; $i < $num; $i++)
- {
- $obj = $db->fetch_object($resql);
- $vat_rates[$i] = $obj->vat_rate;
- }
- }
-}
-else dol_print_error($db);
-
-if (count($vat_rates))
-{
- foreach($vat_rates as $vat)
- {
- 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, 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]."
\n";
- }
- }
+ $langs->load("errors");
+ $warnpicto=img_error($langs->trans("WarningMandatorySetupNotComplete"));
+ print '
'.$warnpicto.' '.$langs->trans("WarningMandatorySetupNotComplete").'';
}
else
{
- // More examples if not specific vat rate found
- // 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=10;
- $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 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]."
\n";
+ // Show examples
+ print ''.$langs->trans("ExamplesWithCurrentSetup").":
\n";
- $s=10/3;$qty=2;$vat=10;
- $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 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]."
\n";
+ // Always show vat rates with vat 0
+ $s=2/7;$qty=1;$vat=0;
+ $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0,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]."
\n";
-}
+ $s=10/3;$qty=1;$vat=0;
+ $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0,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]."
\n";
-// Important: can debug rounding, to simulate the rounded total
-/*
-print '
'.$langs->trans("VATRoundedByLine").' ('.$langs->trans("DolibarrDefault").')
';
+ $s=10/3;$qty=2;$vat=0;
+ $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 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]."
\n";
-foreach($vat_rates as $vat)
-{
- for ($qty=1; $qty<=2; $qty++)
+
+ // Add vat rates examples specific to country
+ $vat_rates=array();
+
+ $sql.="SELECT taux as vat_rate";
+ $sql.=" FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_pays as p";
+ $sql.=" WHERE t.active=1 AND t.fk_pays = p.rowid AND p.code='".$mysoc->country_code."' AND taux != 0";
+ $sql.=" ORDER BY t.taux ASC";
+ $resql=$db->query($sql);
+ if ($resql)
{
- $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, 0);
- $tmparray2=calcul_price_total(1,$qty*price2num($s2,'MU'),0,$vat,0,0,0,'HT',0, 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."
\n";
+ $num = $db->num_rows($resql);
+ if ($num)
+ {
+ for ($i = 0; $i < $num; $i++)
+ {
+ $obj = $db->fetch_object($resql);
+ $vat_rates[$i] = $obj->vat_rate;
+ }
+ }
}
-}
+ else dol_print_error($db);
-print '
'.$langs->trans("VATRoundedOnTotal").'
';
-
-foreach($vat_rates as $vat)
-{
- for ($qty=1; $qty<=2; $qty++)
+ if (count($vat_rates))
{
- $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, 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."
\n";
+ foreach($vat_rates as $vat)
+ {
+ 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, 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]."
\n";
+ }
+ }
}
+ else
+ {
+ // More examples if not specific vat rate found
+ // 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=10;
+ $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 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]."
\n";
+
+ $s=10/3;$qty=2;$vat=10;
+ $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 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]."
\n";
+
+ }
+
+ // Important: can debug rounding, to simulate the rounded total
+ /*
+ print '
'.$langs->trans("VATRoundedByLine").' ('.$langs->trans("DolibarrDefault").')
';
+
+ 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, 0);
+ $tmparray2=calcul_price_total(1,$qty*price2num($s2,'MU'),0,$vat,0,0,0,'HT',0, 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."
\n";
+ }
+ }
+
+ print '
'.$langs->trans("VATRoundedOnTotal").'
';
+
+ 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, 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."
\n";
+ }
+ }
+ */
}
-*/
+
llxFooter();
diff --git a/htdocs/product/admin/product_tools.php b/htdocs/product/admin/product_tools.php
index ca0d6718e0e..e19a7f605a6 100644
--- a/htdocs/product/admin/product_tools.php
+++ b/htdocs/product/admin/product_tools.php
@@ -22,7 +22,7 @@
*/
// TODO We must add a confirmation on button because this will make a mass change
-// TODO Should also change table product_price for price levels
+// FIXME Should also change table product_price for price levels
require '../../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
@@ -128,6 +128,8 @@ if ($action == 'convert')
* View
*/
+$form=new Form($db);
+
$title = $langs->trans('ModulesSystemTools');
llxHeader('',$title);
@@ -136,55 +138,63 @@ print_fiche_titre($title,'','setup');
print $langs->trans("ProductVatMassChangeDesc").'
';
-$form=new Form($db);
-$var=true;
+if (empty($mysoc->country_code))
+{
+ $langs->load("errors");
+ $warnpicto=img_error($langs->trans("WarningMandatorySetupNotComplete"));
+ print '
'.$warnpicto.' '.$langs->trans("WarningMandatorySetupNotComplete").'';
+}
+else
+{
-print '