From a76ffc8777d9ee5d08a1bbffa790b2109cdeb3bf Mon Sep 17 00:00:00 2001 From: tiaris Date: Fri, 29 Jul 2011 06:59:36 +0000 Subject: [PATCH] canot delete product with supplier refs --- htdocs/product/class/product.class.php | 247 ++++++++++++++----------- 1 file changed, 135 insertions(+), 112 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 8bccf934120..d6f7baf831e 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -17,14 +17,15 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /** * \file htdocs/product/class/product.class.php * \ingroup produit * \brief Fichier de la classe des produits predefinis - * \version $Id: product.class.php,v 1.48 2011/07/31 23:24:03 eldy Exp $ + * \version $Id: product.class.php,v 1.46 2011/07/29 06:59:36 tiaris Exp $ */ require_once(DOL_DOCUMENT_ROOT ."/core/class/commonobject.class.php"); @@ -190,15 +191,14 @@ class Product extends CommonObject /** * Insert product into database - * @param user User making insert - * @param notrigger Disable triggers - * @return int Id of product/service if OK or number of error < 0 + * @param user User making insert + * @return int id of product/service if OK or number of error < 0 */ - function create($user,$notrigger=0) + function create($user) { - global $conf, $langs; + global $conf ; - $error=0; + $this->errno = 0; // Clean parameters $this->ref = dol_string_nospecial(trim($this->ref)); @@ -250,149 +250,172 @@ class Product extends CommonObject $this->error='ErrorWrongParameters'; return -1; } - if (empty($this->ref)) - { - $this->error='ErrorWrongParameters'; - return -2; - } dol_syslog("Product::Create ref=".$this->ref." price=".$this->price." price_ttc=".$this->price_ttc." tva_tx=".$this->tva_tx." price_base_type=".$this->price_base_type." Category : ".$this->catid, LOG_DEBUG); - - $this->db->begin(); - - $sql = "SELECT count(*) as nb"; - $sql.= " FROM ".MAIN_DB_PREFIX."product"; - $sql.= " WHERE ref = '" .$this->ref."'"; - $sql.= " AND entity = ".$conf->entity; - - $result = $this->db->query($sql); - if ($result) + if ($this->ref) { - $obj = $this->db->fetch_object($result); - if ($obj->nb == 0) + $this->db->begin(); + + $sql = "SELECT count(*)"; + $sql.= " FROM ".MAIN_DB_PREFIX."product"; + $sql.= " WHERE ref = '" .$this->ref."'"; + $sql.= " AND entity = ".$conf->entity; + + $result = $this->db->query($sql) ; + if ($result) { - // Produit non deja existant - $sql = "INSERT INTO ".MAIN_DB_PREFIX."product ("; - $sql.= "datec"; - $sql.= ", entity"; - $sql.= ", ref"; - $sql.= ", price_min"; - $sql.= ", price_min_ttc"; - $sql.= ", label"; - $sql.= ", fk_user_author"; - $sql.= ", fk_product_type"; - $sql.= ", price"; - $sql.= ", price_ttc"; - $sql.= ", price_base_type"; - $sql.= ", tobuy"; - $sql.= ", tosell"; - $sql.= ", canvas"; - $sql.= ", finished"; - $sql.= ", hidden"; - $sql.= ") VALUES ("; - $sql.= $this->db->idate(mktime()); - $sql.= ", ".$conf->entity; - $sql.= ", '".$this->ref."'"; - $sql.= ", ".price2num($price_min_ht); - $sql.= ", ".price2num($price_min_ttc); - $sql.= ", ".($this->libelle?"'".$this->db->escape($this->libelle)."'":"null"); - $sql.= ", ".$user->id; - $sql.= ", ".$this->type; - $sql.= ", ".price2num($price_ht); - $sql.= ", ".price2num($price_ttc); - $sql.= ", '".$this->price_base_type."'"; - $sql.= ", ".$this->status; - $sql.= ", ".$this->status_buy; - $sql.= ", '".$this->canvas."'"; - $sql.= ", ".$this->finished; - $sql.= ", ".$this->hidden; - $sql.= ")"; - - dol_syslog("Product::Create sql=".$sql); - $result = $this->db->query($sql); - if ( $result ) + $row = $this->db->fetch_array($result); + if ($row[0] == 0) { - $id = $this->db->last_insert_id(MAIN_DB_PREFIX."product"); + // Produit non deja existant + $sql = "INSERT INTO ".MAIN_DB_PREFIX."product ("; + $sql.= "datec"; + $sql.= ", entity"; + $sql.= ", ref"; + $sql.= ", price_min"; + $sql.= ", price_min_ttc"; + $sql.= ", label"; + $sql.= ", fk_user_author"; + $sql.= ", fk_product_type"; + $sql.= ", price"; + $sql.= ", price_ttc"; + $sql.= ", price_base_type"; + $sql.= ", canvas"; + $sql.= ", finished"; + $sql.= ", hidden"; + $sql.= ") VALUES ("; + $sql.= $this->db->idate(mktime()); + $sql.= ", ".$conf->entity; + $sql.= ", '".$this->ref."'"; + $sql.= ", ".price2num($price_min_ht); + $sql.= ", ".price2num($price_min_ttc); + $sql.= ", ".($this->libelle?"'".$this->db->escape($this->libelle)."'":"null"); + $sql.= ", ".$user->id; + $sql.= ", ".$this->type; + $sql.= ", ".price2num($price_ht); + $sql.= ", ".price2num($price_ttc); + $sql.= ", '".$this->price_base_type."'"; + $sql.= ", '".$this->canvas."'"; + $sql.= ", ".$this->finished; + $sql.= ", ".$this->hidden; + $sql.= ")"; - if ($id > 0) + dol_syslog("Product::Create sql=".$sql); + $result = $this->db->query($sql); + if ( $result ) { - $this->id = $id; - $this->price = $price_ht; - $this->price_ttc = $price_ttc; - $this->price_min = $price_min_ht; - $this->price_min_ttc = $price_min_ttc; + $id = $this->db->last_insert_id(MAIN_DB_PREFIX."product"); - $result = $this->_log_price($user); - if ($result > 0) + if ($id > 0) { - if ( $this->update($id, $user) > 0) + $this->id = $id; + $this->price = $price_ht; + $this->price_ttc = $price_ttc; + $this->price_min = $price_min_ht; + $this->price_min_ttc = $price_min_ttc; + + $result = $this->_log_price($user); + if ($result > 0) { - if ($this->catid > 0) + if ( $this->update($id, $user) > 0) { - require_once(DOL_DOCUMENT_ROOT ."/categories/class/categorie.class.php"); - $cat = new Categorie($this->db, $this->catid); - $cat->add_type($this,"product"); + if ($this->catid > 0) + { + require_once(DOL_DOCUMENT_ROOT ."/categories/class/categorie.class.php"); + $cat = new Categorie($this->db, $this->catid); + $cat->add_type($this,"product"); + } + } + else + { + $this->_setErrNo("Create",260,$this->error); } } else { - $error++; - $this->error='ErrorFailedToUpdateRecord'; + $this->error=$this->db->error(); + $this->_setErrNo("Create",264,$this->error); } } else { - $error++; - $this->error=$this->db->lasterror(); + $this->_setErrNo("Create",259); } } else { - $error++; - $this->error='ErrorFailedToGetInsertedId'; + $this->error=$this->db->error(); + $this->_setErrNo("Create",258,$this->error); } } else { - $error++; - $this->error=$this->db->lasterror(); + // Le produit existe deja + $this->error='ErrorProductAlreadyExists'; } } else { - // Product already exists with this ref - $langs->trans("Error")." : ".$langs->trans("ErrorProductAlreadyExists",$this->ref); + $this->_setErrNo("Create",263); + } + + /* + * END COMMIT + */ + + if ($this->errno === 0) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('PRODUCT_CREATE',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + + $this->db->commit(); + return $id; + } + else + { + $this->db->rollback(); + return -1; } } else { - $error++; - $this->error=$this->db->lasterror(); + $this->_setErrNo("Create",262); + + return -2; } - if (! $error && ! $notrigger) - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PRODUCT_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } - - if (! $error) - { - $this->db->commit(); - return $this->id; - } - else - { - $this->db->rollback(); - return -$error; - } + return -1; } + /** + * Positionne le numero d'erreur + * @param func Nom de la fonction + * @param num Numero de l'erreur + * @param error string + */ + function _setErrNo($func, $num, $error='') + { + $this->errno = $num; + dol_syslog(get_class($this)."::".$func." - ERRNO(".$this->errno.")".($error?' - '.$error:''), LOG_ERR); + } + + /** + * Retourne le texte de l'erreur + */ + function error() + { + $errs[257] = "ErrorProductAlreadyExists"; + $errs[262] = "ErrorProductBadRefOrLabel"; + + return $errs[$this->errno]; + } + + /** * Update a record into database * @param id Id of product @@ -2138,7 +2161,7 @@ class Product extends CommonObject $prods[$this->db->escape($rec['label'])][$keyChild] = $valueChild; } } - + return $prods; } else