forked from Wavyzz/dolibarr
NEW Introduce a "code" into fiels to describe vat. This will allow to
suggest different vat lines with same value with ability to differentiate them.
This commit is contained in:
@@ -150,7 +150,7 @@ $tabsql[6] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.t
|
|||||||
$tabsql[7] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.accountancy_code as accountancy_code, a.deductible, c.code as country_code, c.label as country, a.fk_pays as country_id, a.active FROM ".MAIN_DB_PREFIX."c_chargesociales AS a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_pays=c.rowid and c.active=1";
|
$tabsql[7] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.accountancy_code as accountancy_code, a.deductible, c.code as country_code, c.label as country, a.fk_pays as country_id, a.active FROM ".MAIN_DB_PREFIX."c_chargesociales AS a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_pays=c.rowid and c.active=1";
|
||||||
$tabsql[8] = "SELECT t.id as rowid, t.code as code, t.libelle, t.fk_country as country_id, c.code as country_code, c.label as country, t.active FROM ".MAIN_DB_PREFIX."c_typent as t LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON t.fk_country=c.rowid";
|
$tabsql[8] = "SELECT t.id as rowid, t.code as code, t.libelle, t.fk_country as country_id, c.code as country_code, c.label as country, t.active FROM ".MAIN_DB_PREFIX."c_typent as t LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON t.fk_country=c.rowid";
|
||||||
$tabsql[9] = "SELECT c.code_iso as code, c.label, c.unicode, c.active FROM ".MAIN_DB_PREFIX."c_currencies AS c";
|
$tabsql[9] = "SELECT c.code_iso as code, c.label, c.unicode, c.active FROM ".MAIN_DB_PREFIX."c_currencies AS c";
|
||||||
$tabsql[10]= "SELECT t.rowid, t.taux, t.localtax1_type, t.localtax1, t.localtax2_type, t.localtax2, c.label as country, c.code as country_code, t.fk_pays as country_id, t.recuperableonly, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c WHERE t.fk_pays=c.rowid";
|
$tabsql[10]= "SELECT t.rowid, t.code, t.taux, t.localtax1_type, t.localtax1, t.localtax2_type, t.localtax2, c.label as country, c.code as country_code, t.fk_pays as country_id, t.recuperableonly, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c WHERE t.fk_pays=c.rowid";
|
||||||
$tabsql[11]= "SELECT t.rowid as rowid, element, source, code, libelle, active FROM ".MAIN_DB_PREFIX."c_type_contact AS t";
|
$tabsql[11]= "SELECT t.rowid as rowid, element, source, code, libelle, active FROM ".MAIN_DB_PREFIX."c_type_contact AS t";
|
||||||
$tabsql[12]= "SELECT c.rowid as rowid, c.code, c.libelle, c.libelle_facture, c.nbjour, c.fdm, c.decalage, c.active, c.sortorder FROM ".MAIN_DB_PREFIX.'c_payment_term AS c';
|
$tabsql[12]= "SELECT c.rowid as rowid, c.code, c.libelle, c.libelle_facture, c.nbjour, c.fdm, c.decalage, c.active, c.sortorder FROM ".MAIN_DB_PREFIX.'c_payment_term AS c';
|
||||||
$tabsql[13]= "SELECT c.id as rowid, c.code, c.libelle, c.type, c.active, c.accountancy_code FROM ".MAIN_DB_PREFIX."c_paiement AS c";
|
$tabsql[13]= "SELECT c.id as rowid, c.code, c.libelle, c.type, c.active, c.accountancy_code FROM ".MAIN_DB_PREFIX."c_paiement AS c";
|
||||||
@@ -182,7 +182,7 @@ $tabsqlsort[6] ="a.type ASC, a.module ASC, a.position ASC, a.code ASC";
|
|||||||
$tabsqlsort[7] ="country ASC, code ASC, a.libelle ASC";
|
$tabsqlsort[7] ="country ASC, code ASC, a.libelle ASC";
|
||||||
$tabsqlsort[8] ="country DESC, libelle ASC";
|
$tabsqlsort[8] ="country DESC, libelle ASC";
|
||||||
$tabsqlsort[9] ="label ASC";
|
$tabsqlsort[9] ="label ASC";
|
||||||
$tabsqlsort[10]="country ASC, taux ASC, recuperableonly ASC, localtax1 ASC, localtax2 ASC";
|
$tabsqlsort[10]="country ASC, code ASC, taux ASC, recuperableonly ASC, localtax1 ASC, localtax2 ASC";
|
||||||
$tabsqlsort[11]="element ASC, source ASC, code ASC";
|
$tabsqlsort[11]="element ASC, source ASC, code ASC";
|
||||||
$tabsqlsort[12]="sortorder ASC, code ASC";
|
$tabsqlsort[12]="sortorder ASC, code ASC";
|
||||||
$tabsqlsort[13]="code ASC";
|
$tabsqlsort[13]="code ASC";
|
||||||
@@ -214,7 +214,7 @@ $tabfield[6] = "code,libelle,type,color,position";
|
|||||||
$tabfield[7] = "code,libelle,country,accountancy_code,deductible";
|
$tabfield[7] = "code,libelle,country,accountancy_code,deductible";
|
||||||
$tabfield[8] = "code,libelle,country_id,country";
|
$tabfield[8] = "code,libelle,country_id,country";
|
||||||
$tabfield[9] = "code,label,unicode";
|
$tabfield[9] = "code,label,unicode";
|
||||||
$tabfield[10]= "country_id,country,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note";
|
$tabfield[10]= "country_id,country,code,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note";
|
||||||
$tabfield[11]= "element,source,code,libelle";
|
$tabfield[11]= "element,source,code,libelle";
|
||||||
$tabfield[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage,sortorder";
|
$tabfield[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage,sortorder";
|
||||||
$tabfield[13]= "code,libelle,type,accountancy_code";
|
$tabfield[13]= "code,libelle,type,accountancy_code";
|
||||||
@@ -246,7 +246,7 @@ $tabfieldvalue[6] = "code,libelle,type,color,position";
|
|||||||
$tabfieldvalue[7] = "code,libelle,country,accountancy_code,deductible";
|
$tabfieldvalue[7] = "code,libelle,country,accountancy_code,deductible";
|
||||||
$tabfieldvalue[8] = "code,libelle,country";
|
$tabfieldvalue[8] = "code,libelle,country";
|
||||||
$tabfieldvalue[9] = "code,label,unicode";
|
$tabfieldvalue[9] = "code,label,unicode";
|
||||||
$tabfieldvalue[10]= "country,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note";
|
$tabfieldvalue[10]= "country,code,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note";
|
||||||
$tabfieldvalue[11]= "element,source,code,libelle";
|
$tabfieldvalue[11]= "element,source,code,libelle";
|
||||||
$tabfieldvalue[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage,sortorder";
|
$tabfieldvalue[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage,sortorder";
|
||||||
$tabfieldvalue[13]= "code,libelle,type,accountancy_code";
|
$tabfieldvalue[13]= "code,libelle,type,accountancy_code";
|
||||||
@@ -278,7 +278,7 @@ $tabfieldinsert[6] = "code,libelle,type,color,position";
|
|||||||
$tabfieldinsert[7] = "code,libelle,fk_pays,accountancy_code,deductible";
|
$tabfieldinsert[7] = "code,libelle,fk_pays,accountancy_code,deductible";
|
||||||
$tabfieldinsert[8] = "code,libelle,fk_country";
|
$tabfieldinsert[8] = "code,libelle,fk_country";
|
||||||
$tabfieldinsert[9] = "code_iso,label,unicode";
|
$tabfieldinsert[9] = "code_iso,label,unicode";
|
||||||
$tabfieldinsert[10]= "fk_pays,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note";
|
$tabfieldinsert[10]= "fk_pays,code,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note";
|
||||||
$tabfieldinsert[11]= "element,source,code,libelle";
|
$tabfieldinsert[11]= "element,source,code,libelle";
|
||||||
$tabfieldinsert[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage,sortorder";
|
$tabfieldinsert[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage,sortorder";
|
||||||
$tabfieldinsert[13]= "code,libelle,type,accountancy_code";
|
$tabfieldinsert[13]= "code,libelle,type,accountancy_code";
|
||||||
@@ -376,7 +376,7 @@ $tabhelp[6] = array('code'=>$langs->trans("EnterAnyCode"), 'position'=>$langs->
|
|||||||
$tabhelp[7] = array('code'=>$langs->trans("EnterAnyCode"));
|
$tabhelp[7] = array('code'=>$langs->trans("EnterAnyCode"));
|
||||||
$tabhelp[8] = array('code'=>$langs->trans("EnterAnyCode"));
|
$tabhelp[8] = array('code'=>$langs->trans("EnterAnyCode"));
|
||||||
$tabhelp[9] = array('code'=>$langs->trans("EnterAnyCode"), 'unicode'=>$langs->trans("UnicodeCurrency"));
|
$tabhelp[9] = array('code'=>$langs->trans("EnterAnyCode"), 'unicode'=>$langs->trans("UnicodeCurrency"));
|
||||||
$tabhelp[10] = array('taux'=>$langs->trans("SellTaxRate"), 'recuperableonly'=>$langs->trans("RecuperableOnly"), 'localtax1_type'=>$langs->trans("LocalTaxDesc"), 'localtax2_type'=>$langs->trans("LocalTaxDesc"));
|
$tabhelp[10] = array('code'=>$langs->trans("EnterAnyCode"), 'taux'=>$langs->trans("SellTaxRate"), 'recuperableonly'=>$langs->trans("RecuperableOnly"), 'localtax1_type'=>$langs->trans("LocalTaxDesc"), 'localtax2_type'=>$langs->trans("LocalTaxDesc"));
|
||||||
$tabhelp[11] = array();
|
$tabhelp[11] = array();
|
||||||
$tabhelp[12] = array('code'=>$langs->trans("EnterAnyCode"));
|
$tabhelp[12] = array('code'=>$langs->trans("EnterAnyCode"));
|
||||||
$tabhelp[13] = array('code'=>$langs->trans("EnterAnyCode"));
|
$tabhelp[13] = array('code'=>$langs->trans("EnterAnyCode"));
|
||||||
@@ -522,8 +522,8 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
|
|||||||
$ok=1;
|
$ok=1;
|
||||||
foreach ($listfield as $f => $value)
|
foreach ($listfield as $f => $value)
|
||||||
{
|
{
|
||||||
if ($value == 'country_id' && in_array($tablib[$id],array('DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes', 'DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory
|
if ($value == 'country_id' && in_array($tablib[$id],array('DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes','DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory
|
||||||
if ($value == 'country' && in_array($tablib[$id],array('DictionaryCanton','DictionaryCompanyType', 'DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory
|
if ($value == 'country' && in_array($tablib[$id],array('DictionaryCanton','DictionaryCompanyType','DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory
|
||||||
if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue;
|
if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue;
|
||||||
if ($value == 'localtax2' && empty($_POST['localtax2_type'])) continue;
|
if ($value == 'localtax2' && empty($_POST['localtax2_type'])) continue;
|
||||||
if ($value == 'color' && empty($_POST['color'])) continue;
|
if ($value == 'color' && empty($_POST['color'])) continue;
|
||||||
@@ -1321,7 +1321,7 @@ if ($id)
|
|||||||
// Can an entry be erased or disabled ?
|
// Can an entry be erased or disabled ?
|
||||||
$iserasable=1;$isdisable=1; // true by default
|
$iserasable=1;$isdisable=1; // true by default
|
||||||
|
|
||||||
if (isset($obj->code))
|
if (isset($obj->code) && $id != 10)
|
||||||
{
|
{
|
||||||
if (($obj->code == '0' || $obj->code == '' || preg_match('/unknown/i',$obj->code))) { $iserasable = 0; $isdisable = 0; }
|
if (($obj->code == '0' || $obj->code == '' || preg_match('/unknown/i',$obj->code))) { $iserasable = 0; $isdisable = 0; }
|
||||||
else if ($obj->code == 'RECEP') { $iserasable = 0; $isdisable = 0; }
|
else if ($obj->code == 'RECEP') { $iserasable = 0; $isdisable = 0; }
|
||||||
@@ -1356,7 +1356,7 @@ if ($id)
|
|||||||
print "</td>";
|
print "</td>";
|
||||||
|
|
||||||
// Modify link
|
// Modify link
|
||||||
if ($iserasable) print '<td align="center"><a href="'.$url.'action=edit#'.(! empty($obj->rowid)?$obj->rowid:(! empty($obj->code)?$obj->code:'')).'">'.img_edit().'</a></td>';
|
if ($iserasable) print '<td align="center"><a class="reposition" href="'.$url.'action=edit">'.img_edit().'</a></td>';
|
||||||
else print '<td> </td>';
|
else print '<td> </td>';
|
||||||
|
|
||||||
// Delete link
|
// Delete link
|
||||||
@@ -1479,7 +1479,7 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='')
|
|||||||
} // For state page, we do not show the country input (we link to region, not country)
|
} // For state page, we do not show the country input (we link to region, not country)
|
||||||
print '<td>';
|
print '<td>';
|
||||||
$fieldname='country';
|
$fieldname='country';
|
||||||
print $form->select_country((! empty($obj->country_code)?$obj->country_code:(! empty($obj->country)?$obj->country:'')), $fieldname, '', 28);
|
print $form->select_country((! empty($obj->country_code)?$obj->country_code:(! empty($obj->country)?$obj->country:'')), $fieldname, '', 28, 'maxwidth300');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
elseif ($fieldlist[$field] == 'country_id')
|
elseif ($fieldlist[$field] == 'country_id')
|
||||||
|
|||||||
@@ -369,7 +369,8 @@ class AskPriceSupplier extends CommonObject
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
|
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, '', $localtaxes_type);
|
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, '', $localtaxes_type);
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
$total_tva = $tabprice[1];
|
$total_tva = $tabprice[1];
|
||||||
@@ -528,7 +529,8 @@ class AskPriceSupplier extends CommonObject
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
|
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type,'', $localtaxes_type);
|
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type,'', $localtaxes_type);
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
$total_tva = $tabprice[1];
|
$total_tva = $tabprice[1];
|
||||||
|
|||||||
@@ -439,7 +439,8 @@ class Propal extends CommonObject
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
|
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type, $mysoc, $localtaxes_type);
|
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type, $mysoc, $localtaxes_type);
|
||||||
|
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
@@ -600,7 +601,8 @@ class Propal extends CommonObject
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
|
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type);
|
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type);
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
$total_tva = $tabprice[1];
|
$total_tva = $tabprice[1];
|
||||||
|
|||||||
@@ -1220,7 +1220,8 @@ class Commande extends CommonOrder
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
|
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type,'', $localtaxes_type);
|
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type,'', $localtaxes_type);
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
$total_tva = $tabprice[1];
|
$total_tva = $tabprice[1];
|
||||||
@@ -2442,7 +2443,8 @@ class Commande extends CommonOrder
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty, $mysoc);
|
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty, $mysoc);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type);
|
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type);
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
$total_tva = $tabprice[1];
|
$total_tva = $tabprice[1];
|
||||||
|
|||||||
@@ -1401,12 +1401,12 @@ if (empty($reshook))
|
|||||||
|
|
||||||
// Margin
|
// Margin
|
||||||
$fournprice = price2num(GETPOST('fournprice' . $predef) ? GETPOST('fournprice' . $predef) : '');
|
$fournprice = price2num(GETPOST('fournprice' . $predef) ? GETPOST('fournprice' . $predef) : '');
|
||||||
$buyingprice = price2num(GETPOST('buying_price' . $predef) != '' ? GETPOST('buying_price' . $predef) : ''); // If buying_price is '0', we muste keep this value
|
$buyingprice = price2num(GETPOST('buying_price' . $predef) != '' ? GETPOST('buying_price' . $predef) : ''); // If buying_price is '0', we must keep this value
|
||||||
|
|
||||||
// Local Taxes
|
// Local Taxes
|
||||||
$localtax1_tx = get_localtax($tva_tx, 1, $object->thirdparty);
|
$localtax1_tx = get_localtax($tva_tx, 1, $object->thirdparty, $mysoc);
|
||||||
$localtax2_tx = get_localtax($tva_tx, 2, $object->thirdparty);
|
$localtax2_tx = get_localtax($tva_tx, 2, $object->thirdparty, $mysoc);
|
||||||
|
|
||||||
$info_bits = 0;
|
$info_bits = 0;
|
||||||
if ($tva_npr)
|
if ($tva_npr)
|
||||||
$info_bits |= 0x01;
|
$info_bits |= 0x01;
|
||||||
|
|||||||
@@ -2045,8 +2045,8 @@ class Facture extends CommonInvoice
|
|||||||
* @param double $pu_ht Unit price without tax (> 0 even for credit note)
|
* @param double $pu_ht Unit price without tax (> 0 even for credit note)
|
||||||
* @param double $qty Quantity
|
* @param double $qty Quantity
|
||||||
* @param double $txtva Force vat rate, -1 for auto
|
* @param double $txtva Force vat rate, -1 for auto
|
||||||
* @param double $txlocaltax1 Local tax 1 rate
|
* @param double $txlocaltax1 Local tax 1 rate (deprecated)
|
||||||
* @param double $txlocaltax2 Local tax 2 rate
|
* @param double $txlocaltax2 Local tax 2 rate (deprecated)
|
||||||
* @param int $fk_product Id of predefined product/service
|
* @param int $fk_product Id of predefined product/service
|
||||||
* @param double $remise_percent Percent of discount on line
|
* @param double $remise_percent Percent of discount on line
|
||||||
* @param int $date_start Date start of service
|
* @param int $date_start Date start of service
|
||||||
@@ -2141,6 +2141,7 @@ class Facture extends CommonInvoice
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty, $mysoc);
|
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty, $mysoc);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type, $mysoc, $localtaxes_type, $situation_percent);
|
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type, $mysoc, $localtaxes_type, $situation_percent);
|
||||||
|
|
||||||
@@ -2299,7 +2300,8 @@ class Facture extends CommonInvoice
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty, $mysoc);
|
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty, $mysoc);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type, $situation_percent);
|
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type, $situation_percent);
|
||||||
|
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
|
|||||||
@@ -1260,7 +1260,8 @@ class Contrat extends CommonObject
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva, 0, $this->societe, $mysoc);
|
$localtaxes_type=getLocalTaxesFromRate($txtva, 0, $this->societe, $mysoc);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, 1,$mysoc, $localtaxes_type);
|
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, 1,$mysoc, $localtaxes_type);
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
$total_tva = $tabprice[1];
|
$total_tva = $tabprice[1];
|
||||||
@@ -1441,7 +1442,8 @@ class Contrat extends CommonObject
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($tvatx, 0, $this->societe, $mysoc);
|
$localtaxes_type=getLocalTaxesFromRate($tvatx, 0, $this->societe, $mysoc);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $tvatx, $localtax1tx, $localtax2tx, 0, $price_base_type, $info_bits, 1, $mysoc, $localtaxes_type);
|
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $tvatx, $localtax1tx, $localtax2tx, 0, $price_base_type, $info_bits, 1, $mysoc, $localtaxes_type);
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
$total_tva = $tabprice[1];
|
$total_tva = $tabprice[1];
|
||||||
|
|||||||
@@ -3857,12 +3857,12 @@ class Form
|
|||||||
|
|
||||||
dol_syslog(__METHOD__, LOG_DEBUG);
|
dol_syslog(__METHOD__, LOG_DEBUG);
|
||||||
|
|
||||||
$sql = "SELECT DISTINCT t.taux, t.recuperableonly";
|
$sql = "SELECT DISTINCT t.code, t.taux, t.recuperableonly";
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c";
|
$sql.= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c";
|
||||||
$sql.= " WHERE t.fk_pays = c.rowid";
|
$sql.= " WHERE t.fk_pays = c.rowid";
|
||||||
$sql.= " AND t.active > 0";
|
$sql.= " AND t.active > 0";
|
||||||
$sql.= " AND c.code IN (".$country_code.")";
|
$sql.= " AND c.code IN (".$country_code.")";
|
||||||
$sql.= " ORDER BY t.taux ASC, t.recuperableonly ASC";
|
$sql.= " ORDER BY t.code ASC, t.taux ASC, t.recuperableonly ASC";
|
||||||
|
|
||||||
$resql=$this->db->query($sql);
|
$resql=$this->db->query($sql);
|
||||||
if ($resql)
|
if ($resql)
|
||||||
@@ -3873,8 +3873,9 @@ class Form
|
|||||||
for ($i = 0; $i < $num; $i++)
|
for ($i = 0; $i < $num; $i++)
|
||||||
{
|
{
|
||||||
$obj = $this->db->fetch_object($resql);
|
$obj = $this->db->fetch_object($resql);
|
||||||
|
$this->cache_vatrates[$i]['code'] = $obj->code;
|
||||||
$this->cache_vatrates[$i]['txtva'] = $obj->taux;
|
$this->cache_vatrates[$i]['txtva'] = $obj->taux;
|
||||||
$this->cache_vatrates[$i]['libtva'] = $obj->taux.'%';
|
$this->cache_vatrates[$i]['libtva'] = $obj->taux.'%'.($obj->code?' ('.$obj->code.')':''); // Label must contains only 0-9 , . % or *
|
||||||
$this->cache_vatrates[$i]['nprtva'] = $obj->recuperableonly;
|
$this->cache_vatrates[$i]['nprtva'] = $obj->recuperableonly;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3897,7 +3898,7 @@ class Form
|
|||||||
* Output an HTML select vat rate.
|
* Output an HTML select vat rate.
|
||||||
* The name of this function should be selectVat. We keep bad name for compatibility purpose.
|
* The name of this function should be selectVat. We keep bad name for compatibility purpose.
|
||||||
*
|
*
|
||||||
* @param string $htmlname Name of html select field
|
* @param string $htmlname Name of HTML select field
|
||||||
* @param float $selectedrate Force preselected vat rate. Use '' for no forcing.
|
* @param float $selectedrate Force preselected vat rate. Use '' for no forcing.
|
||||||
* @param Societe $societe_vendeuse Thirdparty seller
|
* @param Societe $societe_vendeuse Thirdparty seller
|
||||||
* @param Societe $societe_acheteuse Thirdparty buyer
|
* @param Societe $societe_acheteuse Thirdparty buyer
|
||||||
@@ -3910,10 +3911,11 @@ class Form
|
|||||||
* Si vendeur et acheteur dans Communauté européenne et acheteur= particulier alors TVA par défaut=TVA du produit vendu. Fin de règle.
|
* Si vendeur et acheteur dans Communauté européenne et acheteur= particulier alors TVA par défaut=TVA du produit vendu. Fin de règle.
|
||||||
* Si vendeur et acheteur dans Communauté européenne et acheteur= entreprise alors TVA par défaut=0. Fin de règle.
|
* Si vendeur et acheteur dans Communauté européenne et acheteur= entreprise alors TVA par défaut=0. Fin de règle.
|
||||||
* Sinon la TVA proposee par defaut=0. Fin de regle.
|
* Sinon la TVA proposee par defaut=0. Fin de regle.
|
||||||
* @param bool $options_only Return options only (for ajax treatment)
|
* @param bool $options_only Return HTML options lines only (for ajax treatment)
|
||||||
|
* @param int $addcode Add code into key in select list
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function load_tva($htmlname='tauxtva', $selectedrate='', $societe_vendeuse='', $societe_acheteuse='', $idprod=0, $info_bits=0, $type='', $options_only=false)
|
function load_tva($htmlname='tauxtva', $selectedrate='', $societe_vendeuse='', $societe_acheteuse='', $idprod=0, $info_bits=0, $type='', $options_only=false, $addcode=0)
|
||||||
{
|
{
|
||||||
global $langs,$conf,$mysoc;
|
global $langs,$conf,$mysoc;
|
||||||
|
|
||||||
@@ -4016,13 +4018,16 @@ class Form
|
|||||||
|
|
||||||
$return.= '<option value="'.$rate['txtva'];
|
$return.= '<option value="'.$rate['txtva'];
|
||||||
$return.= $rate['nprtva'] ? '*': '';
|
$return.= $rate['nprtva'] ? '*': '';
|
||||||
|
if ($addcode && $rate['code']) $return.=' ('.$rate['code'].')';
|
||||||
$return.= '"';
|
$return.= '"';
|
||||||
if ($rate['txtva'] == $defaulttx && $rate['nprtva'] == $defaultnpr)
|
if ($rate['txtva'] == $defaulttx && $rate['nprtva'] == $defaultnpr)
|
||||||
{
|
{
|
||||||
$return.= ' selected';
|
$return.= ' selected';
|
||||||
}
|
}
|
||||||
$return.= '>'.vatrate($rate['libtva']);
|
$return.= '>'.vatrate($rate['libtva']);
|
||||||
|
//$return.=($rate['code']?' '.$rate['code']:'');
|
||||||
$return.= $rate['nprtva'] ? ' *': '';
|
$return.= $rate['nprtva'] ? ' *': '';
|
||||||
|
|
||||||
$return.= '</option>';
|
$return.= '</option>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3088,12 +3088,18 @@ function print_fleche_navigation($page, $file, $options='', $nextpage=0, $betwee
|
|||||||
*/
|
*/
|
||||||
function vatrate($rate,$addpercent=false,$info_bits=0,$usestarfornpr=0)
|
function vatrate($rate,$addpercent=false,$info_bits=0,$usestarfornpr=0)
|
||||||
{
|
{
|
||||||
// Test for compatibility
|
$morelabel='';
|
||||||
if (preg_match('/%/',$rate))
|
|
||||||
|
if (preg_match('/%/',$rate))
|
||||||
{
|
{
|
||||||
$rate=str_replace('%','',$rate);
|
$rate=str_replace('%','',$rate);
|
||||||
$addpercent=true;
|
$addpercent=true;
|
||||||
}
|
}
|
||||||
|
if (preg_match('/\((.*)\)/',$rate,$reg))
|
||||||
|
{
|
||||||
|
$morelabel=' ('.$reg[1].')';
|
||||||
|
$rate=preg_replace('/'.preg_quote($morelabel,'/').'/','',$rate);
|
||||||
|
}
|
||||||
if (preg_match('/\*/',$rate) || preg_match('/'.constant('MAIN_LABEL_MENTION_NPR').'/i',$rate))
|
if (preg_match('/\*/',$rate) || preg_match('/'.constant('MAIN_LABEL_MENTION_NPR').'/i',$rate))
|
||||||
{
|
{
|
||||||
$rate=str_replace('*','',$rate);
|
$rate=str_replace('*','',$rate);
|
||||||
@@ -3102,6 +3108,7 @@ function vatrate($rate,$addpercent=false,$info_bits=0,$usestarfornpr=0)
|
|||||||
|
|
||||||
$ret=price($rate,0,'',0,0).($addpercent?'%':'');
|
$ret=price($rate,0,'',0,0).($addpercent?'%':'');
|
||||||
if ($info_bits & 1) $ret.=' '.($usestarfornpr?'*':constant('MAIN_LABEL_MENTION_NPR'));
|
if ($info_bits & 1) $ret.=' '.($usestarfornpr?'*':constant('MAIN_LABEL_MENTION_NPR'));
|
||||||
|
$ret.=$morelabel;
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3283,35 +3290,43 @@ function price2num($amount,$rounding='',$alreadysqlnb=0)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return localtax rate for a particular vat, when selling a product with vat $tva, from a $thirdparty_buyer to a $thirdparty_seller
|
* Return localtax rate for a particular vat, when selling a product with vat $vatrate, from a $thirdparty_buyer to a $thirdparty_seller
|
||||||
* Note: This function applies same rules than get_default_tva
|
* Note: This function applies same rules than get_default_tva
|
||||||
*
|
*
|
||||||
* @param float $tva Vat taxe
|
* @param float $vatrate Vat rate
|
||||||
* @param int $local Local tax to search and return (1 or 2 return only tax rate 1 or tax rate 2)
|
* @param int $local Local tax to search and return (1 or 2 return only tax rate 1 or tax rate 2)
|
||||||
* @param Societe $thirdparty_buyer Object of buying third party
|
* @param Societe $thirdparty_buyer Object of buying third party
|
||||||
* @param Societe $thirdparty_seller Object of selling third party
|
* @param Societe $thirdparty_seller Object of selling third party
|
||||||
* @return mixed 0 if not found, localtax if found
|
* @return mixed 0 if not found, localtax rate if found
|
||||||
* @see get_default_tva
|
* @see get_default_tva
|
||||||
*/
|
*/
|
||||||
function get_localtax($tva, $local, $thirdparty_buyer="", $thirdparty_seller="")
|
function get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller="")
|
||||||
{
|
{
|
||||||
global $db, $conf, $mysoc;
|
global $db, $conf, $mysoc;
|
||||||
|
|
||||||
if (empty($thirdparty_seller) || ! is_object($thirdparty_seller)) $thirdparty_seller=$mysoc;
|
if (empty($thirdparty_seller) || ! is_object($thirdparty_seller)) $thirdparty_seller=$mysoc;
|
||||||
|
|
||||||
dol_syslog("get_localtax tva=".$tva." local=".$local." thirdparty_buyer id=".(is_object($thirdparty_buyer)?$thirdparty_buyer->id:'')."/country_code=".(is_object($thirdparty_buyer)?$thirdparty_buyer->country_code:'')." thirdparty_seller id=".$thirdparty_seller->id."/country_code=".$thirdparty_seller->country_code." thirdparty_seller localtax1_assuj=".$thirdparty_seller->localtax1_assuj." thirdparty_seller localtax2_assuj=".$thirdparty_seller->localtax2_assuj);
|
dol_syslog("get_localtax tva=".$vatrate." local=".$local." thirdparty_buyer id=".(is_object($thirdparty_buyer)?$thirdparty_buyer->id:'')."/country_code=".(is_object($thirdparty_buyer)?$thirdparty_buyer->country_code:'')." thirdparty_seller id=".$thirdparty_seller->id."/country_code=".$thirdparty_seller->country_code." thirdparty_seller localtax1_assuj=".$thirdparty_seller->localtax1_assuj." thirdparty_seller localtax2_assuj=".$thirdparty_seller->localtax2_assuj);
|
||||||
|
|
||||||
if($thirdparty_buyer->country_code!=$thirdparty_seller->country_code)
|
$vatratecleaned = $vatrate;
|
||||||
|
if (preg_match('/^(.*)\s*\((.*)\)$/', $vatrate, $reg)) // If vat is "xx (yy)"
|
||||||
|
{
|
||||||
|
$vatratecleaned = $reg[1];
|
||||||
|
$vatratecode = $reg[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if ($thirdparty_buyer->country_code != $thirdparty_seller->country_code)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
// Some test to guess with no need to make database access
|
// Some test to guess with no need to make database access
|
||||||
if ($mysoc->country_code == 'ES') // For spain localtaxes 1 and 2, tax is qualified if buyer use local taxe
|
if ($mysoc->country_code == 'ES') // For spain localtaxes 1 and 2, tax is qualified if buyer use local taxe
|
||||||
{
|
{
|
||||||
if ($local == 1)
|
if ($local == 1)
|
||||||
{
|
{
|
||||||
if(! $mysoc->localtax1_assuj) return 0;
|
if (! $mysoc->localtax1_assuj) return 0;
|
||||||
if ($thirdparty_seller->id==$mysoc->id)
|
if ($thirdparty_seller->id == $mysoc->id)
|
||||||
{
|
{
|
||||||
if (! $thirdparty_buyer->localtax1_assuj) return 0;
|
if (! $thirdparty_buyer->localtax1_assuj) return 0;
|
||||||
}
|
}
|
||||||
@@ -3323,8 +3338,8 @@ function get_localtax($tva, $local, $thirdparty_buyer="", $thirdparty_seller="")
|
|||||||
|
|
||||||
if ($local == 2)
|
if ($local == 2)
|
||||||
{
|
{
|
||||||
if(! $mysoc->localtax2_assuj) return 0;
|
if (! $mysoc->localtax2_assuj) return 0;
|
||||||
if ($thirdparty_seller->id==$mysoc->id )
|
if ($thirdparty_seller->id == $mysoc->id)
|
||||||
{
|
{
|
||||||
if (! $thirdparty_buyer->localtax2_assuj) return 0;
|
if (! $thirdparty_buyer->localtax2_assuj) return 0;
|
||||||
}
|
}
|
||||||
@@ -3350,63 +3365,72 @@ function get_localtax($tva, $local, $thirdparty_buyer="", $thirdparty_seller="")
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
// Search local taxes
|
// Search local taxes
|
||||||
if ($local==1)
|
if ($mysoc->country_code == 'ES' || ! empty($conf->global->MAIN_GET_LOCALTAXES_VALUES_FROM_THIRDPARTY))
|
||||||
{
|
{
|
||||||
if($thirdparty_seller!=$mysoc )
|
if ($local==1)
|
||||||
{
|
{
|
||||||
if(!isOnlyOneLocalTax($local))
|
if ($thirdparty_seller != $mysoc)
|
||||||
{
|
{
|
||||||
return $thirdparty_seller->localtax1_value;
|
if (!isOnlyOneLocalTax($local)) // TODO We should provide $vatrate to search on correct line and not always on line with highest vat rate
|
||||||
}
|
{
|
||||||
}
|
return $thirdparty_seller->localtax1_value;
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
if(!isOnlyOneLocalTax($local))
|
else // i am the seller
|
||||||
{
|
{
|
||||||
return $conf->global->MAIN_INFO_VALUE_LOCALTAX1;
|
if (!isOnlyOneLocalTax($local)) // TODO If seller is me, why not always returning this, even if there is only one locatax vat.
|
||||||
}
|
{
|
||||||
}
|
return $conf->global->MAIN_INFO_VALUE_LOCALTAX1;
|
||||||
}
|
}
|
||||||
if ($local==2)
|
}
|
||||||
{
|
}
|
||||||
if($thirdparty_seller!=$mysoc)
|
if ($local==2)
|
||||||
{
|
{
|
||||||
if(!isOnlyOneLocalTax($local))
|
if ($thirdparty_seller != $mysoc)
|
||||||
{
|
{
|
||||||
return $thirdparty_seller->localtax2_value;
|
if (!isOnlyOneLocalTax($local)) // TODO We should provide $vatrate to search on correct line and not always on line with highest vat rate
|
||||||
}
|
// TODO We should also return value defined on thirdparty only if defined
|
||||||
}
|
{
|
||||||
else
|
return $thirdparty_seller->localtax2_value;
|
||||||
{
|
}
|
||||||
if(!isOnlyOneLocalTax($local))
|
}
|
||||||
{
|
else // i am the seller
|
||||||
return $conf->global->MAIN_INFO_VALUE_LOCALTAX2;
|
{
|
||||||
}
|
if (!isOnlyOneLocalTax($local)) // This is for spain only, we don't return value found into datbase even if there is only one locatax vat.
|
||||||
}
|
{
|
||||||
|
return $conf->global->MAIN_INFO_VALUE_LOCALTAX2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// By default, search value of local tax on line of common tax
|
||||||
$sql = "SELECT t.localtax1, t.localtax2, t.localtax1_type, t.localtax2_type";
|
$sql = "SELECT t.localtax1, t.localtax2, t.localtax1_type, t.localtax2_type";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c";
|
$sql .= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c";
|
||||||
$sql .= " WHERE t.fk_pays = c.rowid AND c.code = '".$thirdparty_seller->country_code."'";
|
$sql .= " WHERE t.fk_pays = c.rowid AND c.code = '".$thirdparty_seller->country_code."'";
|
||||||
$sql .= " AND t.taux = ".((float) $tva)." AND t.active = 1";
|
$sql .= " AND t.taux = ".((float) $vatratecleaned)." AND t.active = 1";
|
||||||
dol_syslog("get_localtax", LOG_DEBUG);
|
if ($vatratecode) $sql.= " AND t.code ='".$vatratecode."'";
|
||||||
$resql=$db->query($sql);
|
dol_syslog("get_localtax", LOG_DEBUG);
|
||||||
if ($resql)
|
$resql=$db->query($sql);
|
||||||
{
|
|
||||||
$obj = $db->fetch_object($resql);
|
|
||||||
if ($local==1) return $obj->localtax1;
|
|
||||||
elseif ($local==2) return $obj->localtax2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$obj = $db->fetch_object($resql);
|
||||||
|
if ($local==1) return $obj->localtax1;
|
||||||
|
elseif ($local==2) return $obj->localtax2;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if LocalTax is unique
|
* Return true if LocalTax (1 or 2) is unique.
|
||||||
|
* Example: If localtax1 is 5 on line with highest common vat rate, return true
|
||||||
|
* Example: If localtax1 is 5:8:15 on line with highest common vat rate, return false
|
||||||
*
|
*
|
||||||
* @param int $local Local taxt to test
|
* @param int $local Local tax to test (1 or 2)
|
||||||
* @return boolean True if LocalTax have multiple values, False if not
|
* @return boolean True if LocalTax have multiple values, False if not
|
||||||
*/
|
*/
|
||||||
function isOnlyOneLocalTax($local)
|
function isOnlyOneLocalTax($local)
|
||||||
{
|
{
|
||||||
@@ -3414,7 +3438,7 @@ function isOnlyOneLocalTax($local)
|
|||||||
|
|
||||||
$valors=explode(":", $tax);
|
$valors=explode(":", $tax);
|
||||||
|
|
||||||
if(count($valors)>1)
|
if (count($valors)>1)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -3425,7 +3449,7 @@ function isOnlyOneLocalTax($local)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get values of localtaxes
|
* Get values of localtaxes (1 or 2) for company country for the common vat with the highest value
|
||||||
*
|
*
|
||||||
* @param int $local LocalTax to get
|
* @param int $local LocalTax to get
|
||||||
* @return number Values of localtax
|
* @return number Values of localtax
|
||||||
@@ -3435,9 +3459,10 @@ function get_localtax_by_third($local)
|
|||||||
global $db, $mysoc;
|
global $db, $mysoc;
|
||||||
$sql ="SELECT t.localtax1, t.localtax2 ";
|
$sql ="SELECT t.localtax1, t.localtax2 ";
|
||||||
$sql.=" FROM ".MAIN_DB_PREFIX."c_tva as t inner join ".MAIN_DB_PREFIX."c_country as c ON c.rowid=t.fk_pays";
|
$sql.=" FROM ".MAIN_DB_PREFIX."c_tva as t inner join ".MAIN_DB_PREFIX."c_country as c ON c.rowid=t.fk_pays";
|
||||||
$sql.=" WHERE c.code = '".$mysoc->country_code."' AND t.taux=(SELECT max(tt.taux)";
|
$sql.=" WHERE c.code = '".$mysoc->country_code."' AND t.active = 1 AND t.taux=(";
|
||||||
$sql.=" FROM ".MAIN_DB_PREFIX."c_tva as tt inner join ".MAIN_DB_PREFIX."c_country as c ON c.rowid=tt.fk_pays";
|
$sql.=" SELECT max(tt.taux) FROM ".MAIN_DB_PREFIX."c_tva as tt inner join ".MAIN_DB_PREFIX."c_country as c ON c.rowid=tt.fk_pays";
|
||||||
$sql.=" WHERE c.code = '".$mysoc->country_code."')";
|
$sql.=" WHERE c.code = '".$mysoc->country_code."' AND tt.active = 1";
|
||||||
|
$sql.=" )";
|
||||||
|
|
||||||
$resql=$db->query($sql);
|
$resql=$db->query($sql);
|
||||||
if ($resql)
|
if ($resql)
|
||||||
@@ -3456,7 +3481,7 @@ function get_localtax_by_third($local)
|
|||||||
* Get type and rate of localtaxes for a particular vat rate/country fo thirdparty
|
* Get type and rate of localtaxes for a particular vat rate/country fo thirdparty
|
||||||
* TODO
|
* TODO
|
||||||
* This function is also called to retrieve type for building PDF. Such call of function must be removed.
|
* This function is also called to retrieve type for building PDF. Such call of function must be removed.
|
||||||
* Instead this function must be called when adding a line to get (array of localtax and type) and
|
* Instead this function must be called when adding a line to get the array of localtax and type, and then
|
||||||
* provide it to the function calcul_price_total.
|
* provide it to the function calcul_price_total.
|
||||||
*
|
*
|
||||||
* @param float $vatrate VAT Rate
|
* @param float $vatrate VAT Rate
|
||||||
@@ -3467,15 +3492,24 @@ function get_localtax_by_third($local)
|
|||||||
*/
|
*/
|
||||||
function getLocalTaxesFromRate($vatrate, $local, $buyer, $seller)
|
function getLocalTaxesFromRate($vatrate, $local, $buyer, $seller)
|
||||||
{
|
{
|
||||||
global $db;
|
global $db, $mysoc;
|
||||||
|
|
||||||
dol_syslog("getLocalTaxesFromRate vatrate=".$vatrate." local=".$local);
|
dol_syslog("getLocalTaxesFromRate vatrate=".$vatrate." local=".$local);
|
||||||
|
|
||||||
|
$vatratecleaned = $vatrate;
|
||||||
|
if (preg_match('/^(.*)\s*\((.*)\)$/', $vatrate, $reg)) // If vat is "xx (yy)"
|
||||||
|
{
|
||||||
|
$vatratecleaned = $reg[1];
|
||||||
|
$vatratecode = $reg[2];
|
||||||
|
}
|
||||||
|
|
||||||
// Search local taxes
|
// Search local taxes
|
||||||
$sql = "SELECT t.localtax1, t.localtax1_type, t.localtax2, t.localtax2_type, t.accountancy_code_sell, t.accountancy_code_buy";
|
$sql = "SELECT t.localtax1, t.localtax1_type, t.localtax2, t.localtax2_type, t.accountancy_code_sell, t.accountancy_code_buy";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c";
|
$sql .= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as c";
|
||||||
$sql .= " WHERE t.fk_pays = c.rowid AND c.code = '".$buyer->country_code."'";
|
if ($mysoc->country_code == 'ES') $sql .= " WHERE t.fk_pays = c.rowid AND c.code = '".$buyer->country_code."'";
|
||||||
$sql .= " AND t.taux = ".((float) $vatrate)." AND t.active = 1";
|
else $sql .= " WHERE t.fk_pays = c.rowid AND c.code = '".$seller->country_code."'";
|
||||||
|
$sql .= " AND t.taux = ".((float) $vatratecleaned)." AND t.active = 1";
|
||||||
|
if ($vatratecode) $sql.= " AND t.code ='".$vatratecode."'";
|
||||||
|
|
||||||
$resql=$db->query($sql);
|
$resql=$db->query($sql);
|
||||||
if ($resql)
|
if ($resql)
|
||||||
@@ -5057,8 +5091,9 @@ function printCommonFooter($zone='private')
|
|||||||
print '<!-- Set handler to add page_y param on some a href links -->'."\n";
|
print '<!-- Set handler to add page_y param on some a href links -->'."\n";
|
||||||
print 'jQuery(".reposition").click(function() {
|
print 'jQuery(".reposition").click(function() {
|
||||||
var page_y = $(document).scrollTop();
|
var page_y = $(document).scrollTop();
|
||||||
|
/* alert(page_y); */
|
||||||
this.href=this.href+\'&page_y=\'+page_y;
|
this.href=this.href+\'&page_y=\'+page_y;
|
||||||
});';
|
});'."\n";
|
||||||
print '});'."\n";
|
print '});'."\n";
|
||||||
|
|
||||||
print '</script>'."\n";
|
print '</script>'."\n";
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ else {
|
|||||||
|
|
||||||
<td class="nobottom linecolvat" align="right"><?php
|
<td class="nobottom linecolvat" align="right"><?php
|
||||||
if ($seller->tva_assuj == "0") echo '<input type="hidden" name="tva_tx" id="tva_tx" value="0">'.vatrate(0, true);
|
if ($seller->tva_assuj == "0") echo '<input type="hidden" name="tva_tx" id="tva_tx" value="0">'.vatrate(0, true);
|
||||||
else echo $form->load_tva('tva_tx', (isset($_POST["tva_tx"])?$_POST["tva_tx"]:-1), $seller, $buyer);
|
else echo $form->load_tva('tva_tx', (isset($_POST["tva_tx"])?$_POST["tva_tx"]:-1), $seller, $buyer, 0, 0, '', false, 1);
|
||||||
?>
|
?>
|
||||||
</td>
|
</td>
|
||||||
<td class="nobottom linecoluht" align="right">
|
<td class="nobottom linecoluht" align="right">
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ $coldisplay=-1; // We remove first td
|
|||||||
<?php
|
<?php
|
||||||
$coldisplay++;
|
$coldisplay++;
|
||||||
if ($this->situation_counter == 1 || !$this->situation_cycle_ref) {
|
if ($this->situation_counter == 1 || !$this->situation_cycle_ref) {
|
||||||
print '<td align="right">' . $form->load_tva('tva_tx',$line->tva_tx,$seller,$buyer,0,$line->info_bits,$line->product_type) . '</td>';
|
print '<td align="right">' . $form->load_tva('tva_tx', $line->tva_tx, $seller, $buyer, 0, $line->info_bits, $line->product_type, false, 1) . '</td>';
|
||||||
} else {
|
} else {
|
||||||
print '<td align="right"><input size="1" type="text" class="flat" name="tva_tx" value="' . price($line->tva_tx) . '" readonly />%</td>';
|
print '<td align="right"><input size="1" type="text" class="flat" name="tva_tx" value="' . price($line->tva_tx) . '" readonly />%</td>';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1314,7 +1314,8 @@ class CommandeFournisseur extends CommonOrder
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$mysoc,$this->thirdparty);
|
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$mysoc,$this->thirdparty);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type, $this->thirdparty, $localtaxes_type);
|
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type, $this->thirdparty, $localtaxes_type);
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
$total_tva = $tabprice[1];
|
$total_tva = $tabprice[1];
|
||||||
@@ -2072,7 +2073,8 @@ class CommandeFournisseur extends CommonOrder
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$mysoc, $this->thirdparty);
|
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$mysoc, $this->thirdparty);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type);
|
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type);
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
$total_tva = $tabprice[1];
|
$total_tva = $tabprice[1];
|
||||||
|
|||||||
@@ -1269,7 +1269,8 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
|
||||||
|
|
||||||
$localtaxes_type=getLocalTaxesFromRate($vatrate,0,$mysoc, $this->thirdparty);
|
$localtaxes_type=getLocalTaxesFromRate($vatrate,0,$mysoc, $this->thirdparty);
|
||||||
|
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
|
||||||
|
|
||||||
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $vatrate, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type);
|
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $vatrate, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type);
|
||||||
$total_ht = $tabprice[0];
|
$total_ht = $tabprice[0];
|
||||||
$total_tva = $tabprice[1];
|
$total_tva = $tabprice[1];
|
||||||
|
|||||||
@@ -305,6 +305,8 @@ ALTER TABLE llx_categorie_project ADD CONSTRAINT fk_categorie_project_categorie_
|
|||||||
ALTER TABLE llx_categorie_project ADD CONSTRAINT fk_categorie_project_fk_project FOREIGN KEY (fk_project) REFERENCES llx_projet (rowid);
|
ALTER TABLE llx_categorie_project ADD CONSTRAINT fk_categorie_project_fk_project FOREIGN KEY (fk_project) REFERENCES llx_projet (rowid);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE llx_c_tva ADD COLUMN code varchar(10) DEFAULT '' after fk_pays;
|
||||||
|
DROP INDEX uk_c_tva_id ON llx_c_tva;
|
||||||
|
ALTER TABLE llx_c_tva ADD UNIQUE INDEX uk_c_tva_id (fk_pays, code, taux, recuperableonly);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
-- ========================================================================
|
-- ========================================================================
|
||||||
-- Copyright (C) 2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
-- Copyright (C) 2014-2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
--
|
--
|
||||||
-- This program is free software; you can redistribute it and/or modify
|
-- 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
|
-- it under the terms of the GNU General Public License as published by
|
||||||
@@ -16,4 +16,6 @@
|
|||||||
--
|
--
|
||||||
-- ========================================================================
|
-- ========================================================================
|
||||||
|
|
||||||
ALTER TABLE llx_c_tva ADD UNIQUE INDEX uk_c_tva_id (fk_pays, taux, recuperableonly);
|
ALTER TABLE llx_c_tva ADD UNIQUE INDEX uk_c_tva_id (fk_pays, code, taux, recuperableonly);
|
||||||
|
|
||||||
|
-- ALTER TABLE llx_c_tva ADD UNIQUE INDEX uk_c_tva_id (fk_pays, code, recuperableonly); -- Not yet possible for compatibility reason, where old code is ''
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ create table llx_c_tva
|
|||||||
(
|
(
|
||||||
rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
fk_pays integer NOT NULL,
|
fk_pays integer NOT NULL,
|
||||||
|
code varchar(10) DEFAULT '', -- a key to describe vat entry, for example FR20
|
||||||
taux double NOT NULL,
|
taux double NOT NULL,
|
||||||
localtax1 varchar(20) NOT NULL DEFAULT '0',
|
localtax1 varchar(20) NOT NULL DEFAULT '0',
|
||||||
localtax1_type varchar(10) NOT NULL DEFAULT '0',
|
localtax1_type varchar(10) NOT NULL DEFAULT '0',
|
||||||
|
|||||||
Reference in New Issue
Block a user