Fix: Fix a serious database default. Table llx_product_fournisseur was
linked with llx_product_fournisseur_price with a link 1-1 so was useless. I removed it. This reduce a lot of sophisticated code and will make import of prices easier. This also increase speed.
This commit is contained in:
parent
98ab396837
commit
47bb2171e0
@ -1207,16 +1207,14 @@ class Form
|
||||
$langs->load('stocks');
|
||||
|
||||
$sql = "SELECT p.rowid, p.label, p.ref, p.price, p.duration,";
|
||||
$sql.= " pf.ref_fourn,";
|
||||
$sql.= " pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.quantity, pfp.unitprice,";
|
||||
$sql.= " pfp.ref_fourn, pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.quantity, pfp.unitprice,";
|
||||
$sql.= " s.nom";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur as pf ON p.rowid = pf.fk_product";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON pf.fk_soc = s.rowid";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON pf.rowid = pfp.fk_product_fournisseur";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON pfp.fk_soc = s.rowid";
|
||||
$sql.= " WHERE p.entity = ".$conf->entity;
|
||||
$sql.= " AND p.tobuy = 1";
|
||||
if ($socid) $sql.= " AND pf.fk_soc = ".$socid;
|
||||
if ($socid) $sql.= " AND pfp.fk_soc = ".$socid;
|
||||
if (strval($filtertype) != '') $sql.=" AND p.fk_product_type=".$filtertype;
|
||||
if (! empty($filtre)) $sql.=" ".$filtre;
|
||||
// Add criteria on ref/label
|
||||
@ -1224,14 +1222,14 @@ class Form
|
||||
{
|
||||
if (! empty($conf->global->PRODUCT_DONOTSEARCH_ANYWHERE))
|
||||
{
|
||||
$sql.=" AND (pf.ref_fourn LIKE '".$filterkey."%' OR p.ref LIKE '".$filterkey."%' OR p.label LIKE '".$filterkey."%')";
|
||||
$sql.=" AND (pfp.ref_fourn LIKE '".$filterkey."%' OR p.ref LIKE '".$filterkey."%' OR p.label LIKE '".$filterkey."%')";
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql.=" AND (pf.ref_fourn LIKE '%".$filterkey."%' OR p.ref LIKE '%".$filterkey."%' OR p.label LIKE '%".$filterkey."%')";
|
||||
$sql.=" AND (pfp.ref_fourn LIKE '%".$filterkey."%' OR p.ref LIKE '%".$filterkey."%' OR p.label LIKE '%".$filterkey."%')";
|
||||
}
|
||||
}
|
||||
$sql.= " ORDER BY pf.ref_fourn DESC";
|
||||
$sql.= " ORDER BY pfp.ref_fourn DESC";
|
||||
|
||||
// Build output string
|
||||
$outselect='';
|
||||
@ -1354,17 +1352,16 @@ class Form
|
||||
$langs->load('stocks');
|
||||
|
||||
$sql = "SELECT p.rowid, p.label, p.ref, p.price, p.duration,";
|
||||
$sql.= " pf.ref_fourn,";
|
||||
$sql.= " pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.quantity, pfp.unitprice,";
|
||||
$sql.= " pfp.ref_fourn, pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.quantity, pfp.unitprice,";
|
||||
$sql.= " s.nom";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur as pf ON p.rowid = pf.fk_product";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = pf.fk_soc";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON pf.rowid = pfp.fk_product_fournisseur";
|
||||
$sql.= " WHERE p.tobuy = 1";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON pfp.fk_soc = s.rowid";
|
||||
$sql.= " WHERE p.entity = ".$conf->entity;
|
||||
$sql.= " AND p.tobuy = 1";
|
||||
$sql.= " AND s.fournisseur = 1";
|
||||
$sql.= " AND p.rowid = ".$productid;
|
||||
$sql.= " ORDER BY s.nom, pf.ref_fourn DESC";
|
||||
$sql.= " ORDER BY s.nom, pfp.ref_fourn DESC";
|
||||
|
||||
dol_syslog("Form::select_product_fourn_price sql=".$sql,LOG_DEBUG);
|
||||
$result=$this->db->query($sql);
|
||||
|
||||
@ -78,12 +78,14 @@ class Fournisseur extends Societe
|
||||
return $num;
|
||||
}
|
||||
|
||||
/**
|
||||
* FIXME This returns number of prices, not number of products. Is it what we want ?
|
||||
*/
|
||||
function NbProduct()
|
||||
{
|
||||
$sql = "SELECT count(pf.rowid)";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur as pf,";
|
||||
$sql.= " ".MAIN_DB_PREFIX."product_fournisseur_price as ppf";
|
||||
$sql .= " WHERE fk_soc = ".$this->id." AND ppf.fk_product_fournisseur = pf.rowid";
|
||||
$sql = "SELECT count(pfp.rowid)";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||
$sql .= " WHERE pfp.fk_soc = ".$this->id;
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ( $resql )
|
||||
|
||||
@ -1822,7 +1822,7 @@ class CommandeFournisseurLigne extends OrderLine
|
||||
var $libelle; // Label produit
|
||||
var $product_desc; // Description produit
|
||||
|
||||
// From llx_product_fournisseur
|
||||
// From llx_product_fournisseur_price
|
||||
var $ref_fourn; // Ref supplier
|
||||
|
||||
|
||||
|
||||
@ -384,10 +384,8 @@ class FactureFournisseur extends Facture
|
||||
$sql.= ', f.localtax1_tx, f.localtax2_tx, f.total_localtax1, f.total_localtax2 ';
|
||||
$sql.= ', f.total_ht, f.tva as total_tva, f.total_ttc, f.fk_product, f.product_type';
|
||||
$sql.= ', p.rowid as product_id, p.ref as product_ref, p.label as label, p.description as product_desc';
|
||||
//$sql.= ', pf.ref_fourn';
|
||||
$sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn_det as f';
|
||||
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON f.fk_product = p.rowid';
|
||||
//$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_fournisseur as pf ON f.fk_product = pf.fk_product';
|
||||
$sql.= ' WHERE fk_facture_fourn='.$this->id;
|
||||
|
||||
dol_syslog("FactureFournisseur::fetch_lines sql=".$sql, LOG_DEBUG);
|
||||
|
||||
@ -72,87 +72,31 @@ class ProductFournisseur extends Product
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
// Search all links
|
||||
$sql = "SELECT rowid";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur";
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
|
||||
$sql.= " WHERE fk_product = ".$this->id." AND fk_soc = ".$id_fourn;
|
||||
|
||||
dol_syslog(get_class($this)."::remove_fournisseur sql=".$sql);
|
||||
$resql=$this->db->query($sql);
|
||||
if ($resql)
|
||||
$resql2=$this->db->query($sql);
|
||||
if (! $resql2)
|
||||
{
|
||||
// For each link, delete price line
|
||||
while ($obj=$this->db->fetch_object($resql))
|
||||
{
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
|
||||
$sql.= " WHERE fk_product_fournisseur = ".$obj->rowid;
|
||||
|
||||
dol_syslog(get_class($this)."::remove_fournisseur sql=".$sql);
|
||||
$resql2=$this->db->query($sql);
|
||||
if (! $resql2)
|
||||
{
|
||||
$this->error=$this->db->lasterror();
|
||||
dol_syslog(get_class($this)."::remove_fournisseur ".$this->error, LOG_ERR);
|
||||
$ok=0;
|
||||
}
|
||||
}
|
||||
|
||||
// Now delete all link supplier-product (they have no more childs)
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur";
|
||||
$sql.= " WHERE fk_product = ".$this->id." AND fk_soc = ".$id_fourn;
|
||||
|
||||
dol_syslog(get_class($this)."::remove_fournisseur sql=".$sql);
|
||||
$resql=$this->db->query($sql);
|
||||
if (! $resql)
|
||||
{
|
||||
$this->error=$this->db->lasterror();
|
||||
dol_syslog(get_class($this)."::remove_fournisseur ".$this->error, LOG_ERR);
|
||||
$ok=0;
|
||||
}
|
||||
|
||||
if ($ok)
|
||||
{
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
$this->error=$this->db->lasterror();
|
||||
dol_syslog(get_class($this)."::remove_fournisseur ".$this->error, LOG_ERR);
|
||||
$ok=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->rollback();
|
||||
dol_print_error($this->db);
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove supplier product
|
||||
*
|
||||
* @param rowid Product id
|
||||
* @return int < 0 if error, > 0 if ok
|
||||
*/
|
||||
function remove_product_fournisseur($rowid)
|
||||
{
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur";
|
||||
$sql.= " WHERE rowid = ".$rowid;
|
||||
|
||||
dol_syslog(get_class($this)."::remove_product_fournisseur sql=".$sql);
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql)
|
||||
|
||||
if ($ok)
|
||||
{
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove a price for a couple supplier-product
|
||||
*
|
||||
@ -172,54 +116,8 @@ class ProductFournisseur extends Product
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
// Remove all entries with no childs
|
||||
$sql = "SELECT pf.rowid";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur as pf";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON pfp.fk_product_fournisseur = pf.rowid";
|
||||
$sql.= " WHERE pfp.rowid IS NULL";
|
||||
$sql.= " AND pf.entity = ".$conf->entity;
|
||||
|
||||
dol_syslog(get_class($this)."::remove_product_fournisseur_price sql=".$sql);
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
$ok=1;
|
||||
|
||||
while ($obj=$this->db->fetch_object($resql))
|
||||
{
|
||||
$rowidpf=$obj->rowid;
|
||||
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur";
|
||||
$sql.= " WHERE rowid = ".$rowidpf;
|
||||
|
||||
dol_syslog(get_class($this)."::remove_product_fournisseur_price sql=".$sql);
|
||||
$resql2 = $this->db->query($sql);
|
||||
if (! $resql2)
|
||||
{
|
||||
$this->error=$this->db->lasterror();
|
||||
dol_syslog(get_class($this)."::remove_product_fournisseur_price ".$this->error,LOG_ERR);
|
||||
$ok=0;
|
||||
}
|
||||
}
|
||||
|
||||
if ($ok)
|
||||
{
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -3;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=$this->db->lasterror();
|
||||
dol_syslog(get_class($this)."::remove_product_fournisseur_price ".$this->error,LOG_ERR);
|
||||
$this->db->rollback();
|
||||
return -2;
|
||||
}
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -234,16 +132,18 @@ class ProductFournisseur extends Product
|
||||
/**
|
||||
* Modify the purchase price for a supplier
|
||||
*
|
||||
* @param qty Min quantity for which price is valid
|
||||
* @param buyprice Purchase price for the quantity min
|
||||
* @param user Object user user made changes
|
||||
* @param price_base_type HT or TTC
|
||||
* @param fourn Supplier
|
||||
* @param availability Product availability
|
||||
* @param int $qty Min quantity for which price is valid
|
||||
* @param float $buyprice Purchase price for the quantity min
|
||||
* @param User $user Object user user made changes
|
||||
* @param string $price_base_type HT or TTC
|
||||
* @param Societe $fourn Supplier
|
||||
* @param int $availability Product availability
|
||||
* @param string $ref_fourn Supplier ref
|
||||
* @return int >0 if KO, >0 if OK
|
||||
*/
|
||||
function update_buyprice($qty, $buyprice, $user, $price_base_type='HT', $fourn, $availability)
|
||||
function update_buyprice($qty, $buyprice, $user, $price_base_type, $fourn, $availability, $ref_fourn)
|
||||
{
|
||||
global $mysoc;
|
||||
global $conf,$mysoc;
|
||||
|
||||
// Clean parameter
|
||||
$buyprice=price2num($buyprice);
|
||||
@ -259,11 +159,6 @@ class ProductFournisseur extends Product
|
||||
{
|
||||
$sql.= " WHERE rowid = ".$this->product_fourn_price_id;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql.= " WHERE fk_product_fournisseur = ".$this->product_fourn_id;
|
||||
$sql.= " AND quantity = ".$qty;
|
||||
}
|
||||
|
||||
$resql=$this->db->query($sql);
|
||||
if ($resql)
|
||||
@ -279,14 +174,17 @@ class ProductFournisseur extends Product
|
||||
|
||||
// Ajoute prix courant du fournisseur pour cette quantite
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price(";
|
||||
$sql.= "datec, fk_product_fournisseur, fk_user, price, quantity, unitprice, fk_availability)";
|
||||
$sql.= "datec, fk_product, fk_soc, ref_fourn, fk_user, price, quantity, unitprice, fk_availability, entity)";
|
||||
$sql.= " values('".$this->db->idate($now)."',";
|
||||
$sql.= " ".$this->product_fourn_id.",";
|
||||
$sql.= " ".$this->id.",";
|
||||
$sql.= " ".$fourn->id.",";
|
||||
$sql.= " '".$this->db->escape($ref_fourn)."',";
|
||||
$sql.= " ".$user->id.",";
|
||||
$sql.= " ".price2num($buyprice).",";
|
||||
$sql.= " ".$qty.",";
|
||||
$sql.= " ".$unitBuyPrice.",";
|
||||
$sql.= " ".$availability;
|
||||
$sql.= " ".$availability.",";
|
||||
$sql.= $conf->entity;
|
||||
$sql.=")";
|
||||
|
||||
dol_syslog(get_class($this)."::update_buyprice sql=".$sql);
|
||||
@ -295,7 +193,7 @@ class ProductFournisseur extends Product
|
||||
$error++;
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
/*if (! $error)
|
||||
{
|
||||
// Ajoute modif dans table log
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price_log(";
|
||||
@ -313,6 +211,7 @@ class ProductFournisseur extends Product
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
@ -335,44 +234,6 @@ class ProductFournisseur extends Product
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Changes the purchase price for a supplier of the product in the reference supplier
|
||||
*
|
||||
* @param id_fourn Supplier ID
|
||||
* @param product_fourn_ref Supplier ref product
|
||||
* @param qty Amount for which the price is valid
|
||||
* @param buyprice Purchase price for the quantity
|
||||
* @param user Object user user made changes
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function UpdateBuyPriceByFournRef($id_fourn, $product_fourn_ref, $qty, $buyprice, $user, $price_base_type='HT')
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$result=0;
|
||||
|
||||
// Recherche id produit pour cette ref et fournisseur
|
||||
$sql = "SELECT fk_product";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur";
|
||||
$sql.= " WHERE fk_soc = '".$id_fourn."'";
|
||||
$sql.= " AND ref_fourn = '".$product_fourn_ref."'";
|
||||
$sql.= " AND entity = ".$conf->entity;
|
||||
|
||||
$resql=$this->db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
if ($obj = $this->db->fetch_object($resql))
|
||||
{
|
||||
// Met a jour prix pour la qte
|
||||
$this->id = $obj->fk_product;
|
||||
$result = $this->update_buyprice($id_fourn, $qty, $buyprice, $user, $price_base_type);
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load information about a provider
|
||||
*
|
||||
@ -387,7 +248,7 @@ class ProductFournisseur extends Product
|
||||
if (empty($fournid)) return -1;
|
||||
|
||||
$sql = "SELECT rowid, ref_fourn";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur ";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
|
||||
$sql.= " WHERE fk_product = ".$this->id;
|
||||
$sql.= " AND fk_soc = ".$fournid;
|
||||
$sql.= " AND entity = ".$conf->entity;
|
||||
@ -398,7 +259,7 @@ class ProductFournisseur extends Product
|
||||
{
|
||||
$result = $this->db->fetch_array($result);
|
||||
$this->ref_fourn = $result["ref_fourn"];
|
||||
$this->product_fourn_id = $result["rowid"];
|
||||
$this->product_fourn_price_id = $result["rowid"];
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
@ -417,12 +278,10 @@ class ProductFournisseur extends Product
|
||||
*/
|
||||
function fetch_product_fournisseur_price($rowid)
|
||||
{
|
||||
$sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice, pfp.fk_availability";
|
||||
$sql.= ", pf.rowid as product_fourn_id, pf.fk_soc, pf.ref_fourn, pf.fk_product";
|
||||
$sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice, pfp.fk_availability,";
|
||||
$sql.= " pfp.fk_soc, pfp.ref_fourn, pfp.fk_product";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||
$sql.= ", ".MAIN_DB_PREFIX."product_fournisseur as pf";
|
||||
$sql.= " WHERE pfp.rowid = ".$rowid;
|
||||
$sql.= " AND pf.rowid = pfp.fk_product_fournisseur";
|
||||
|
||||
dol_syslog(get_class($this)."::fetch_product_fournisseur_price sql=".$sql, LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
@ -432,7 +291,6 @@ class ProductFournisseur extends Product
|
||||
if ($obj)
|
||||
{
|
||||
$this->product_fourn_price_id = $rowid;
|
||||
$this->product_fourn_id = $obj->product_fourn_id;
|
||||
$this->fourn_ref = $obj->ref_fourn;
|
||||
$this->fourn_price = $obj->price;
|
||||
$this->fourn_qty = $obj->quantity;
|
||||
@ -462,26 +320,24 @@ class ProductFournisseur extends Product
|
||||
* @param int $rowid id du produit
|
||||
* @return array Array of ProductFournisseur
|
||||
*/
|
||||
function fetch_product_fournisseur($prodid)
|
||||
function list_product_fournisseur_price($prodid)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
// Suppliers list
|
||||
$sql = "SELECT s.nom as supplier_name, ";
|
||||
$sql.= " s.rowid as fourn_id,";
|
||||
$sql.= " pf.ref_fourn,";
|
||||
$sql.= " pfp.ref_fourn,";
|
||||
$sql.= " pfp.rowid as product_fourn_pri_id, ";
|
||||
$sql.= " pf.rowid as product_fourn_id, ";
|
||||
$sql.= " pfp.price, pfp.quantity, pfp.unitprice, pfp.fk_availability";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
|
||||
$sql.= " INNER JOIN ".MAIN_DB_PREFIX."product_fournisseur as pf ON pf.fk_soc = s.rowid ";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||
$sql.= " ON pf.rowid = pfp.fk_product_fournisseur";
|
||||
$sql.= " INNER JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||
$sql.= " ON pfp.fk_soc = s.rowid";
|
||||
$sql.= " WHERE s.entity = ".$conf->entity;
|
||||
$sql.= " AND pf.fk_product = ".$prodid;
|
||||
$sql.= " AND pfp.fk_product = ".$prodid;
|
||||
$sql.= " ORDER BY s.nom, pfp.quantity";
|
||||
|
||||
dol_syslog(get_class($this)."::fetch_product_fournisseur sql=".$sql, LOG_DEBUG);
|
||||
dol_syslog(get_class($this)."::list_product_fournisseur_price sql=".$sql, LOG_DEBUG);
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
|
||||
@ -526,7 +382,7 @@ class ProductFournisseur extends Product
|
||||
else
|
||||
{
|
||||
$this->error=$this->db->error();
|
||||
dol_syslog(get_class($this)."::fetch_product_fournisseur error=".$this->error, LOG_ERR);
|
||||
dol_syslog(get_class($this)."::list_product_fournisseur_price error=".$this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -551,18 +407,15 @@ class ProductFournisseur extends Product
|
||||
$this->fourn_name = '';
|
||||
$this->id = '';
|
||||
|
||||
$sql = "SELECT s.nom as supplier_name, ";
|
||||
$sql = "SELECT s.nom as supplier_name,";
|
||||
$sql.= " s.rowid as fourn_id,";
|
||||
$sql.= " pf.ref_fourn,";
|
||||
$sql.= " pfp.rowid as product_fourn_pri_id, ";
|
||||
$sql.= " pf.rowid as product_fourn_id, ";
|
||||
$sql.= " pfp.ref_fourn,";
|
||||
$sql.= " pfp.rowid as product_fourn_price_id,";
|
||||
$sql.= " pfp.price, pfp.quantity, pfp.unitprice";
|
||||
$sql.= " FROM (".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."product_fournisseur as pf)";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||
$sql.= " ON pf.rowid = pfp.fk_product_fournisseur";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||
$sql.= " WHERE s.entity = ".$conf->entity;
|
||||
$sql.= " AND pf.fk_product = ".$prodid;
|
||||
$sql.= " AND pf.fk_soc = s.rowid";
|
||||
$sql.= " AND pfp.fk_product = ".$prodid;
|
||||
$sql.= " AND pfp.fk_soc = s.rowid";
|
||||
$sql.= " ORDER BY pfp.unitprice";
|
||||
$sql.= $this->db->plimit(1);
|
||||
|
||||
@ -572,8 +425,7 @@ class ProductFournisseur extends Product
|
||||
if ($resql)
|
||||
{
|
||||
$record = $this->db->fetch_array($resql);
|
||||
$this->product_fourn_price_id = $record["product_fourn_pri_id"];
|
||||
$this->product_fourn_id = $record["product_fourn_id"];
|
||||
$this->product_fourn_price_id = $record["product_fourn_price_id"];
|
||||
$this->fourn_ref = $record["ref_fourn"];
|
||||
$this->fourn_price = $record["price"];
|
||||
$this->fourn_qty = $record["quantity"];
|
||||
|
||||
@ -456,7 +456,9 @@ if ($action == 'addline')
|
||||
|
||||
if ($_POST['idprodfournprice']) // > 0 or -1
|
||||
{
|
||||
$product=new Product($db);
|
||||
$idprod=$product->get_buyprice($_POST['idprodfournprice'], $_POST['qty']);
|
||||
|
||||
if ($idprod > 0)
|
||||
{
|
||||
$result=$product->fetch($idprod);
|
||||
@ -465,8 +467,6 @@ if ($action == 'addline')
|
||||
// $label = '['.$product->ref.'] - '. $product->libelle;
|
||||
$label = $product->libelle;
|
||||
|
||||
|
||||
|
||||
$tvatx=get_default_tva($societe,$mysoc,$product->id);
|
||||
|
||||
$localtax1tx= get_localtax($tvatx, 1, $societe);
|
||||
|
||||
@ -88,17 +88,15 @@ if ($fourn_id)
|
||||
}
|
||||
|
||||
$sql = "SELECT p.rowid, p.label, p.ref, p.fk_product_type,";
|
||||
$sql .= " pf.fk_soc, pf.ref_fourn,";
|
||||
$sql .= " ppf.price as price, ppf.quantity as qty, ppf.unitprice,";
|
||||
$sql .= " ppf.fk_soc, ppf.ref_fourn, ppf.price as price, ppf.quantity as qty, ppf.unitprice,";
|
||||
$sql .= " s.rowid as socid, s.nom";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."product as p";
|
||||
if ($catid)
|
||||
{
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."categorie_product as cp ON cp.fk_product = p.rowid";
|
||||
}
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur as pf ON p.rowid = pf.fk_product";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = pf.fk_soc";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as ppf ON ppf.fk_product_fournisseur = pf.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as ppf ON p.rowid = ppf.fk_product";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON ppf.fk_soc = s.rowid";
|
||||
|
||||
if ($_POST["mode"] == 'search')
|
||||
{
|
||||
@ -118,7 +116,7 @@ else
|
||||
}
|
||||
if ($sRefSupplier)
|
||||
{
|
||||
$sql .= " AND pf.ref_fourn like '%".$sRefSupplier."%'";
|
||||
$sql .= " AND ppf.ref_fourn like '%".$sRefSupplier."%'";
|
||||
}
|
||||
if ($snom)
|
||||
{
|
||||
@ -128,11 +126,10 @@ else
|
||||
{
|
||||
$sql .= " AND cp.fk_categorie = ".$catid;
|
||||
}
|
||||
|
||||
}
|
||||
if ($fourn_id > 0)
|
||||
{
|
||||
$sql .= " AND p.rowid = pf.fk_product AND pf.fk_soc = ".$fourn_id;
|
||||
$sql .= " AND ppf.fk_soc = ".$fourn_id;
|
||||
}
|
||||
$sql .= " ORDER BY ".$sortfield." ".$sortorder;
|
||||
$sql .= $db->plimit($limit + 1 ,$offset);
|
||||
|
||||
@ -48,3 +48,19 @@ INSERT INTO llx_c_paper_format (rowid, code, label, width, height, unit, active)
|
||||
INSERT INTO llx_c_paper_format (rowid, code, label, width, height, unit, active) VALUES (220, 'CAP5', 'Format Canadian P5', '140', '215', 'mm', 1);
|
||||
INSERT INTO llx_c_paper_format (rowid, code, label, width, height, unit, active) VALUES (225, 'CAP6', 'Format Canadian P6', '107', '140', 'mm', 1);
|
||||
|
||||
|
||||
|
||||
ALTER TABLE llx_product_fournisseur_price ADD COLUMN fk_product integer after tms;
|
||||
ALTER TABLE llx_product_fournisseur_price ADD COLUMN fk_soc integer after fk_product;
|
||||
ALTER TABLE llx_product_fournisseur_price ADD COLUMN ref_fourn varchar(30) after fk_soc;
|
||||
ALTER TABLE llx_product_fournisseur_price ADD COLUMN entity integer DEFAULT 1 NOT NULL;
|
||||
|
||||
UPDATE llx_product_fournisseur_price as a, llx_product_fournisseur as b SET a.fk_product = b.fk_product, a.fk_soc = b.fk_soc, a.ref_fourn = b.ref_fourn, a.entity = b.entity WHERE a.fk_product_fournisseur = b.rowid AND (a.fk_product IS NULL OR a.fk_soc IS NULL OR a.fk_product = 0 OR a.fk_soc = 0);
|
||||
|
||||
ALTER TABLE llx_product_fournisseur_price ADD UNIQUE INDEX uk_product_fournisseur_price_ref (ref_fourn, fk_soc, entity);
|
||||
ALTER TABLE llx_product_fournisseur_price ADD INDEX idx_product_fourn_price_fk_product (fk_product, entity);
|
||||
ALTER TABLE llx_product_fournisseur_price ADD INDEX idx_product_fourn_price_fk_soc (fk_soc, entity);
|
||||
ALTER TABLE llx_product_fournisseur_price ADD CONSTRAINT fk_product_fournisseur_price_fk_product FOREIGN KEY (fk_product) REFERENCES llx_product (rowid);
|
||||
|
||||
ALTER TABLE llx_product_fournisseur_price DROP FOREIGN KEY fk_product_fournisseur_price_fk_product_fournisseur;
|
||||
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
-- ============================================================================
|
||||
-- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
|
||||
--
|
||||
-- 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
|
||||
-- the Free Software Foundation; either version 2 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
--
|
||||
-- ============================================================================
|
||||
|
||||
|
||||
ALTER TABLE llx_product_fournisseur ADD UNIQUE INDEX uk_product_fournisseur_ref (ref_fourn, fk_soc, entity);
|
||||
|
||||
ALTER TABLE llx_product_fournisseur ADD INDEX idx_product_fourn_fk_product (fk_product, entity);
|
||||
ALTER TABLE llx_product_fournisseur ADD INDEX idx_product_fourn_fk_soc (fk_soc, entity);
|
||||
|
||||
ALTER TABLE llx_product_fournisseur ADD CONSTRAINT fk_product_fournisseur_fk_product FOREIGN KEY (fk_product) REFERENCES llx_product (rowid);
|
||||
@ -1,39 +0,0 @@
|
||||
-- ============================================================================
|
||||
-- Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2009 Regis Houssin <regis@dolibarr.fr>
|
||||
--
|
||||
-- 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
|
||||
-- the Free Software Foundation; either version 2 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
--
|
||||
-- ============================================================================
|
||||
|
||||
create table llx_product_fournisseur
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
datec datetime,
|
||||
tms timestamp,
|
||||
fk_product integer,
|
||||
fk_soc integer,
|
||||
ref_fourn varchar(30),
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
fk_user_author integer
|
||||
)ENGINE=innodb;
|
||||
|
||||
--
|
||||
-- List of codes for the field entity
|
||||
--
|
||||
-- 1 : first company product
|
||||
-- 2 : second company product
|
||||
-- 3 : etc...
|
||||
--
|
||||
@ -19,9 +19,16 @@
|
||||
|
||||
|
||||
ALTER TABLE llx_product_fournisseur_price ADD INDEX idx_product_fournisseur_price_fk_user (fk_user);
|
||||
ALTER TABLE llx_product_fournisseur_price ADD INDEX idx_product_fournisseur_price_fk_product_fournisseur (fk_product_fournisseur);
|
||||
--ALTER TABLE llx_product_fournisseur_price ADD INDEX idx_product_fournisseur_price_fk_product_fournisseur (fk_product_fournisseur);
|
||||
|
||||
ALTER TABLE llx_product_fournisseur_price ADD CONSTRAINT fk_product_fournisseur_price_fk_user FOREIGN KEY (fk_user) REFERENCES llx_user (rowid);
|
||||
ALTER TABLE llx_product_fournisseur_price ADD CONSTRAINT fk_product_fournisseur_price_fk_product_fournisseur FOREIGN KEY (fk_product_fournisseur) REFERENCES llx_product_fournisseur (rowid);
|
||||
--ALTER TABLE llx_product_fournisseur_price ADD CONSTRAINT fk_product_fournisseur_price_fk_product_fournisseur FOREIGN KEY (fk_product_fournisseur) REFERENCES llx_product_fournisseur (rowid);
|
||||
|
||||
-- Added to remove table llx_product_fournisseur
|
||||
|
||||
ALTER TABLE llx_product_fournisseur_price ADD UNIQUE INDEX uk_product_fournisseur_price_ref (ref_fourn, fk_soc, entity);
|
||||
|
||||
ALTER TABLE llx_product_fournisseur_price ADD INDEX idx_product_fourn_price_fk_product (fk_product, entity);
|
||||
ALTER TABLE llx_product_fournisseur_price ADD INDEX idx_product_fourn_price_fk_soc (fk_soc, entity);
|
||||
|
||||
ALTER TABLE llx_product_fournisseur_price ADD CONSTRAINT fk_product_fournisseur_price_fk_product FOREIGN KEY (fk_product) REFERENCES llx_product (rowid);
|
||||
|
||||
@ -22,11 +22,14 @@ create table llx_product_fournisseur_price
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
datec datetime,
|
||||
tms timestamp,
|
||||
fk_product_fournisseur integer NOT NULL,
|
||||
fk_product_fournisseur integer NOT NULL, -- deprecated
|
||||
fk_product integer,
|
||||
fk_soc integer,
|
||||
ref_fourn varchar(30),
|
||||
fk_availability integer,
|
||||
price double(24,8) DEFAULT 0,
|
||||
quantity double,
|
||||
unitprice double(24,8) DEFAULT 0,
|
||||
fk_user integer
|
||||
|
||||
fk_user integer,
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -310,7 +310,7 @@ class ActionsCardService extends Product
|
||||
if ($_GET["fourn_id"] > 0)
|
||||
{
|
||||
$fourn_id = $_GET["fourn_id"];
|
||||
$sql.= ", ".MAIN_DB_PREFIX."product_fournisseur as pf";
|
||||
$sql.= ", ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||
}
|
||||
$sql.= " WHERE p.entity = ".$conf->entity;
|
||||
if ($search_categ) $sql.= " AND p.rowid = cp.fk_product"; // Join for the needed table to filter by categ
|
||||
@ -335,7 +335,7 @@ class ActionsCardService extends Product
|
||||
}
|
||||
if ($fourn_id > 0)
|
||||
{
|
||||
$sql.= " AND p.rowid = pf.fk_product AND pf.fk_soc = ".$fourn_id;
|
||||
$sql.= " AND p.rowid = pfp.fk_product AND pfp.fk_soc = ".$fourn_id;
|
||||
}
|
||||
// Insert categ filter
|
||||
if ($search_categ)
|
||||
|
||||
@ -37,7 +37,7 @@ class Product extends CommonObject
|
||||
public $element='product';
|
||||
public $table_element='product';
|
||||
public $fk_element='fk_product';
|
||||
public $childtables=array('propaldet','commandedet','facturedet','contratdet','product_fournisseur');
|
||||
public $childtables=array('propaldet','commandedet','facturedet','contratdet','product_fournisseur_price');
|
||||
protected $isnolinkedbythird = 1; // No field fk_soc
|
||||
protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
|
||||
|
||||
@ -519,11 +519,11 @@ class Product extends CommonObject
|
||||
$this->db->begin();
|
||||
|
||||
// Delete supplier prices log
|
||||
if (! $error)
|
||||
/*if (! $error)
|
||||
{
|
||||
$sql = 'DELETE pfpl';
|
||||
$sql.= ' FROM '.MAIN_DB_PREFIX.'product_fournisseur_price_log as pfpl, '.MAIN_DB_PREFIX.'product_fournisseur as pf';
|
||||
$sql.= ' WHERE pfpl.fk_product_fournisseur = pf.rowid';
|
||||
$sql.= ' FROM '.MAIN_DB_PREFIX.'product_fournisseur_price_log as pfpl, '.MAIN_DB_PREFIX.'product_fournisseur_price as pfp';
|
||||
$sql.= ' WHERE pfpl.fk_product_fournisseur = pfp.rowid';
|
||||
$sql.= ' AND pf.fk_product = '.$id;
|
||||
dol_syslog(get_class($this).'::delete sql='.$sql, LOG_DEBUG);
|
||||
$result = $this->db->query($sql);
|
||||
@ -533,15 +533,14 @@ class Product extends CommonObject
|
||||
$this->error = $this->db->lasterror();
|
||||
dol_syslog(get_class($this).'::delete error '.$this->error, LOG_ERR);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
// Delete supplier prices
|
||||
if (! $error)
|
||||
{
|
||||
$sql = 'DELETE pfp';
|
||||
$sql.= ' FROM '.MAIN_DB_PREFIX.'product_fournisseur_price as pfp, '.MAIN_DB_PREFIX.'product_fournisseur as pf';
|
||||
$sql.= ' WHERE pfp.fk_product_fournisseur = pf.rowid';
|
||||
$sql.= ' AND pf.fk_product = '.$id;
|
||||
$sql.= ' FROM '.MAIN_DB_PREFIX.'product_fournisseur_price as pfp';
|
||||
$sql.= ' WHERE pfp.fk_product = '.$id;
|
||||
dol_syslog(get_class($this).'::delete sql='.$sql, LOG_DEBUG);
|
||||
$result = $this->db->query($sql);
|
||||
if (! $result)
|
||||
@ -819,10 +818,9 @@ class Product extends CommonObject
|
||||
{
|
||||
$result = 0;
|
||||
$sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity,";
|
||||
$sql.= " pf.fk_product, pf.ref_fourn";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp, ".MAIN_DB_PREFIX."product_fournisseur as pf";
|
||||
$sql.= " WHERE pf.rowid = pfp.fk_product_fournisseur";
|
||||
$sql.= " AND pfp.rowid = ".$prodfournprice;
|
||||
$sql.= " pfp.fk_product, pfp.ref_fourn, pfp.fk_soc";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||
$sql.= " WHERE pfp.rowid = ".$prodfournprice;
|
||||
$sql.= " AND pfp.quantity <= ".$qty;
|
||||
|
||||
dol_syslog("Product::get_buyprice sql=".$sql);
|
||||
@ -841,13 +839,12 @@ class Product extends CommonObject
|
||||
else
|
||||
{
|
||||
// On refait le meme select sur la ref et l'id du produit
|
||||
$sql = "SELECT pfp.price as price, pfp.quantity as quantity, pf.fk_soc,";
|
||||
$sql.= " pf.fk_product, pf.ref_fourn";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp, ".MAIN_DB_PREFIX."product_fournisseur as pf";
|
||||
$sql.= " WHERE pf.rowid = pfp.fk_product_fournisseur";
|
||||
$sql.= " AND pf.ref_fourn = '".$fourn_ref."'";
|
||||
$sql.= " AND pf.fk_product = ".$product_id;
|
||||
$sql.= " AND quantity <= ".$qty;
|
||||
$sql = "SELECT pfp.price as price, pfp.quantity as quantity, pfp.fk_soc,";
|
||||
$sql.= " pfp.fk_product, pfp.ref_fourn";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||
$sql.= " WHERE pfp.ref_fourn = '".$fourn_ref."'";
|
||||
$sql.= " AND pfp.fk_product = ".$product_id;
|
||||
$sql.= " AND pfp.quantity <= ".$qty;
|
||||
$sql.= " ORDER BY pfp.quantity DESC";
|
||||
$sql.= " LIMIT 1";
|
||||
|
||||
@ -1774,8 +1771,10 @@ class Product extends CommonObject
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$now=dol_now();
|
||||
|
||||
$sql = "SELECT rowid, fk_product";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
|
||||
$sql.= " WHERE fk_soc = ".$id_fourn;
|
||||
$sql.= " AND ref_fourn = '".$ref_fourn."'";
|
||||
$sql.= " AND entity = ".$conf->entity;
|
||||
@ -1789,15 +1788,15 @@ class Product extends CommonObject
|
||||
// The reference supplier does not exist, we create it for this product.
|
||||
if (! $obj)
|
||||
{
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur (";
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price (";
|
||||
$sql.= "datec";
|
||||
$sql.= ", entity";
|
||||
$sql.= ", fk_product";
|
||||
$sql.= ", fk_soc";
|
||||
$sql.= ", ref_fourn";
|
||||
$sql.= ", fk_user_author";
|
||||
$sql.= ", fk_user";
|
||||
$sql.= ") VALUES (";
|
||||
$sql.= $this->db->idate(mktime());
|
||||
$sql.= $this->db->idate($now);
|
||||
$sql.= ", ".$conf->entity;
|
||||
$sql.= ", ".$this->id;
|
||||
$sql.= ", ".$id_fourn;
|
||||
@ -1808,7 +1807,7 @@ class Product extends CommonObject
|
||||
dol_syslog("Product::add_fournisseur sql=".$sql);
|
||||
if ($this->db->query($sql))
|
||||
{
|
||||
$this->product_fourn_id = $this->db->last_insert_id(MAIN_DB_PREFIX."product_fournisseur");
|
||||
$this->product_fourn_price_id = $this->db->last_insert_id(MAIN_DB_PREFIX."product_fournisseur_price");
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
@ -1821,15 +1820,13 @@ class Product extends CommonObject
|
||||
// If the supplier ref already exists for this product
|
||||
else if ($obj->fk_product == $this->id)
|
||||
{
|
||||
$this->product_fourn_id = $obj->rowid;
|
||||
|
||||
$this->product_fourn_price_id = $obj->rowid;
|
||||
return 0;
|
||||
}
|
||||
// If the supplier ref already exists but for another product
|
||||
else
|
||||
{
|
||||
$this->product_id_already_linked = $obj->fk_product;
|
||||
|
||||
return -3;
|
||||
}
|
||||
}
|
||||
@ -1852,8 +1849,8 @@ class Product extends CommonObject
|
||||
|
||||
$list = array();
|
||||
|
||||
$sql = "SELECT fk_soc";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur as p";
|
||||
$sql = "SELECT p.fk_soc";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as p";
|
||||
$sql.= " WHERE p.fk_product = ".$this->id;
|
||||
$sql.= " AND p.entity = ".$conf->entity;
|
||||
|
||||
@ -1925,16 +1922,16 @@ class Product extends CommonObject
|
||||
/**
|
||||
* Recopie les fournisseurs et prix fournisseurs d'un produit/service sur un autre
|
||||
*
|
||||
* @param fromId Id produit source
|
||||
* @param toId Id produit cible
|
||||
* @return int < 0 si erreur, > 0 si ok
|
||||
* @param int $fromId Id produit source
|
||||
* @param int $toId Id produit cible
|
||||
* @return int < 0 si erreur, > 0 si ok
|
||||
*/
|
||||
function clone_fournisseurs($fromId, $toId)
|
||||
{
|
||||
$this->db->begin();
|
||||
|
||||
// les fournisseurs
|
||||
$sql = "INSERT ".MAIN_DB_PREFIX."product_fournisseur ("
|
||||
/*$sql = "INSERT ".MAIN_DB_PREFIX."product_fournisseur ("
|
||||
. " datec, fk_product, fk_soc, ref_fourn, fk_user_author )"
|
||||
. " SELECT '".$this->db->idate(mktime())."', ".$toId.", fk_soc, ref_fourn, fk_user_author"
|
||||
. " FROM ".MAIN_DB_PREFIX."product_fournisseur"
|
||||
@ -1944,7 +1941,7 @@ class Product extends CommonObject
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
}*/
|
||||
|
||||
// les prix de fournisseurs.
|
||||
$sql = "INSERT ".MAIN_DB_PREFIX."product_fournisseur_price ("
|
||||
@ -1953,13 +1950,17 @@ class Product extends CommonObject
|
||||
. " FROM ".MAIN_DB_PREFIX."product_fournisseur_price"
|
||||
. " WHERE fk_product = ".$fromId;
|
||||
|
||||
if ( ! $this->db->query($sql ) )
|
||||
$resql=$this->db->query($sql);
|
||||
if (! $resql)
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
else
|
||||
{
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -34,6 +34,8 @@ $langs->load("products");
|
||||
$langs->load("suppliers");
|
||||
$langs->load("bills");
|
||||
|
||||
$action=GETPOST('action');
|
||||
|
||||
// If socid provided by ajax company selector
|
||||
if (! empty($_REQUEST['search_fourn_id']))
|
||||
{
|
||||
@ -43,10 +45,7 @@ if (! empty($_REQUEST['search_fourn_id']))
|
||||
}
|
||||
|
||||
// Security check
|
||||
if (isset($_GET["id"]) || isset($_GET["ref"]))
|
||||
{
|
||||
$id = isset($_GET["id"])?$_GET["id"]:(isset($_GET["ref"])?$_GET["ref"]:'');
|
||||
}
|
||||
$id = GETPOST('id')?GETPOST('id'):GETPOST('ref');
|
||||
$fieldid = isset($_GET["ref"])?'ref':'rowid';
|
||||
if ($user->societe_id) $socid=$user->societe_id;
|
||||
$result=restrictedArea($user,'produit|service&fournisseur',$id,'product','','',$fieldid);
|
||||
@ -75,19 +74,6 @@ if ($_GET["action"] == 'remove_pf')
|
||||
$_GET["action"] = '';
|
||||
$mesg = '<div class="ok">'.$langs->trans("PriceRemoved").'.</div>';
|
||||
}
|
||||
else
|
||||
{
|
||||
// Deprecated. Should not occurs
|
||||
if ($product->remove_fournisseur($_GET["socid"]) > 0)
|
||||
{
|
||||
$_GET["action"] = '';
|
||||
$mesg = '<div class="ok">'.$langs->trans("SupplierRemoved").'.</div>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$_GET["action"] = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -145,7 +131,7 @@ if ($_POST["action"] == 'updateprice' && $_POST["cancel"] <> $langs->trans("Canc
|
||||
$supplier=new Fournisseur($db);
|
||||
$result=$supplier->fetch($id_fourn);
|
||||
|
||||
$ret=$product->update_buyprice($_POST["qty"], $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"]);
|
||||
$ret=$product->update_buyprice($_POST["qty"], $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn);
|
||||
if ($ret < 0)
|
||||
{
|
||||
$error++;
|
||||
@ -169,6 +155,7 @@ if ($_POST["action"] == 'updateprice' && $_POST["cancel"] <> $langs->trans("Canc
|
||||
{
|
||||
$db->commit();
|
||||
$_POST['action']='';
|
||||
$action='';
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -259,17 +246,22 @@ if ($_GET["id"] || $_GET["ref"])
|
||||
{
|
||||
$langs->load("suppliers");
|
||||
|
||||
if ($_GET["rowid"]) {
|
||||
if ($_GET["rowid"])
|
||||
{
|
||||
$product->fetch_product_fournisseur_price($_GET["rowid"]);
|
||||
print_fiche_titre($langs->trans("ChangeSupplierPrice"));
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
print_fiche_titre($langs->trans("AddSupplierPrice"));
|
||||
}
|
||||
print '<table class="border" width="100%">';
|
||||
|
||||
print '<form action="fournisseurs.php?id='.$product->id.'" method="post">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="action" value="updateprice">';
|
||||
|
||||
print '<table class="border" width="100%">';
|
||||
|
||||
print '<tr><td>'.$langs->trans("Supplier").'</td><td colspan="3">';
|
||||
if ($_GET["rowid"])
|
||||
{
|
||||
@ -330,12 +322,13 @@ if ($_GET["id"] || $_GET["ref"])
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
print '<tr><td colspan="4" align="center"><input class="button" type="submit" value="'.$langs->trans("Save").'">';
|
||||
print '</table>';
|
||||
|
||||
print '<center><input class="button" type="submit" value="'.$langs->trans("Save").'">';
|
||||
print ' ';
|
||||
print '<input class="button" type="submit" name="cancel" value="'.$langs->trans("Cancel").'"></td></tr>';
|
||||
print '<input class="button" type="submit" name="cancel" value="'.$langs->trans("Cancel").'"></center>';
|
||||
|
||||
print '</form>';
|
||||
print '</table>';
|
||||
}
|
||||
|
||||
/* ************************************************************************** */
|
||||
@ -346,14 +339,13 @@ if ($_GET["id"] || $_GET["ref"])
|
||||
|
||||
print "\n<div class=\"tabsAction\">\n";
|
||||
|
||||
if ($_GET["action"] != 'add_price') {
|
||||
|
||||
if ($_GET["action"] != 'add_price' && $action != 'updateprice')
|
||||
{
|
||||
if ($user->rights->produit->creer || $user->rights->service->creer)
|
||||
{
|
||||
print '<a class="butAction" href="'.DOL_URL_ROOT.'/product/fournisseurs.php?id='.$product->id.'&action=add_price">';
|
||||
print $langs->trans("AddSupplierPrice").'</a>';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
print "\n</div>\n";
|
||||
@ -371,16 +363,15 @@ if ($_GET["id"] || $_GET["ref"])
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre($langs->trans("Suppliers"),$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder);
|
||||
print '<td class="liste_titre">'.$langs->trans("SupplierRef").'</td>';
|
||||
if(!empty($conf->global->FOURN_PRODUCT_AVAILABILITY))
|
||||
print_liste_field_titre($langs->trans("Availability"),$_SERVER["PHP_SELF"],"pfp.fk_availability","",$param,"",$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("QtyMin"),$_SERVER["PHP_SELF"],"pfp.quantity","",$param,"",$sortfield,$sortorder);
|
||||
if (!empty($conf->global->FOURN_PRODUCT_AVAILABILITY)) print_liste_field_titre($langs->trans("Availability"),$_SERVER["PHP_SELF"],"pfp.fk_availability","",$param,"",$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("QtyMin"),$_SERVER["PHP_SELF"],"pfp.quantity","",$param,'align="right"',$sortfield,$sortorder);
|
||||
print '<td class="liste_titre" align="right">'.$langs->trans("PriceQtyMinHT").'</td>';
|
||||
print_liste_field_titre($langs->trans("UnitPriceHT"),$_SERVER["PHP_SELF"],"pfp.unitprice","",$param,'align="right"',$sortfield,$sortorder);
|
||||
print '<td class="liste_titre"></td>';
|
||||
print "</tr>\n";
|
||||
|
||||
$product_fourn = new ProductFournisseur($db);
|
||||
$product_fourn_list = $product_fourn->fetch_product_fournisseur($product->id);
|
||||
$product_fourn_list = $product_fourn->list_product_fournisseur_price($product->id);
|
||||
|
||||
if (count($product_fourn_list)>0)
|
||||
{
|
||||
@ -406,7 +397,7 @@ if ($_GET["id"] || $_GET["ref"])
|
||||
}
|
||||
|
||||
// Quantity
|
||||
print '<td align="center">';
|
||||
print '<td align="right">';
|
||||
print $productfourn->fourn_qty;
|
||||
print '</td>';
|
||||
|
||||
|
||||
@ -133,8 +133,8 @@ else
|
||||
$sql.= ') ';
|
||||
//if ($fourn_id > 0) // The DISTINCT is used to avoid duplicate from this link
|
||||
//{
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur as pf ON p.rowid = pf.fk_product";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON pf.rowid = pfp.fk_product_fournisseur";
|
||||
//$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur as pf ON p.rowid = pf.fk_product";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product";
|
||||
//}
|
||||
$sql.= ' WHERE p.entity IN (0,'.(! empty($conf->entities['product']) ? $conf->entities['product'] : $conf->entity).')';
|
||||
if ($search_categ) $sql.= " AND p.rowid = cp.fk_product"; // Join for the needed table to filter by categ
|
||||
@ -156,7 +156,7 @@ else
|
||||
if (dol_strlen($canvas) > 0) $sql.= " AND p.canvas = '".$db->escape($canvas)."'";
|
||||
if ($catid) $sql.= " AND cp.fk_categorie = ".$catid;
|
||||
if ($search_categ) $sql.= " AND cp.fk_categorie = ".$search_categ;
|
||||
if ($fourn_id > 0) $sql.= " AND pf.fk_soc = ".$fourn_id;
|
||||
if ($fourn_id > 0) $sql.= " AND pfp.fk_soc = ".$fourn_id;
|
||||
$sql.= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,";
|
||||
$sql.= " p.fk_product_type, p.tms,";
|
||||
$sql.= " p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte";
|
||||
|
||||
@ -96,12 +96,6 @@ $sql.= ' SUM(s.reel) as stock_physique';
|
||||
$sql.= ' FROM ('.MAIN_DB_PREFIX.'product as p';
|
||||
// We'll need this table joined to the select in order to filter by categ
|
||||
if ($search_categ) $sql.= ", ".MAIN_DB_PREFIX."categorie_product as cp";
|
||||
// We disable this because this create duplicate lines
|
||||
/*if ($_GET["fourn_id"] > 0)
|
||||
{
|
||||
$fourn_id = $_GET["fourn_id"];
|
||||
$sql.= ", ".MAIN_DB_PREFIX."product_fournisseur as pf";
|
||||
}*/
|
||||
$sql.= ') LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as s on p.rowid = s.fk_product';
|
||||
$sql.= " WHERE p.entity = ".$conf->entity;
|
||||
if ($search_categ) $sql.= " AND p.rowid = cp.fk_product"; // Join for the needed table to filter by categ
|
||||
@ -112,9 +106,12 @@ if ($sall)
|
||||
// if the type is not 1, we show all products (type = 0,2,3)
|
||||
if (dol_strlen($type))
|
||||
{
|
||||
if ($type==1) {
|
||||
if ($type==1)
|
||||
{
|
||||
$sql.= " AND p.fk_product_type = '1'";
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql.= " AND p.fk_product_type <> '1'";
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user