forked from Wavyzz/dolibarr
Merge branch '12.0' of git@github.com:Dolibarr/dolibarr.git into develop
Conflicts: htdocs/product/price.php
This commit is contained in:
@@ -4783,6 +4783,9 @@ function price2num($amount, $rounding = '', $alreadysqlnb = 0)
|
|||||||
|
|
||||||
// Convert amount to format with dolibarr dec and thousand (this is because PHP convert a number
|
// Convert amount to format with dolibarr dec and thousand (this is because PHP convert a number
|
||||||
// to format defined by LC_NUMERIC after a calculation and we want source format to be like defined by Dolibarr setup.
|
// to format defined by LC_NUMERIC after a calculation and we want source format to be like defined by Dolibarr setup.
|
||||||
|
if ($thousand == '.') {
|
||||||
|
$amount = str_replace($thousand, '', $amount); // Replace of thousand before test of is_numeric to avoid pb if thousand is .
|
||||||
|
}
|
||||||
if (is_numeric($amount))
|
if (is_numeric($amount))
|
||||||
{
|
{
|
||||||
// We put in temps value of decimal ("0.00001"). Works with 0 and 2.0E-5 and 9999.10
|
// We put in temps value of decimal ("0.00001"). Works with 0 and 2.0E-5 and 9999.10
|
||||||
@@ -4794,7 +4797,9 @@ function price2num($amount, $rounding = '', $alreadysqlnb = 0)
|
|||||||
//print "QQ".$amount.'<br>';
|
//print "QQ".$amount.'<br>';
|
||||||
|
|
||||||
// Now make replace (the main goal of function)
|
// Now make replace (the main goal of function)
|
||||||
if ($thousand != ',' && $thousand != '.') $amount = str_replace(',', '.', $amount); // To accept 2 notations for french users
|
if ($thousand != ',' && $thousand != '.') {
|
||||||
|
$amount = str_replace(',', '.', $amount); // To accept 2 notations for french users
|
||||||
|
}
|
||||||
$amount = str_replace(' ', '', $amount); // To avoid spaces
|
$amount = str_replace(' ', '', $amount); // To avoid spaces
|
||||||
$amount = str_replace($thousand, '', $amount); // Replace of thousand before replace of dec to avoid pb if thousand is .
|
$amount = str_replace($thousand, '', $amount); // Replace of thousand before replace of dec to avoid pb if thousand is .
|
||||||
$amount = str_replace($dec, '.', $amount);
|
$amount = str_replace($dec, '.', $amount);
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ if (empty($reshook))
|
|||||||
|
|
||||||
$tva_tx = $tva_tx_txt;
|
$tva_tx = $tva_tx_txt;
|
||||||
$vatratecode = '';
|
$vatratecode = '';
|
||||||
|
$reg = array();
|
||||||
if (preg_match('/\((.*)\)/', $tva_tx_txt, $reg))
|
if (preg_match('/\((.*)\)/', $tva_tx_txt, $reg))
|
||||||
{
|
{
|
||||||
$vat_src_code = $reg[1];
|
$vat_src_code = $reg[1];
|
||||||
@@ -261,8 +262,8 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
|
|
||||||
$pricestoupdate[$i] = array(
|
$pricestoupdate[$i] = array(
|
||||||
'price' => $newprice[$i],
|
'price' => price2num($newprice[$i]),
|
||||||
'price_min' => $newprice_min[$i],
|
'price_min' => price2num($newprice_min[$i]),
|
||||||
'price_base_type' => $newpricebase[$i],
|
'price_base_type' => $newpricebase[$i],
|
||||||
'default_vat_code' => $vatratecode,
|
'default_vat_code' => $vatratecode,
|
||||||
'vat_tx' => $tva_tx, // default_vat_code should be used in priority in a future
|
'vat_tx' => $tva_tx, // default_vat_code should be used in priority in a future
|
||||||
@@ -277,10 +278,14 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
} elseif (!$error)
|
} elseif (!$error)
|
||||||
{
|
{
|
||||||
|
$newprice = price2num(GETPOST('price', 'alpha'));
|
||||||
|
$newprice_min = price2num(GETPOST('price_min', 'alpha'));
|
||||||
|
$newpricebase = GETPOST('price_base_type', 'alpha');
|
||||||
$tva_tx_txt = GETPOST('tva_tx', 'alpha'); // tva_tx can be '8.5' or '8.5*' or '8.5 (XXX)' or '8.5* (XXX)'
|
$tva_tx_txt = GETPOST('tva_tx', 'alpha'); // tva_tx can be '8.5' or '8.5*' or '8.5 (XXX)' or '8.5* (XXX)'
|
||||||
|
|
||||||
$tva_tx = $tva_tx_txt;
|
$tva_tx = $tva_tx_txt;
|
||||||
$vatratecode = '';
|
$vatratecode = '';
|
||||||
|
$reg = array();
|
||||||
if (preg_match('/\((.*)\)/', $tva_tx_txt, $reg))
|
if (preg_match('/\((.*)\)/', $tva_tx_txt, $reg))
|
||||||
{
|
{
|
||||||
$vat_src_code = $reg[1];
|
$vat_src_code = $reg[1];
|
||||||
@@ -320,9 +325,9 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$pricestoupdate[0] = array(
|
$pricestoupdate[0] = array(
|
||||||
'price' => $_POST["price"],
|
'price' => $newprice,
|
||||||
'price_min' => $_POST["price_min"],
|
'price_min' => $newprice_min,
|
||||||
'price_base_type' => $_POST["price_base_type"],
|
'price_base_type' => $newpricebase,
|
||||||
'default_vat_code' => $vatratecode,
|
'default_vat_code' => $vatratecode,
|
||||||
'vat_tx' => $tva_tx, // default_vat_code should be used in priority in a future
|
'vat_tx' => $tva_tx, // default_vat_code should be used in priority in a future
|
||||||
'npr' => $npr, // default_vat_code should be used in priority in a future
|
'npr' => $npr, // default_vat_code should be used in priority in a future
|
||||||
|
|||||||
@@ -1225,6 +1225,15 @@ class FunctionsLibTest extends PHPUnit\Framework\TestCase
|
|||||||
*/
|
*/
|
||||||
public function testDolPrice2Num()
|
public function testDolPrice2Num()
|
||||||
{
|
{
|
||||||
|
global $langs, $conf;
|
||||||
|
|
||||||
|
$oldlangs = $langs;
|
||||||
|
|
||||||
|
$newlangs = new Translate('', $conf);
|
||||||
|
$newlangs->setDefaultLang('en_US');
|
||||||
|
$newlangs->load("main");
|
||||||
|
$langs = $newlangs;
|
||||||
|
|
||||||
$this->assertEquals(1000, price2num('1 000.0'));
|
$this->assertEquals(1000, price2num('1 000.0'));
|
||||||
$this->assertEquals(1000, price2num('1 000', 'MT'));
|
$this->assertEquals(1000, price2num('1 000', 'MT'));
|
||||||
$this->assertEquals(1000, price2num('1 000', 'MU'));
|
$this->assertEquals(1000, price2num('1 000', 'MU'));
|
||||||
@@ -1239,10 +1248,36 @@ class FunctionsLibTest extends PHPUnit\Framework\TestCase
|
|||||||
$this->assertEquals(1000.13, price2num('1 000.125456', 'MT'));
|
$this->assertEquals(1000.13, price2num('1 000.125456', 'MT'));
|
||||||
$this->assertEquals(1000.12546, price2num('1 000.125456', 'MU'), "Test MU");
|
$this->assertEquals(1000.12546, price2num('1 000.125456', 'MU'), "Test MU");
|
||||||
|
|
||||||
|
$this->assertEquals(1, price2num('1.000'), 'Test 1.000 give 1 with english language');
|
||||||
|
|
||||||
// Text can't be converted
|
// Text can't be converted
|
||||||
$this->assertEquals('12.4$', price2num('12.4$'));
|
$this->assertEquals('12.4$', price2num('12.4$'));
|
||||||
$this->assertEquals('12r.4$', price2num('12r.4$'));
|
$this->assertEquals('12r.4$', price2num('12r.4$'));
|
||||||
|
|
||||||
|
// For spanish language
|
||||||
|
$newlangs2 = new Translate('', $conf);
|
||||||
|
$newlangs2->setDefaultLang('es_ES');
|
||||||
|
$newlangs2->load("main");
|
||||||
|
$langs = $newlangs2;
|
||||||
|
|
||||||
|
$this->assertEquals(1000, price2num('1.000'), 'Test 1.000 give 1000 with spanish language');
|
||||||
|
$this->assertEquals(1000, price2num('1 000'), 'Test 1 000 give 1000 with spanish language');
|
||||||
|
$this->assertEquals(1234, price2num('1.234'), 'Test 1.234 give 1234 with spanish language');
|
||||||
|
$this->assertEquals(1.234, price2num('1,234'), 'Test 1,234 give 1.234 with spanish language');
|
||||||
|
|
||||||
|
// For french language
|
||||||
|
$newlangs3 = new Translate('', $conf);
|
||||||
|
$newlangs3->setDefaultLang('fr_FR');
|
||||||
|
$newlangs3->load("main");
|
||||||
|
$langs = $newlangs3;
|
||||||
|
|
||||||
|
$this->assertEquals(1, price2num('1.000'), 'Test 1.000 give 1 with french language');
|
||||||
|
$this->assertEquals(1000, price2num('1 000'), 'Test 1.000 give 1 with french language');
|
||||||
|
$this->assertEquals(1.234, price2num('1.234'), 'Test 1.234 give 1.234 with french language');
|
||||||
|
$this->assertEquals(1.234, price2num('1,234'), 'Test 1,234 give 1.234 with french language');
|
||||||
|
|
||||||
|
$langs = $oldlangs;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user