mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2026-02-07 16:41:48 +01:00
Fix: La mise a jour des produits encapsul dans transaction
This commit is contained in:
@@ -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 ' ';
|
||||
}
|
||||
}
|
||||
|
||||
closedir($handle);
|
||||
}
|
||||
|
||||
return $nbphoto;
|
||||
|
||||
Reference in New Issue
Block a user