Perf: Reduce seriously nb of requests

This commit is contained in:
Laurent Destailleur 2011-08-21 10:12:18 +00:00
parent a17e797f7e
commit 450f9e2617
2 changed files with 63 additions and 81 deletions

View File

@ -22,7 +22,7 @@
* \file htdocs/fourn/class/fournisseur.product.class.php * \file htdocs/fourn/class/fournisseur.product.class.php
* \ingroup produit * \ingroup produit
* \brief File of class to manage predefined suppliers products * \brief File of class to manage predefined suppliers products
* \version $Id: fournisseur.product.class.php,v 1.11 2011/08/21 00:27:31 eldy Exp $ * \version $Id: fournisseur.product.class.php,v 1.12 2011/08/21 10:12:18 eldy Exp $
*/ */
require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php"; require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
@ -76,7 +76,7 @@ class ProductFournisseur extends Product
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur"; $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur";
$sql.= " WHERE fk_product = ".$this->id." AND fk_soc = ".$id_fourn; $sql.= " WHERE fk_product = ".$this->id." AND fk_soc = ".$id_fourn;
dol_syslog("ProductFournisseur::remove_fournisseur sql=".$sql); dol_syslog(get_class($this)."::remove_fournisseur sql=".$sql);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
if ($resql) if ($resql)
{ {
@ -86,12 +86,12 @@ class ProductFournisseur extends Product
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
$sql.= " WHERE fk_product_fournisseur = ".$obj->rowid; $sql.= " WHERE fk_product_fournisseur = ".$obj->rowid;
dol_syslog("ProductFournisseur::remove_fournisseur sql=".$sql); dol_syslog(get_class($this)."::remove_fournisseur sql=".$sql);
$resql2=$this->db->query($sql); $resql2=$this->db->query($sql);
if (! $resql2) if (! $resql2)
{ {
$this->error=$this->db->lasterror(); $this->error=$this->db->lasterror();
dol_syslog("ProductFournisseur::remove_fournisseur ".$this->error, LOG_ERR); dol_syslog(get_class($this)."::remove_fournisseur ".$this->error, LOG_ERR);
$ok=0; $ok=0;
} }
} }
@ -100,12 +100,12 @@ class ProductFournisseur extends Product
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur";
$sql.= " WHERE fk_product = ".$this->id." AND fk_soc = ".$id_fourn; $sql.= " WHERE fk_product = ".$this->id." AND fk_soc = ".$id_fourn;
dol_syslog("ProductFournisseur::remove_fournisseur sql=".$sql); dol_syslog(get_class($this)."::remove_fournisseur sql=".$sql);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
if (! $resql) if (! $resql)
{ {
$this->error=$this->db->lasterror(); $this->error=$this->db->lasterror();
dol_syslog("ProductFournisseur::remove_fournisseur ".$this->error, LOG_ERR); dol_syslog(get_class($this)."::remove_fournisseur ".$this->error, LOG_ERR);
$ok=0; $ok=0;
} }
@ -140,7 +140,7 @@ class ProductFournisseur extends Product
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur";
$sql.= " WHERE rowid = ".$rowid; $sql.= " WHERE rowid = ".$rowid;
dol_syslog("ProductFournisseur::remove_product_fournisseur sql=".$sql); dol_syslog(get_class($this)."::remove_product_fournisseur sql=".$sql);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{ {
@ -167,7 +167,7 @@ class ProductFournisseur extends Product
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
$sql.= " WHERE rowid = ".$rowid; $sql.= " WHERE rowid = ".$rowid;
dol_syslog("ProductFournisseur::remove_product_fournisseur_price sql=".$sql); dol_syslog(get_class($this)."::remove_product_fournisseur_price sql=".$sql);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{ {
@ -178,7 +178,7 @@ class ProductFournisseur extends Product
$sql.= " WHERE pfp.rowid IS NULL"; $sql.= " WHERE pfp.rowid IS NULL";
$sql.= " AND pf.entity = ".$conf->entity; $sql.= " AND pf.entity = ".$conf->entity;
dol_syslog("ProductFournisseur::remove_product_fournisseur_price sql=".$sql); dol_syslog(get_class($this)."::remove_product_fournisseur_price sql=".$sql);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{ {
@ -191,12 +191,12 @@ class ProductFournisseur extends Product
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur";
$sql.= " WHERE rowid = ".$rowidpf; $sql.= " WHERE rowid = ".$rowidpf;
dol_syslog("ProductFournisseur::remove_product_fournisseur_price sql=".$sql); dol_syslog(get_class($this)."::remove_product_fournisseur_price sql=".$sql);
$resql2 = $this->db->query($sql); $resql2 = $this->db->query($sql);
if (! $resql2) if (! $resql2)
{ {
$this->error=$this->db->lasterror(); $this->error=$this->db->lasterror();
dol_syslog("ProductFournisseur::remove_product_fournisseur_price ".$this->error,LOG_ERR); dol_syslog(get_class($this)."::remove_product_fournisseur_price ".$this->error,LOG_ERR);
$ok=0; $ok=0;
} }
} }
@ -215,7 +215,7 @@ class ProductFournisseur extends Product
else else
{ {
$this->error=$this->db->lasterror(); $this->error=$this->db->lasterror();
dol_syslog("ProductFournisseur::remove_product_fournisseur_price ".$this->error,LOG_ERR); dol_syslog(get_class($this)."::remove_product_fournisseur_price ".$this->error,LOG_ERR);
$this->db->rollback(); $this->db->rollback();
return -2; return -2;
} }
@ -223,7 +223,7 @@ class ProductFournisseur extends Product
else else
{ {
$this->error=$this->db->lasterror(); $this->error=$this->db->lasterror();
dol_syslog("ProductFournisseur::remove_product_fournisseur_price ".$this->error,LOG_ERR); dol_syslog(get_class($this)."::remove_product_fournisseur_price ".$this->error,LOG_ERR);
$this->db->rollback(); $this->db->rollback();
return -1; return -1;
} }
@ -288,7 +288,7 @@ class ProductFournisseur extends Product
$sql.= " ".$availability; $sql.= " ".$availability;
$sql.=")"; $sql.=")";
dol_syslog("ProductFournisseur::update_buyprice sql=".$sql); dol_syslog(get_class($this)."::update_buyprice sql=".$sql);
if (! $this->db->query($sql)) if (! $this->db->query($sql))
{ {
$error++; $error++;
@ -391,7 +391,7 @@ class ProductFournisseur extends Product
$sql.= " AND fk_soc = ".$fournid; $sql.= " AND fk_soc = ".$fournid;
$sql.= " AND entity = ".$conf->entity; $sql.= " AND entity = ".$conf->entity;
dol_syslog("Product::fetch_fourn_data sql=".$sql); dol_syslog(get_class($this)."::fetch_fourn_data sql=".$sql);
$result = $this->db->query($sql) ; $result = $this->db->query($sql) ;
if ($result) if ($result)
{ {
@ -403,7 +403,7 @@ class ProductFournisseur extends Product
else else
{ {
$this->error=$this->db->error(); $this->error=$this->db->error();
dol_syslog("ProductFournisseur::fetch_fourn_data error=".$this->error, LOG_ERR); dol_syslog(get_class($this)."::fetch_fourn_data error=".$this->error, LOG_ERR);
return -1; return -1;
} }
} }
@ -423,7 +423,7 @@ class ProductFournisseur extends Product
$sql.= " WHERE pfp.rowid = ".$rowid; $sql.= " WHERE pfp.rowid = ".$rowid;
$sql.= " AND pf.rowid = pfp.fk_product_fournisseur"; $sql.= " AND pf.rowid = pfp.fk_product_fournisseur";
dol_syslog("ProductFournisseur::fetch_product_fournisseur_price sql=".$sql, LOG_DEBUG); dol_syslog(get_class($this)."::fetch_product_fournisseur_price sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql) ; $resql = $this->db->query($sql) ;
if ($resql) if ($resql)
{ {
@ -449,7 +449,7 @@ class ProductFournisseur extends Product
else else
{ {
$this->error=$this->db->error(); $this->error=$this->db->error();
dol_syslog("ProductFournisseur::fetch_product_fournisseur_price error=".$this->error, LOG_ERR); dol_syslog(get_class($this)."::fetch_product_fournisseur_price error=".$this->error, LOG_ERR);
return -1; return -1;
} }
} }
@ -480,7 +480,7 @@ class ProductFournisseur extends Product
$sql.= " AND pf.fk_product = ".$prodid; $sql.= " AND pf.fk_product = ".$prodid;
$sql.= " ORDER BY s.nom, pfp.quantity"; $sql.= " ORDER BY s.nom, pfp.quantity";
dol_syslog("ProductFournisseur::fetch_product_fournisseur sql=".$sql, LOG_DEBUG); dol_syslog(get_class($this)."::fetch_product_fournisseur sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
@ -525,7 +525,7 @@ class ProductFournisseur extends Product
else else
{ {
$this->error=$this->db->error(); $this->error=$this->db->error();
dol_syslog("ProductFournisseur::fetch_product_fournisseur error=".$this->error, LOG_ERR); dol_syslog(get_class($this)."::fetch_product_fournisseur error=".$this->error, LOG_ERR);
return -1; return -1;
} }
} }
@ -556,12 +556,12 @@ class ProductFournisseur extends Product
$sql.= " pfp.rowid as product_fourn_pri_id, "; $sql.= " pfp.rowid as product_fourn_pri_id, ";
$sql.= " pf.rowid as product_fourn_id, "; $sql.= " pf.rowid as product_fourn_id, ";
$sql.= " pfp.price, pfp.quantity, pfp.unitprice"; $sql.= " pfp.price, pfp.quantity, pfp.unitprice";
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= " FROM (".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."product_fournisseur as pf)";
$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.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
$sql.= " ON pf.rowid = pfp.fk_product_fournisseur"; $sql.= " ON pf.rowid = pfp.fk_product_fournisseur";
$sql.= " WHERE s.entity = ".$conf->entity; $sql.= " WHERE s.entity = ".$conf->entity;
$sql.= " AND pf.fk_product = ".$prodid; $sql.= " AND pf.fk_product = ".$prodid;
$sql.= " AND pf.fk_soc = s.rowid";
$sql.= " ORDER BY pfp.unitprice"; $sql.= " ORDER BY pfp.unitprice";
$sql.= $this->db->plimit(1); $sql.= $this->db->plimit(1);

View File

@ -21,7 +21,7 @@
* \file htdocs/product/liste.php * \file htdocs/product/liste.php
* \ingroup produit * \ingroup produit
* \brief Page to list products and services * \brief Page to list products and services
* \version $Id: liste.php,v 1.155 2011/08/21 00:36:29 eldy Exp $ * \version $Id: liste.php,v 1.156 2011/08/21 10:12:18 eldy Exp $
*/ */
require("../main.inc.php"); require("../main.inc.php");
@ -39,9 +39,10 @@ $snom=GETPOST("snom");
$sall=GETPOST("sall"); $sall=GETPOST("sall");
$type=GETPOST("type","int"); $type=GETPOST("type","int");
$search_sale = GETPOST("search_sale"); $search_sale = GETPOST("search_sale");
$search_categ = GETPOST("search_categ"); $search_categ = GETPOST("search_categ",'int');
$tosell = GETPOST("tosell"); $tosell = GETPOST("tosell");
$tobuy = GETPOST("tobuy"); $tobuy = GETPOST("tobuy");
$fourn_id = GETPOST("fourn_id",'int');
$sortfield = GETPOST("sortfield",'alpha'); $sortfield = GETPOST("sortfield",'alpha');
$sortorder = GETPOST("sortorder",'alpha'); $sortorder = GETPOST("sortorder",'alpha');
@ -140,15 +141,17 @@ else
$sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,'; $sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,';
$sql.= ' p.fk_product_type, p.tms as datem,'; $sql.= ' p.fk_product_type, p.tms as datem,';
$sql.= ' p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte'; $sql.= ' p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte,';
$sql.= ' FROM '.MAIN_DB_PREFIX.'product as p'; $sql.= ' MIN(pfp.unitprice) as minsellprice';
$sql.= ' FROM ('.MAIN_DB_PREFIX.'product as p';
// We'll need this table joined to the select in order to filter by categ // 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"; if ($search_categ) $sql.= ", ".MAIN_DB_PREFIX."categorie_product as cp";
if ($_GET["fourn_id"] > 0) // The DISTINCT is used to avoid duplicate from this link $sql.= ') ';
{ //if ($fourn_id > 0) // The DISTINCT is used to avoid duplicate from this link
$fourn_id = $_GET["fourn_id"]; //{
$sql.= ", ".MAIN_DB_PREFIX."product_fournisseur as pf"; $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.= ' WHERE p.entity IN (0,'.(! empty($conf->entities['product']) ? $conf->entities['product'] : $conf->entity).')'; $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 if ($search_categ) $sql.= " AND p.rowid = cp.fk_product"; // Join for the needed table to filter by categ
if ($sall) if ($sall)
@ -158,48 +161,27 @@ if ($sall)
# if the type is not 1, we show all products (type = 0,2,3) # if the type is not 1, we show all products (type = 0,2,3)
if (dol_strlen($type)) if (dol_strlen($type))
{ {
if ($type==1) { if ($type == 1) $sql.= " AND p.fk_product_type = '1'";
$sql.= " AND p.fk_product_type = '1'"; else $sql.= " AND p.fk_product_type <> '1'";
} else {
$sql.= " AND p.fk_product_type <> '1'";
}
} }
if ($sref) $sql.= " AND p.ref like '%".$sref."%'"; if ($sref) $sql.= " AND p.ref like '%".$sref."%'";
if ($sbarcode) $sql.= " AND p.barcode like '%".$sbarcode."%'"; if ($sbarcode) $sql.= " AND p.barcode like '%".$sbarcode."%'";
if ($snom) $sql.= " AND p.label like '%".$db->escape($snom)."%'"; if ($snom) $sql.= " AND p.label like '%".$db->escape($snom)."%'";
if (isset($tosell) && dol_strlen($tosell) > 0) if (isset($tosell) && dol_strlen($tosell) > 0) $sql.= " AND p.tosell = ".$db->escape($tosell);
{ if (isset($tobuy) && dol_strlen($tobuy) > 0) $sql.= " AND p.tobuy = ".$db->escape($tobuy);
$sql.= " AND p.tosell = ".$db->escape($tosell); if (dol_strlen($canvas) > 0) $sql.= " AND p.canvas = '".$db->escape($canvas)."'";
} if ($catid) $sql.= " AND cp.fk_categorie = ".$catid;
if (isset($tobuy) && dol_strlen($tobuy) > 0) if ($search_categ) $sql.= " AND cp.fk_categorie = ".$search_categ;
{ if ($fourn_id > 0) $sql.= " AND pf.fk_soc = ".$fourn_id;
$sql.= " AND p.tobuy = ".$db->escape($tobuy);
}
if (dol_strlen($canvas) > 0)
{
$sql.= " AND p.canvas = '".$db->escape($canvas)."'";
}
if($catid)
{
$sql.= " AND cp.fk_categorie = ".$catid;
}
if ($fourn_id > 0)
{
$sql.= " AND p.rowid = pf.fk_product AND pf.fk_soc = ".$fourn_id;
}
// Insert categ filter
if ($search_categ)
{
$sql .= " AND cp.fk_categorie = ".$db->escape($search_categ);
}
$sql.= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,"; $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.fk_product_type, p.tms,";
$sql.= " p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte"; $sql.= " p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte";
if (GETPOST("toolowstock")) $sql.= " HAVING SUM(s.reel) < p.seuil_stock_alerte"; // Not used yet //if (GETPOST("toolowstock")) $sql.= " HAVING SUM(s.reel) < p.seuil_stock_alerte"; // Not used yet
$sql.= $db->order($sortfield,$sortorder); $sql.= $db->order($sortfield,$sortorder);
$sql.= $db->plimit($limit + 1 ,$offset); $sql.= $db->plimit($limit + 1 ,$offset);
$resql = $db->query($sql) ;
dol_syslog("sql=".$sql);
$resql = $db->query($sql) ;
if ($resql) if ($resql)
{ {
$num = $db->num_rows($resql); $num = $db->num_rows($resql);
@ -338,12 +320,9 @@ if ($resql)
} }
// Minimum buying Price // Minimum buying Price
if ($conf->fournisseur->enabled && $user->rights->fournisseur->lire && $type != 1) print '<td class="liste_titre">';
{ print '&nbsp;';
print '<td class="liste_titre">'; print '</td>';
print '&nbsp;';
print '</td>';
}
// Stock // Stock
if ($conf->stock->enabled && $user->rights->stock->lire && $type != 1) if ($conf->stock->enabled && $user->rights->stock->lire && $type != 1)
@ -433,18 +412,21 @@ if ($resql)
print '</td>'; print '</td>';
} }
// MinimumPrice // Better buy price
print '<td align="right">'; print '<td align="right">';
// TODO Find min price with a min on unitprice into select request instead of subrequests if ($objp->minsellprice != '')
if ($product_fourn->find_min_price_product_fournisseur($objp->rowid) > 0) {
{ //print price($objp->minsellprice).' '.$langs->trans("HT");
if ($product_fourn->product_fourn_price_id > 0) if ($product_fourn->find_min_price_product_fournisseur($objp->rowid) > 0)
{ {
$htmltext=$product_fourn->display_price_product_fournisseur(); if ($product_fourn->product_fourn_price_id > 0)
if ($conf->fournisseur->enabled && $user->rights->fournisseur->lire) print $html->textwithpicto(price($product_fourn->fourn_unitprice),$htmltext); {
else print price($product_fourn->fourn_unitprice).' '.$langs->trans("HT"); $htmltext=$product_fourn->display_price_product_fournisseur();
} if ($conf->fournisseur->enabled && $user->rights->fournisseur->lire) print $html->textwithpicto(price($product_fourn->fourn_unitprice).' '.$langs->trans("HT"),$htmltext);
} else print price($product_fourn->fourn_unitprice).' '.$langs->trans("HT");
}
}
}
print '</td>'; print '</td>';
// Show stock // Show stock
@ -501,5 +483,5 @@ else
$db->close(); $db->close();
llxFooter('$Date: 2011/08/21 00:36:29 $ - $Revision: 1.155 $'); llxFooter('$Date: 2011/08/21 10:12:18 $ - $Revision: 1.156 $');
?> ?>