Task 559 : add use of price by qty in product selection (select and ajax search)
This commit is contained in:
parent
84df6bd639
commit
0f1617c31d
@ -1148,6 +1148,18 @@ class Form
|
|||||||
{
|
{
|
||||||
$sql.= ", pl.label as label_translated";
|
$sql.= ", pl.label as label_translated";
|
||||||
}
|
}
|
||||||
|
// Price by quantity
|
||||||
|
if (! empty($conf->global->PRODUIT_PRICE_BY_QTY))
|
||||||
|
{
|
||||||
|
$sql.= ", (SELECT pp.rowid FROM ".MAIN_DB_PREFIX."product_price as pp WHERE pp.fk_product = p.rowid";
|
||||||
|
if ($price_level >= 1) $sql.= " AND price_level=".$price_level;
|
||||||
|
$sql.= " ORDER BY date_price";
|
||||||
|
$sql.= " DESC LIMIT 1) as price_rowid";
|
||||||
|
$sql.= ", (SELECT pp.price_by_qty FROM ".MAIN_DB_PREFIX."product_price as pp WHERE pp.fk_product = p.rowid";
|
||||||
|
if ($price_level >= 1) $sql.= " AND price_level=".$price_level;
|
||||||
|
$sql.= " ORDER BY date_price";
|
||||||
|
$sql.= " DESC LIMIT 1) as price_by_qty";
|
||||||
|
}
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
|
$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
|
||||||
// Multilang : we add translation
|
// Multilang : we add translation
|
||||||
if (! empty($conf->global->MAIN_MULTILANGS))
|
if (! empty($conf->global->MAIN_MULTILANGS))
|
||||||
@ -1209,143 +1221,50 @@ class Form
|
|||||||
$i = 0;
|
$i = 0;
|
||||||
while ($num && $i < $num)
|
while ($num && $i < $num)
|
||||||
{
|
{
|
||||||
$outkey='';
|
$opt = '';
|
||||||
$outval='';
|
$optJson = array();
|
||||||
$outref='';
|
$objp = $this->db->fetch_object($result);
|
||||||
$outlabel='';
|
|
||||||
$outdesc='';
|
|
||||||
$outtype='';
|
|
||||||
$outprice_ht='';
|
|
||||||
$outprice_ttc='';
|
|
||||||
$outpricebasetype='';
|
|
||||||
$outtva_tx='';
|
|
||||||
|
|
||||||
$objp = $this->db->fetch_object($result);
|
if(!empty($objp->price_by_qty) && $objp->price_by_qty == 1) { // Price by quantity will return many prices for the same product
|
||||||
|
$sql = "SELECT rowid, qty_min, price, price_ttc, remise_percent, remise";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."product_price_by_qty";
|
||||||
|
$sql.= " WHERE fk_product_price=".$objp->price_rowid;
|
||||||
|
|
||||||
$label=$objp->label;
|
dol_syslog(get_class($this)."::select_produits_do search price by qty sql=".$sql);
|
||||||
if (! empty($objp->label_translated)) $label=$objp->label_translated;
|
$result2 = $this->db->query($sql);
|
||||||
if ($filterkey && $filterkey != '') $label=preg_replace('/('.preg_quote($filterkey).')/i','<strong>$1</strong>',$label,1);
|
if ($result2)
|
||||||
|
{
|
||||||
|
$nb_prices = $this->db->num_rows($result2);
|
||||||
|
$j = 0;
|
||||||
|
while ($nb_prices && $j < $nb_prices) {
|
||||||
|
$objp2 = $this->db->fetch_object($result2);
|
||||||
|
|
||||||
$outkey=$objp->rowid;
|
$objp->quantity = $objp2->qty_min;
|
||||||
$outref=$objp->ref;
|
$objp->price = $objp2->price;
|
||||||
$outlabel=$objp->label;
|
$objp->unitprice = $objp2->price;
|
||||||
$outdesc=$objp->description;
|
$objp->remise_percent = $objp2->remise_percent;
|
||||||
$outtype=$objp->fk_product_type;
|
$objp->remise = $objp2->remise;
|
||||||
|
$objp->price_by_qty_rowid = $objp2->rowid;
|
||||||
|
|
||||||
$opt = '<option value="'.$objp->rowid.'"';
|
$this->_construct_product_list_option($objp, $opt, $optJson, 0, $selected);
|
||||||
$opt.= ($objp->rowid == $selected)?' selected="selected"':'';
|
|
||||||
if (! empty($conf->stock->enabled) && $objp->fk_product_type == 0 && isset($objp->stock))
|
|
||||||
{
|
|
||||||
if ($objp->stock > 0)
|
|
||||||
{
|
|
||||||
$opt.= ' style="background-color:#32CD32; color:#F5F5F5;"';
|
|
||||||
}
|
|
||||||
else if ($objp->stock <= 0)
|
|
||||||
{
|
|
||||||
$opt.= ' style="background-color:#FF0000; color:#F5F5F5;"';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$opt.= '>';
|
|
||||||
$opt.= $objp->ref.' - '.dol_trunc($label,32).' - ';
|
|
||||||
|
|
||||||
$objRef = $objp->ref;
|
$j++;
|
||||||
if ($filterkey && $filterkey != '') $objRef=preg_replace('/('.preg_quote($filterkey).')/i','<strong>$1</strong>',$objRef,1);
|
|
||||||
$outval.=$objRef.' - '.dol_trunc($label,32).' - ';
|
|
||||||
|
|
||||||
$found=0;
|
// Add new entry
|
||||||
$currencytext=$langs->trans("Currency".$conf->currency);
|
// "key" value of json key array is used by jQuery automatically as selected value
|
||||||
$currencytextnoent=$langs->transnoentities("Currency".$conf->currency);
|
// "label" value of json key array is used by jQuery automatically as text for combo box
|
||||||
if (dol_strlen($currencytext) > 10) $currencytext=$conf->currency; // If text is too long, we use the short code
|
$outselect.=$opt;
|
||||||
if (dol_strlen($currencytextnoent) > 10) $currencytextnoent=$conf->currency; // If text is too long, we use the short code
|
array_push($outjson, $optJson);
|
||||||
|
}
|
||||||
// Multiprice
|
}
|
||||||
if ($price_level >= 1) // If we need a particular price level (from 1 to 6)
|
} else {
|
||||||
{
|
$this->_construct_product_list_option($objp, $opt, $optJson, $price_level, $selected);
|
||||||
$sql = "SELECT price, price_ttc, price_base_type, tva_tx";
|
// Add new entry
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_price";
|
// "key" value of json key array is used by jQuery automatically as selected value
|
||||||
$sql.= " WHERE fk_product='".$objp->rowid."'";
|
// "label" value of json key array is used by jQuery automatically as text for combo box
|
||||||
$sql.= " AND price_level=".$price_level;
|
$outselect.=$opt;
|
||||||
$sql.= " ORDER BY date_price";
|
array_push($outjson, $optJson);
|
||||||
$sql.= " DESC LIMIT 1";
|
}
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::select_produits_do search price for level '.$price_level.' sql=".$sql);
|
|
||||||
$result2 = $this->db->query($sql);
|
|
||||||
if ($result2)
|
|
||||||
{
|
|
||||||
$objp2 = $this->db->fetch_object($result2);
|
|
||||||
if ($objp2)
|
|
||||||
{
|
|
||||||
$found=1;
|
|
||||||
if ($objp2->price_base_type == 'HT')
|
|
||||||
{
|
|
||||||
$opt.= price($objp2->price,1).' '.$currencytext.' '.$langs->trans("HT");
|
|
||||||
$outval.= price($objp2->price,1).' '.$currencytextnoent.' '.$langs->transnoentities("HT");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$opt.= price($objp2->price_ttc,1).' '.$currencytext.' '.$langs->trans("TTC");
|
|
||||||
$outval.= price($objp2->price_ttc,1).' '.$currencytextnoent.' '.$langs->transnoentities("TTC");
|
|
||||||
}
|
|
||||||
$outprice_ht=price($objp2->price);
|
|
||||||
$outprice_ttc=price($objp2->price_ttc);
|
|
||||||
$outpricebasetype=$objp2->price_base_type;
|
|
||||||
$outtva_tx=$objp2->tva_tx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dol_print_error($this->db);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If level no defined or multiprice not found, we used the default price
|
|
||||||
if (! $found)
|
|
||||||
{
|
|
||||||
if ($objp->price_base_type == 'HT')
|
|
||||||
{
|
|
||||||
$opt.= price($objp->price,1).' '.$currencytext.' '.$langs->trans("HT");
|
|
||||||
$outval.= price($objp->price,1).' '.$currencytextnoent.' '.$langs->transnoentities("HT");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$opt.= price($objp->price_ttc,1).' '.$currencytext.' '.$langs->trans("TTC");
|
|
||||||
$outval.= price($objp->price_ttc,1).' '.$currencytextnoent.' '.$langs->transnoentities("TTC");
|
|
||||||
}
|
|
||||||
$outprice_ht=price($objp->price);
|
|
||||||
$outprice_ttc=price($objp->price_ttc);
|
|
||||||
$outpricebasetype=$objp->price_base_type;
|
|
||||||
$outtva_tx=$objp->tva_tx;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! empty($conf->stock->enabled) && isset($objp->stock) && $objp->fk_product_type == 0)
|
|
||||||
{
|
|
||||||
$opt.= ' - '.$langs->trans("Stock").':'.$objp->stock;
|
|
||||||
$outval.=' - '.$langs->transnoentities("Stock").':'.$objp->stock;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($objp->duration)
|
|
||||||
{
|
|
||||||
$duration_value = substr($objp->duration,0,dol_strlen($objp->duration)-1);
|
|
||||||
$duration_unit = substr($objp->duration,-1);
|
|
||||||
if ($duration_value > 1)
|
|
||||||
{
|
|
||||||
$dur=array("h"=>$langs->trans("Hours"),"d"=>$langs->trans("Days"),"w"=>$langs->trans("Weeks"),"m"=>$langs->trans("Months"),"y"=>$langs->trans("Years"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$dur=array("h"=>$langs->trans("Hour"),"d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year"));
|
|
||||||
}
|
|
||||||
$opt.= ' - '.$duration_value.' '.$langs->trans($dur[$duration_unit]);
|
|
||||||
$outval.=' - '.$duration_value.' '.$langs->transnoentities($dur[$duration_unit]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$opt.= "</option>\n";
|
|
||||||
|
|
||||||
// Add new entry
|
|
||||||
// "key" value of json key array is used by jQuery automatically as selected value
|
|
||||||
// "label" value of json key array is used by jQuery automatically as text for combo box
|
|
||||||
$outselect.=$opt;
|
|
||||||
array_push($outjson, array('key'=>$outkey, 'value'=>$outref, 'label'=>$outval, 'label2'=>$outlabel, 'desc'=>$outdesc, 'type'=>$outtype, 'price_ht'=>$outprice_ht, 'price_ttc'=>$outprice_ttc, 'pricebasetype'=>$outpricebasetype, 'tva_tx'=>$outtva_tx));
|
|
||||||
|
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
@ -1363,6 +1282,180 @@ class Form
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _construct_product_list_option(&$objp, &$opt, &$optJson, $price_level, $selected) {
|
||||||
|
global $langs,$conf,$user,$db;
|
||||||
|
|
||||||
|
$outkey='';
|
||||||
|
$outval='';
|
||||||
|
$outref='';
|
||||||
|
$outlabel='';
|
||||||
|
$outdesc='';
|
||||||
|
$outtype='';
|
||||||
|
$outprice_ht='';
|
||||||
|
$outprice_ttc='';
|
||||||
|
$outpricebasetype='';
|
||||||
|
$outtva_tx='';
|
||||||
|
$outqty=1;
|
||||||
|
$outdiscount=0;
|
||||||
|
|
||||||
|
$label=$objp->label;
|
||||||
|
if (! empty($objp->label_translated)) $label=$objp->label_translated;
|
||||||
|
if ($filterkey && $filterkey != '') $label=preg_replace('/('.preg_quote($filterkey).')/i','<strong>$1</strong>',$label,1);
|
||||||
|
|
||||||
|
$outkey=$objp->rowid;
|
||||||
|
$outref=$objp->ref;
|
||||||
|
$outlabel=$objp->label;
|
||||||
|
$outdesc=$objp->description;
|
||||||
|
$outtype=$objp->fk_product_type;
|
||||||
|
|
||||||
|
$opt = '<option value="'.$objp->rowid.'"';
|
||||||
|
$opt.= ($objp->rowid == $selected)?' selected="selected"':'';
|
||||||
|
$opt.= (!empty($objp->price_by_qty_rowid) && $objp->price_by_qty_rowid > 0)?' pbq="'.$objp->price_by_qty_rowid.'"':'';
|
||||||
|
if (! empty($conf->stock->enabled) && $objp->fk_product_type == 0 && isset($objp->stock))
|
||||||
|
{
|
||||||
|
if ($objp->stock > 0)
|
||||||
|
{
|
||||||
|
$opt.= ' style="background-color:#32CD32; color:#F5F5F5;"';
|
||||||
|
}
|
||||||
|
else if ($objp->stock <= 0)
|
||||||
|
{
|
||||||
|
$opt.= ' style="background-color:#FF0000; color:#F5F5F5;"';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$opt.= '>';
|
||||||
|
$opt.= $objp->ref.' - '.dol_trunc($label,32).' - ';
|
||||||
|
|
||||||
|
$objRef = $objp->ref;
|
||||||
|
if ($filterkey && $filterkey != '') $objRef=preg_replace('/('.preg_quote($filterkey).')/i','<strong>$1</strong>',$objRef,1);
|
||||||
|
$outval.=$objRef.' - '.dol_trunc($label,32).' - ';
|
||||||
|
|
||||||
|
$found=0;
|
||||||
|
$currencytext=$langs->trans("Currency".$conf->currency);
|
||||||
|
$currencytextnoent=$langs->transnoentities("Currency".$conf->currency);
|
||||||
|
if (dol_strlen($currencytext) > 10) $currencytext=$conf->currency; // If text is too long, we use the short code
|
||||||
|
if (dol_strlen($currencytextnoent) > 10) $currencytextnoent=$conf->currency; // If text is too long, we use the short code
|
||||||
|
|
||||||
|
// Multiprice
|
||||||
|
if ($price_level >= 1) // If we need a particular price level (from 1 to 6)
|
||||||
|
{
|
||||||
|
$sql = "SELECT price, price_ttc, price_base_type, tva_tx";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."product_price";
|
||||||
|
$sql.= " WHERE fk_product='".$objp->rowid."'";
|
||||||
|
$sql.= " AND price_level=".$price_level;
|
||||||
|
$sql.= " ORDER BY date_price";
|
||||||
|
$sql.= " DESC LIMIT 1";
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::select_produits_do search price for level '.$price_level.' sql=".$sql);
|
||||||
|
$result2 = $this->db->query($sql);
|
||||||
|
if ($result2)
|
||||||
|
{
|
||||||
|
$objp2 = $this->db->fetch_object($result2);
|
||||||
|
if ($objp2)
|
||||||
|
{
|
||||||
|
$found=1;
|
||||||
|
if ($objp2->price_base_type == 'HT')
|
||||||
|
{
|
||||||
|
$opt.= price($objp2->price,1).' '.$currencytext.' '.$langs->trans("HT");
|
||||||
|
$outval.= price($objp2->price,1).' '.$currencytextnoent.' '.$langs->transnoentities("HT");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$opt.= price($objp2->price_ttc,1).' '.$currencytext.' '.$langs->trans("TTC");
|
||||||
|
$outval.= price($objp2->price_ttc,1).' '.$currencytextnoent.' '.$langs->transnoentities("TTC");
|
||||||
|
}
|
||||||
|
$outprice_ht=price($objp2->price);
|
||||||
|
$outprice_ttc=price($objp2->price_ttc);
|
||||||
|
$outpricebasetype=$objp2->price_base_type;
|
||||||
|
$outtva_tx=$objp2->tva_tx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($this->db);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Price by quantity
|
||||||
|
if (!empty($objp->quantity) && $objp->quantity >= 1) {
|
||||||
|
$found = 1;
|
||||||
|
$outqty=$objp->quantity;
|
||||||
|
$outdiscount=$objp->remise_percent;
|
||||||
|
if ($objp->quantity == 1)
|
||||||
|
{
|
||||||
|
$opt.= price($objp->price).' '.$currencytext."/";
|
||||||
|
$outval.= price($objp->price).' '.$currencytextnoent."/";
|
||||||
|
$opt.= $langs->trans("Unit"); // Do not use strtolower because it breaks utf8 encoding
|
||||||
|
$outval.=$langs->transnoentities("Unit");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$opt.= price($objp->price).' '.$currencytext."/".$objp->quantity;
|
||||||
|
$outval.= price($objp->price).' '.$currencytextnoent."/".$objp->quantity;
|
||||||
|
$opt.= $langs->trans("Units"); // Do not use strtolower because it breaks utf8 encoding
|
||||||
|
$outval.=$langs->transnoentities("Units");
|
||||||
|
}
|
||||||
|
|
||||||
|
$outprice_ht=price($objp->price);
|
||||||
|
$outprice_ttc=price($objp->price_ttc);
|
||||||
|
$outpricebasetype=$objp->price_base_type;
|
||||||
|
$outtva_tx=$objp->tva_tx;
|
||||||
|
}
|
||||||
|
if (!empty($objp->quantity) && $objp->quantity >= 1)
|
||||||
|
{
|
||||||
|
$opt.=" (".price($objp->unitprice).' '.$currencytext."/".$langs->trans("Unit").")"; // Do not use strtolower because it breaks utf8 encoding
|
||||||
|
$outval.=" (".price($objp->unitprice).' '.$currencytextnoent."/".$langs->transnoentities("Unit").")"; // Do not use strtolower because it breaks utf8 encoding
|
||||||
|
}
|
||||||
|
if (!empty($objp->remise_percent) && $objp->remise_percent >= 1)
|
||||||
|
{
|
||||||
|
$opt.=" - ".$langs->trans("Discount")." : ".vatrate($objp->remise_percent).' %';
|
||||||
|
$outval.=" - ".$langs->transnoentities("Discount")." : ".vatrate($objp->remise_percent).' %';
|
||||||
|
}
|
||||||
|
|
||||||
|
// If level no defined or multiprice not found, we used the default price
|
||||||
|
if (! $found)
|
||||||
|
{
|
||||||
|
if ($objp->price_base_type == 'HT')
|
||||||
|
{
|
||||||
|
$opt.= price($objp->price,1).' '.$currencytext.' '.$langs->trans("HT");
|
||||||
|
$outval.= price($objp->price,1).' '.$currencytextnoent.' '.$langs->transnoentities("HT");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$opt.= price($objp->price_ttc,1).' '.$currencytext.' '.$langs->trans("TTC");
|
||||||
|
$outval.= price($objp->price_ttc,1).' '.$currencytextnoent.' '.$langs->transnoentities("TTC");
|
||||||
|
}
|
||||||
|
$outprice_ht=price($objp->price);
|
||||||
|
$outprice_ttc=price($objp->price_ttc);
|
||||||
|
$outpricebasetype=$objp->price_base_type;
|
||||||
|
$outtva_tx=$objp->tva_tx;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! empty($conf->stock->enabled) && isset($objp->stock) && $objp->fk_product_type == 0)
|
||||||
|
{
|
||||||
|
$opt.= ' - '.$langs->trans("Stock").':'.$objp->stock;
|
||||||
|
$outval.=' - '.$langs->transnoentities("Stock").':'.$objp->stock;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($objp->duration)
|
||||||
|
{
|
||||||
|
$duration_value = substr($objp->duration,0,dol_strlen($objp->duration)-1);
|
||||||
|
$duration_unit = substr($objp->duration,-1);
|
||||||
|
if ($duration_value > 1)
|
||||||
|
{
|
||||||
|
$dur=array("h"=>$langs->trans("Hours"),"d"=>$langs->trans("Days"),"w"=>$langs->trans("Weeks"),"m"=>$langs->trans("Months"),"y"=>$langs->trans("Years"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$dur=array("h"=>$langs->trans("Hour"),"d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year"));
|
||||||
|
}
|
||||||
|
$opt.= ' - '.$duration_value.' '.$langs->trans($dur[$duration_unit]);
|
||||||
|
$outval.=' - '.$duration_value.' '.$langs->transnoentities($dur[$duration_unit]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$opt.= "</option>\n";
|
||||||
|
$optJson = array('key'=>$outkey, 'value'=>$outref, 'label'=>$outval, 'label2'=>$outlabel, 'desc'=>$outdesc, 'type'=>$outtype, 'price_ht'=>$outprice_ht, 'price_ttc'=>$outprice_ttc, 'pricebasetype'=>$outpricebasetype, 'tva_tx'=>$outtva_tx, 'qty'=>$outqty, 'discount'=>$outdiscount);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return list of products for customer (in Ajax if Ajax activated or go to select_produits_fournisseurs_do)
|
* Return list of products for customer (in Ajax if Ajax activated or go to select_produits_fournisseurs_do)
|
||||||
*
|
*
|
||||||
|
|||||||
@ -79,7 +79,9 @@ if (! empty($conf->margin->enabled)) {
|
|||||||
'price_ht' => 'price_ht',
|
'price_ht' => 'price_ht',
|
||||||
'origin_price_ht_cache' => 'price_ht',
|
'origin_price_ht_cache' => 'price_ht',
|
||||||
'origin_tva_tx_cache' => 'tva_tx',
|
'origin_tva_tx_cache' => 'tva_tx',
|
||||||
'origin_price_ttc_cache' => 'price_ttc'
|
'origin_price_ttc_cache' => 'price_ttc',
|
||||||
|
'qty' => 'qty',
|
||||||
|
'remise_percent' => 'discount'
|
||||||
),
|
),
|
||||||
'update_textarea' => array(
|
'update_textarea' => array(
|
||||||
'product_desc' => 'desc'
|
'product_desc' => 'desc'
|
||||||
@ -158,7 +160,7 @@ if (! empty($conf->margin->enabled)) {
|
|||||||
<input type="hidden" id="origin_price_ttc_cache" name="origin_price_ttc_cache" value="" />
|
<input type="hidden" id="origin_price_ttc_cache" name="origin_price_ttc_cache" value="" />
|
||||||
</td>
|
</td>
|
||||||
<td align="right"><input type="text" size="3" id="qty" name="qty" value="<?php echo (GETPOST('qty')?GETPOST('qty'):1); ?>"></td>
|
<td align="right"><input type="text" size="3" id="qty" name="qty" value="<?php echo (GETPOST('qty')?GETPOST('qty'):1); ?>"></td>
|
||||||
<td align="right" nowrap="nowrap"><input type="text" size="1" value="<?php echo $buyer->remise_client; ?>" name="remise_percent">%</td>
|
<td align="right" nowrap="nowrap"><input type="text" size="1" value="<?php echo $buyer->remise_client; ?>" id="remise_percent" name="remise_percent">%</td>
|
||||||
<?php
|
<?php
|
||||||
$colspan = 4;
|
$colspan = 4;
|
||||||
if (! empty($conf->margin->enabled)) {
|
if (! empty($conf->margin->enabled)) {
|
||||||
@ -225,7 +227,9 @@ $(document).ready(function() {
|
|||||||
$.post('<?php echo DOL_URL_ROOT; ?>/product/ajax/products.php', {
|
$.post('<?php echo DOL_URL_ROOT; ?>/product/ajax/products.php', {
|
||||||
'action': 'fetch',
|
'action': 'fetch',
|
||||||
'id': $(this).val(),
|
'id': $(this).val(),
|
||||||
'price_level': <?php echo empty($buyer->price_level)?1:$buyer->price_level; ?>},
|
'price_level': <?php echo empty($buyer->price_level)?1:$buyer->price_level; ?>,
|
||||||
|
'pbq': $("option:selected", this).attr('pbq')
|
||||||
|
},
|
||||||
function(data) {
|
function(data) {
|
||||||
if (typeof data != 'undefined') {
|
if (typeof data != 'undefined') {
|
||||||
$('#product_ref').val(data.ref);
|
$('#product_ref').val(data.ref);
|
||||||
@ -237,6 +241,8 @@ $(document).ready(function() {
|
|||||||
$('#origin_tva_tx_cache').val(data.tva_tx);
|
$('#origin_tva_tx_cache').val(data.tva_tx);
|
||||||
$('#select_type').val(data.type).attr('disabled','disabled').trigger('change');
|
$('#select_type').val(data.type).attr('disabled','disabled').trigger('change');
|
||||||
//$('#price_base_type_area').show();
|
//$('#price_base_type_area').show();
|
||||||
|
$('#qty').val(data.qty);
|
||||||
|
$('#remise_percent').val(data.discount);
|
||||||
|
|
||||||
if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" && CKEDITOR.instances['product_desc'] != "undefined") {
|
if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" && CKEDITOR.instances['product_desc'] != "undefined") {
|
||||||
CKEDITOR.instances['product_desc'].setData(data.desc).focus();
|
CKEDITOR.instances['product_desc'].setData(data.desc).focus();
|
||||||
|
|||||||
@ -38,9 +38,10 @@ $type=GETPOST('type','int');
|
|||||||
$mode=GETPOST('mode','int');
|
$mode=GETPOST('mode','int');
|
||||||
$status=((GETPOST('status','int') >= 0) ? GETPOST('status','int') : -1);
|
$status=((GETPOST('status','int') >= 0) ? GETPOST('status','int') : -1);
|
||||||
$outjson=(GETPOST('outjson','int') ? GETPOST('outjson','int') : 0);
|
$outjson=(GETPOST('outjson','int') ? GETPOST('outjson','int') : 0);
|
||||||
$pricelevel=GETPOST('price_level','int');
|
$price_level=GETPOST('price_level','int');
|
||||||
$action=GETPOST('action', 'alpha');
|
$action=GETPOST('action', 'alpha');
|
||||||
$id=GETPOST('id', 'int');
|
$id=GETPOST('id', 'int');
|
||||||
|
$price_by_qty_rowid=GETPOST('pbq', 'int');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* View
|
* View
|
||||||
@ -65,11 +66,37 @@ if (! empty($action) && $action == 'fetch' && ! empty($id))
|
|||||||
$outlabel=$object->label;
|
$outlabel=$object->label;
|
||||||
$outdesc=$object->description;
|
$outdesc=$object->description;
|
||||||
$outtype=$object->type;
|
$outtype=$object->type;
|
||||||
|
$outqty=1;
|
||||||
|
$outdiscount=0;
|
||||||
|
|
||||||
$found=false;
|
$found=false;
|
||||||
|
|
||||||
|
// Price by qty
|
||||||
|
if (!empty($price_by_qty_rowid) && $price_by_qty_rowid >= 1) // If we need a particular price related to qty
|
||||||
|
{
|
||||||
|
$sql = "SELECT price, price_ttc, qty_min, remise_percent";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."product_price_by_qty ";
|
||||||
|
$sql.= " WHERE rowid=".$price_by_qty_rowid."";
|
||||||
|
|
||||||
|
$result = $db->query($sql);
|
||||||
|
if ($result)
|
||||||
|
{
|
||||||
|
$objp = $db->fetch_object($result);
|
||||||
|
if ($objp)
|
||||||
|
{
|
||||||
|
$found=true;
|
||||||
|
$outprice_ht=price($objp->price);
|
||||||
|
$outprice_ttc=price($objp->price_ttc);
|
||||||
|
$outpricebasetype=$object->price_base_type;
|
||||||
|
$outtva_tx=$object->tva_tx;
|
||||||
|
$outqty=$objp->qty_min;
|
||||||
|
$outdiscount=$objp->remise_percent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Multiprice
|
// Multiprice
|
||||||
if (isset($price_level) && $price_level >= 1) // If we need a particular price level (from 1 to 6)
|
if (! $found && isset($price_level) && $price_level >= 1) // If we need a particular price level (from 1 to 6)
|
||||||
{
|
{
|
||||||
$sql = "SELECT price, price_ttc, price_base_type, tva_tx";
|
$sql = "SELECT price, price_ttc, price_base_type, tva_tx";
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_price ";
|
$sql.= " FROM ".MAIN_DB_PREFIX."product_price ";
|
||||||
@ -78,10 +105,10 @@ if (! empty($action) && $action == 'fetch' && ! empty($id))
|
|||||||
$sql.= " ORDER BY date_price";
|
$sql.= " ORDER BY date_price";
|
||||||
$sql.= " DESC LIMIT 1";
|
$sql.= " DESC LIMIT 1";
|
||||||
|
|
||||||
$result = $this->db->query($sql);
|
$result = $db->query($sql);
|
||||||
if ($result)
|
if ($result)
|
||||||
{
|
{
|
||||||
$objp = $this->db->fetch_object($result);
|
$objp = $db->fetch_object($result);
|
||||||
if ($objp)
|
if ($objp)
|
||||||
{
|
{
|
||||||
$found=true;
|
$found=true;
|
||||||
@ -101,7 +128,7 @@ if (! empty($action) && $action == 'fetch' && ! empty($id))
|
|||||||
$outtva_tx=$object->tva_tx;
|
$outtva_tx=$object->tva_tx;
|
||||||
}
|
}
|
||||||
|
|
||||||
$outjson = array('ref'=>$outref, 'label'=>$outlabel, 'desc'=>$outdesc, 'type'=>$outtype, 'price_ht'=>$outprice_ht, 'price_ttc'=>$outprice_ttc, 'pricebasetype'=>$outpricebasetype, 'tva_tx'=>$outtva_tx);
|
$outjson = array('ref'=>$outref, 'label'=>$outlabel, 'desc'=>$outdesc, 'type'=>$outtype, 'price_ht'=>$outprice_ht, 'price_ttc'=>$outprice_ttc, 'pricebasetype'=>$outpricebasetype, 'tva_tx'=>$outtva_tx, 'qty'=>$outqty, 'discount'=>$outdiscount);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo json_encode($outjson);
|
echo json_encode($outjson);
|
||||||
|
|||||||
@ -366,7 +366,7 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
|
|||||||
print '<td><input size="5" type="text" value="'.$prices['qty_min'].'" name="qty_min"></td>';
|
print '<td><input size="5" type="text" value="'.$prices['qty_min'].'" name="qty_min"></td>';
|
||||||
print '<td align="right" colspan="2"><input size="10" type="text" value="'.$prices['price'].'" name="price"> '.$object->price_base_type.'</td>';
|
print '<td align="right" colspan="2"><input size="10" type="text" value="'.$prices['price'].'" name="price"> '.$object->price_base_type.'</td>';
|
||||||
//print '<td align="right"> </td>';
|
//print '<td align="right"> </td>';
|
||||||
print '<td align="right"><input size="5" type="text" value="'.$prices['remise_percent'].'" name="remise_percent">< %/td>';
|
print '<td align="right"><input size="5" type="text" value="'.$prices['remise_percent'].'" name="remise_percent"> %</td>';
|
||||||
print '<td align="center"><input type="submit" value="'.$langs->trans("Modify").'" class="button"></td>';
|
print '<td align="center"><input type="submit" value="'.$langs->trans("Modify").'" class="button"></td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user