Fix: La mise a jour des produits encapsul dans transaction

This commit is contained in:
Laurent Destailleur
2005-06-11 12:10:25 +00:00
parent c30d2493fe
commit 76b8a2d0ff

View File

@@ -22,16 +22,16 @@
*/
/**
\file htdocs/product.class.php
\ingroup produit
\brief Fichier de la classe des produits pr<70>d<EFBFBD>finis
\version $Revision$
\file htdocs/product.class.php
\ingroup produit
\brief Fichier de la classe des produits pr<70>d<EFBFBD>finis
\version $Revision$
*/
/**
\class Product
\brief Classe permettant la gestion des produits pr<70>d<EFBFBD>finis
\class Product
\brief Classe permettant la gestion des produits pr<70>d<EFBFBD>finis
*/
class Product
@@ -49,6 +49,7 @@ class Product
var $duration_value;
var $duration_unit;
/**
* \brief Constructeur de la classe
* \param DB handler acc<63>s base de donn<6E>es
@@ -62,6 +63,7 @@ class Product
$this->envente = 0;
}
/**
* \brief V<>rifie que la r<>f<EFBFBD>rence et libell<6C> du produit est non null
* \return int 1 si ok, 0 sinon
@@ -89,6 +91,7 @@ class Product
}
}
/**
* \brief Ins<6E>re le produit en base
* \param user utilisateur qui effectue l'insertion
@@ -156,6 +159,7 @@ class Product
}
}
/**
* \brief Mise <20> jour du produit en base
* \param id id du produit
@@ -204,6 +208,7 @@ class Product
}
}
/**
* \brief Ajoute un changement de prix en base dans l'historique des prix
* \param user utilisateur qui modifie le prix
@@ -237,6 +242,7 @@ class Product
}
}
/**
* \brief Lit le prix d'achat pour un fournisseur
* \param id_fourn Id du fournisseur
@@ -265,63 +271,79 @@ class Product
}
return $result;
}
/**
* \brief Modifie le prix d'achat pour un fournisseur
* \param id_fourn Id du fournisseur
* \param qty Quantite pour lequel le prix est valide
* \param buyprice Prix d'achat
* \param buyprice Prix d'achat pour la quantit<69>
* \param user Objet user de l'utilisateur qui modifie
*
*/
function update_buyprice($id_fourn, $qty, $buyprice, $user)
{
{
$error=0;
$this->db->begin();
// Supprime prix courant du fournisseur pour cette quantit<69>
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price ";
$sql .= " WHERE ";
$sql .= " fk_product = ".$this->id;
$sql .= " AND fk_soc = ".$id_fourn;
$sql .= " AND quantity = ".$qty;
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price ";
$sql .= " WHERE ";
$sql .= " fk_product = ".$this->id;
$sql .= " AND fk_soc = ".$id_fourn;
$sql .= " AND quantity = ".$qty;
if ($this->db->query($sql))
{
// Ajoute prix courant du fournisseur pour cette quantit<69>
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price ";
$sql .= " SET datec = now()";
$sql .= " ,fk_product = ".$this->id;
$sql .= " ,fk_soc = ".$id_fourn;
$sql .= " ,fk_user = ".$user->id;
$sql .= " ,price = ".ereg_replace(",",".",$buyprice);
$sql .= " ,quantity = ".$qty;
if ($this->db->query($sql) )
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price_log ";
$sql .= " SET datec = now()";
$sql .= " ,fk_product = ".$this->id;
$sql .= " ,fk_soc = ".$id_fourn;
$sql .= " ,fk_user = ".$user->id;
$sql .= " ,price = ".ereg_replace(",",".",$buyprice);
$sql .= " ,quantity = ".$qty;
if (!$this->db->query($sql) )
{
$error++;
}
if (! $this->db->query($sql))
{
$error++;
}
if (! $error) {
// Ajoute modif dans table log
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price_log ";
$sql .= " SET datec = now()";
$sql .= " ,fk_product = ".$this->id;
$sql .= " ,fk_soc = ".$id_fourn;
$sql .= " ,fk_user = ".$user->id;
$sql .= " ,price = ".ereg_replace(",",".",$buyprice);
$sql .= " ,quantity = ".$qty;
if (! $this->db->query($sql))
{
$error++;
}
}
if (! $error)
{
$this->db->commit();
return 0;
}
else
{
$this->error=$this->db->error()." ($sql)";
$this->db->rollback();
return -2;
}
}
else
{
$this->error=$this->db->error()." ($sql)";
$this->db->rollback();
return -1;
}
}
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price ";
$sql .= " SET datec = now()";
$sql .= " ,fk_product = ".$this->id;
$sql .= " ,fk_soc = ".$id_fourn;
$sql .= " ,fk_user = ".$user->id;
$sql .= " ,price = ".ereg_replace(",",".",$buyprice);
$sql .= " ,quantity = ".$qty;
if ($this->db->query($sql) )
{
return 0;
}
else
{
dolibarr_print_error($this->db);
return 2;
}
}
else
{
dolibarr_print_error($this->db);
return 2;
}
}
/**
* \brief Modifie le prix d'un produit/service
@@ -356,6 +378,7 @@ class Product
}
}
/**
* \brief Charge le produit/service en m<>moire
* \param id id du produit/service <20> charger
@@ -436,6 +459,7 @@ class Product
}
}
/**
* \brief Renvoie le nombre de propale incluant le produit/service
* \param socid id societe
@@ -465,6 +489,7 @@ class Product
}
}
/**
* \brief Renvoie le nombre de client avec propale incluant le produit/service
* \param socid id societe
@@ -494,6 +519,7 @@ class Product
}
}
/**
* \brief Renvoie le nombre de facture incluant le produit/service
* \param socid id societe
@@ -524,6 +550,7 @@ class Product
}
}
/**
* \brief Renvoie des stats
* \param sql requete a ex<65>cuter
@@ -577,6 +604,7 @@ class Product
}
/**
* \brief Renvoie le nombre de ventes du produit/service par mois
* \param socid id societe
@@ -597,6 +625,7 @@ class Product
return $this->_get_stats($sql);
}
/**
* \brief Renvoie le nombre de factures dans lesquelles figure le produit par mois
* \param socid id societe
@@ -617,6 +646,7 @@ class Product
return $this->_get_stats($sql);
}
/**
* \brief Renvoie le nombre de propales dans lesquelles figure le produit par mois
* \param socid id societe
@@ -637,50 +667,52 @@ class Product
return $this->_get_stats($sql);
}
/**
* \brief Lie un fournisseur au produit/service
* \param user utilisateur qui fait le lien
* \param id_fourn id du fournisseur
* \param ref_fourn reference chez le fournisseur
* \brief Lie un fournisseur au produit/service
* \param user Utilisateur qui fait le lien
* \param id_fourn Id du fournisseur
* \param ref_fourn Reference chez le fournisseur
* \return int < 0 si erreur, > 0 si ok
*/
function add_fournisseur($user, $id_fourn, $ref_fourn)
{
$sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."product_fournisseur WHERE fk_product = $this->id AND fk_soc = $id_fourn";
if ($this->db->query($sql) )
{
$row = $this->db->fetch_row(0);
$this->db->free();
if ($row[0] == 0)
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur ";
$sql .= " (datec, fk_product, fk_soc, ref_fourn, fk_user_author)";
$sql .= " VALUES (now(), $this->id, $id_fourn, '$ref_fourn', $user->id)";
if ($this->db->query($sql) )
{
return 1;
}
else
{
return -1;
}
}
else
{
return -2;
}
}
else
{
dolibarr_print_error($this->db);
return -3;
}
$sql = "SELECT count(*) as nb";
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur";
$sql.= " WHERE fk_product = ".$this->id." AND fk_soc = ".$id_fourn;
$sql.= " AND ref_fourn = '".$ref_fourn."'";
$resql=$this->db->query($sql);
if ($resql)
{
$obj = $this->db->fetch_object($resql);
if ($obj->nb == 0)
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur ";
$sql .= " (datec, fk_product, fk_soc, ref_fourn, fk_user_author)";
$sql .= " VALUES (now(), $this->id, $id_fourn, '$ref_fourn', $user->id)";
if ($this->db->query($sql))
{
return 1;
}
else
{
$this->error=$this->db->error();
return -1;
}
}
$this->db->free($resql);
}
else
{
$this->error=$this->db->error();
return -2;
}
}
/**
* \brief Renvoie le nombre de fournisseurs
* \return int nombre de fournisseur
@@ -715,6 +747,7 @@ class Product
}
}
/**
*
*
@@ -735,6 +768,7 @@ class Product
}
/**
* \brief D<>lie un fournisseur au produit/service
* \param user utilisateur qui d<>fait le lien
@@ -757,6 +791,7 @@ class Product
}
}
/**
* \brief Entre un nombre de piece du produit en stock dans un entrep<65>t
* \param id_entrepot id de l'entrepot
@@ -781,6 +816,7 @@ class Product
}
}
/**
* \brief Ajuste le stock d'un entrep<65>t pour le produit <20> une valeure donn<6E>e
* \param user utilisateur qui demande l'ajustement
@@ -815,6 +851,7 @@ class Product
}
}
/**
* \brief Augment ou r<>duit la valeur de stock pour le produit
* \param user utilisateur qui demande l'ajustement
@@ -873,11 +910,12 @@ class Product
}
}
}
/**
* \brief Charge les informations relatives <20> un fournisseur
* \param id id du fournisseur
*/
function fetch_fourn_data ($id)
{
$sql = "SELECT rowid, ref_fourn";
@@ -894,6 +932,7 @@ class Product
}
}
/**
* \brief D<>place fichier upload<61> sous le nom $files dans le r<>pertoire sdir
* \param sdir R<>pertoire destination finale
@@ -920,6 +959,7 @@ class Product
}
}
/**
* \brief Affiche la premi<6D>re photo du produit
* \param sdir R<>pertoire <20> scanner
@@ -931,6 +971,7 @@ class Product
return $this->show_photos($sdir,$size,1);
}
/**
* \brief Affiche toutes les photos du produit (nbmax maximum)
* \param sdir R<>pertoire <20> scanner
@@ -949,7 +990,7 @@ class Product
{
$handle=opendir($dir);
while (($file = readdir($handle))!==false)
while (($file = readdir($handle)) != false)
{
$photo='';
if (is_file($dir.$file)) $photo = $file;
@@ -985,6 +1026,8 @@ class Product
else print '&nbsp;';
}
}
closedir($handle);
}
return $nbphoto;