Start to use the vat code to identify a vat into combo list instead of
just "rate" and "npr".
This commit is contained in:
parent
e1d35c2797
commit
f68f5677bb
@ -4137,7 +4137,7 @@ class Form
|
|||||||
* 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|string $selectedrate Force preselected vat rate. Can be '8.5' or '8.5 (NOO)' for example. 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
|
||||||
* @param int $idprod Id product
|
* @param int $idprod Id product
|
||||||
@ -4169,7 +4169,7 @@ class Form
|
|||||||
$defaultcode=$reg[1];
|
$defaultcode=$reg[1];
|
||||||
$defaulttx=preg_replace('/\s*\(.*\)/','',$defaulttx);
|
$defaulttx=preg_replace('/\s*\(.*\)/','',$defaulttx);
|
||||||
}
|
}
|
||||||
//var_dump($defaulttx.'-'.$defaultnpr.'-'.$defaultcode);
|
//var_dump($selectedrate.'-'.$defaulttx.'-'.$defaultnpr.'-'.$defaultcode);
|
||||||
|
|
||||||
// Check parameters
|
// Check parameters
|
||||||
if (is_object($societe_vendeuse) && ! $societe_vendeuse->country_code)
|
if (is_object($societe_vendeuse) && ! $societe_vendeuse->country_code)
|
||||||
@ -4266,7 +4266,7 @@ class Form
|
|||||||
$return.= $rate['nprtva'] ? '*': '';
|
$return.= $rate['nprtva'] ? '*': '';
|
||||||
if ($addcode && $rate['code']) $return.=' ('.$rate['code'].')';
|
if ($addcode && $rate['code']) $return.=' ('.$rate['code'].')';
|
||||||
$return.= '"';
|
$return.= '"';
|
||||||
if ($defaultcode)
|
if ($defaultcode) // If defaultcode is defined, we used it in priority to select combo option instead of using rate+npr flag
|
||||||
{
|
{
|
||||||
if ($defaultcode == $rate['code']) $return.= ' selected';
|
if ($defaultcode == $rate['code']) $return.= ' selected';
|
||||||
}
|
}
|
||||||
@ -4276,7 +4276,7 @@ class Form
|
|||||||
}
|
}
|
||||||
$return.= '>'.vatrate($rate['libtva']);
|
$return.= '>'.vatrate($rate['libtva']);
|
||||||
//$return.=($rate['code']?' '.$rate['code']:'');
|
//$return.=($rate['code']?' '.$rate['code']:'');
|
||||||
$return.= $rate['nprtva'] ? ' *': '';
|
$return.= (empty($defaultcode) && $rate['nprtva']) ? ' *': ''; // We show the * (old behaviour only if new vat code is not used)
|
||||||
|
|
||||||
$return.= '</option>';
|
$return.= '</option>';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -62,6 +62,7 @@ ALTER TABLE llx_product ADD COLUMN width_units tinyint DEFAULT NULL;
|
|||||||
ALTER TABLE llx_product ADD COLUMN height float DEFAULT NULL;
|
ALTER TABLE llx_product ADD COLUMN height float DEFAULT NULL;
|
||||||
ALTER TABLE llx_product ADD COLUMN height_units tinyint DEFAULT NULL;
|
ALTER TABLE llx_product ADD COLUMN height_units tinyint DEFAULT NULL;
|
||||||
|
|
||||||
|
ALTER TABLE llx_product ADD COLUMN default_vat_code varchar(10) after cost_price;
|
||||||
|
|
||||||
CREATE TABLE llx_categorie_user
|
CREATE TABLE llx_categorie_user
|
||||||
(
|
(
|
||||||
|
|||||||
@ -45,6 +45,7 @@ create table llx_product
|
|||||||
price_min_ttc double(24,8) DEFAULT 0,
|
price_min_ttc double(24,8) DEFAULT 0,
|
||||||
price_base_type varchar(3) DEFAULT 'HT',
|
price_base_type varchar(3) DEFAULT 'HT',
|
||||||
cost_price double(24,8) DEFAULT NULL, -- Cost price without tax. Can be used for margin calculation.
|
cost_price double(24,8) DEFAULT NULL, -- Cost price without tax. Can be used for margin calculation.
|
||||||
|
default_vat_code varchar(10), -- Same code than into table llx_c_tva (but no constraints). Should be used in priority to find default vat, npr, localtaxes for product.
|
||||||
tva_tx double(6,3), -- Default VAT rate of product
|
tva_tx double(6,3), -- Default VAT rate of product
|
||||||
recuperableonly integer NOT NULL DEFAULT '0', -- French NPR VAT
|
recuperableonly integer NOT NULL DEFAULT '0', -- French NPR VAT
|
||||||
localtax1_tx double(6,3) DEFAULT 0, --
|
localtax1_tx double(6,3) DEFAULT 0, --
|
||||||
|
|||||||
@ -97,6 +97,8 @@ class Product extends CommonObject
|
|||||||
var $prices_by_qty=array();
|
var $prices_by_qty=array();
|
||||||
var $prices_by_qty_id=array();
|
var $prices_by_qty_id=array();
|
||||||
var $prices_by_qty_list=array();
|
var $prices_by_qty_list=array();
|
||||||
|
//! Default VAT code for product (link to code into llx_c_tva but without foreign keys)
|
||||||
|
var $default_vat_code;
|
||||||
//! Default VAT rate of product
|
//! Default VAT rate of product
|
||||||
var $tva_tx;
|
var $tva_tx;
|
||||||
//! French VAT NPR (0 or 1)
|
//! French VAT NPR (0 or 1)
|
||||||
@ -702,6 +704,7 @@ class Product extends CommonObject
|
|||||||
$sql.= " SET label = '" . $this->db->escape($this->label) ."'";
|
$sql.= " SET label = '" . $this->db->escape($this->label) ."'";
|
||||||
$sql.= ", ref = '" . $this->db->escape($this->ref) ."'";
|
$sql.= ", ref = '" . $this->db->escape($this->ref) ."'";
|
||||||
$sql.= ", ref_ext = ".(! empty($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null");
|
$sql.= ", ref_ext = ".(! empty($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null");
|
||||||
|
$sql.= ", default_vat_code = ".($this->default_vat_code ? "'".$this->db->escape($this->default_vat_code)."'" : "null");
|
||||||
$sql.= ", tva_tx = " . $this->tva_tx;
|
$sql.= ", tva_tx = " . $this->tva_tx;
|
||||||
$sql.= ", recuperableonly = " . $this->tva_npr;
|
$sql.= ", recuperableonly = " . $this->tva_npr;
|
||||||
$sql.= ", localtax1_tx = " . $this->localtax1_tx;
|
$sql.= ", localtax1_tx = " . $this->localtax1_tx;
|
||||||
@ -824,12 +827,14 @@ class Product extends CommonObject
|
|||||||
{
|
{
|
||||||
if (empty($conf->barcode->enabled)) $this->error=$langs->trans("Error")." : ".$langs->trans("ErrorProductAlreadyExists",$this->ref);
|
if (empty($conf->barcode->enabled)) $this->error=$langs->trans("Error")." : ".$langs->trans("ErrorProductAlreadyExists",$this->ref);
|
||||||
else $this->error=$langs->trans("Error")." : ".$langs->trans("ErrorProductBarCodeAlreadyExists",$this->barcode);
|
else $this->error=$langs->trans("Error")." : ".$langs->trans("ErrorProductBarCodeAlreadyExists",$this->barcode);
|
||||||
|
$this->errors[]=$this->error;
|
||||||
$this->db->rollback();
|
$this->db->rollback();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$this->error=$langs->trans("Error")." : ".$this->db->error()." - ".$sql;
|
$this->error=$langs->trans("Error")." : ".$this->db->error()." - ".$sql;
|
||||||
|
$this->errors[]=$this->error;
|
||||||
$this->db->rollback();
|
$this->db->rollback();
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
@ -1390,7 +1395,7 @@ class Product extends CommonObject
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Modify price of a product/Service
|
* Modify customer price of a product/Service
|
||||||
*
|
*
|
||||||
* @param double $newprice New price
|
* @param double $newprice New price
|
||||||
* @param string $newpricebase HT or TTC
|
* @param string $newpricebase HT or TTC
|
||||||
@ -1402,15 +1407,16 @@ class Product extends CommonObject
|
|||||||
* @param int $newpsq 1 if it has price by quantity
|
* @param int $newpsq 1 if it has price by quantity
|
||||||
* @param int $ignore_autogen Used to avoid infinite loops
|
* @param int $ignore_autogen Used to avoid infinite loops
|
||||||
* @param array $localtaxes_array Array with localtaxes info array('0'=>type1,'1'=>rate1,'2'=>type2,'3'=>rate2) (loaded by getLocalTaxesFromRate(vatrate, 0, ...) function).
|
* @param array $localtaxes_array Array with localtaxes info array('0'=>type1,'1'=>rate1,'2'=>type2,'3'=>rate2) (loaded by getLocalTaxesFromRate(vatrate, 0, ...) function).
|
||||||
|
* @param string $newdefaultvatcode Default vat code
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
function updatePrice($newprice, $newpricebase, $user, $newvat='',$newminprice='', $level=0, $newnpr=0, $newpsq=0, $ignore_autogen=0, $localtaxes_array=array())
|
function updatePrice($newprice, $newpricebase, $user, $newvat='',$newminprice='', $level=0, $newnpr=0, $newpsq=0, $ignore_autogen=0, $localtaxes_array=array(), $newdefaultvatcode='')
|
||||||
{
|
{
|
||||||
global $conf,$langs;
|
global $conf,$langs;
|
||||||
|
|
||||||
$id=$this->id;
|
$id=$this->id;
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::update_price id=".$id." newprice=".$newprice." newpricebase=".$newpricebase." newminprice=".$newminprice." level=".$level." npr=".$newnpr);
|
dol_syslog(get_class($this)."::update_price id=".$id." newprice=".$newprice." newpricebase=".$newpricebase." newminprice=".$newminprice." level=".$level." npr=".$newnpr," newdefaultvatcode=".$newdefaultvatcode);
|
||||||
|
|
||||||
// Clean parameters
|
// Clean parameters
|
||||||
if (empty($this->tva_tx)) $this->tva_tx=0;
|
if (empty($this->tva_tx)) $this->tva_tx=0;
|
||||||
@ -1504,6 +1510,7 @@ class Product extends CommonObject
|
|||||||
$sql.= " localtax2_tx=".($localtax2>=0?$localtax2:'NULL').",";
|
$sql.= " localtax2_tx=".($localtax2>=0?$localtax2:'NULL').",";
|
||||||
$sql.= " localtax1_type=".($localtaxtype1!=''?"'".$localtaxtype1."'":"'0'").",";
|
$sql.= " localtax1_type=".($localtaxtype1!=''?"'".$localtaxtype1."'":"'0'").",";
|
||||||
$sql.= " localtax2_type=".($localtaxtype2!=''?"'".$localtaxtype2."'":"'0'").",";
|
$sql.= " localtax2_type=".($localtaxtype2!=''?"'".$localtaxtype2."'":"'0'").",";
|
||||||
|
$sql.= " default_vat_code=".($newdefaultvatcode?"'".$this->db->escape($newdefaultvatcode)."'":"null").",";
|
||||||
$sql.= " tva_tx='".price2num($newvat)."',";
|
$sql.= " tva_tx='".price2num($newvat)."',";
|
||||||
$sql.= " recuperableonly='".$newnpr."'";
|
$sql.= " recuperableonly='".$newnpr."'";
|
||||||
$sql.= " WHERE rowid = ".$id;
|
$sql.= " WHERE rowid = ".$id;
|
||||||
@ -1517,6 +1524,7 @@ class Product extends CommonObject
|
|||||||
$this->multiprices_min[$level]= $price_min;
|
$this->multiprices_min[$level]= $price_min;
|
||||||
$this->multiprices_min_ttc[$level]= $price_min_ttc;
|
$this->multiprices_min_ttc[$level]= $price_min_ttc;
|
||||||
$this->multiprices_base_type[$level]= $newpricebase;
|
$this->multiprices_base_type[$level]= $newpricebase;
|
||||||
|
$this->multiprices_default_vat_code[$level]= $newdefaultvatcode;
|
||||||
$this->multiprices_tva_tx[$level]= $newvat;
|
$this->multiprices_tva_tx[$level]= $newvat;
|
||||||
$this->multiprices_recuperableonly[$level]= $newnpr;
|
$this->multiprices_recuperableonly[$level]= $newnpr;
|
||||||
|
|
||||||
@ -1525,6 +1533,7 @@ class Product extends CommonObject
|
|||||||
$this->price_min = $price_min;
|
$this->price_min = $price_min;
|
||||||
$this->price_min_ttc = $price_min_ttc;
|
$this->price_min_ttc = $price_min_ttc;
|
||||||
$this->price_base_type = $newpricebase;
|
$this->price_base_type = $newpricebase;
|
||||||
|
$this->default_vat_code = $newdefaultvatcode;
|
||||||
$this->tva_tx = $newvat;
|
$this->tva_tx = $newvat;
|
||||||
$this->tva_npr = $newnpr;
|
$this->tva_npr = $newnpr;
|
||||||
//Local taxes
|
//Local taxes
|
||||||
@ -1603,7 +1612,7 @@ class Product extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
$sql = "SELECT rowid, ref, ref_ext, label, description, url, note, customcode, fk_country, price, price_ttc,";
|
$sql = "SELECT rowid, ref, ref_ext, label, description, url, note, customcode, fk_country, price, price_ttc,";
|
||||||
$sql.= " price_min, price_min_ttc, price_base_type, cost_price, tva_tx, recuperableonly as tva_npr, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, tosell,";
|
$sql.= " price_min, price_min_ttc, price_base_type, cost_price, default_vat_code, tva_tx, recuperableonly as tva_npr, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, tosell,";
|
||||||
$sql.= " tobuy, fk_product_type, duration, seuil_stock_alerte, canvas,";
|
$sql.= " tobuy, fk_product_type, duration, seuil_stock_alerte, canvas,";
|
||||||
$sql.= " weight, weight_units, length, length_units, surface, surface_units, volume, volume_units, barcode, fk_barcode_type, finished,";
|
$sql.= " weight, weight_units, length, length_units, surface, surface_units, volume, volume_units, barcode, fk_barcode_type, finished,";
|
||||||
$sql.= " accountancy_code_buy, accountancy_code_sell, stock, pmp,";
|
$sql.= " accountancy_code_buy, accountancy_code_sell, stock, pmp,";
|
||||||
@ -1647,6 +1656,7 @@ class Product extends CommonObject
|
|||||||
$this->price_min_ttc = $obj->price_min_ttc;
|
$this->price_min_ttc = $obj->price_min_ttc;
|
||||||
$this->price_base_type = $obj->price_base_type;
|
$this->price_base_type = $obj->price_base_type;
|
||||||
$this->cost_price = $obj->cost_price;
|
$this->cost_price = $obj->cost_price;
|
||||||
|
$this->default_vat_code = $obj->default_vat_code;
|
||||||
$this->tva_tx = $obj->tva_tx;
|
$this->tva_tx = $obj->tva_tx;
|
||||||
//! French VAT NPR
|
//! French VAT NPR
|
||||||
$this->tva_npr = $obj->tva_npr;
|
$this->tva_npr = $obj->tva_npr;
|
||||||
|
|||||||
@ -94,11 +94,10 @@ if (empty($reshook))
|
|||||||
|
|
||||||
if (($action == 'update_vat') && !$cancel && ($user->rights->produit->creer || $user->rights->service->creer))
|
if (($action == 'update_vat') && !$cancel && ($user->rights->produit->creer || $user->rights->service->creer))
|
||||||
{
|
{
|
||||||
$tva_tx_txt = GETPOST('tva_tx', 'alpha'); // tva_tx can be '8.5' or '8.5*' or '8.5
|
$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;
|
|
||||||
|
|
||||||
// We must define tva_tx, npr and local taxes
|
// We must define tva_tx, npr and local taxes
|
||||||
|
$vatratecode = '';
|
||||||
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
|
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
|
||||||
$npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0;
|
$npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0;
|
||||||
$localtax1 = 0; $localtax2 = 0; $localtax1_type = '0'; $localtax2_type = '0';
|
$localtax1 = 0; $localtax2 = 0; $localtax1_type = '0'; $localtax2_type = '0';
|
||||||
@ -125,6 +124,7 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$object->default_vat_code = $vatratecode;
|
||||||
$object->tva_tx = $tva_tx;
|
$object->tva_tx = $tva_tx;
|
||||||
$object->tva_npr = $npr;
|
$object->tva_npr = $npr;
|
||||||
$object->localtax1_tx = $localtax1;
|
$object->localtax1_tx = $localtax1;
|
||||||
@ -138,11 +138,14 @@ if (empty($reshook))
|
|||||||
if (! $resql)
|
if (! $resql)
|
||||||
{
|
{
|
||||||
$error++;
|
$error++;
|
||||||
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($error)
|
if ($error)
|
||||||
{
|
{
|
||||||
$object->updatePrice($newprice, $newpricebase, $user, $newvat, $newprice_min, $level, $newnpr, $newpsq); // FIXME Bug $newvat and $newnpr not defined
|
//$localtaxarray=array('0'=>$localtax1_type,'1'=>$localtax1,'2'=>$localtax2_type,'3'=>$localtax2);
|
||||||
|
$localtaxarray=array(); // We do not store localtaxes into product, we will use instead the "vat code" to retreive them.
|
||||||
|
$object->updatePrice(0, $object->price_base_type, $user, $tva_tx, '', 0, $npr, 0, 0, $localtaxarray, $vatratecode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $error)
|
if (! $error)
|
||||||
@ -203,19 +206,44 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
|
|
||||||
$tva_tx_txt = $newvattx[$i];
|
$tva_tx_txt = $newvattx[$i];
|
||||||
$npr = $newvatnpr[$i];
|
|
||||||
|
$vatratecode = '';
|
||||||
|
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
|
||||||
|
$npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0;
|
||||||
$localtax1 = $newlocaltax1_tx[$i];
|
$localtax1 = $newlocaltax1_tx[$i];
|
||||||
$localtax1_type = $newlocaltax1_type[$i];
|
$localtax1_type = $newlocaltax1_type[$i];
|
||||||
$localtax2 = $newlocaltax2_tx[$i];
|
$localtax2 = $newlocaltax2_tx[$i];
|
||||||
$localtax2_type = $newlocaltax2_type[$i];
|
$localtax2_type = $newlocaltax2_type[$i];
|
||||||
|
if (preg_match('/\((.*)\)/', $tva_tx_txt, $reg))
|
||||||
|
{
|
||||||
|
// We look into database using code
|
||||||
|
$vatratecode=$reg[1];
|
||||||
|
// Get record from code
|
||||||
|
$sql = "SELECT t.rowid, t.code, t.recuperableonly, 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.= " WHERE t.fk_pays = c.rowid AND c.code = '".$mysoc->country_code."'";
|
||||||
|
$sql.= " AND t.taux = ".((float) $tva_tx)." AND t.active = 1";
|
||||||
|
$sql.= " AND t.code ='".$vatratecode."'";
|
||||||
|
$resql=$db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$obj = $db->fetch_object($resql);
|
||||||
|
$npr = $obj->recuperableonly;
|
||||||
|
$localtax1 = $obj->localtax1;
|
||||||
|
$localtax2 = $obj->localtax2;
|
||||||
|
$localtax1_type = $obj->localtax1_type;
|
||||||
|
$localtax2_type = $obj->localtax2_type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$pricestoupdate[$i] = array(
|
$pricestoupdate[$i] = array(
|
||||||
'price' => $newprice[$i],
|
'price' => $newprice[$i],
|
||||||
'price_min' => $newprice_min[$i],
|
'price_min' => $newprice_min[$i],
|
||||||
'price_base_type' => $newpricebase[$i],
|
'price_base_type' => $newpricebase[$i],
|
||||||
'vat_tx' => $tva_tx,
|
'default_vat_code' => $vatratecode,
|
||||||
'npr' => $npr,
|
'vat_tx' => $tva_tx, // default_vat_code should be used in priority in a future
|
||||||
'localtaxes_array' => array('0'=>$localtax1_type, '1'=>$localtax1, '2'=>$localtax2_type, '3'=>$localtax2)
|
'npr' => $npr, // default_vat_code should be used in priority in a future
|
||||||
|
'localtaxes_array' => array('0'=>$localtax1_type, '1'=>$localtax1, '2'=>$localtax2_type, '3'=>$localtax2) // default_vat_code should be used in priority in a future
|
||||||
);
|
);
|
||||||
|
|
||||||
//If autogeneration is enabled, then we only set the first level
|
//If autogeneration is enabled, then we only set the first level
|
||||||
@ -223,9 +251,12 @@ if (empty($reshook))
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
$tva_tx_txt = GETPOST('tva_tx', 'alpha'); // tva_tx can be '8.5' , '8.5*', '8.5 (8.5NPR) *' for example.
|
elseif (! $error)
|
||||||
|
{
|
||||||
|
$tva_tx_txt = GETPOST('tva_tx', 'alpha'); // tva_tx can be '8.5' or '8.5*' or '8.5 (XXX)' or '8.5* (XXX)'
|
||||||
|
|
||||||
|
$vatratecode = '';
|
||||||
// We must define tva_tx, npr and local taxes
|
// We must define tva_tx, npr and local taxes
|
||||||
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
|
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
|
||||||
$npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0;
|
$npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0;
|
||||||
@ -256,9 +287,10 @@ if (empty($reshook))
|
|||||||
'price' => $_POST["price"],
|
'price' => $_POST["price"],
|
||||||
'price_min' => $_POST["price_min"],
|
'price_min' => $_POST["price_min"],
|
||||||
'price_base_type' => $_POST["price_base_type"],
|
'price_base_type' => $_POST["price_base_type"],
|
||||||
'vat_tx' => $tva_tx,
|
'default_vat_code' => $vatratecode,
|
||||||
'npr' => $npr,
|
'vat_tx' => $tva_tx, // default_vat_code should be used in priority in a future
|
||||||
'localtaxes_array' => array('0'=>$localtax1_type, '1'=>$localtax1, '2'=>$localtax2_type, '3'=>$localtax2)
|
'npr' => $npr, // default_vat_code should be used in priority in a future
|
||||||
|
'localtaxes_array' => array('0'=>$localtax1_type, '1'=>$localtax1, '2'=>$localtax2_type, '3'=>$localtax2) // default_vat_code should be used in priority in a future
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -282,7 +314,7 @@ if (empty($reshook))
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$res = $object->updatePrice($newprice, $val['price_base_type'], $user, $val['vat_tx'], $newprice_min, $key, $val['npr'], $psq, 0, $val['localtaxes_array']);
|
$res = $object->updatePrice($newprice, $val['price_base_type'], $user, $val['vat_tx'], $newprice_min, $key, $val['npr'], $psq, 0, $val['localtaxes_array'], $val['default_vat_code']);
|
||||||
|
|
||||||
if ($res < 0) {
|
if ($res < 0) {
|
||||||
$error ++;
|
$error ++;
|
||||||
@ -422,6 +454,7 @@ if (empty($reshook))
|
|||||||
|
|
||||||
$tva_tx_txt = GETPOST("tva_tx");
|
$tva_tx_txt = GETPOST("tva_tx");
|
||||||
|
|
||||||
|
$vatratecode = '';
|
||||||
// We must define tva_tx, npr and local taxes
|
// We must define tva_tx, npr and local taxes
|
||||||
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
|
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
|
||||||
$npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0;
|
$npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0;
|
||||||
@ -449,6 +482,7 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$prodcustprice->default_vat_code = $vatratecode;
|
||||||
$prodcustprice->tva_tx = $tva_tx;
|
$prodcustprice->tva_tx = $tva_tx;
|
||||||
$prodcustprice->recuperableonly = $npr;
|
$prodcustprice->recuperableonly = $npr;
|
||||||
$prodcustprice->localtax1_tx = $localtax1;
|
$prodcustprice->localtax1_tx = $localtax1;
|
||||||
@ -463,7 +497,7 @@ if (empty($reshook))
|
|||||||
$error++;
|
$error++;
|
||||||
$action='add_customer_price';
|
$action='add_customer_price';
|
||||||
}
|
}
|
||||||
if (! empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE) && $prodcustprice->price_min<$maxpricesupplier)
|
if (! empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE) && $prodcustprice->price_min < $maxpricesupplier)
|
||||||
{
|
{
|
||||||
$langs->load("errors");
|
$langs->load("errors");
|
||||||
setEventMessages($langs->trans("MinimumPriceLimit",price($maxpricesupplier,0,'',1,-1,-1,'auto')), null, 'errors');
|
setEventMessages($langs->trans("MinimumPriceLimit",price($maxpricesupplier,0,'',1,-1,-1,'auto')), null, 'errors');
|
||||||
@ -514,6 +548,7 @@ if (empty($reshook))
|
|||||||
|
|
||||||
$tva_tx_txt = GETPOST("tva_tx");
|
$tva_tx_txt = GETPOST("tva_tx");
|
||||||
|
|
||||||
|
$vatratecode='';
|
||||||
// We must define tva_tx, npr and local taxes
|
// We must define tva_tx, npr and local taxes
|
||||||
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
|
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
|
||||||
$npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0;
|
$npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0;
|
||||||
@ -541,6 +576,7 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$prodcustprice->default_vat_code = $vatratecode;
|
||||||
$prodcustprice->tva_tx = $tva_tx;
|
$prodcustprice->tva_tx = $tva_tx;
|
||||||
$prodcustprice->recuperableonly = $npr;
|
$prodcustprice->recuperableonly = $npr;
|
||||||
$prodcustprice->localtax1_tx = $localtax1;
|
$prodcustprice->localtax1_tx = $localtax1;
|
||||||
@ -548,7 +584,7 @@ if (empty($reshook))
|
|||||||
$prodcustprice->localtax1_type = $localtax1_type;
|
$prodcustprice->localtax1_type = $localtax1_type;
|
||||||
$prodcustprice->localtax2_type = $localtax2_type;
|
$prodcustprice->localtax2_type = $localtax2_type;
|
||||||
|
|
||||||
if ($prodcustprice->price_min<$maxpricesupplier && !empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE))
|
if ($prodcustprice->price_min < $maxpricesupplier && !empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE))
|
||||||
{
|
{
|
||||||
setEventMessages($langs->trans("MinimumPriceLimit",price($maxpricesupplier,0,'',1,-1,-1,'auto')), null, 'errors');
|
setEventMessages($langs->trans("MinimumPriceLimit",price($maxpricesupplier,0,'',1,-1,-1,'auto')), null, 'errors');
|
||||||
$error++;
|
$error++;
|
||||||
@ -640,7 +676,13 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TVA
|
// TVA
|
||||||
print '<tr><td>' . $langs->trans("VATRate") . '</td><td>' . vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true) . '</td></tr>';
|
print '<tr><td>' . $langs->trans("VATRate") . '</td><td>';
|
||||||
|
if ($object->default_vat_code)
|
||||||
|
{
|
||||||
|
print vatrate($object->tva_tx, true) . ' ('.$object->default_vat_code.')';
|
||||||
|
}
|
||||||
|
else print vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true);
|
||||||
|
print '</td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -649,17 +691,23 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
|
|||||||
if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility
|
if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility
|
||||||
{
|
{
|
||||||
// We show only vat for level 1
|
// We show only vat for level 1
|
||||||
print '<tr><td class="titlefield">' . $langs->trans("VATRate") . '</td><td colspan="2">' . vatrate($object->multiprices_tva_tx [1], true) . '</td></tr>';
|
print '<tr><td class="titlefield">' . $langs->trans("VATRate") . '</td><td colspan="2">' . vatrate($object->multiprices_tva_tx[1], true) . '</td></tr>';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TVA
|
// TVA
|
||||||
print '<tr><td class="titlefield">' . $langs->trans("VATRate") . '</td><td>' . vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true) . '</td></tr>';
|
print '<tr><td class="titlefield">' . $langs->trans("VATRate") . '</td><td>';
|
||||||
|
if ($object->default_vat_code)
|
||||||
|
{
|
||||||
|
print vatrate($object->tva_tx, true) . ' ('.$object->default_vat_code.')';
|
||||||
|
}
|
||||||
|
else print vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true);
|
||||||
|
print '</td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<tr class="liste_titre"><td style="text-align: center">'.$langs->trans("PriceLevel").'</td><td style="text-align: center">'.$langs->trans("SellingPrice").'</td><td style="text-align: center">'.$langs->trans("MinPrice").'</td></tr>';
|
print '<tr class="liste_titre"><td style="text-align: center">'.$langs->trans("PriceLevel").'</td><td style="text-align: center">'.$langs->trans("SellingPrice").'</td><td style="text-align: center">'.$langs->trans("MinPrice").'</td></tr>';
|
||||||
|
|
||||||
for($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i ++)
|
for($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++)
|
||||||
{
|
{
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
|
|
||||||
@ -771,7 +819,13 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TVA
|
// TVA
|
||||||
print '<tr><td class="titlefield">' . $langs->trans("VATRate") . '</td><td>' . vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true) . '</td></tr>';
|
print '<tr><td class="titlefield">' . $langs->trans("VATRate") . '</td><td>';
|
||||||
|
if ($object->default_vat_code)
|
||||||
|
{
|
||||||
|
print vatrate($object->tva_tx, true) . ' ('.$object->default_vat_code.')';
|
||||||
|
}
|
||||||
|
else print vatrate($object->tva_tx, true, $object->tva_npr, true);
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
// Price
|
// Price
|
||||||
print '<tr><td>' . $langs->trans("SellingPrice") . '</td><td>';
|
print '<tr><td>' . $langs->trans("SellingPrice") . '</td><td>';
|
||||||
@ -936,7 +990,7 @@ if ($action == 'edit_vat' && ($user->rights->produit->creer || $user->rights->se
|
|||||||
|
|
||||||
// VAT
|
// VAT
|
||||||
print '<tr><td>' . $langs->trans("VATRate") . '</td><td>';
|
print '<tr><td>' . $langs->trans("VATRate") . '</td><td>';
|
||||||
print $form->load_tva("tva_tx", $object->tva_tx, $mysoc, '', $object->id, $object->tva_npr, $object->type, false, 1);
|
print $form->load_tva("tva_tx", $object->default_vat_code ? $object->tva_tx.' ('.$object->default_vat_code.')' : $object->tva_tx, $mysoc, '', $object->id, $object->tva_npr, $object->type, false, 1);
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
@ -969,7 +1023,7 @@ if ($action == 'edit_price' && $object->getRights()->creer)
|
|||||||
|
|
||||||
// VAT
|
// VAT
|
||||||
print '<tr><td>' . $langs->trans("VATRate") . '</td><td colspan="2">';
|
print '<tr><td>' . $langs->trans("VATRate") . '</td><td colspan="2">';
|
||||||
print $form->load_tva("tva_tx", $object->tva_tx, $mysoc, '', $object->id, $object->tva_npr, $object->type, false, 1);
|
print $form->load_tva("tva_tx", $object->default_vat_code ? $object->tva_tx.' ('.$object->default_vat_code.')' : $object->tva_tx, $mysoc, '', $object->id, $object->tva_npr, $object->type, false, 1);
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
// Price base
|
// Price base
|
||||||
@ -1102,13 +1156,17 @@ if ($action == 'edit_price' && $object->getRights()->creer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
print '<table class="noborder">';
|
print '<table class="noborder">';
|
||||||
print '<thead><tr class="liste_titre">
|
print '<thead><tr class="liste_titre">';
|
||||||
<td style="text-align: center">'.$langs->trans("PriceLevel").'</td>';
|
|
||||||
if (!empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) {
|
print '<td>'.$langs->trans("PriceLevel").'</td>';
|
||||||
print '<td style="text-align: center">'.$langs->trans("VATRate").'</td>';
|
|
||||||
}
|
if (!empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) print '<td style="text-align: center">'.$langs->trans("VATRate").'</td>';
|
||||||
print '<td style="text-align: center">'.$langs->trans("SellingPrice").'</td>
|
else print '<td></td>';
|
||||||
<td style="text-align: center">'.$langs->trans("MinPrice").'</td>';
|
|
||||||
|
print '<td class="center">'.$langs->trans("SellingPrice").'</td>';
|
||||||
|
|
||||||
|
print '<td class="center">'.$langs->trans("MinPrice").'</td>';
|
||||||
|
|
||||||
if (!empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE)) {
|
if (!empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE)) {
|
||||||
print '<td></td>';
|
print '<td></td>';
|
||||||
}
|
}
|
||||||
@ -1126,12 +1184,14 @@ if ($action == 'edit_price' && $object->getRights()->creer)
|
|||||||
|
|
||||||
// VAT
|
// VAT
|
||||||
if (empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) {
|
if (empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) {
|
||||||
print '<input type="hidden" name="tva_tx[' . $i . ']" value="' . $object->tva_tx . '">';
|
print '<td>';
|
||||||
|
print '<input type="hidden" name="tva_tx[' . $i . ']" value="' . ($object->default_vat_code ? $object->tva_tx.' ('.$object->default_vat_code.')' : $object->tva_tx) . '">';
|
||||||
print '<input type="hidden" name="tva_npr[' . $i . ']" value="' . $object->tva_npr . '">';
|
print '<input type="hidden" name="tva_npr[' . $i . ']" value="' . $object->tva_npr . '">';
|
||||||
print '<input type="hidden" name="localtax1_tx[' . $i . ']" value="' . $object->localtax1_tx . '">';
|
print '<input type="hidden" name="localtax1_tx[' . $i . ']" value="' . $object->localtax1_tx . '">';
|
||||||
print '<input type="hidden" name="localtax1_type[' . $i . ']" value="' . $object->localtax1_type . '">';
|
print '<input type="hidden" name="localtax1_type[' . $i . ']" value="' . $object->localtax1_type . '">';
|
||||||
print '<input type="hidden" name="localtax2_tx[' . $i . ']" value="' . $object->localtax2_tx . '">';
|
print '<input type="hidden" name="localtax2_tx[' . $i . ']" value="' . $object->localtax2_tx . '">';
|
||||||
print '<input type="hidden" name="localtax2_type[' . $i . ']" value="' . $object->localtax2_type . '">';
|
print '<input type="hidden" name="localtax2_type[' . $i . ']" value="' . $object->localtax2_type . '">';
|
||||||
|
print '</td>';
|
||||||
} else {
|
} else {
|
||||||
// This option is kept for backward compatibility but has no sense
|
// This option is kept for backward compatibility but has no sense
|
||||||
print '<td style="text-align: center">';
|
print '<td style="text-align: center">';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user