Index: facture.class.php =================================================================== RCS file: /cvsroot/dolibarr/dolibarr/htdocs/facture.class.php,v retrieving revision 1.133 diff -u -r1.133 facture.class.php --- facture.class.php 11 Nov 2005 22:36:56 -0000 1.133 +++ facture.class.php 28 Nov 2005 21:33:28 -0000 @@ -92,6 +92,7 @@ */ function create($user) { + global $langs,$conf; $this->db->begin(); /* On positionne en mode brouillon la facture */ @@ -575,6 +576,8 @@ */ function delete($rowid) { + global $user,$langs,$conf; + $this->db->begin(); $sql = 'DELETE FROM '.MAIN_DB_PREFIX.'facture_tva_sum WHERE fk_facture = '.$rowid; @@ -1760,6 +1763,229 @@ } } + + /** + * \brief Ajoute un contact associé une facture + * \param fk_socpeople Id du contact a ajouter. + * \param type_contact Type de contact + * \param source extern=Contact externe (llx_socpeople), intern=Contact interne (llx_user) + * \return int <0 si erreur, >0 si ok + */ + function add_contact($fk_socpeople, $type_contact, $source='extern') + { + dolibarr_syslog("Facture::add_contact $fk_socpeople, $type_contact, $source"); + + if ($fk_socpeople <= 0) return -1; + + // Verifie type_contact + if (! $type_contact || ! is_numeric($type_contact)) + { + $this->error="Valeur pour type_contact incorrect"; + return -3; + } + + $datecreate = time(); + + // Insertion dans la base + $sql = "INSERT INTO ".MAIN_DB_PREFIX."element_contact"; + $sql.= " (element_id, fk_socpeople, datecreate, statut, fk_c_type_contact) "; + $sql.= " VALUES (".$this->id.", ".$fk_socpeople." , " ; + $sql.= $this->db->idate($datecreate); + $sql.= ", 4, '". $type_contact . "' "; + $sql.= ");"; + + // Retour + if ( $this->db->query($sql) ) + { + return 1; + } + else + { +// dolibarr_print_error($this->db); + $this->error=$this->db->error()." - $sql"; + return -1; + } + } + + /** + * + * \brief Mise a jour du contact associé une facture + * \param rowid La reference du lien facture-contact + * \param statut Le nouveau statut + * \param type_contact_id Description du type de contact + * \return int <0 si erreur, >0 si ok + */ + function update_contact($rowid, $statut, $type_contact_id) + { + // Insertion dans la base + $sql = "UPDATE ".MAIN_DB_PREFIX."element_contact set "; + $sql.= " statut = $statut ,"; + $sql.= " fk_c_type_contact = '".$type_contact_id ."'"; + $sql.= " where rowid = $rowid ;"; + // Retour + if ( $this->db->query($sql) ) + { + return 0; + } + else + { + dolibarr_print_error($this->db); + return -1; + } + } + + /** + * \brief Supprime une ligne de contact de contrat + * \param rowid La reference du contact + * \return statur >0 si ok, <0 si ko + */ + function delete_contact($rowid) + { + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact WHERE rowid =".$rowid; + if ($this->db->query($sql)) + { + return 1; + } + else + { + return -1; + } + } + + /** + * \brief Récupère les lignes de contact du contrat + * \param statut Statut des lignes detail à récupérer + * \param source Source du contact external (llx_socpeople) ou internal (llx_user) + * \return array Tableau des rowid des contacts + */ + function liste_contact($statut=-1,$source='external') + { + global $langs; + + $tab=array(); + + $sql = "SELECT ec.rowid, ec.statut, ec.fk_socpeople as id,"; + if ($source == 'internal') $sql.=" '-1' as socid,"; + if ($source == 'external') $sql.=" t.fk_soc as socid,"; + if ($source == 'internal') $sql.=" t.name as nom,"; + if ($source == 'external') $sql.=" t.name as nom,"; + $sql.= "tc.source, tc.element, tc.code, tc.libelle"; + $sql.= " FROM ".MAIN_DB_PREFIX."element_contact ec,"; + if ($source == 'internal') $sql.=" ".MAIN_DB_PREFIX."user t,"; + if ($source == 'external') $sql.=" ".MAIN_DB_PREFIX."socpeople t,"; + $sql.= " ".MAIN_DB_PREFIX."c_type_contact tc"; + $sql.= " WHERE element_id =".$this->id; + $sql.= " AND ec.fk_c_type_contact=tc.rowid"; + $sql.= " AND tc.element='facture'"; + if ($source == 'internal') $sql.= " AND tc.source = 'internal'"; + if ($source == 'external') $sql.= " AND tc.source = 'external'"; + $sql.= " AND tc.active=1"; + if ($source == 'internal') $sql.= " AND ec.fk_socpeople = t.rowid"; + if ($source == 'external') $sql.= " AND ec.fk_socpeople = t.idp"; + if ($statut >= 0) $sql.= " AND statut = '$statut'"; + $sql.=" ORDER BY t.name ASC"; + + $resql=$this->db->query($sql); + if ($resql) + { + $num=$this->db->num_rows($resql); + $i=0; + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); + + $transkey="TypeContact_".$obj->element."_".$obj->source."_".$obj->code; + $libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle); + $tab[$i]=array('source'=>$obj->source,'socid'=>$obj->socid,'id'=>$obj->id,'nom'=>$obj->nom, + 'rowid'=>$obj->rowid,'code'=>$obj->code,'libelle'=>$libelle_type,'status'=>$obj->statut); + $i++; + } + return $tab; + } + else + { + $this->error=$this->db->error(); + dolibarr_print_error($this->db); + return -1; + } + } + + /** + * \brief Le détail d'un contact + * \param rowid L'identifiant du contact + * \return object L'objet construit par DoliDb.fetch_object + */ + function detail_contact($rowid) + { + $sql = "SELECT ec.datecreate, ec.statut, ec.fk_socpeople, ec.fk_c_type_contact,"; + $sql.= " tc.code, tc.libelle, s.fk_soc"; + $sql.= " FROM ".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as tc, "; + $sql.= " ".MAIN_DB_PREFIX."socpeople as s"; + $sql.= " WHERE ec.rowid =".$rowid; + $sql.= " AND ec.fk_socpeople=s.idp"; + $sql.= " AND ec.fk_c_type_contact=tc.rowid"; + $sql.= " AND tc.element = 'facture'"; + + $resql=$this->db->query($sql); + if ($resql) + { + $obj = $this->db->fetch_object($resql); + return $obj; + } + else + { + $this->error=$this->db->error(); + dolibarr_print_error($this->db); + return null; + } + } + + /** + * \brief La liste des valeurs possibles de type de contacts + * \param source internal ou external + * \return array La liste des natures + */ + function liste_type_contact($source) + { + global $langs; + + $element='facture'; + + $tab = array(); + + $sql = "SELECT distinct tc.rowid, tc.code, tc.libelle"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc"; + $sql.= " WHERE element='".$element."'"; + $sql.= " AND source='".$source."'"; + $sql.= " ORDER by tc.code"; + + $resql=$this->db->query($sql); + if ($resql) + { + $num=$this->db->num_rows($resql); + $i=0; + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); + + $transkey="TypeContact_".$element."_".$source."_".$obj->code; + $libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle); + $tab[$obj->rowid]=$libelle_type; + $i++; + } + return $tab; + } + else + { + $this->error=$this->db->error(); +// dolibarr_print_error($this->db); + return null; + } + } + + + } @@ -1809,7 +2035,6 @@ $this->produit_id = $objp->fk_product; $this->date_start = $objp->date_start; $this->date_end = $objp->date_end; - $i++; $this->db->free($result); } else