diff --git a/htdocs/business/class/business.class.php b/htdocs/business/class/business.class.php deleted file mode 100644 index ae11aab5637..00000000000 --- a/htdocs/business/class/business.class.php +++ /dev/null @@ -1,707 +0,0 @@ - - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/** - * \file htdocs/business/class/business.class.php - * \ingroup business - * \brief Fichier de la classe de gestion des affaires - * \version $Id$ - */ -require_once(DOL_DOCUMENT_ROOT ."/core/commonobject.class.php"); - -/** - * \class Business - * \brief Class to manage business - */ -class Business extends CommonObject -{ - var $db; //!< To store db handler - var $error; //!< To return error code (or message) - var $errors=array(); //!< To return several error codes (or messages) - var $element='business'; //!< Id that identify managed objects - var $table_element='business'; //!< Name of table without prefix where object is stored - var $table_element_line='business_phase'; - var $fk_element='fk_business'; - - var $id; - var $ref; - var $description; - var $statut; - var $label; - var $date_c; - var $date_m; - var $date_start; - var $date_end; - var $socid; - var $user_author_id; //!< Id of business creator. Not defined if shared business. - var $public; //!< Tell if this is a public or private business - var $note_private; - var $note_public; - - var $statuts_short; - var $statuts; - - /** - * \brief Constructeur de la classe - * \param DB handler acces base de donnees - */ - function Business($DB) - { - $this->db = $DB; - $this->societe = new Societe($DB); - - $this->statuts_short=array(0=>'Draft',1=>'Validated',2=>'Closed'); - $this->statuts=array(0=>'Draft',1=>'Validated',2=>'Closed'); - } - - /** - * \brief Create a business into database - * \param user Id utilisateur qui cree - * \return int <0 si ko, id du projet cree si ok - */ - function create($user, $notrigger=0) - { - global $conf; - - $ret=0; - - // Clean parameters - $this->label = trim($this->label); - $this->description = trim($this->description); - - // Check parameters - if (! trim($this->ref)) - { - $this->error='ErrorFieldsRequired'; - dol_syslog("Business::Create error -1 ref null", LOG_ERR); - return -1; - } - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."business ("; - $sql.= "ref"; - $sql.= ", label"; - $sql.= ", description"; - $sql.= ", fk_soc"; - $sql.= ", fk_user_creat"; - $sql.= ", public"; - $sql.= ", datec"; - $sql.= ", dateo"; - $sql.= ", datee"; - $sql.= ") VALUES ("; - $sql.= "'".addslashes($this->ref)."'"; - $sql.= ", '".addslashes($this->label)."'"; - $sql.= ", '".addslashes($this->description)."'"; - $sql.= ", ".($this->socid > 0?$this->socid:"null"); - $sql.= ", ".$user->id; - $sql.= ", ".($this->public?1:0); - $sql.= ", ".($this->date_c!=''?$this->db->idate($this->date_c):'null'); - $sql.= ", ".($this->date_start!=''?$this->db->idate($this->date_start):'null'); - $sql.= ", ".($this->date_end!=''?$this->db->idate($this->date_end):'null'); - $sql.= ")"; - - dol_syslog("Business::create sql=".$sql,LOG_DEBUG); - $resql=$this->db->query($sql); - if ($resql) - { - $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."business"); - $ret = $this->id; - - if (! $notrigger) - { - // Call triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('BUSINESS_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers - } - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog("Business::Create error -2 ".$this->error, LOG_ERR); - $ret = -2; - } - - return $ret; - } - - - /** - * Update a business - * - * @param unknown_type $user - * @return unknown - */ - function update($user, $notrigger=0) - { - global $conf; - - // Clean parameters - $this->label = trim($this->label); - $this->description = trim($this->description); - - if (strlen(trim($this->ref)) > 0) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."business SET"; - $sql.= " ref='".$this->ref."'"; - $sql.= ", label = '".addslashes($this->label)."'"; - $sql.= ", description = '".addslashes($this->description)."'"; - $sql.= ", fk_soc = ".($this->socid > 0?$this->socid:"null"); - $sql.= ", fk_statut = ".$this->statut; - $sql.= ", public = ".($this->public?1:0); - $sql.= ", datec=".($this->date_c!=''?$this->db->idate($this->date_c):'null'); - $sql.= ", dateo=".($this->date_start!=''?$this->db->idate($this->date_start):'null'); - $sql.= ", datee=".($this->date_end!=''?$this->db->idate($this->date_end):'null'); - $sql.= " WHERE rowid = ".$this->id; - - dol_syslog("Business::Update sql=".$sql,LOG_DEBUG); - if ($this->db->query($sql) ) - { - if (! $notrigger) - { - // Call triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('BUSINESS_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers - } - - $result = 1; - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog("Business::Update error -2 ".$this->error, LOG_ERR); - $result = -2; - } - } - else - { - dol_syslog("Business::Update ref null"); - $result = -1; - } - - return $result; - } - - - /** - * \brief Get object and lines from database - * \param rowid id of object to load - * \param ref Ref of business - * \return int >0 if OK, <0 if KO - */ - function fetch($id,$ref='') - { - if (empty($id) && empty($ref)) return -1; - - $sql = "SELECT rowid, ref, label, description, public, datec"; - $sql.= ", tms, dateo, datee, fk_soc, fk_user_creat, fk_statut, note_private, note_public"; - $sql.= " FROM ".MAIN_DB_PREFIX."business"; - if ($ref) $sql.= " WHERE ref='".$ref."'"; - else $sql.= " WHERE rowid=".$id; - - dol_syslog("Business::fetch sql=".$sql, LOG_DEBUG); - $resql = $this->db->query($sql); - if ($resql) - { - if ($this->db->num_rows($resql)) - { - $obj = $this->db->fetch_object($resql); - - $this->id = $obj->rowid; - $this->ref = $obj->ref; - $this->label = $obj->label; - $this->description = $obj->description; - $this->date_c = $this->db->jdate($obj->datec); - $this->date_m = $this->db->jdate($obj->tms); - $this->date_start = $this->db->jdate($obj->dateo); - $this->date_end = $this->db->jdate($obj->datee); - $this->note_private = $obj->note_private; - $this->note_public = $obj->note_public; - $this->socid = $obj->fk_soc; - $this->user_author_id = $obj->fk_user_creat; - $this->public = $obj->public; - $this->statut = $obj->fk_statut; - - $this->db->free($resql); - - return 1; - } - else - { - return -1; - } - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog("Business::fetch ".$this->error, LOG_ERR); - return -2; - } - } - - /** - * \brief Return list of business - * \param socid To filter on a particular third party - * \return array Business list - */ - function liste_array($socid='') - { - global $conf; - - $business = array(); - - $sql = "SELECT rowid, label"; - $sql.= " FROM ".MAIN_DB_PREFIX."business"; - $sql.= " WHERE entity = ".$conf->entity; - if (! empty($socid)) $sql.= " AND fk_soc = ".$socid; - - $resql=$this->db->query($sql); - if ($resql) - { - $nump = $this->db->num_rows($resql); - - if ($nump) - { - $i = 0; - while ($i < $nump) - { - $obj = $this->db->fetch_object($resql); - - $business[$obj->rowid] = $obj->label; - $i++; - } - } - return $business; - } - else - { - print $this->db->lasterror(); - } - - } - - /** - * \brief Delete business in database - * \param User - */ - function delete($user, $notrigger=0) - { - global $conf; - - $this->db->begin(); - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."business"; - $sql.= " WHERE rowid=".$this->id; - - $resql = $this->db->query($sql); - if ($resql) - { - // We remove directory - $businessref = dol_sanitizeFileName($this->ref); - if ($conf->business->dir_output) - { - $dir = $conf->business->dir_output . "/" . $businessref; - if (file_exists($dir)) - { - $res=@dol_delete_dir($dir); - if (! $res) - { - $this->error='ErrorFailToDeleteDir'; - $this->db->rollback(); - return 0; - } - } - } - - if (! $notrigger) - { - // Call triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('BUSINESS_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers - } - - dol_syslog("Business::delete sql=".$sql, LOG_DEBUG); - $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog("Business::delete ".$this->error, LOG_ERR); - $this->db->rollback(); - return -1; - } - } - - /** - * \brief Validate a business - * \param user User that validate - * \return int <0 if KO, >0 if OK - */ - function setValid($user, $outputdir) - { - global $langs, $conf; - - if ($this->statut != 1) - { - $this->db->begin(); - - $sql = "UPDATE ".MAIN_DB_PREFIX."business"; - $sql.= " SET fk_statut = 1"; - $sql.= " WHERE rowid = ".$this->id; - $sql.= " AND entity = ".$conf->entity; - - dol_syslog("Business::setValid sql=".$sql); - $resql=$this->db->query($sql); - if ($resql) - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('BUSINESS_VALIDATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - - if (! $error) - { - $this->db->commit(); - return 1; - } - else - { - $this->db->rollback(); - $this->error=join(',',$this->errors); - dol_syslog("Business::setValid ".$this->error,LOG_ERR); - return -1; - } - } - else - { - $this->db->rollback(); - $this->error=$this->db->lasterror(); - dol_syslog("Business::setValid ".$this->error,LOG_ERR); - return -1; - } - } - } - - /** - * \brief Close a business - * \param user User that validate - * \return int <0 if KO, >0 if OK - */ - function setClose($user, $outputdir) - { - global $langs, $conf; - - if ($this->statut != 2) - { - $this->db->begin(); - - $sql = "UPDATE ".MAIN_DB_PREFIX."business"; - $sql.= " SET fk_statut = 2"; - $sql.= " WHERE rowid = ".$this->id; - $sql.= " AND entity = ".$conf->entity; - $sql.= " AND fk_statut = 1"; - - dol_syslog("Business::setClose sql=".$sql); - $resql=$this->db->query($sql); - if ($resql) - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('BUSINESS_CLOSE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - - if (! $error) - { - $this->db->commit(); - return 1; - } - else - { - $this->db->rollback(); - $this->error=join(',',$this->errors); - dol_syslog("Business::setClose ".$this->error,LOG_ERR); - return -1; - } - } - else - { - $this->db->rollback(); - $this->error=$this->db->lasterror(); - dol_syslog("Business::setClose ".$this->error,LOG_ERR); - return -1; - } - } - } - - /** - * \brief Return status label of object - * \param mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto - * \return string Label - */ - function getLibStatut($mode=0) - { - return $this->LibStatut($this->statut,$mode); - } - - /** - * \brief Return status label of object - * \param statut id statut - * \param mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto - * \return string Label - */ - function LibStatut($statut,$mode=0) - { - global $langs; - - if ($mode == 0) - { - return $langs->trans($this->statuts[$statut]); - } - if ($mode == 1) - { - return $langs->trans($this->statuts_short[$statut]); - } - if ($mode == 2) - { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0').' '.$langs->trans($this->statuts_short[$statut]); - if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts_short[$statut]); - if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts_short[$statut]); - } - if ($mode == 3) - { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0'); - if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4'); - if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6'); - } - if ($mode == 4) - { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0').' '.$langs->trans($this->statuts_short[$statut]); - if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts_short[$statut]); - if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts_short[$statut]); - } - if ($mode == 5) - { - if ($statut==0) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut0'); - if ($statut==1) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut1'); - if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts_short[$statut]); - } - } - - /** - * \brief Renvoie nom clicable (avec eventuellement le picto) - * \param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul - * \param option Sur quoi pointe le lien - * \return string Chaine avec URL - */ - function getNomUrl($withpicto=0,$option='') - { - global $langs; - - $result=''; - - $lien = ''; - $lienfin=''; - - $picto='businesspub@business'; - if (! $this->public) $picto='business@business'; - - $label=$langs->trans("ShowBusiness").': '.$this->ref.($this->label?' - '.$this->label:''); - - if ($withpicto) $result.=($lien.img_object($label,$picto).$lienfin); - if ($withpicto && $withpicto != 2) $result.=' '; - if ($withpicto != 2) $result.=$lien.$this->ref.$lienfin; - return $result; - } - - /** - * \brief Check permissions - */ - function restrictedBusinessArea($user,$list=0) - { - // To verify role of users - $userAccess = 0; - if ((!empty($this->user_author_id) && $this->user_author_id == $user->id) || $user->rights->business->all->read) - { - $userAccess = 1; - } - else if ($this->public && $user->rights->business->read) - { - $userAccess = 1; - } - else - { - foreach(array('internal','external') as $source) - { - $userRole = $this->liste_contact(4,$source); - $num=sizeof($userRole); - - $i = 0; - while ($i < $num) - { - if ($userRole[$i]['code'] == 'ACCOUNTMANAGER' && $user->id == $userRole[$i]['id']) - { - $userAccess++; - } - $i++; - } - } - } - - if (!$userAccess && !$this->public) - { - if (!$list) - { - accessforbidden('',0); - } - else - { - return -1; - } - - } - - return $userAccess; - } - - /** - * Return array of business authorized for a user - * - * @param unknown_type $user - * @return unknown - */ - function getBusinessAuthorizedForUser($user,$mine=0,$list=0) - { - global $conf; - - $business = array(); - $temp = array(); - - $sql = "SELECT DISTINCT b.rowid, b.ref"; - $sql.= " FROM ".MAIN_DB_PREFIX."business as b"; - $sql.= ", ".MAIN_DB_PREFIX."element_contact as ec"; - $sql.= ", ".MAIN_DB_PREFIX."c_type_contact as ctc"; - $sql.= " WHERE b.entity = ".$conf->entity; - - if ($mine) - { - $sql.= " AND ec.element_id = b.rowid"; - $sql.= " AND ctc.rowid = ec.fk_c_type_contact"; - $sql.= " AND ctc.element = '".$this->element."'"; - $sql.= " AND ec.fk_socpeople = ".$user->id; - } - else - { - $sql.= " AND ( b.public = 1"; - $sql.= " OR b.fk_user_creat = ".$user->id; - $sql.= " OR ( ec.element_id = b.rowid"; - $sql.= " AND ctc.rowid = ec.fk_c_type_contact"; - $sql.= " AND ctc.element = '".$this->element."'"; - $sql.= " AND ec.fk_socpeople = ".$user->id." ) )"; - } - - $resql = $this->db->query($sql); - if ($resql) - { - $num = $this->db->num_rows($resql); - $i = 0; - while ($i < $num) - { - $row = $this->db->fetch_row($resql); - $business[$row[0]] = $row[1]; - $temp[] = $row[0]; - $i++; - } - - $this->db->free($resql); - - if ($list) - { - if (empty($temp)) return 0; - $result = implode(',',$temp); - return $result; - } - } - else - { - dol_print_error($this->db); - } - - return $business; - } - - /** - * Return list of roles for a user for each projects or each tasks (or a particular project or task) - * @param user - * @param businessid Business id to filter on a business - * @return array Array (businessid => 'list of roles for business') - */ - function getUserRolesForBusiness($user,$businessid=0) - { - $businessrole = array(); - - dol_syslog("Phase::getUserRolesForBusiness user=".is_object($user)." businessid=".$businessid); - - $sql = "SELECT b.rowid as businessid, ec.element_id, ctc.code"; - $sql.= " FROM ".MAIN_DB_PREFIX."business as b"; - $sql.= ", ".MAIN_DB_PREFIX."element_contact as ec"; - $sql.= ", ".MAIN_DB_PREFIX."c_type_contact as ctc"; - $sql.= " WHERE b.rowid = ec.element_id"; - $sql.= " AND ctc.element = 'business'"; - $sql.= " AND ctc.rowid = ec.fk_c_type_contact"; - if (is_object($user)) $sql.= " AND ec.fk_socpeople = ".$user->id; - $sql.= " AND ec.statut = 4"; - if ($businessid) $sql.= " AND b.rowid = ".$businessid; - - print $sql.'
'; - dol_syslog("Phase::getUserRolesForBusiness sql=".$sql); - $resql = $this->db->query($sql); - if ($resql) - { - $num = $this->db->num_rows($resql); - $i = 0; - while ($i < $num) - { - $obj = $this->db->fetch_object($resql); - if (empty($businessrole[$obj->businessid])) $businessrole[$obj->businessid] = $obj->code; - else $businessrole[$obj->businessid].=','.$obj->code; - $i++; - } - $this->db->free($resql); - } - else - { - dol_print_error($this->db); - } - - return $businessrole; - } - -} -?> diff --git a/htdocs/business/class/phase.class.php b/htdocs/business/class/phase.class.php deleted file mode 100644 index c55561cfd3d..00000000000 --- a/htdocs/business/class/phase.class.php +++ /dev/null @@ -1,890 +0,0 @@ - - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/** - * \file htdocs/business/class/phase.class.php - * \ingroup business - * \brief This file is a class to manage phases of business - * \version $Id$ - */ - - -/** - * \class Phase - * \brief Class to manage phases of business - */ -class Phase extends CommonObject -{ - var $db; //!< To store db handler - var $error; //!< To return error code (or message) - var $errors=array(); //!< To return several error codes (or messages) - var $element='business_phase'; //!< Id that identify managed objects - var $table_element='business_phase'; //!< Name of table without prefix where object is stored - - var $id; - - var $fk_business; - var $fk_milestone; - var $label; - var $description; - var $date_c; - var $date_start; - var $date_end; - var $progress; - var $priority; - var $fk_user_creat; - var $fk_user_valid; - var $statut; - var $note_private; - var $note_public; - - var $total_ht; // Total net of tax - var $total_tva; // Total VAT - var $total_ttc; // Total with tax - var $tva_tx; - - /** - * \brief Constructor - * \param DB Database handler - */ - function Phase($DB) - { - $this->db = $DB; - - $this->statuts_short=array(0=>'Draft',1=>'Validated',2=>'ActionRunningShort',5=>'ToBill'); - $this->statuts=array(0=>'Draft',1=>'Validated',2=>'ActionRunningShort',5=>'ToBill'); - } - - - /** - * \brief Create in database - * \param user User that create - * \param notrigger 0=launch triggers after, 1=disable triggers - * \return int <0 if KO, Id of created object if OK - */ - function create($user, $notrigger=0) - { - global $conf, $langs; - - include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); - - $error=0; - - // Clean parameters - $this->label = trim($this->label); - $this->description = trim($this->description); - - $total_ht = price2num($this->total_ht); - $tva_tx = price2num($this->tva_tx); - - $tabprice=calcul_price_total(1, $total_ht, 0, $tva_tx); - $total_ht = $tabprice[0]; - $total_tva = $tabprice[1]; - $total_ttc = $tabprice[2]; - - // Check parameters - // Put here code to add control on parameters values - - // Insert request - $sql = "INSERT INTO ".MAIN_DB_PREFIX."business_phase ("; - $sql.= "fk_business"; - //$sql.= ", fk_milestone"; - $sql.= ", label"; - $sql.= ", description"; - $sql.= ", datec"; - $sql.= ", fk_user_creat"; - $sql.= ", dateo"; - $sql.= ", datee"; - $sql.= ", total_ht"; - $sql.= ", total_tva"; - $sql.= ", total_ttc"; - $sql.= ", tva_tx"; - $sql.= ", progress"; - $sql.= ") VALUES ("; - $sql.= $this->fk_business; - //$sql.= ", ".$this->fk_milestone; - $sql.= ", '".addslashes($this->label)."'"; - $sql.= ", '".addslashes($this->description)."'"; - $sql.= ", ".$this->db->idate($this->date_c); - $sql.= ", ".$user->id; - $sql.= ", ".($this->date_start!=''?$this->db->idate($this->date_start):'null'); - $sql.= ", ".($this->date_end!=''?$this->db->idate($this->date_end):'null'); - $sql.= ", '".$total_ht."'"; - $sql.= ", '".$total_tva."'"; - $sql.= ", '".$total_ttc."'"; - $sql.= ", '".$tva_tx."'"; - $sql.= ", ".($this->progress!=''?$this->progress:0); - $sql.= ")"; - - $this->db->begin(); - - dol_syslog(get_class($this)."::create sql=".$sql, LOG_DEBUG); - $resql=$this->db->query($sql); - if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } - - if (! $error) - { - $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."business_phase"); - - if (! $notrigger) - { - // Call triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PHASE_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers - } - } - - // Commit or rollback - if ($error) - { - foreach($this->errors as $errmsg) - { - dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR); - $this->error.=($this->error?', '.$errmsg:$errmsg); - } - $this->db->rollback(); - return -1*$error; - } - else - { - $this->db->commit(); - return $this->id; - } - } - - - /** - * \brief Load object in memory from database - * \param id id object - * \return int <0 if KO, >0 if OK - */ - function fetch($id) - { - global $langs; - - $sql = "SELECT "; - $sql.= "p.rowid"; - $sql.= ", p.fk_business"; - $sql.= ", p.label"; - $sql.= ", p.description"; - //$sql.= ", p.duration_effective"; - $sql.= ", p.dateo"; - $sql.= ", p.datee"; - $sql.= ", p.fk_user_creat"; - $sql.= ", p.fk_user_valid"; - $sql.= ", p.fk_statut"; - $sql.= ", p.progress"; - $sql.= ", p.priority"; - $sql.= ", p.note_private"; - $sql.= ", p.note_public"; - $sql.= ", p.total_ht"; - $sql.= ", p.total_tva"; - $sql.= ", p.total_ttc"; - $sql.= ", p.tva_tx"; - $sql.= " FROM ".MAIN_DB_PREFIX."business_phase as p"; - $sql.= " WHERE p.rowid = ".$id; - - dol_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG); - $resql=$this->db->query($sql); - if ($resql) - { - if ($this->db->num_rows($resql)) - { - $obj = $this->db->fetch_object($resql); - - $this->id = $obj->rowid; - $this->ref = $obj->rowid; - $this->fk_business = $obj->fk_business; - //$this->fk_milestone = $obj->fk_milestone; - $this->label = $obj->label; - $this->description = $obj->description; - //$this->duration_effective = $obj->duration_effective; - $this->date_c = $this->db->jdate($obj->datec); - $this->date_start = $this->db->jdate($obj->dateo); - $this->date_end = $this->db->jdate($obj->datee); - $this->fk_user_creat = $obj->fk_user_creat; - $this->fk_user_valid = $obj->fk_user_valid; - $this->statut = $obj->fk_statut; - $this->progress = $obj->progress; - $this->priority = $obj->priority; - $this->note_private = $obj->note_private; - $this->note_public = $obj->note_public; - $this->total_ht = $obj->total_ht; - $this->total_tva = $obj->total_tva; - $this->total_ttc = $obj->total_ttc; - $this->tva_tx = $obj->tva_tx; - } - - $this->db->free($resql); - - return 1; - } - else - { - $this->error="Error ".$this->db->lasterror(); - dol_syslog(get_class($this)."::fetch ".$this->error, LOG_ERR); - return -1; - } - } - - - /** - * \brief Update database - * \param user User that modify - * \param notrigger 0=launch triggers after, 1=disable triggers - * \return int <0 if KO, >0 if OK - */ - function update($user=0, $notrigger=0) - { - global $conf, $langs; - - include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); - - $error=0; - - // Clean parameters - if (isset($this->label)) $this->label=trim($this->label); - if (isset($this->description)) $this->description=trim($this->description); - //if (isset($this->duration_effective)) $this->duration_effective=trim($this->duration_effective); - - // Check parameters - $total_ht = price2num($this->total_ht); - $tva_tx = price2num($this->tva_tx); - - $tabprice=calcul_price_total(1, $total_ht, 0, $tva_tx); - $total_ht = $tabprice[0]; - $total_tva = $tabprice[1]; - $total_ttc = $tabprice[2]; - - // Update request - $sql = "UPDATE ".MAIN_DB_PREFIX."business_phase SET"; - $sql.= " label=".(isset($this->label)?"'".addslashes($this->label)."'":"null").","; - $sql.= " description=".(isset($this->description)?"'".addslashes($this->description)."'":"null").","; - //$sql.= " duration_effective=".(isset($this->duration_effective)?$this->duration_effective:"null").","; - $sql.= " dateo=".($this->date_start!=''?$this->db->idate($this->date_start):'null').","; - $sql.= " datee=".($this->date_end!=''?$this->db->idate($this->date_end):'null').","; - $sql.= " total_ht='".$total_ht."',"; - $sql.= " total_tva='".$total_tva."',"; - $sql.= " total_ttc='".$total_ttc."',"; - $sql.= " tva_tx='".$tva_tx."',"; - $sql.= " progress=".$this->progress; - $sql.= " WHERE rowid=".$this->id; - - $this->db->begin(); - - dol_syslog(get_class($this)."::update sql=".$sql, LOG_DEBUG); - $resql = $this->db->query($sql); - if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } - - if (! $error) - { - if (! $notrigger) - { - // Call triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PHASE_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers - } - } - - // Commit or rollback - if ($error) - { - foreach($this->errors as $errmsg) - { - dol_syslog(get_class($this)."::update ".$errmsg, LOG_ERR); - $this->error.=($this->error?', '.$errmsg:$errmsg); - } - $this->db->rollback(); - return -1*$error; - } - else - { - $this->db->commit(); - return 1; - } - } - - - /** - * \brief Delete object in database - * \param user User that delete - * \param notrigger 0=launch triggers after, 1=disable triggers - * \return int <0 if KO, >0 if OK - */ - function delete($user, $notrigger=0) - { - global $conf, $langs; - - $error=0; - - $this->db->begin(); - - if ($this->hasChildren() > 0) - { - dol_syslog(get_class($this)."::delete Can't delete record as it has some child", LOG_WARNING); - $this->error='ErrorRecordHasChildren'; - $this->db->rollback(); - return 0; - } - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."projet_task"; - $sql.= " WHERE rowid=".$this->id; - - dol_syslog(get_class($this)."::delete sql=".$sql); - $resql = $this->db->query($sql); - if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } - - if (! $error) - { - if (! $notrigger) - { - // Call triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('TASK_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers - } - } - - // Commit or rollback - if ($error) - { - foreach($this->errors as $errmsg) - { - dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR); - $this->error.=($this->error?', '.$errmsg:$errmsg); - } - $this->db->rollback(); - return -1*$error; - } - else - { - $this->db->commit(); - return 1; - } - } - - /** - * \brief Return nb of children - * \return <0 if KO, 0 if no children, >0 if OK - */ - function hasChildren() - { - $ret=0; - - $sql = "SELECT COUNT(*) as nb"; - $sql.= " FROM ".MAIN_DB_PREFIX."projet_task"; - $sql.= " WHERE fk_task_parent=".$this->id; - - dol_syslog(get_class($this)."::hasChildren sql=".$sql, LOG_DEBUG); - $resql = $this->db->query($sql); - if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } - else - { - $obj=$this->db->fetch_object($resql); - if ($obj) $ret=$obj->nb; - } - - if (! $error) - { - return $ret; - } - else - { - return -1; - } - } - - - /** - * \brief Renvoie nom clicable (avec eventuellement le picto) - * \param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul - * \param option Sur quoi pointe le lien - * \return string Chaine avec URL - */ - function getNomUrl($withpicto=0,$option='') - { - global $langs; - - $result=''; - - $lien = ''; - $lienfin=''; - - $picto='projecttask'; - - $label=$langs->trans("ShowPhase").': '.$this->ref.($this->label?' - '.$this->label:''); - - if ($withpicto) $result.=($lien.img_object($label,$picto).$lienfin); - if ($withpicto && $withpicto != 2) $result.=' '; - if ($withpicto != 2) $result.=$lien.$this->ref.$lienfin; - return $result; - } - - /** - * \brief Initialise object with example values - * \remarks id must be 0 if object instance is a specimen. - */ - function initAsSpecimen() - { - $this->id=0; - - $this->fk_projet=''; - $this->fk_task_parent=''; - $this->title=''; - $this->duration_effective=''; - $this->fk_user_creat=''; - $this->statut=''; - $this->note=''; - } - - /** - * Return list of phases for a business - * Sort order is on business - * @param user Object user to limit phase affected to a particular user - * @param businessid Business id - * @param socid Third party id - * @return array Array of tasks - */ - function getPhasesArray($user=0, $businessid=0, $socid=0) - { - global $conf; - - $phases = array(); - - $sql = "SELECT b.rowid as businessid, b.ref, b.label as business_label, b.public"; - $sql.= ", p.rowid as phaseid, p.label as phase_label, p.progress, p.total_ht, p.total_ttc, p.fk_statut"; - $sql.= " FROM ".MAIN_DB_PREFIX."business as b"; - $sql.= " RIGHT JOIN ".MAIN_DB_PREFIX."business_phase as p on p.fk_business = b.rowid"; - $sql.= " WHERE b.entity = ".$conf->entity; - if ($socid) $sql.= " AND b.fk_soc = ".$socid; - if ($businessid) $sql.= " AND b.rowid =".$businessid; - $sql.= " ORDER BY p.rang ASC, p.rowid"; - - //print $sql; - - dol_syslog("Phase::getPhasesArray sql=".$sql, LOG_DEBUG); - $resql = $this->db->query($sql); - if ($resql) - { - $num = $this->db->num_rows($resql); - $i = 0; - // Loop on each record found, so each couple (project id, task id) - while ($i < $num) - { - $error=0; - - $obj = $this->db->fetch_object($resql); - - if ((! $obj->public) && is_object($user)) // If not public and we ask a filter on user - { - if (! $this->getUserRolesForPhase($user, $obj->phaseid) && ! $user->rights->business->all->read) - { - $error++; - //print '
error
'; - } - } - - if (! $error) - { - $phases[$i]->id = $obj->phaseid; - $phases[$i]->businessid = $obj->businessid; - $phases[$i]->businessref = $obj->ref; - $phases[$i]->businesslabel = $obj->business_label; - $phases[$i]->label = $obj->phase_label; - $phases[$i]->description = $obj->description; - $phases[$i]->total_ht = $obj->total_ht; - $phases[$i]->total_ttc = $obj->total_ttc; - //$phases[$i]->fk_milestone = $obj->fk_milestone; - //$phases[$i]->duration = $obj->duration_effective; - $phases[$i]->statut = $obj->fk_statut; - $phases[$i]->progress = $obj->progress; - $phases[$i]->public = $obj->public; - } - - $i++; - } - $this->db->free($resql); - } - else - { - dol_print_error($this->db); - } - - return $phases; - } - - /** - * Return list of roles for a user for each projects or each tasks (or a particular project or task) - * @param user - * @param businessid Business id to filter on a business - * @return array Array (businessid => 'list of roles for business') - */ - function getUserRolesForPhase($user,$phaseid=0) - { - $phaserole = array(); - - dol_syslog("Phase::getUserRolesForPhase user=".is_object($user)." phaseid=".$phaseid); - - $sql = "SELECT p.rowid as phaseid, ec.element_id, ctc.code"; - $sql.= " FROM ".MAIN_DB_PREFIX."business_phase as p"; - $sql.= ", ".MAIN_DB_PREFIX."element_contact as ec"; - $sql.= ", ".MAIN_DB_PREFIX."c_type_contact as ctc"; - $sql.= " WHERE p.rowid = ec.element_id"; - $sql.= " AND ctc.element = 'business_phase'"; - $sql.= " AND ctc.rowid = ec.fk_c_type_contact"; - if (is_object($user)) $sql.= " AND ec.fk_socpeople = ".$user->id; - $sql.= " AND ec.statut = 4"; - if ($phaseid) $sql.= " AND p.rowid = ".$phaseid; - - //print $sql.'
'; - dol_syslog("Phase::getUserRolesForPhase sql=".$sql); - $resql = $this->db->query($sql); - if ($resql) - { - $num = $this->db->num_rows($resql); - $i = 0; - while ($i < $num) - { - $obj = $this->db->fetch_object($resql); - if (empty($phaserole[$obj->phaseid])) $phaserole[$obj->phaseid] = $obj->code; - else $phaserole[$obj->phaseid].=','.$obj->code; - $i++; - } - $this->db->free($resql); - } - else - { - dol_print_error($this->db); - } - - return $phaserole; - } - - /** - * \brief Add time spent - * \param user user id - * \param notrigger 0=launch triggers after, 1=disable triggers - */ - function addTimeSpent($user, $notrigger=0) - { - $ret = 0; - - // Clean parameters - if (isset($this->timespent_note)) $this->timespent_note = trim($this->timespent_note); - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."projet_task_time ("; - $sql.= "fk_task"; - $sql.= ", task_date"; - $sql.= ", task_duration"; - $sql.= ", fk_user"; - $sql.= ", note"; - $sql.= ") VALUES ("; - $sql.= $this->id; - $sql.= ", '".$this->db->idate($this->timespent_date)."'"; - $sql.= ", ".$this->timespent_duration; - $sql.= ", ".$this->timespent_fk_user; - $sql.= ", ".(isset($this->timespent_note)?"'".addslashes($this->timespent_note)."'":"null"); - $sql.= ")"; - - dol_syslog(get_class($this)."::addTimeSpent sql=".$sql, LOG_DEBUG); - if ($this->db->query($sql) ) - { - $task_id = $this->db->last_insert_id(MAIN_DB_PREFIX."projet_task_time"); - $ret = $task_id; - - if (! $notrigger) - { - // Call triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('TASK_TIMESPENT_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers - } - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog(get_class($this)."::addTimeSpent error -1 ".$this->error,LOG_ERR); - $ret = -1; - } - - if ($ret >= 0) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task"; - $sql.= " SET duration_effective = duration_effective + '".price2num($this->timespent_duration)."'"; - $sql.= " WHERE rowid = ".$this->id; - - dol_syslog(get_class($this)."::addTimeSpent sql=".$sql, LOG_DEBUG); - if (! $this->db->query($sql) ) - { - $this->error=$this->db->lasterror(); - dol_syslog(get_class($this)."::addTimeSpent error -2 ".$this->error, LOG_ERR); - $ret = -2; - } - } - - return $ret; - } - - /** - * \brief Load object in memory from database - * \param id id object - * \return int <0 if KO, >0 if OK - */ - function fetchTimeSpent($id) - { - global $langs; - - $sql = "SELECT"; - $sql.= " t.rowid,"; - $sql.= " t.fk_task,"; - $sql.= " t.task_date,"; - $sql.= " t.task_duration,"; - $sql.= " t.fk_user,"; - $sql.= " t.note"; - $sql.= " FROM ".MAIN_DB_PREFIX."projet_task_time as t"; - $sql.= " WHERE t.rowid = ".$id; - - dol_syslog(get_class($this)."::fetchTimeSpent sql=".$sql, LOG_DEBUG); - $resql=$this->db->query($sql); - if ($resql) - { - if ($this->db->num_rows($resql)) - { - $obj = $this->db->fetch_object($resql); - - $this->timespent_id = $obj->rowid; - $this->id = $obj->fk_task; - $this->timespent_date = $obj->task_date; - $this->timespent_duration = $obj->task_duration; - $this->timespent_user = $obj->fk_user; - $this->timespent_note = $obj->note; - } - - $this->db->free($resql); - - return 1; - } - else - { - $this->error="Error ".$this->db->lasterror(); - dol_syslog(get_class($this)."::fetchTimeSpent ".$this->error, LOG_ERR); - return -1; - } - } - - /** - * \brief Update time spent - * \param user User id - * \param notrigger 0=launch triggers after, 1=disable triggers - */ - function updateTimeSpent($user, $notrigger=0) - { - $ret = 0; - - // Clean parameters - if (isset($this->timespent_note)) $this->timespent_note = trim($this->timespent_note); - - $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task_time SET"; - $sql.= " task_date = '".$this->db->idate($this->timespent_date)."',"; - $sql.= " task_duration = ".$this->timespent_duration.","; - $sql.= " fk_user = ".$this->timespent_fk_user.","; - $sql.= " note = ".(isset($this->timespent_note)?"'".addslashes($this->timespent_note)."'":"null"); - $sql.= " WHERE rowid = ".$this->timespent_id; - - dol_syslog(get_class($this)."::updateTimeSpent sql=".$sql, LOG_DEBUG); - if ($this->db->query($sql) ) - { - if (! $notrigger) - { - // Call triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('TASK_TIMESPENT_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers - } - $ret = 1; - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog(get_class($this)."::updateTimeSpent error -1 ".$this->error,LOG_ERR); - $ret = -1; - } - - if ($ret == 1 && ($this->timespent_old_duration != $this->timespent_duration)) - { - $newDuration = $this->timespent_duration - $this->timespent_old_duration; - - $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task"; - $sql.= " SET duration_effective = duration_effective + '".$newDuration."'"; - $sql.= " WHERE rowid = ".$this->id; - - dol_syslog(get_class($this)."::updateTimeSpent sql=".$sql, LOG_DEBUG); - if (! $this->db->query($sql) ) - { - $this->error=$this->db->lasterror(); - dol_syslog(get_class($this)."::addTimeSpent error -2 ".$this->error, LOG_ERR); - $ret = -2; - } - } - - return $ret; - } - - /** - * \brief Delete time spent - * \param user User that delete - * \param notrigger 0=launch triggers after, 1=disable triggers - * \return int <0 if KO, >0 if OK - */ - function delTimeSpent($user, $notrigger=0) - { - global $conf, $langs; - - $error=0; - - $this->db->begin(); - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."projet_task_time"; - $sql.= " WHERE rowid = ".$this->timespent_id; - - dol_syslog(get_class($this)."::delTimeSpent sql=".$sql); - $resql = $this->db->query($sql); - if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } - - if (! $error) - { - if (! $notrigger) - { - // Call triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('TASK_TIMESPENT_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers - } - } - - if (! $error) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task"; - $sql.= " SET duration_effective = duration_effective - '".$this->timespent_duration."'"; - $sql.= " WHERE rowid = ".$this->id; - - dol_syslog(get_class($this)."::delTimeSpent sql=".$sql, LOG_DEBUG); - if ($this->db->query($sql) ) - { - $result = 0; - } - else - { - $this->error=$this->db->lasterror(); - dol_syslog(get_class($this)."::addTimeSpent error -3 ".$this->error, LOG_ERR); - $result = -2; - } - } - - // Commit or rollback - if ($error) - { - foreach($this->errors as $errmsg) - { - dol_syslog(get_class($this)."::delTimeSpent ".$errmsg, LOG_ERR); - $this->error.=($this->error?', '.$errmsg:$errmsg); - } - $this->db->rollback(); - return -1*$error; - } - else - { - $this->db->commit(); - return 1; - } - } - - /** - * \brief Return status label of object - * \param mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto - * \return string Label - */ - function getLibStatut($mode=0) - { - return $this->LibStatut($this->statut,$mode); - } - - /** - * \brief Return status label of object - * \param statut id statut - * \param mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto - * \return string Label - */ - function LibStatut($statut,$mode=0) - { - global $langs; - - if ($mode == 0) - { - return $langs->trans($this->statuts[$statut]); - } - if ($mode == 1) - { - return $langs->trans($this->statuts_short[$statut]); - } - if ($mode == 2) - { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0').' '.$langs->trans($this->statuts_short[$statut]); - if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut1').' '.$langs->trans($this->statuts_short[$statut]); - if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut3').' '.$langs->trans($this->statuts_short[$statut]); - if ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts_short[$statut]); - } - if ($mode == 3) - { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0'); - if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut1'); - if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut3'); - if ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4'); - } - if ($mode == 4) - { - if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0').' '.$langs->trans($this->statuts_short[$statut]); - if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut1').' '.$langs->trans($this->statuts_short[$statut]); - if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut3').' '.$langs->trans($this->statuts_short[$statut]); - if ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts_short[$statut]); - } - if ($mode == 5) - { - if ($statut==0) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut0'); - if ($statut==1) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut1'); - if ($statut==2) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut3'); - if ($statut==5) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut4'); - } - } - -} -?> \ No newline at end of file diff --git a/htdocs/milestone/class/milestone.class.php b/htdocs/milestone/class/milestone.class.php deleted file mode 100644 index d18fe333c2e..00000000000 --- a/htdocs/milestone/class/milestone.class.php +++ /dev/null @@ -1,518 +0,0 @@ - - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/** - * \file htdocs/milestone/milestone.class.php - * \ingroup milestone - * \brief Fichier de la classe des jalons - * \version $Id$ - */ - - -/** - * \class Milestone - * \brief Classe permettant la gestion des jalons - */ -class Milestone -{ - var $error; - var $db; - - var $id; - var $label; - var $description; - var $statut; - var $fk_element; - var $elementtype; - - var $cats=array(); // Tableau en memoire des categories - - - /** - * Constructor - * @param DB acces base de donnees - * @param id milestone id - */ - function Milestone($DB) - { - $this->db = $DB; - } - - /** - * Charge le jalon - * @param id id du jalon a charger - */ - function fetch($id) - { - $sql = "SELECT rowid, label, description, visible, type"; - $sql.= " FROM ".MAIN_DB_PREFIX."milestone"; - $sql.= " WHERE rowid = ".$id; - - dol_syslog("Milestone::fetch sql=".$sql); - $resql = $this->db->query ($sql); - if ($resql) - { - $res = $this->db->fetch_array($resql); - - $this->id = $res['rowid']; - $this->label = $res['label']; - $this->description = $res['description']; - $this->type = $res['type']; - - $this->db->free($resql); - } - else - { - dol_print_error ($this->db); - return -1; - } - } - - /** - * Ajoute le jalon dans la base de donnees - * @return int -1 : erreur SQL - * -2 : nouvel ID inconnu - * -3 : jalon invalide - */ - function create($user) - { - global $conf,$langs; - - $langs->load('milestone'); - - // Clean parameters - $this->label=trim($this->label); - $this->description=trim($this->description); - - if ($this->already_exists()) - { - $this->error = $langs->trans("ImpossibleAddMilestone"); - $this->error.=" : ".$langs->trans("MilestoneAlreadyExists"); - return -1; - } - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."milestone ("; - $sql.= "label"; - $sql.= ", description"; - $sql.= ", type"; - $sql.= ") VALUES ("; - $sql.= "'".addslashes($this->label)."'"; - $sql.= ", '".addslashes($this->description)."'"; - $sql.= ", ".$this->type; - $sql.= ")"; - - - $res = $this->db->query ($sql); - if ($res) - { - $id = $this->db->last_insert_id (MAIN_DB_PREFIX."milestone"); - - if ($id > 0) - { - $this->id = $id; - - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('MILESTONE_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - - return $id; - } - else - { - return -2; - } - } - else - { - dol_print_error ($this->db); - return -1; - } - } - - /** - * Update milestone - * @return int 1 : OK - * -1 : SQL error - * -2 : invalid milestone - */ - function update($user) - { - global $conf; - - // Clean parameters - $this->label=trim($this->label); - $this->description=trim($this->description); - - $this->db->begin(); - - $sql = "UPDATE ".MAIN_DB_PREFIX."milestone SET"; - $sql.= " label = '".addslashes($this->label)."'"; - $sql.= ", description = '".addslashes($this->description)."'"; - $sql.= " WHERE rowid = ".$this->id; - - dol_syslog("Milestone::update sql=".$sql); - if ($this->db->query($sql)) - { - $this->db->commit(); - - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('MILESTONE_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - - return 1; - } - else - { - $this->db->rollback(); - dol_print_error($this->db); - return -1; - } - } - - /** - * Delete milestone - */ - function remove() - { - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."element_milestone"; - $sql.= " WHERE fk_categorie = ".$this->id; - - if (!$this->db->query($sql)) - { - dol_print_error($this->db); - return -1; - } - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."milestone"; - $sql.= " WHERE rowid = ".$this->id; - - if (!$this->db->query($sql)) - { - dol_print_error($this->db); - return -1; - } - else - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('MILESTONE_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - - return 1; - } - - } - - /** - * \brief Link an object to the category - * \param obj Object to link to category - * \param type Type of category - * \return int 1 : OK, -1 : erreur SQL, -2 : id non renseign, -3 : Already linked - */ - function add_type($obj,$type) - { - if ($this->id == -1) - { - return -2; - } - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."categorie_".$type." (fk_categorie, fk_".($type=='fournisseur'?'societe':$type).")"; - $sql .= " VALUES (".$this->id.", ".$obj->id.")"; - - if ($this->db->query($sql)) - { - return 1; - } - else - { - if ($this->db->lasterrno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') - { - $this->error=$this->db->lasterrno(); - return -3; - } - else - { - $this->error=$this->db->error().' sql='.$sql; - } - return -1; - } - } - - /** - * Suppresion d'un produit de la categorie - * @param $prod est un objet de type produit - * retour : 1 : OK - * -1 : erreur SQL - */ - function del_type($obj,$type) - { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."categorie_".$type; - $sql .= " WHERE fk_categorie = ".$this->id; - $sql .= " AND fk_".($type=='fournisseur'?'societe':$type)." = ".$obj->id; - - if ($this->db->query($sql)) - { - return 1; - } - else - { - $this->error=$this->db->error().' sql='.$sql; - return -1; - } - } - - /** - * \brief Return list of contents of a category - * \param field Field name for select in table. Full field name will be fk_field. - * \param class PHP Class of object to store entity - * \param table Table name for select in table. Full table name will be PREFIX_categorie_table. - */ - function get_type($field,$classname,$table='') - { - $objs = array(); - - // Clean parameters - if (empty($table)) $table=$field; - - $sql = "SELECT fk_".$field." FROM ".MAIN_DB_PREFIX."categorie_".$table; - $sql.= " WHERE fk_categorie = ".$this->id; - - dol_syslog("Categorie::get_type sql=".$sql); - $resql = $this->db->query($sql); - if ($resql) - { - while ($rec = $this->db->fetch_array($resql)) - { - $obj = new $classname($this->db); - $obj->fetch($rec['fk_'.$field]); - $objs[] = $obj; - } - return $objs; - } - else - { - $this->error=$this->db->error().' sql='.$sql; - dol_syslog("Categorie::get_type ".$this->error, LOG_ERR); - return -1; - } - } - - /** - * retourne la description d'une categorie - */ - function get_desc ($cate) - { - $sql = "SELECT description FROM ".MAIN_DB_PREFIX."categorie "; - $sql .= "WHERE rowid = '".$cate."'"; - - $res = $this->db->query ($sql); - $n = $this->db->fetch_array ($res); - - return ($n[0]); - } - - - /** - * \brief Retourne toutes les categories - * \return array Tableau d'objet Categorie - */ - function get_all_categories () - { - $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."categorie"; - - $res = $this->db->query ($sql); - if ($res) - { - $cats = array (); - while ($record = $this->db->fetch_array ($res)) - { - $cat = new Categorie ($this->db, $record['rowid']); - $cats[$record['rowid']] = $cat; - } - return $cats; - } - else - { - dol_print_error ($this->db); - return -1; - } - } - - /** - * \brief Retourne le nombre total de categories - * \return int Nombre de categories - */ - function get_nb_categories () - { - $sql = "SELECT count(rowid)"; - $sql.= " FROM ".MAIN_DB_PREFIX."categorie"; - $res = $this->db->query ($sql); - if ($res) - { - $res = $this->db->fetch_array($res); - return $res[0]; - } - else - { - dol_print_error ($this->db); - return -1; - } - } - - /** - * \brief Check if no category with same label already exists - * \return boolean 1 if already exist, 0 otherwise, -1 if error - */ - function already_exists() - { - $sql = "SELECT count(c.rowid)"; - $sql.= " FROM ".MAIN_DB_PREFIX."categorie as c, ".MAIN_DB_PREFIX."categorie_association as ca"; - $sql.= " WHERE c.label = '".addslashes($this -> label)."' AND type=".$this->type; - dol_syslog("Categorie::already_exists sql=".$sql); - $res = $this->db->query($sql); - if ($res) - { - $obj = $this->db->fetch_array($res); - if($obj[0] > 0) return 1; - else return 0; - } - else - { - dol_print_error ($this->db); - return -1; - } - } - - /** - * Return list of categories linked to element of type $type with id $typeid - * @param id Id of element - * @param typeid Type id of link (0,1,2,3...) - * @return array List of category objects - */ - function containing($id,$typeid) - { - $cats = array (); - - $table=''; $type=''; - if ($typeid == 0) { $table='product'; $type='product'; } - if ($typeid == 1) { $table='societe'; $type='fournisseur'; } - if ($typeid == 2) { $table='societe'; $type='societe'; } - if ($typeid == 3) { $table='member'; $type='member'; } - - $sql = "SELECT ct.fk_categorie"; - $sql.= " FROM ".MAIN_DB_PREFIX."categorie_".$type." as ct"; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie as c ON ct.fk_categorie = c.rowid"; - $sql.= " WHERE ct.fk_".$table." = ".$id." AND c.type = ".$typeid; - - $res = $this->db->query ($sql); - if ($res) - { - while ($cat = $this->db->fetch_array ($res)) - { - $cats[] = new Categorie ($this->db, $cat['fk_categorie']); - } - - return $cats; - } - else - { - dol_print_error ($this->db); - return -1; - } - } - - - /** - * \brief Retourne les categories dont l'id ou le nom correspond - * ajoute des wildcards au nom sauf si $exact = true - */ - function rechercher($id, $nom, $type, $exact = false) - { - $cats = array (); - - // Generation requete recherche - $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."categorie "; - $sql .= "WHERE type = ".$type." "; - if ($nom) - { - if (! $exact) - { - $nom = '%'.str_replace ('*', '%', $nom).'%'; - } - $sql.= "AND label LIKE '".$nom."'"; - } - if ($id) - { - $sql.="AND rowid = '".$id."'"; - } - - $res = $this->db->query ($sql); - if ($res) - { - while ($id = $this->db->fetch_array ($res)) - { - $cats[] = new Categorie ($this->db, $id['rowid']); - } - - return $cats; - } - else - { - $this->error=$this->db->error().' sql='.$sql; - dol_syslog("Categorie::rechercher ".$this->error, LOG_ERR); - return -1; - } - } - - /** - * \brief Return name and link of category (with picto) - * \param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul - * \param option Sur quoi pointe le lien ('', 'xyz') - * \param maxlength Max length of text - * \return string Chaine avec URL - */ - function getNomUrl($withpicto=0,$option='',$maxlength=0) - { - global $langs; - - $result=''; - - $lien = ''; - $label=$langs->trans("ShowCategory").': '.$this->label; - $lienfin=''; - - $picto='category'; - - - if ($withpicto) $result.=($lien.img_object($label,$picto).$lienfin); - if ($withpicto && $withpicto != 2) $result.=' '; - if ($withpicto != 2) $result.=$lien.dol_trunc($this->ref,$maxlength).$lienfin; - return $result; - } - -} -?>