diff --git a/htdocs/comm/action/rapport/rapport.pdf.php b/htdocs/comm/action/rapport/rapport.pdf.php
index ec88f4a3f75..a8b2e245e26 100644
--- a/htdocs/comm/action/rapport/rapport.pdf.php
+++ b/htdocs/comm/action/rapport/rapport.pdf.php
@@ -45,6 +45,7 @@ class CommActionRapport
function CommActionRapport($db=0, $month, $year)
{
global $langs;
+ $langs->load("commercial");
$this->db = $db;
$this->description = "";
diff --git a/htdocs/product.class.php b/htdocs/product.class.php
index f2b7978d2ce..5cb7e524964 100644
--- a/htdocs/product.class.php
+++ b/htdocs/product.class.php
@@ -36,26 +36,30 @@
class Product
{
- var $db ;
+ var $db ;
+
+ var $id ;
+ var $ref;
+ var $libelle;
+ var $description;
+ var $price;
+ var $tva_tx;
+ var $type;
+ var $seuil_stock_alerte;
+ var $duration_value;
+ var $duration_unit;
- var $id ;
- var $ref;
- var $libelle;
- var $description;
- var $price;
- var $tva_tx;
- var $type;
- var $seuil_stock_alerte;
- var $duration_value;
- var $duration_unit;
+ var $stats_propale=array();
+ var $stats_commande=array();
+ var $stats_contrat=array();
+ var $stats_facture=array();
/**
- * \brief Constructeur de la classe
- * \param DB handler accès base de données
- * \param id id produit (0 par defaut)
+ * \brief Constructeur de la classe
+ * \param DB Handler accès base de données
+ * \param id Id produit (0 par defaut)
*/
-
function Product($DB, $id=0)
{
$this->db = $DB;
@@ -66,8 +70,8 @@ class Product
/**
- * \brief Vérifie que la référence et libellé du produit est non null
- * \return int 1 si ok, 0 sinon
+ * \brief Vérifie que la référence et libellé du produit est non null
+ * \return int 1 si ok, 0 sinon
*/
function check()
@@ -355,209 +359,256 @@ class Product
}
- /**
- * \brief Modifie le prix d'un produit/service
- * \param id id du produit/service à modifier
- * \param user utilisateur qui modifie le prix
- */
-
- function update_price($id, $user)
- {
- if (strlen(trim($this->price)) > 0 )
- {
-
- $sql = "UPDATE ".MAIN_DB_PREFIX."product ";
- $sql .= " SET price = " . ereg_replace(",",".",$this->price);
- $sql .= " WHERE rowid = " . $id;
-
- if ( $this->db->query($sql) )
- {
- $this->_log_price($user);
- return 1;
- }
- else
- {
- dolibarr_print_error($this->db);
- return -1;
- }
- }
- else
- {
- $this->error = "Prix saisi invalide.";
- return -2;
- }
- }
-
-
- /**
- * \brief Charge le produit/service en mémoire
- * \param id id du produit/service à charger
- */
-
- function fetch ($id)
- {
- $sql = "SELECT rowid, ref, label, description, price, tva_tx, envente, nbvente, fk_product_type, duration, seuil_stock_alerte";
- $sql .= " FROM ".MAIN_DB_PREFIX."product WHERE rowid = $id";
-
- $result = $this->db->query($sql) ;
-
- if ( $result )
- {
- $result = $this->db->fetch_array();
-
- $this->id = $result["rowid"];
- $this->ref = $result["ref"];
- $this->libelle = stripslashes($result["label"]);
- $this->description = stripslashes($result["description"]);
- $this->price = $result["price"];
- $this->tva_tx = $result["tva_tx"];
- $this->type = $result["fk_product_type"];
- $this->nbvente = $result["nbvente"];
- $this->envente = $result["envente"];
- $this->duration = $result["duration"];
- $this->duration_value = substr($result["duration"],0,strlen($result["duration"])-1);
- $this->duration_unit = substr($result["duration"],-1);
- $this->seuil_stock_alerte = $result["seuil_stock_alerte"];
-
- $this->label_url = ''.$this->libelle.'';
-
- if ($this->type == 0)
- {
- $this->isproduct = 1;
- $this->isservice = 0;
- }
- else
- {
- $this->isproduct = 0;
- $this->isservice = 1;
- }
-
- $this->db->free();
-
- $sql = "SELECT reel, fk_entrepot";
- $sql .= " FROM ".MAIN_DB_PREFIX."product_stock WHERE fk_product = $id";
- $result = $this->db->query($sql) ;
- if ( $result )
- {
- $num = $this->db->num_rows();
- $i=0;
- if ($num > 0)
- {
- while ($i < $num )
- {
- $row = $this->db->fetch_row($i);
- $this->stock_entrepot[$row[1]] = $row[0];
-
- $this->stock_reel = $this->stock_reel + $row[0];
- $i++;
- }
-
- $this->no_stock = 0;
- }
- else
- {
- $this->no_stock = 1;
- }
- $this->db->free();
- }
- return 1;
- }
- else
- {
- dolibarr_print_error($this->db);
- return -1;
- }
- }
-
-
- /**
- * \brief Renvoie le nombre de propale incluant le produit/service
- * \param socid id societe
- * \return int nombre d'inclusion
- */
-
- function count_propale($socid=0)
+ /**
+ * \brief Modifie le prix d'un produit/service
+ * \param id id du produit/service à modifier
+ * \param user utilisateur qui modifie le prix
+ */
+ function update_price($id, $user)
{
- $sql = "SELECT pd.fk_propal";
- $sql .= " FROM ".MAIN_DB_PREFIX."propaldet as pd, ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."propal as pr";
- $sql .= " WHERE pr.rowid = pd.fk_propal AND p.rowid = pd.fk_product AND p.rowid = ".$this->id;
- if ($socid > 0)
- {
- $sql .= " AND pr.fk_soc = $socid";
- }
- $sql .= " GROUP BY pd.fk_propal";
-
- $result = $this->db->query($sql) ;
-
- if ( $result )
- {
- return $this->db->num_rows();
- }
- else
- {
- return 0;
- }
+ if (strlen(trim($this->price)) > 0 )
+ {
+ $sql = "UPDATE ".MAIN_DB_PREFIX."product ";
+ $sql .= " SET price = " . ereg_replace(",",".",$this->price);
+ $sql .= " WHERE rowid = " . $id;
+
+ if ( $this->db->query($sql) )
+ {
+ $this->_log_price($user);
+ return 1;
+ }
+ else
+ {
+ dolibarr_print_error($this->db);
+ return -1;
+ }
+ }
+ else
+ {
+ $this->error = "Prix saisi invalide.";
+ return -2;
+ }
}
- /**
- * \brief Renvoie le nombre de client avec propale incluant le produit/service
- * \param socid id societe
- * \return int nombre d'inclusion
- */
-
- function count_propale_client($socid=0)
+ /**
+ * \brief Charge le produit/service en mémoire
+ * \param id id du produit/service à charger
+ */
+ function fetch ($id)
{
- $sql = "SELECT pr.fk_soc";
- $sql .= " FROM ".MAIN_DB_PREFIX."propaldet as pd, ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."propal as pr";
- $sql .= " WHERE p.rowid = pd.fk_product AND pd.fk_propal = pr.rowid AND p.rowid = ".$this->id;
- if ($socid > 0)
- {
- $sql .= " AND pr.fk_soc = $socid";
- }
- $sql .= " GROUP BY pr.fk_soc";
-
- $result = $this->db->query($sql) ;
-
- if ( $result )
- {
- return $this->db->num_rows();
- }
- else
- {
- return 0;
- }
+ $sql = "SELECT rowid, ref, label, description, price, tva_tx, envente, nbvente, fk_product_type, duration, seuil_stock_alerte";
+ $sql .= " FROM ".MAIN_DB_PREFIX."product WHERE rowid = $id";
+
+ $result = $this->db->query($sql) ;
+
+ if ( $result )
+ {
+ $result = $this->db->fetch_array();
+
+ $this->id = $result["rowid"];
+ $this->ref = $result["ref"];
+ $this->libelle = stripslashes($result["label"]);
+ $this->description = stripslashes($result["description"]);
+ $this->price = $result["price"];
+ $this->tva_tx = $result["tva_tx"];
+ $this->type = $result["fk_product_type"];
+ $this->nbvente = $result["nbvente"];
+ $this->envente = $result["envente"];
+ $this->duration = $result["duration"];
+ $this->duration_value = substr($result["duration"],0,strlen($result["duration"])-1);
+ $this->duration_unit = substr($result["duration"],-1);
+ $this->seuil_stock_alerte = $result["seuil_stock_alerte"];
+
+ $this->label_url = ''.$this->libelle.'';
+
+ if ($this->type == 0)
+ {
+ $this->isproduct = 1;
+ $this->isservice = 0;
+ }
+ else
+ {
+ $this->isproduct = 0;
+ $this->isservice = 1;
+ }
+
+ $this->db->free();
+
+ $sql = "SELECT reel, fk_entrepot";
+ $sql .= " FROM ".MAIN_DB_PREFIX."product_stock WHERE fk_product = $id";
+ $result = $this->db->query($sql) ;
+ if ( $result )
+ {
+ $num = $this->db->num_rows();
+ $i=0;
+ if ($num > 0)
+ {
+ while ($i < $num )
+ {
+ $row = $this->db->fetch_row($i);
+ $this->stock_entrepot[$row[1]] = $row[0];
+
+ $this->stock_reel = $this->stock_reel + $row[0];
+ $i++;
+ }
+
+ $this->no_stock = 0;
+ }
+ else
+ {
+ $this->no_stock = 1;
+ }
+ $this->db->free();
+ }
+ return 1;
+ }
+ else
+ {
+ dolibarr_print_error($this->db);
+ return -1;
+ }
}
- /**
- * \brief Renvoie le nombre de facture incluant le produit/service
- * \param socid id societe
- * \return int nombre d'inclusion
- */
-
- function count_facture($socid=0)
+ /**
+ * \brief Charge tableau des stats propale pour le produit/service
+ * \param socid Id societe
+ * \return array Tableau des stats
+ */
+ function load_stats_propale($socid=0)
{
- $sql = "SELECT pd.fk_facture";
- $sql .= " FROM ".MAIN_DB_PREFIX."facturedet as pd, ".MAIN_DB_PREFIX."product as p";
- $sql .= ", ".MAIN_DB_PREFIX."facture as f";
- $sql .= " WHERE f.rowid = pd.fk_facture AND p.rowid = pd.fk_product AND p.rowid = ".$this->id;
- if ($socid > 0)
- {
- $sql .= " AND f.fk_soc = $socid";
- }
- $sql .= " GROUP BY pd.fk_facture";
+ $sql = "SELECT COUNT(DISTINCT pr.fk_soc) as nb_customers, COUNT(DISTINCT pr.rowid) as nb,";
+ $sql.= " COUNT(pd.rowid) as nb_rows, SUM(pd.qty) as qty";
+ $sql.= " FROM ".MAIN_DB_PREFIX."propaldet as pd, ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."propal as pr";
+ $sql.= " WHERE p.rowid = pd.fk_product AND pd.fk_propal = pr.rowid AND p.rowid = ".$this->id;
+ //$sql.= " AND pr.fk_statut != 0";
+ if ($socid > 0)
+ {
+ $sql .= " AND pr.fk_soc = $socid";
+ }
+
+ $result = $this->db->query($sql) ;
+ if ( $result )
+ {
+ $obj=$this->db->fetch_object($result);
+ $this->stats_propale['customers']=$obj->nb_customers;
+ $this->stats_propale['nb']=$obj->nb;
+ $this->stats_propale['rows']=$obj->nb_rows;
+ $this->stats_propale['qty']=$obj->qty?$obj->qty:0;
+ return 1;
+ }
+ else
+ {
+ $this->error=$this->db->error();
+ return -1;
+ }
+ }
- $result = $this->db->query($sql) ;
- if ( $result )
- {
- return $this->db->num_rows();
- }
- else
- {
- return 0;
- }
+ /**
+ * \brief Charge tableau des stats commande pour le produit/service
+ * \param socid Id societe
+ * \return array Tableau des stats
+ */
+ function load_stats_commande($socid=0)
+ {
+ $sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_customers, COUNT(DISTINCT c.rowid) as nb,";
+ $sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty";
+ $sql.= " FROM ".MAIN_DB_PREFIX."commandedet as cd, ".MAIN_DB_PREFIX."product as p,";
+ $sql.= " ".MAIN_DB_PREFIX."commande as c";
+ $sql.= " WHERE c.rowid = cd.fk_commande AND p.rowid = cd.fk_product AND p.rowid = ".$this->id;
+ //$sql.= " AND c.fk_statut != 0";
+ if ($socid > 0)
+ {
+ $sql .= " AND c.fk_soc = $socid";
+ }
+
+ $result = $this->db->query($sql) ;
+ if ( $result )
+ {
+ $obj=$this->db->fetch_object($result);
+ $this->stats_commande['customers']=$obj->nb_customers;
+ $this->stats_commande['nb']=$obj->nb;
+ $this->stats_commande['rows']=$obj->nb_rows;
+ $this->stats_commande['qty']=$obj->qty?$obj->qty:0;
+ return 1;
+ }
+ else
+ {
+ $this->error=$this->db->error();
+ return -1;
+ }
+ }
+
+ /**
+ * \brief Charge tableau des stats contrat pour le produit/service
+ * \param socid Id societe
+ * \return array Tableau des stats
+ */
+ function load_stats_contrat($socid=0)
+ {
+ $sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_customers, COUNT(DISTINCT c.rowid) as nb,";
+ $sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty";
+ $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd, ".MAIN_DB_PREFIX."product as p,";
+ $sql.= " ".MAIN_DB_PREFIX."contrat as c";
+ $sql.= " WHERE c.rowid = cd.fk_contrat AND p.rowid = cd.fk_product AND p.rowid = ".$this->id;
+ //$sql.= " AND c.statut != 0";
+ if ($socid > 0)
+ {
+ $sql .= " AND c.fk_soc = $socid";
+ }
+
+ $result = $this->db->query($sql) ;
+ if ( $result )
+ {
+ $obj=$this->db->fetch_object($result);
+ $this->stats_contrat['customers']=$obj->nb_customers;
+ $this->stats_contrat['nb']=$obj->nb;
+ $this->stats_contrat['rows']=$obj->nb_rows;
+ $this->stats_contrat['qty']=$obj->qty?$obj->qty:0;
+ return 1;
+ }
+ else
+ {
+ $this->error=$this->db->error();
+ return -1;
+ }
+ }
+
+ /**
+ * \brief Charge tableau des stats facture pour le produit/service
+ * \param socid Id societe
+ * \return array Tableau des stats
+ */
+ function load_stats_facture($socid=0)
+ {
+ $sql = "SELECT COUNT(DISTINCT f.fk_soc) as nb_customers, COUNT(DISTINCT f.rowid) as nb,";
+ $sql.= " COUNT(pd.rowid) as nb_rows, SUM(pd.qty) as qty";
+ $sql.= " FROM ".MAIN_DB_PREFIX."facturedet as pd, ".MAIN_DB_PREFIX."product as p";
+ $sql.= ", ".MAIN_DB_PREFIX."facture as f";
+ $sql.= " WHERE f.rowid = pd.fk_facture AND p.rowid = pd.fk_product AND p.rowid = ".$this->id;
+ //$sql.= " AND f.fk_statut != 0";
+ if ($socid > 0)
+ {
+ $sql .= " AND f.fk_soc = $socid";
+ }
+
+ $result = $this->db->query($sql) ;
+ if ( $result )
+ {
+ $obj=$this->db->fetch_object($result);
+ $this->stats_facture['customers']=$obj->nb_customers;
+ $this->stats_facture['nb']=$obj->nb;
+ $this->stats_facture['rows']=$obj->nb_rows;
+ $this->stats_facture['qty']=$obj->qty?$obj->qty:0;
+ return 1;
+ }
+ else
+ {
+ $this->error=$this->db->error();
+ return -1;
+ }
}