diff --git a/htdocs/livraison/livraison.class.php b/htdocs/livraison/livraison.class.php index 283085cdbc2c2974a1e70dc58f13d57347fc43c9..a2b2d3d0efb859431ca45c77dcc4f79ded2c7805 100644 --- a/htdocs/livraison/livraison.class.php +++ b/htdocs/livraison/livraison.class.php @@ -20,11 +20,11 @@ */ /** - \file htdocs/livraison/livraison.class.php - \ingroup livraison - \brief Fichier de la classe de gestion des bons de livraison - \version $Id$ -*/ + \file htdocs/livraison/livraison.class.php + \ingroup livraison + \brief Fichier de la classe de gestion des bons de livraison + \version $Id$ + */ require_once(DOL_DOCUMENT_ROOT."/commonobject.class.php"); require_once(DOL_DOCUMENT_ROOT."/expedition/expedition.class.php"); @@ -34,9 +34,9 @@ if ($conf->commande->enabled) require_once(DOL_DOCUMENT_ROOT."/commande/commande /** - \class Livraison - \brief Classe de gestion des bons de livraison -*/ + \class Livraison + \brief Classe de gestion des bons de livraison + */ class Livraison extends CommonObject { var $db; @@ -50,62 +50,60 @@ class Livraison extends CommonObject var $date_livraison; var $date_creation; var $date_valid; - - + + /** - * Initialisation - * - */ + * Initialisation + * + */ function Livraison($DB) - { - global $langs; + { + global $langs; $this->db = $DB; $this->lignes = array(); - + $this->statuts[-1] = $langs->trans("Canceled"); $this->statuts[0] = $langs->trans("Draft"); $this->statuts[1] = $langs->trans("Validated"); - + $this->products = array(); - } + } /** - * \brief Cr�� bon de livraison en base - * \param user Objet du user qui cr�e - * \return int <0 si erreur, id livraison cr��e si ok - */ + * \brief Create delivery receipt in database + * \param user Objet du user qui cree + * \return int <0 si erreur, id livraison cree si ok + */ function create($user) { global $conf; - + dolibarr_syslog("Livraison::create"); - + $error = 0; - + /* On positionne en mode brouillon le bon de livraison */ $this->brouillon = 1; - + $this->user = $user; - + $this->db->begin(); - + $sql = "INSERT INTO ".MAIN_DB_PREFIX."livraison (ref, fk_soc, date_creation, fk_user_author,"; $sql.= " fk_adresse_livraison"; - if ($this->commande_id) $sql.= ", fk_commande"; if ($this->expedition_id) $sql.= ", fk_expedition"; $sql.= ")"; $sql.= " VALUES ('(PROV)', ".$this->socid.", now(), $user->id,"; $sql.= " ".($this->adresse_livraison_id > 0?$this->adresse_livraison_id:"null"); - if ($this->commande_id) $sql.= ", $this->commande_id"; if ($this->expedition_id) $sql.= ", $this->expedition_id"; $sql.= ")"; - + $resql=$this->db->query($sql); if ($resql) { $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."livraison"); - + $numref="(PROV".$this->id.")"; $sql = "UPDATE ".MAIN_DB_PREFIX."livraison "; $sql.= "SET ref='".addslashes($numref)."' WHERE rowid=".$this->id; @@ -118,22 +116,34 @@ class Livraison extends CommonObject $commande->id = $this->commande_id; $this->lignes = $commande->fetch_lines(); } - - + + /* - * Insertion des produits dans la base - */ + * Insertion des produits dans la base + */ for ($i = 0 ; $i < sizeof($this->lignes) ; $i++) { $origin_id=$this->lignes[$i]->origin_line_id; if (! $origin_id) $origin_id=$this->lignes[$i]->commande_ligne_id; // For backward compatibility - + if (! $this->create_line(0, $origin_id, $this->lignes[$i]->qty, $this->lignes[$i]->fk_product)) { $error++; } } - + + /* + if ($conf->livraison->enabled && $this->origin_id) + { + $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'co_liv (fk_livraison, fk_commande) VALUES ('.$this->id.','.$this->origin_id.')'; + if (!$this->db->query($sql)) + { + $error++; + } + + } + */ + if (! $conf->expedition->enabled) { $sql = "UPDATE ".MAIN_DB_PREFIX."commande"; @@ -145,7 +155,7 @@ class Livraison extends CommonObject $error++; } } - + if ($error==0) { $this->db->commit(); @@ -178,43 +188,43 @@ class Livraison extends CommonObject return -1; } } - + /** - * - * - */ + * + * + */ function create_line($transaction, $commande_ligne_id, $qty, $fk_product=0) { $error = 0; $idprod = $fk_product; $j = 0; - + $sql = "INSERT INTO ".MAIN_DB_PREFIX."livraisondet (fk_livraison, fk_origin_line,"; if ($idprod) $sql.=" fk_product,"; $sql.= " qty)"; $sql.= " VALUES (".$this->id.",".$commande_ligne_id.","; if ($idprod) $sql.=" ".$idprod.","; $sql.= $qty.")"; - + if (! $this->db->query($sql) ) { $error++; } - + if ($error == 0 ) { return 1; } } - + /** - * Lit un bon de livraison - * - */ + * Lit un bon de livraison + * + */ function fetch($id) { global $conf; - + $sql = "SELECT l.rowid, l.fk_soc, l.date_creation, l.date_valid, l.ref, l.ref_client, l.fk_user_author,"; $sql.=" l.total_ht, l.fk_statut, l.fk_expedition, l.fk_user_valid, l.note, l.note_public"; $sql.= ", ".$this->db->pdate("l.date_livraison")." as date_livraison, l.fk_adresse_livraison, l.model_pdf"; @@ -244,7 +254,7 @@ class Livraison extends CommonObject if ($this->db->num_rows($result)) { $obj = $this->db->fetch_object($result); - + $this->id = $obj->rowid; $this->date_livraison = $obj->date_livraison; $this->date_creation = $obj->date_creation; @@ -261,9 +271,9 @@ class Livraison extends CommonObject $this->note = $obj->note; $this->note_public = $obj->note_public; $this->modelpdf = $obj->model_pdf; - + $this->db->free($result); - + if ($this->origin_id) { if ($conf->commande->enabled) @@ -274,23 +284,23 @@ class Livraison extends CommonObject { $this->origin = "propal"; } - } - - if ($this->statut == 0) $this->brouillon = 1; - - $file = $conf->livraison->dir_output . "/" .get_exdir($livraison->id,2) . "/" . $this->id.".pdf"; - $this->pdf_filename = $file; - - /* - * Lignes - */ - $result=$this->fetch_lignes(); - if ($result < 0) - { - return -3; - } - - return 1; + } + + if ($this->statut == 0) $this->brouillon = 1; + + $file = $conf->livraison->dir_output . "/" .get_exdir($livraison->id,2) . "/" . $this->id.".pdf"; + $this->pdf_filename = $file; + + /* + * Lignes + */ + $result=$this->fetch_lignes(); + if ($result < 0) + { + return -3; + } + + return 1; } else { @@ -306,22 +316,22 @@ class Livraison extends CommonObject return -1; } } - + /** - * \brief Valide l'expedition, et met a jour le stock si stock g�r - * \param user Objet de l'utilisateur qui valide - * \return int - */ + * \brief Valide l'expedition, et met a jour le stock si stock g�r + * \param user Objet de l'utilisateur qui valide + * \return int + */ function valid($user) { global $conf; - + dolibarr_syslog("livraison.class.php::valid begin"); - + $this->db->begin(); - + $error = 0; - + if ($user->rights->expedition->livraison->valider) { if (defined('LIVRAISON_ADDON')) @@ -329,34 +339,34 @@ class Livraison extends CommonObject if (is_readable(DOL_DOCUMENT_ROOT .'/livraison/mods/'.LIVRAISON_ADDON.'.php')) { require_once DOL_DOCUMENT_ROOT .'/livraison/mods/'.LIVRAISON_ADDON.'.php'; - + // Definition du nom de module de numerotation de commande $modName=LIVRAISON_ADDON; - + // Recuperation de la nouvelle reference $objMod = new $modName($this->db); $soc = new Societe($this->db); $soc->fetch($this->socid); - + // on v�rifie si le bon de livraison est en num�rotation provisoire $livref = substr($this->ref, 1, 4); if ($livref == 'PROV') { $this->ref = $objMod->livraison_get_num($soc,$this); } - + // Tester si non dej� au statut valid�. Si oui, on arrete afin d'�viter - // de d�cr�menter 2 fois le stock. - $sql = "SELECT ref FROM ".MAIN_DB_PREFIX."livraison where ref='".$this->ref."' AND fk_statut <> 0"; - $resql=$this->db->query($sql); - if ($resql) - { - $num = $this->db->num_rows($resql); - if ($num > 0) - { - return 0; - } - } + // de d�cr�menter 2 fois le stock. + $sql = "SELECT ref FROM ".MAIN_DB_PREFIX."livraison where ref='".$this->ref."' AND fk_statut <> 0"; + $resql=$this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + if ($num > 0) + { + return 0; + } + } $sql = "UPDATE ".MAIN_DB_PREFIX."livraison "; $sql.= " SET ref='".addslashes($this->ref)."', fk_statut = 1, date_valid = now(), fk_user_valid = ".$user->id; @@ -367,16 +377,16 @@ class Livraison extends CommonObject // Si module stock g�r� et que expedition faite depuis un entrepot if (!$conf->expedition->enabled && $conf->stock->enabled && $this->entrepot_id && $conf->global->STOCK_CALCULATE_ON_SHIPMENT == 1) { - + //Enregistrement d'un mouvement de stock pour chaque produit de l'expedition - - + + dolibarr_syslog("livraison.class.php::valid enregistrement des mouvements"); - + $sql = "SELECT cd.fk_product, ld.qty "; $sql.= " FROM ".MAIN_DB_PREFIX."commandedet as cd, ".MAIN_DB_PREFIX."livraisondet as ld"; $sql.= " WHERE ld.fk_livraison = $this->id AND cd.rowid = ld.fk_commande_ligne"; - + $resql=$this->db->query($sql); if ($resql) { @@ -385,9 +395,9 @@ class Livraison extends CommonObject while($i < $num) { dolibarr_syslog("livraison.class.php::valid movment $i"); - + $obj = $this->db->fetch_object($resql); - + $mouvS = new MouvementStock($this->db); $result=$mouvS->livraison($user, $obj->fk_product, $this->entrepot_id, $obj->qty); if ($result < 0) @@ -399,7 +409,7 @@ class Livraison extends CommonObject } $i++; } - + } else { @@ -407,10 +417,10 @@ class Livraison extends CommonObject $this->error=$this->db->error()." - sql=$sql"; dolibarr_syslog("livraison.class.php::valid ".$this->error); return -2; - + } } - + // On efface le r�pertoire de pdf provisoire $livraisonref = sanitize_string($this->ref); if ($conf->expedition->dir_output) @@ -434,7 +444,7 @@ class Livraison extends CommonObject } } } - + dolibarr_syslog("livraison.class.php::valid ok"); } else @@ -453,25 +463,25 @@ class Livraison extends CommonObject dolibarr_syslog("livraison.class.php::valid ".$this->error); return -1; } - + $this->db->commit(); dolibarr_syslog("livraison.class.php::valid commit"); return 1; } - + /** \brief Cr�� le bon de livraison depuis une exp�dition existante - \param user Utilisateur qui cr�e - \param sending_id Id de l'exp�dition qui sert de mod�le - */ + \param user Utilisateur qui cr�e + \param sending_id Id de l'exp�dition qui sert de mod�le + */ function create_from_sending($user, $sending_id) { $expedition = new Expedition($this->db); $result=$expedition->fetch($sending_id); - + $this->lignes = array(); $this->date_livraison = time(); $this->expedition_id = $sending_id; - + for ($i = 0 ; $i < sizeof($expedition->lignes) ; $i++) { $LivraisonLigne = new LivraisonLigne($this->db); @@ -483,7 +493,7 @@ class Livraison extends CommonObject $LivraisonLigne->ref = $expedition->lignes[$i]->ref; $this->lignes[$i] = $LivraisonLigne; } - + $this->origin = $expedition->origin; $this->origin_id = $expedition->origin_id; $this->note = $expedition->note; @@ -491,40 +501,40 @@ class Livraison extends CommonObject $this->date_livraison = $expedition->date_livraison; $this->adresse_livraison_id = $expedition->adresse_livraison_id; $this->socid = $expedition->socid; - + return $this->create($user); } - - + + /** - * Ajoute une ligne - * - */ + * Ajoute une ligne + * + */ function addline( $id, $qty ) { $num = sizeof($this->lignes); $ligne = new livraisonLigne($this->db); - + $ligne->commande_ligne_id = $id; $ligne->qty = $qty; - + $this->lignes[$num] = $ligne; } - + /** - * - * - */ + * + * + */ function delete_line($idligne) { if ($this->statut == 0) { $sql = "DELETE FROM ".MAIN_DB_PREFIX."commandedet WHERE rowid = $idligne"; - + if ($this->db->query($sql) ) { $this->update_price(); - + return 1; } else @@ -533,15 +543,15 @@ class Livraison extends CommonObject } } } - + /** - * Supprime la fiche - * - */ + * Supprime la fiche + * + */ function delete() { $this->db->begin(); - + $sql = "DELETE FROM ".MAIN_DB_PREFIX."livraisondet WHERE fk_livraison = $this->id ;"; if ( $this->db->query($sql) ) { @@ -549,7 +559,7 @@ class Livraison extends CommonObject if ( $this->db->query($sql) ) { $this->db->commit(); - + // On efface le r�pertoire de pdf provisoire $livref = sanitize_string($this->ref); if ($conf->livraison->dir_output) @@ -573,7 +583,7 @@ class Livraison extends CommonObject } } } - + return 1; } else @@ -588,12 +598,12 @@ class Livraison extends CommonObject return -1; } } - + /* - * Lit le document associe - * - */ + * Lit le document associe + * + */ function fetch_object() { $object = $this->origin; @@ -601,11 +611,11 @@ class Livraison extends CommonObject $this->$object = & new $class($this->db); $this->$object->fetch($this->origin_id); } - + /** - * - * - */ + * + * + */ function fetch_adresse_livraison($id) { $idadresse = $id; @@ -613,24 +623,24 @@ class Livraison extends CommonObject $adresse->fetch_adresse_livraison($idadresse); $this->adresse = $adresse; } - + /** - * - * - */ + * + * + */ function fetch_lignes() { $this->lignes = array(); - + $sql = "SELECT p.label, p.ref,"; $sql.= " l.description, l.fk_product, l.subprice, l.total_ht, l.qty as qty_shipped"; //$sql.= ", c.qty as qty_asked"; $sql.= " FROM ".MAIN_DB_PREFIX."livraisondet as l"; //$sql .= " , ".MAIN_DB_PREFIX."commandedet as c"; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on p.rowid = l.fk_product"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on p.rowid = l.fk_product"; $sql.= " WHERE l.fk_livraison = ".$this->id; //$sql .= " AND l.fk_commande_ligne = c.rowid"; - + dolibarr_syslog("Livraison::fetch_lignes sql=".$sql); $resql = $this->db->query($sql); if ($resql) @@ -640,9 +650,9 @@ class Livraison extends CommonObject while ($i < $num) { $ligne = new LivraisonLigne($this->db); - + $obj = $this->db->fetch_object($resql); - + $ligne->fk_product = $obj->fk_product; $ligne->qty_asked = $obj->qty_asked; $ligne->qty_shipped = $obj->qty_shipped; @@ -651,57 +661,57 @@ class Livraison extends CommonObject $ligne->description = $obj->description; $ligne->price = $obj->price; $ligne->total_ht = $obj->total_ht; - + $this->lignes[$i] = $ligne; $i++; } $this->db->free($resql); } - + return $this->lignes; } - /** - * \brief Retourne le libell� du statut d'une expedition - * \return string Libell� - */ - function getLibStatut($mode=0) - { - return $this->LibStatut($this->statut,$mode); - } - + /** + * \brief Retourne le libell� du statut d'une expedition + * \return string Libell� + */ + function getLibStatut($mode=0) + { + return $this->LibStatut($this->statut,$mode); + } + /** * \brief Renvoi le libell� d'un statut donn� * \param statut Id statut * \param mode 0=libell� long, 1=libell� court, 2=Picto + Libell� court, 3=Picto, 4=Picto + Libell� long, 5=Libell� court + Picto * \return string Libell� */ - function LibStatut($statut,$mode) - { + function LibStatut($statut,$mode) + { global $langs; - if ($mode==0) - { - if ($statut==-1) return $this->statuts[$statut]; - if ($statut==0) return $this->statuts[$statut]; - if ($statut==1) return $this->statuts[$statut]; - } - if ($mode==1) - { - if ($statut==-1) return $this->statuts[$statut]; - if ($statut==0) return $this->statuts[$statut]; - if ($statut==1) return $this->statuts[$statut]; - } - if ($mode == 4) - { - if ($statut==-1) return img_picto($langs->trans('StatusSendingCanceled'),'statut5').' '.$langs->trans('StatusSendingDraft'); - if ($statut==0) return img_picto($langs->trans('StatusSendingDraft'),'statut0').' '.$langs->trans('StatusSendingDraft'); - if ($statut==1) return img_picto($langs->trans('StatusSendingValidated'),'statut4').' '.$langs->trans('StatusSendingValidated'); - } - } - - + if ($mode==0) + { + if ($statut==-1) return $this->statuts[$statut]; + if ($statut==0) return $this->statuts[$statut]; + if ($statut==1) return $this->statuts[$statut]; + } + if ($mode==1) + { + if ($statut==-1) return $this->statuts[$statut]; + if ($statut==0) return $this->statuts[$statut]; + if ($statut==1) return $this->statuts[$statut]; + } + if ($mode == 4) + { + if ($statut==-1) return img_picto($langs->trans('StatusSendingCanceled'),'statut5').' '.$langs->trans('StatusSendingDraft'); + if ($statut==0) return img_picto($langs->trans('StatusSendingDraft'),'statut0').' '.$langs->trans('StatusSendingDraft'); + if ($statut==1) return img_picto($langs->trans('StatusSendingValidated'),'statut4').' '.$langs->trans('StatusSendingValidated'); + } + } + + /** * \brief Initialise object with default value to be used as example */ @@ -751,19 +761,19 @@ class Livraison extends CommonObject $this->date_livraison = time(); $this->note_public='SPECIMEN'; } - + } /** - \class LivraisonLigne - \brief Classe de gestion des lignes de bons de livraison -*/ + \class LivraisonLigne + \brief Classe de gestion des lignes de bons de livraison + */ class LivraisonLigne { var $db; - + // From llx_expeditiondet var $qty; var $qty_asked; @@ -774,10 +784,10 @@ class LivraisonLigne var $label; // Label produit var $description; // Description produit var $ref; - + function LivraisonLigne($DB) { - $this->db=$DB; + $this->db=$DB; } }