Meilleur formatage du rapport mensuel des actions
This commit is contained in:
parent
82eedce4b6
commit
453e7d5304
@ -45,6 +45,7 @@ class CommActionRapport
|
|||||||
function CommActionRapport($db=0, $month, $year)
|
function CommActionRapport($db=0, $month, $year)
|
||||||
{
|
{
|
||||||
global $langs;
|
global $langs;
|
||||||
|
$langs->load("commercial");
|
||||||
|
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
$this->description = "";
|
$this->description = "";
|
||||||
|
|||||||
@ -36,26 +36,30 @@
|
|||||||
|
|
||||||
class Product
|
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 $stats_propale=array();
|
||||||
var $ref;
|
var $stats_commande=array();
|
||||||
var $libelle;
|
var $stats_contrat=array();
|
||||||
var $description;
|
var $stats_facture=array();
|
||||||
var $price;
|
|
||||||
var $tva_tx;
|
|
||||||
var $type;
|
|
||||||
var $seuil_stock_alerte;
|
|
||||||
var $duration_value;
|
|
||||||
var $duration_unit;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Constructeur de la classe
|
* \brief Constructeur de la classe
|
||||||
* \param DB handler accès base de données
|
* \param DB Handler accès base de données
|
||||||
* \param id id produit (0 par defaut)
|
* \param id Id produit (0 par defaut)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function Product($DB, $id=0)
|
function Product($DB, $id=0)
|
||||||
{
|
{
|
||||||
$this->db = $DB;
|
$this->db = $DB;
|
||||||
@ -66,8 +70,8 @@ class Product
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Vérifie que la référence et libellé du produit est non null
|
* \brief Vérifie que la référence et libellé du produit est non null
|
||||||
* \return int 1 si ok, 0 sinon
|
* \return int 1 si ok, 0 sinon
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function check()
|
function check()
|
||||||
@ -355,209 +359,256 @@ class Product
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Modifie le prix d'un produit/service
|
* \brief Modifie le prix d'un produit/service
|
||||||
* \param id id du produit/service à modifier
|
* \param id id du produit/service à modifier
|
||||||
* \param user utilisateur qui modifie le prix
|
* \param user utilisateur qui modifie le prix
|
||||||
*/
|
*/
|
||||||
|
function update_price($id, $user)
|
||||||
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 = '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$this->id.'">'.$this->libelle.'</a>';
|
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
$sql = "SELECT pd.fk_propal";
|
if (strlen(trim($this->price)) > 0 )
|
||||||
$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;
|
$sql = "UPDATE ".MAIN_DB_PREFIX."product ";
|
||||||
if ($socid > 0)
|
$sql .= " SET price = " . ereg_replace(",",".",$this->price);
|
||||||
{
|
$sql .= " WHERE rowid = " . $id;
|
||||||
$sql .= " AND pr.fk_soc = $socid";
|
|
||||||
}
|
if ( $this->db->query($sql) )
|
||||||
$sql .= " GROUP BY pd.fk_propal";
|
{
|
||||||
|
$this->_log_price($user);
|
||||||
$result = $this->db->query($sql) ;
|
return 1;
|
||||||
|
}
|
||||||
if ( $result )
|
else
|
||||||
{
|
{
|
||||||
return $this->db->num_rows();
|
dolibarr_print_error($this->db);
|
||||||
}
|
return -1;
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
return 0;
|
else
|
||||||
}
|
{
|
||||||
|
$this->error = "Prix saisi invalide.";
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Renvoie le nombre de client avec propale incluant le produit/service
|
* \brief Charge le produit/service en mémoire
|
||||||
* \param socid id societe
|
* \param id id du produit/service à charger
|
||||||
* \return int nombre d'inclusion
|
*/
|
||||||
*/
|
function fetch ($id)
|
||||||
|
|
||||||
function count_propale_client($socid=0)
|
|
||||||
{
|
{
|
||||||
$sql = "SELECT pr.fk_soc";
|
$sql = "SELECT rowid, ref, label, description, price, tva_tx, envente, nbvente, fk_product_type, duration, seuil_stock_alerte";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."propaldet as pd, ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."propal as pr";
|
$sql .= " FROM ".MAIN_DB_PREFIX."product WHERE rowid = $id";
|
||||||
$sql .= " WHERE p.rowid = pd.fk_product AND pd.fk_propal = pr.rowid AND p.rowid = ".$this->id;
|
|
||||||
if ($socid > 0)
|
$result = $this->db->query($sql) ;
|
||||||
{
|
|
||||||
$sql .= " AND pr.fk_soc = $socid";
|
if ( $result )
|
||||||
}
|
{
|
||||||
$sql .= " GROUP BY pr.fk_soc";
|
$result = $this->db->fetch_array();
|
||||||
|
|
||||||
$result = $this->db->query($sql) ;
|
$this->id = $result["rowid"];
|
||||||
|
$this->ref = $result["ref"];
|
||||||
if ( $result )
|
$this->libelle = stripslashes($result["label"]);
|
||||||
{
|
$this->description = stripslashes($result["description"]);
|
||||||
return $this->db->num_rows();
|
$this->price = $result["price"];
|
||||||
}
|
$this->tva_tx = $result["tva_tx"];
|
||||||
else
|
$this->type = $result["fk_product_type"];
|
||||||
{
|
$this->nbvente = $result["nbvente"];
|
||||||
return 0;
|
$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 = '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$this->id.'">'.$this->libelle.'</a>';
|
||||||
|
|
||||||
|
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
|
* \brief Charge tableau des stats propale pour le produit/service
|
||||||
* \param socid id societe
|
* \param socid Id societe
|
||||||
* \return int nombre d'inclusion
|
* \return array Tableau des stats
|
||||||
*/
|
*/
|
||||||
|
function load_stats_propale($socid=0)
|
||||||
function count_facture($socid=0)
|
|
||||||
{
|
{
|
||||||
$sql = "SELECT pd.fk_facture";
|
$sql = "SELECT COUNT(DISTINCT pr.fk_soc) as nb_customers, COUNT(DISTINCT pr.rowid) as nb,";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."facturedet as pd, ".MAIN_DB_PREFIX."product as p";
|
$sql.= " COUNT(pd.rowid) as nb_rows, SUM(pd.qty) as qty";
|
||||||
$sql .= ", ".MAIN_DB_PREFIX."facture as f";
|
$sql.= " FROM ".MAIN_DB_PREFIX."propaldet as pd, ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."propal as pr";
|
||||||
$sql .= " WHERE f.rowid = pd.fk_facture AND p.rowid = pd.fk_product AND p.rowid = ".$this->id;
|
$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_statut != 0";
|
||||||
{
|
if ($socid > 0)
|
||||||
$sql .= " AND f.fk_soc = $socid";
|
{
|
||||||
}
|
$sql .= " AND pr.fk_soc = $socid";
|
||||||
$sql .= " GROUP BY pd.fk_facture";
|
}
|
||||||
|
|
||||||
|
$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 )
|
/**
|
||||||
{
|
* \brief Charge tableau des stats commande pour le produit/service
|
||||||
return $this->db->num_rows();
|
* \param socid Id societe
|
||||||
}
|
* \return array Tableau des stats
|
||||||
else
|
*/
|
||||||
{
|
function load_stats_commande($socid=0)
|
||||||
return 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user