Fix: Backward compatibility with spain.

This commit is contained in:
Laurent Destailleur 2012-09-11 01:42:50 +02:00
parent e68f861923
commit ef00d592e7
2 changed files with 38 additions and 12 deletions

View File

@ -26,7 +26,7 @@
/** /**
* Calculate totals (net, vat, ...) of a line. * Calculate totals (net, vat, ...) of a line.
* Value for localtaxtype are '0' : local tax not applied * Value for localtaxX_type are '0' : local tax not applied
* '1' : local tax apply on products and services without vat (vat is not applied on local tax) * '1' : local tax apply on products and services without vat (vat is not applied on local tax)
* '2' : local tax apply on products and services before vat (vat is calculated on amount + localtax) * '2' : local tax apply on products and services before vat (vat is calculated on amount + localtax)
* '3' : local tax apply on products without vat (vat is not applied on local tax) * '3' : local tax apply on products without vat (vat is not applied on local tax)
@ -47,14 +47,26 @@
* @param int $type 0/1=Product/service * @param int $type 0/1=Product/service
* @param string $localtax1_type Localtax1 type (used for some countries only, like spain) * @param string $localtax1_type Localtax1 type (used for some countries only, like spain)
* @param string $localtax2_type Localtax2 type (used for some countries only, like spain) * @param string $localtax2_type Localtax2 type (used for some countries only, like spain)
* @return result[0,1,2,3,4,5,6,7,8] (total_ht, total_vat, total_ttc, pu_ht, pu_tva, pu_ttc, total_ht_without_discount, total_vat_without_discount, total_ttc_without_discount) * @return result[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] (total_ht, total_vat, total_ttc, pu_ht, pu_tva, pu_ttc, total_ht_without_discount, total_vat_without_discount, total_ttc_without_discount, ...)
*/ */
function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $localtax1_rate=0, $localtax2_rate=0, $remise_percent_global=0, $price_base_type='HT', $info_bits=0, $type=0, $localtax1_type = '0', $localtax2_type = '0') function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $localtax1_rate=0, $localtax2_rate=0, $remise_percent_global=0, $price_base_type='HT', $info_bits=0, $type=0, $localtax1_type = '?', $localtax2_type = '?')
{ {
global $conf,$mysoc; global $conf,$mysoc;
$result=array(); $result=array();
// TODO Remove this code. Added for backward compatibility. To remove once localtaxX_type is provided by caller.
if ($localtax1_type == '?')
{
if ($mysoc->country_code=='ES') $localtax1_type='1';
else $localtax1_type='0';
}
if ($localtax2_type == '?')
{
if ($mysoc->country_code=='ES') $localtax2_type='1';
else $localtax2_type='0';
}
// initialize total (may be HT or TTC depending on price_base_type) // initialize total (may be HT or TTC depending on price_base_type)
$tot_sans_remise = $pu * $qty; $tot_sans_remise = $pu * $qty;
$tot_avec_remise_ligne = $tot_sans_remise * (1 - ($remise_percent_ligne / 100)); $tot_avec_remise_ligne = $tot_sans_remise * (1 - ($remise_percent_ligne / 100));

View File

@ -124,6 +124,12 @@ class PricesTest extends PHPUnit_Framework_TestCase
*/ */
public function testCalculPriceTotal() public function testCalculPriceTotal()
{ {
global $conf,$user,$langs,$db;
$this->savconf=$conf;
$this->savuser=$user;
$this->savlangs=$langs;
$this->savdb=$db;
// qty=1, unit_price=1.24, discount_line=0, vat_rate=10, price_base_type='HT' // qty=1, unit_price=1.24, discount_line=0, vat_rate=10, price_base_type='HT'
$result1=calcul_price_total(1, 1.24, 0, 10, 0, 0, 0, 'HT', 0); $result1=calcul_price_total(1, 1.24, 0, 10, 0, 0, 0, 'HT', 0);
print __METHOD__." result1=".join(', ',$result1)."\n"; print __METHOD__." result1=".join(', ',$result1)."\n";
@ -135,6 +141,14 @@ class PricesTest extends PHPUnit_Framework_TestCase
print __METHOD__." result2=".join(', ',$result2)."\n"; print __METHOD__." result2=".join(', ',$result2)."\n";
$this->assertEquals(array(100, 10, 111.4, 10, 1, 11.14, 100, 10, 111.4, 1.4, 0, 0.14, 0, 0, 1.4, 0),$result2); $this->assertEquals(array(100, 10, 111.4, 10, 1, 11.14, 100, 10, 111.4, 1.4, 0, 0.14, 0, 0, 1.4, 0),$result2);
// Old function for spain countries. To check backward compatibility.
global $mysoc;
$mysoc=new Societe($db);
$mysoc->country_code='ES';
$result3=calcul_price_total(10, 10, 0, 10, 1.4, 0, 0, 'HT', 0); // 10 * 10 HT - 0% discount with 10% vat and 1.4% localtax1, 0% localtax2
print __METHOD__." result3=".join(', ',$result3)."\n";
$this->assertEquals(array(100, 10, 111.4, 10, 1, 11.14, 100, 10, 111.4, 1.4, 0, 0.14, 0, 0, 1.4, 0),$result3);
return true; return true;
} }