diff --git a/htdocs/fourn/fournisseur.commande.class.php b/htdocs/fourn/fournisseur.commande.class.php index c1d77d56aa1..5e3a0c37bab 100644 --- a/htdocs/fourn/fournisseur.commande.class.php +++ b/htdocs/fourn/fournisseur.commande.class.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2003-2006 Rodolphe Quiedeville * Copyright (C) 2004-2006 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify @@ -20,11 +20,11 @@ * $Source$ */ -/** - \file htdocs/fourn/fournisseur.commande.class.php - \ingroup fournisseur,commande - \brief Fichier des classes des commandes fournisseurs - \version $Revision$ +/** + \file htdocs/fourn/fournisseur.commande.class.php + \ingroup fournisseur,commande + \brief Fichier des classes des commandes fournisseurs + \version $Revision$ */ require_once(DOL_DOCUMENT_ROOT."/product.class.php"); @@ -32,8 +32,8 @@ require_once(DOL_DOCUMENT_ROOT."/commande/commande.class.php"); /** - \class CommandeFournisseur - \brief Classe de gestion de commande fournisseur + \class CommandeFournisseur + \brief Classe de gestion de commande fournisseur */ class CommandeFournisseur extends Commande @@ -65,401 +65,399 @@ class CommandeFournisseur extends Commande /** * Lit une commande */ - function fetch($id) - { - $sql = "SELECT c.rowid, c.date_creation, c.ref, c.fk_soc, c.fk_user_author, c.fk_statut, c.amount_ht, c.total_ht, c.total_ttc, c.tva,"; - $sql .= " ".$this->db->pdate("c.date_commande")." as date_commande, c.fk_projet, c.remise_percent, c.source, c.fk_methode_commande,"; - $sql .= " c.note, c.note_public,"; - $sql .= " cm.libelle as methode_commande"; - $sql .= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as c"; - $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_methode_commande_fournisseur as cm ON cm.rowid = c.fk_methode_commande"; - $sql .= " WHERE c.rowid = ".$id; - - $resql = $this->db->query($sql) ; - if ($resql) - { - $obj = $this->db->fetch_object($resql); - - $this->id = $obj->rowid; - $this->ref = $obj->ref; - $this->socid = $obj->fk_soc; - $this->fourn_id = $obj->fk_soc; - $this->statut = $obj->fk_statut; - $this->user_author_id = $obj->fk_user_author; - $this->total_ht = $obj->total_ht; - $this->total_tva = $obj->tva; - $this->total_ttc = $obj->total_ttc; - $this->date_commande = $obj->date_commande; // date à laquelle la commande a été transmise - $this->date = $obj->date_creation; - $this->remise_percent = $obj->remise_percent; - $this->methode_commande_id = $obj->fk_methode_commande; - $this->methode_commande = $obj->methode_commande; - - $this->source = $obj->source; - $this->facturee = $obj->facture; - $this->projet_id = $obj->fk_projet; - $this->note = $obj->note; - $this->note_public = $obj->note_public; - - $this->db->free(); - - if ($this->statut == 0) $this->brouillon = 1; - - // export pdf ----------- - - $this->lignes = array(); - $sql = 'SELECT l.fk_product, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice,'; - $sql.= ' p.label, p.description as product_desc, p.ref, p.fk_product_type, p.rowid as prodid'; - $sql.= ' FROM '.MAIN_DB_PREFIX.'commande_fournisseurdet as l'; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product=p.rowid'; - $sql.= ' WHERE l.fk_commande = '.$this->id; - $sql.= ' ORDER BY l.rowid'; - $result = $this->db->query($sql); - if ($result) - { - $num = $this->db->num_rows($result); - $i = 0; - - while ($i < $num) - { - $objp = $this->db->fetch_object($result); - - $ligne = new CommandeFournisseurLigne(); - - $ligne->desc = $objp->description; // Description ligne - $ligne->qty = $objp->qty; - $ligne->tva_tx = $objp->tva_tx; - $ligne->subprice = $objp->subprice; - $ligne->remise_percent = $objp->remise_percent; - $ligne->price = $objp->price; - $ligne->fk_product = $objp->fk_product; - - $ligne->libelle = $objp->label; // Label produit - $ligne->product_desc = $objp->product_desc; // Description produit - $ligne->ref = $objp->ref; - - $this->lignes[$i] = $ligne; - //dolibarr_syslog("1 ".$ligne->desc); - //dolibarr_syslog("2 ".$ligne->product_desc); - $i++; - } - $this->db->free($result); - - return 0; - } - else - { - $this->error=$this->db->error()." sql=".$sql; - dolibarr_syslog("CommandeFournisseur::Fetch ".$this->error); - return -1; - } - } - else - { - $this->error=$this->db->error()." sql=".$sql; - dolibarr_syslog("CommandeFournisseur::Fetch ".$this->error); - return -1; - } - } - - /** - * \brief Insère ligne de log - * \param user Utilisateur qui modifie la commande - * \param statut Statut de la commande - * \param datelog Date de modification - * \return int <0 si ko, >0 si ok - */ - function log($user, $statut, $datelog) - { - $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseur_log (datelog, fk_commande, fk_statut, fk_user)"; - $sql.= " VALUES (".$this->db->idate($datelog).",".$this->id.", $statut, ".$user->id.")"; - - if ( $this->db->query($sql) ) - { - return 1; - } - else - { - return -1; - } - } - - /** - * \brief Valide la commande - * \param user Utilisateur qui valide - */ - function valid($user) - { - dolibarr_syslog("CommandeFournisseur.class::Valid"); - $result = 0; - if ($user->rights->fournisseur->commande->valider) - { - $this->db->begin(); - - // Definition du nom de module de numerotation de commande - $soc = new Societe($this->db); - $soc->fetch($this->fourn_id); - $num=$this->getNextNumRef($soc); - - // on vérifie si la commande est en numérotation provisoire - $comref = substr($this->ref, 1, 4); - if ($comref == 'PROV') - { - $num = $this->getNextNumRef($soc); - } - else - { - $num = $this->ref; - } - - $sql = 'UPDATE '.MAIN_DB_PREFIX."commande_fournisseur SET ref='$num', fk_statut = 1, date_valid=now(), fk_user_valid=$user->id"; - $sql .= " WHERE rowid = $this->id AND fk_statut = 0"; - - $resql=$this->db->query($sql); - if ($resql) - { - $result = 1; - $this->log($user, 1, time()); // Statut 1 - $this->ref = $num; - - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('ORDER_SUPPLIER_VALIDATE',$this,$user,$langs,$conf); - // Fin appel triggers - - dolibarr_syslog("CommandeFournisseur::valid Success"); - $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->error(); - dolibarr_syslog("CommandeFournisseur::valid ".$this->error); - $this->db->rollback(); - return -1; - } - } - else - { - $this->error='Not Authorized'; - dolibarr_syslog("CommandeFournisseur::valid ".$this->error); - return -1; - } - } - - /** - * \brief Annule la commande - * \param user Utilisateur qui demande annulation - * \remarks L'annulation se fait après la validation - */ - function Cancel($user) - { - //dolibarr_syslog("CommandeFournisseur::Cancel"); - $result = 0; - if ($user->rights->fournisseur->commande->annuler) - { - $statut = 6; - - $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur SET fk_statut = ".$statut; - $sql .= " WHERE rowid = ".$this->id." AND fk_statut = 1 ;"; - - if ($this->db->query($sql) ) - { - $result = 0; - $this->log($user, $statut, time()); - - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('ORDER_SUPPLIER_VALIDATE',$this,$user,$langs,$conf); - // Fin appel triggers - - return 1; - } - else - { - dolibarr_syslog("CommandeFournisseur::Cancel Error -1"); - return -1; - } - } - else - { - dolibarr_syslog("CommandeFournisseur::Cancel Not Authorized"); - return -1; - } - } - - - /** - * \brief Retourne le libellé du statut d'une commande (brouillon, validée, abandonnée, payée) - * \param mode 0=libellé long, 1=libellé court, 2=Picto + Libellé court, 3=Picto, 4=Picto + Libellé long - * \return string Libelle - */ - 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é du statut - */ - function LibStatut($statut,$mode=0) - { - global $langs; - $langs->load('orders'); - - if ($mode == 0) - { - return $this->statuts[$statut]; - } - if ($mode == 1) - { - return $this->statuts[$statut]; - } - if ($mode == 2) - { - return $this->statuts[$statut]; - } - if ($mode == 3) - { - if ($statut==0) return img_picto($langs->trans('StatusOrderDraft'),'statut0'); - if ($statut==1) return img_picto($langs->trans('StatusOrderValidated'),'statut1'); - if ($statut==2) return img_picto($langs->trans('StatusOrderApproved'),'statut3'); - if ($statut==3) return img_picto($langs->trans('StatusOrderOnProcess'),'statut3'); - if ($statut==4) return img_picto($langs->trans('StatusOrderReceivedPartially'),'statut3'); - if ($statut==5) return img_picto($langs->trans('StatusOrderProcessed'),'statut6'); - if ($statut==6) return img_picto($langs->trans('StatusOrderCanceled'),'statut5'); - if ($statut==9) return img_picto($langs->trans('StatusOrderRefused'),'statut5'); - } - if ($mode == 4) - { - if ($statut==0) return img_picto($langs->trans('StatusOrderDraft'),'statut0').' '.$this->statuts[$statut]; - if ($statut==1) return img_picto($langs->trans('StatusOrderValidated'),'statut1').' '.$this->statuts[$statut]; - if ($statut==2) return img_picto($langs->trans('StatusOrderApproved'),'statut3').' '.$this->statuts[$statut]; - if ($statut==3) return img_picto($langs->trans('StatusOrderOnProcess'),'statut3').' '.$this->statuts[$statut]; - if ($statut==4) return img_picto($langs->trans('StatusOrderReceivedPartially'),'statut3').' '.$this->statuts[$statut]; - if ($statut==5) return img_picto($langs->trans('StatusOrderProcessed'),'statut6').' '.$this->statuts[$statut]; - if ($statut==6) return img_picto($langs->trans('StatusOrderCanceled'),'statut5').' '.$this->statuts[$statut]; - if ($statut==9) return img_picto($langs->trans('StatusOrderRefused'),'statut5').' '.$this->statuts[$statut]; - } - if ($mode == 5) - { - if ($statut==0) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderDraft'),'statut0'); - if ($statut==1) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderValidated'),'statut1'); - if ($statut==2) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderApproved'),'statut3'); - if ($statut==3) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderOnProcess'),'statut3'); - if ($statut==4) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderReceivedPartially'),'statut3'); - if ($statut==5) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderProcessed'),'statut6'); - if ($statut==6) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderCanceled'),'statut5'); - if ($statut==9) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderRefused'),'statut5'); - } - } - - - /** - * \brief Renvoie la référence de commande suivante non utilisée en fonction du module - * de numérotation actif défini dans COMMANDE_SUPPLIER_ADDON - * \param soc objet societe - * \return string reference libre pour la facture - */ - function getNextNumRef($soc) - { - global $db, $langs, $conf; - $langs->load("orders"); - - $dir = DOL_DOCUMENT_ROOT .'/fourn/commande/modules'; - $modelisok=0; - $liste=array(); - - if (defined('COMMANDE_SUPPLIER_ADDON') && COMMANDE_SUPPLIER_ADDON) - { - $file = COMMANDE_SUPPLIER_ADDON.'.php'; - - if (is_readable($dir.'/'.$file)) - { - // Definition du nom de module de numerotation de commande fournisseur - $modName=$conf->global->COMMANDE_SUPPLIER_ADDON; - require_once($dir.'/'.$file); - - // Recuperation de la nouvelle reference - $objMod = new $modName($this->db); - - $numref = ""; - $numref = $objMod->commande_get_num($soc,$this); - - if ( $numref != "") - { - return $numref; - } - else - { - dolibarr_print_error($db,"Facture::getNextNumRef ".$obj->error); - return -1; - } - } - else - { - print $langs->trans("Error")." ".$langs->trans("Error_FailedToLoad_COMMANDE_SUPPLIER_ADDON_File",$conf->global->COMMANDE_SUPPLIER_ADDON); - return -2; - } - } - else - { - print $langs->trans("Error")." ".$langs->trans("Error_COMMANDE_SUPPLIER_ADDON_NotDefined"); - return -3; - } - } + function fetch($id) + { + $sql = "SELECT c.rowid, c.date_creation, c.ref, c.fk_soc, c.fk_user_author, c.fk_statut, c.amount_ht, c.total_ht, c.total_ttc, c.tva,"; + $sql .= " ".$this->db->pdate("c.date_commande")." as date_commande, c.fk_projet, c.remise_percent, c.source, c.fk_methode_commande,"; + $sql .= " c.note, c.note_public,"; + $sql .= " cm.libelle as methode_commande"; + $sql .= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as c"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_methode_commande_fournisseur as cm ON cm.rowid = c.fk_methode_commande"; + $sql .= " WHERE c.rowid = ".$id; - /** - * \brief Approuve une commande - * - */ - function approve($user) - { - dolibarr_syslog("CommandeFournisseur::Approve"); - $result = 0; - if ($user->rights->fournisseur->commande->approuver) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur SET fk_statut = 2"; - $sql .= " WHERE rowid = ".$this->id." AND fk_statut = 1 ;"; + $resql = $this->db->query($sql) ; + if ($resql) + { + $obj = $this->db->fetch_object($resql); - if ($this->db->query($sql) ) - { - $result = 0; - $this->log($user, 2, time()); // Statut 2 + $this->id = $obj->rowid; + $this->ref = $obj->ref; + $this->socid = $obj->fk_soc; + $this->fourn_id = $obj->fk_soc; + $this->statut = $obj->fk_statut; + $this->user_author_id = $obj->fk_user_author; + $this->total_ht = $obj->total_ht; + $this->total_tva = $obj->tva; + $this->total_ttc = $obj->total_ttc; + $this->date_commande = $obj->date_commande; // date à laquelle la commande a été transmise + $this->date = $obj->date_creation; + $this->remise_percent = $obj->remise_percent; + $this->methode_commande_id = $obj->fk_methode_commande; + $this->methode_commande = $obj->methode_commande; - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('ORDER_SUPPLIER_APPROVE',$this,$user,$langs,$conf); - // Fin appel triggers + $this->source = $obj->source; + $this->facturee = $obj->facture; + $this->projet_id = $obj->fk_projet; + $this->note = $obj->note; + $this->note_public = $obj->note_public; + + $this->db->free(); + + if ($this->statut == 0) $this->brouillon = 1; + + // export pdf ----------- + + $this->lignes = array(); + $sql = 'SELECT l.fk_product, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice,'; + $sql.= ' p.label, p.description as product_desc, p.ref, p.fk_product_type, p.rowid as prodid'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'commande_fournisseurdet as l'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product=p.rowid'; + $sql.= ' WHERE l.fk_commande = '.$this->id; + $sql.= ' ORDER BY l.rowid'; + $result = $this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows($result); + $i = 0; + + while ($i < $num) + { + $objp = $this->db->fetch_object($result); + + $ligne = new CommandeFournisseurLigne(); + + $ligne->desc = $objp->description; // Description ligne + $ligne->qty = $objp->qty; + $ligne->tva_tx = $objp->tva_tx; + $ligne->subprice = $objp->subprice; + $ligne->remise_percent = $objp->remise_percent; + $ligne->price = $objp->price; + $ligne->fk_product = $objp->fk_product; + + $ligne->libelle = $objp->label; // Label produit + $ligne->product_desc = $objp->product_desc; // Description produit + $ligne->ref = $objp->ref; + + $this->lignes[$i] = $ligne; + //dolibarr_syslog("1 ".$ligne->desc); + //dolibarr_syslog("2 ".$ligne->product_desc); + $i++; + } + $this->db->free($result); + + return 0; + } + else + { + $this->error=$this->db->error()." sql=".$sql; + dolibarr_syslog("CommandeFournisseur::Fetch ".$this->error); + return -1; + } + } + else + { + $this->error=$this->db->error()." sql=".$sql; + dolibarr_syslog("CommandeFournisseur::Fetch ".$this->error); + return -1; + } + } + /** + * \brief Insère ligne de log + * \param user Utilisateur qui modifie la commande + * \param statut Statut de la commande + * \param datelog Date de modification + * \return int <0 si ko, >0 si ok + */ + function log($user, $statut, $datelog) + { + $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseur_log (datelog, fk_commande, fk_statut, fk_user)"; + $sql.= " VALUES (".$this->db->idate($datelog).",".$this->id.", $statut, ".$user->id.")"; + + if ( $this->db->query($sql) ) + { + return 1; + } + else + { + return -1; + } + } + /** + * \brief Valide la commande + * \param user Utilisateur qui valide + */ + function valid($user) + { + dolibarr_syslog("CommandeFournisseur.class::Valid"); + $result = 0; + if ($user->rights->fournisseur->commande->valider) + { + $this->db->begin(); + + // Definition du nom de module de numerotation de commande + $soc = new Societe($this->db); + $soc->fetch($this->fourn_id); + $num=$this->getNextNumRef($soc); - $subject = "Votre commande ".$this->ref." a été approuvée"; - $message = "Bonjour,\n\n"; - $message .= "Votre commande ".$this->ref." a été approuvée, par $user->fullname"; - $message .= "\n\nCordialement,\n\n"; - $this->_NotifyCreator($user, $subject, $message); + // on vérifie si la commande est en numérotation provisoire + $comref = substr($this->ref, 1, 4); + if ($comref == 'PROV') + { + $num = $this->getNextNumRef($soc); + } + else + { + $num = $this->ref; + } - dolibarr_syslog("CommandeFournisseur::valid Success"); - $this->db->commit(); - return 1; - } - else - { - dolibarr_syslog("CommandeFournisseur::Approve Error -1"); - $result = -1; - } - } - else - { - dolibarr_syslog("CommandeFournisseur::Approve Not Authorized"); - } - return $result ; - } + $sql = 'UPDATE '.MAIN_DB_PREFIX."commande_fournisseur SET ref='$num', fk_statut = 1, date_valid=now(), fk_user_valid=$user->id"; + $sql .= " WHERE rowid = $this->id AND fk_statut = 0"; + + $resql=$this->db->query($sql); + if ($resql) + { + $result = 1; + $this->log($user, 1, time()); // Statut 1 + $this->ref = $num; + + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('ORDER_SUPPLIER_VALIDATE',$this,$user,$langs,$conf); + // Fin appel triggers + + dolibarr_syslog("CommandeFournisseur::valid Success"); + $this->db->commit(); + return 1; + } + else + { + $this->error=$this->db->error(); + dolibarr_syslog("CommandeFournisseur::valid ".$this->error); + $this->db->rollback(); + return -1; + } + } + else + { + $this->error='Not Authorized'; + dolibarr_syslog("CommandeFournisseur::valid ".$this->error); + return -1; + } + } + + /** + * \brief Annule la commande + * \param user Utilisateur qui demande annulation + * \remarks L'annulation se fait après la validation + */ + function Cancel($user) + { + //dolibarr_syslog("CommandeFournisseur::Cancel"); + $result = 0; + if ($user->rights->fournisseur->commande->annuler) + { + $statut = 6; + + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur SET fk_statut = ".$statut; + $sql .= " WHERE rowid = ".$this->id." AND fk_statut = 1 ;"; + + if ($this->db->query($sql) ) + { + $result = 0; + $this->log($user, $statut, time()); + + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('ORDER_SUPPLIER_VALIDATE',$this,$user,$langs,$conf); + // Fin appel triggers + + return 1; + } + else + { + dolibarr_syslog("CommandeFournisseur::Cancel Error -1"); + return -1; + } + } + else + { + dolibarr_syslog("CommandeFournisseur::Cancel Not Authorized"); + return -1; + } + } + + + /** + * \brief Retourne le libellé du statut d'une commande (brouillon, validée, abandonnée, payée) + * \param mode 0=libellé long, 1=libellé court, 2=Picto + Libellé court, 3=Picto, 4=Picto + Libellé long + * \return string Libelle + */ + 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é du statut + */ + function LibStatut($statut,$mode=0) + { + global $langs; + $langs->load('orders'); + + if ($mode == 0) + { + return $this->statuts[$statut]; + } + if ($mode == 1) + { + return $this->statuts[$statut]; + } + if ($mode == 2) + { + return $this->statuts[$statut]; + } + if ($mode == 3) + { + if ($statut==0) return img_picto($langs->trans('StatusOrderDraft'),'statut0'); + if ($statut==1) return img_picto($langs->trans('StatusOrderValidated'),'statut1'); + if ($statut==2) return img_picto($langs->trans('StatusOrderApproved'),'statut3'); + if ($statut==3) return img_picto($langs->trans('StatusOrderOnProcess'),'statut3'); + if ($statut==4) return img_picto($langs->trans('StatusOrderReceivedPartially'),'statut3'); + if ($statut==5) return img_picto($langs->trans('StatusOrderProcessed'),'statut6'); + if ($statut==6) return img_picto($langs->trans('StatusOrderCanceled'),'statut5'); + if ($statut==9) return img_picto($langs->trans('StatusOrderRefused'),'statut5'); + } + if ($mode == 4) + { + if ($statut==0) return img_picto($langs->trans('StatusOrderDraft'),'statut0').' '.$this->statuts[$statut]; + if ($statut==1) return img_picto($langs->trans('StatusOrderValidated'),'statut1').' '.$this->statuts[$statut]; + if ($statut==2) return img_picto($langs->trans('StatusOrderApproved'),'statut3').' '.$this->statuts[$statut]; + if ($statut==3) return img_picto($langs->trans('StatusOrderOnProcess'),'statut3').' '.$this->statuts[$statut]; + if ($statut==4) return img_picto($langs->trans('StatusOrderReceivedPartially'),'statut3').' '.$this->statuts[$statut]; + if ($statut==5) return img_picto($langs->trans('StatusOrderProcessed'),'statut6').' '.$this->statuts[$statut]; + if ($statut==6) return img_picto($langs->trans('StatusOrderCanceled'),'statut5').' '.$this->statuts[$statut]; + if ($statut==9) return img_picto($langs->trans('StatusOrderRefused'),'statut5').' '.$this->statuts[$statut]; + } + if ($mode == 5) + { + if ($statut==0) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderDraft'),'statut0'); + if ($statut==1) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderValidated'),'statut1'); + if ($statut==2) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderApproved'),'statut3'); + if ($statut==3) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderOnProcess'),'statut3'); + if ($statut==4) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderReceivedPartially'),'statut3'); + if ($statut==5) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderProcessed'),'statut6'); + if ($statut==6) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderCanceled'),'statut5'); + if ($statut==9) return $this->statuts[$statut].' '.img_picto($langs->trans('StatusOrderRefused'),'statut5'); + } + } + + + /** + * \brief Renvoie la référence de commande suivante non utilisée en fonction du module + * de numérotation actif défini dans COMMANDE_SUPPLIER_ADDON + * \param soc objet societe + * \return string reference libre pour la facture + */ + function getNextNumRef($soc) + { + global $db, $langs, $conf; + $langs->load("orders"); + + $dir = DOL_DOCUMENT_ROOT .'/fourn/commande/modules'; + $modelisok=0; + $liste=array(); + + if (defined('COMMANDE_SUPPLIER_ADDON') && COMMANDE_SUPPLIER_ADDON) + { + $file = COMMANDE_SUPPLIER_ADDON.'.php'; + + if (is_readable($dir.'/'.$file)) + { + // Definition du nom de module de numerotation de commande fournisseur + $modName=$conf->global->COMMANDE_SUPPLIER_ADDON; + require_once($dir.'/'.$file); + + // Recuperation de la nouvelle reference + $objMod = new $modName($this->db); + + $numref = ""; + $numref = $objMod->commande_get_num($soc,$this); + + if ( $numref != "") + { + return $numref; + } + else + { + dolibarr_print_error($db,"Facture::getNextNumRef ".$obj->error); + return -1; + } + } + else + { + print $langs->trans("Error")." ".$langs->trans("Error_FailedToLoad_COMMANDE_SUPPLIER_ADDON_File",$conf->global->COMMANDE_SUPPLIER_ADDON); + return -2; + } + } + else + { + print $langs->trans("Error")." ".$langs->trans("Error_COMMANDE_SUPPLIER_ADDON_NotDefined"); + return -3; + } + } + + /** + * \brief Approuve une commande + * + */ + function approve($user) + { + dolibarr_syslog("CommandeFournisseur::Approve"); + $result = 0; + if ($user->rights->fournisseur->commande->approuver) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur SET fk_statut = 2"; + $sql .= " WHERE rowid = ".$this->id." AND fk_statut = 1 ;"; + + if ($this->db->query($sql) ) + { + $result = 0; + $this->log($user, 2, time()); // Statut 2 + + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('ORDER_SUPPLIER_APPROVE',$this,$user,$langs,$conf); + // Fin appel triggers + + $subject = "Votre commande ".$this->ref." a été approuvée"; + $message = "Bonjour,\n\n"; + $message .= "Votre commande ".$this->ref." a été approuvée, par $user->fullname"; + $message .= "\n\nCordialement,\n\n"; + $this->_NotifyCreator($user, $subject, $message); + + dolibarr_syslog("CommandeFournisseur::valid Success"); + $this->db->commit(); + return 1; + } + else + { + dolibarr_syslog("CommandeFournisseur::Approve Error -1"); + $result = -1; + } + } + else + { + dolibarr_syslog("CommandeFournisseur::Approve Not Authorized"); + } + return $result ; + } /** * Refuse une commande @@ -467,36 +465,36 @@ class CommandeFournisseur extends Commande * */ function refuse($user) - { - dolibarr_syslog("CommandeFournisseur::Refuse"); - $result = 0; - if ($user->rights->fournisseur->commande->approuver) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur SET fk_statut = 9"; - $sql .= " WHERE rowid = ".$this->id; + { + dolibarr_syslog("CommandeFournisseur::Refuse"); + $result = 0; + if ($user->rights->fournisseur->commande->approuver) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur SET fk_statut = 9"; + $sql .= " WHERE rowid = ".$this->id; - if ($this->db->query($sql) ) - { - $result = 0; - $this->log($user, 9, time()); + if ($this->db->query($sql) ) + { + $result = 0; + $this->log($user, 9, time()); - $subject = "Votre commande ".$this->ref." a été refusée"; - $message = "Votre commande ".$this->ref." a été refusée, par $user->fullname"; + $subject = "Votre commande ".$this->ref." a été refusée"; + $message = "Votre commande ".$this->ref." a été refusée, par $user->fullname"; - $this->_NotifyCreator($user, $subject, $message); - } - else - { - dolibarr_syslog("CommandeFournisseur::Refuse Error -1"); - $result = -1; - } - } - else - { - dolibarr_syslog("CommandeFournisseur::Refuse Not Authorized"); - } - return $result ; - } + $this->_NotifyCreator($user, $subject, $message); + } + else + { + dolibarr_syslog("CommandeFournisseur::Refuse Error -1"); + $result = -1; + } + } + else + { + dolibarr_syslog("CommandeFournisseur::Refuse Not Authorized"); + } + return $result ; + } /* * * @@ -512,9 +510,9 @@ class CommandeFournisseur extends Commande $from = $user->email; $mailfile = new CMailFile($subject, - $sendto, - $from, - $message, array(), array(), array()); + $sendto, + $from, + $message, array(), array(), array()); if ( $mailfile->sendfile() ) { return 0; @@ -527,341 +525,418 @@ class CommandeFournisseur extends Commande * */ function commande($user, $date, $methode) - { - dolibarr_syslog("CommandeFournisseur::Commande"); - $result = 0; - if ($user->rights->fournisseur->commande->commander) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur SET fk_statut = 3, fk_methode_commande=".$methode.",date_commande=".$this->db->idate("$date"); - $sql .= " WHERE rowid = ".$this->id." AND fk_statut = 2 ;"; + { + dolibarr_syslog("CommandeFournisseur::Commande"); + $result = 0; + if ($user->rights->fournisseur->commande->commander) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur SET fk_statut = 3, fk_methode_commande=".$methode.",date_commande=".$this->db->idate("$date"); + $sql .= " WHERE rowid = ".$this->id." AND fk_statut = 2 ;"; - if ($this->db->query($sql) ) - { - $result = 0; - $this->log($user, 3, $date); - } - else - { - dolibarr_syslog("CommandeFournisseur::Commande Error -1"); - $result = -1; - } - } - else - { - dolibarr_syslog("CommandeFournisseur::Commande Not Authorized"); - } - return $result ; - } + if ($this->db->query($sql) ) + { + $result = 0; + $this->log($user, 3, $date); + } + else + { + dolibarr_syslog("CommandeFournisseur::Commande Error -1"); + $result = -1; + } + } + else + { + dolibarr_syslog("CommandeFournisseur::Commande Not Authorized"); + } + return $result ; + } - /** - * \brief Créé la commande au statut brouillon - * \param user Utilisateur qui crée - * \return int <0 si ko, >0 si ok - */ - function create($user) - { - dolibarr_syslog("CommandeFournisseur::Create soc id=".$this->socid); + /** + * \brief Créé la commande au statut brouillon + * \param user Utilisateur qui crée + * \return int <0 si ko, >0 si ok + */ + function create($user) + { + dolibarr_syslog("CommandeFournisseur::Create soc id=".$this->socid); - $this->db->begin(); + $this->db->begin(); - /* On positionne en mode brouillon la commande */ - $this->brouillon = 1; + /* On positionne en mode brouillon la commande */ + $this->brouillon = 1; - $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseur (fk_soc, date_creation, fk_user_author, fk_statut) "; - $sql .= " VALUES (".$this->socid.", now(), ".$user->id.",0)"; + $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseur (fk_soc, date_creation, fk_user_author, fk_statut) "; + $sql .= " VALUES (".$this->socid.", now(), ".$user->id.",0)"; - if ( $this->db->query($sql) ) - { - $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."commande_fournisseur"); + if ( $this->db->query($sql) ) + { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."commande_fournisseur"); - $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur"; - $sql.= " SET ref='(PROV".$this->id.")'"; - $sql.= " WHERE rowid=".$this->id; - if ($this->db->query($sql)) - { - // On logue creation pour historique - $this->log($user, 0, time()); + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur"; + $sql.= " SET ref='(PROV".$this->id.")'"; + $sql.= " WHERE rowid=".$this->id; + if ($this->db->query($sql)) + { + // On logue creation pour historique + $this->log($user, 0, time()); - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('ORDER_SUPPLIER_CREATE',$this,$user,$langs,$conf); - // Fin appel triggers + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('ORDER_SUPPLIER_CREATE',$this,$user,$langs,$conf); + // Fin appel triggers - dolibarr_syslog("CommandeFournisseur::Create : Success"); - $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->error()." - ".$sql; - dolibarr_syslog("CommandeFournisseur::Create: Failed -2 - ".$this->error); - $this->db->rollback(); - return -2; - } - } - else - { - $this->error=$this->db->error()." - ".$sql; - dolibarr_syslog("CommandeFournisseur::Create: Failed -1 - ".$this->error); - $this->db->rollback(); - return -1; - } - } + dolibarr_syslog("CommandeFournisseur::Create : Success"); + $this->db->commit(); + return 1; + } + else + { + $this->error=$this->db->error()." - ".$sql; + dolibarr_syslog("CommandeFournisseur::Create: Failed -2 - ".$this->error); + $this->db->rollback(); + return -2; + } + } + else + { + $this->error=$this->db->error()." - ".$sql; + dolibarr_syslog("CommandeFournisseur::Create: Failed -1 - ".$this->error); + $this->db->rollback(); + return -1; + } + } - /** - * \brief Ajoute une ligne de commande - * \param desc Description - * \param pu Prix unitaire - * \param qty Quantité - * \param txtva Taux tva - * \param fk_product Id produit - * \param remise_percent Remise - * \param int <0 si ko, >0 si ok - */ - function addline($desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0) - { - global $langs; + /** + * \brief Ajoute une ligne de commande + * \param desc Description + * \param pu Prix unitaire + * \param qty Quantité + * \param txtva Taux tva + * \param fk_product Id produit + * \param remise_percent Remise + * \param int <0 si ko, >0 si ok + */ + function addline($desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0) + { + global $langs; - $qty = price2num($qty); - $pu = price2num($pu); - $desc = trim($desc); - $remise_percent = price2num($remise_percent); + $qty = price2num($qty); + $pu = price2num($pu); + $desc = trim($desc); + $remise_percent = price2num($remise_percent); - dolibarr_syslog("Fournisseur.Commande.class::addline $desc, $pu, $qty, $txtva, $fk_product, $remise_percent"); + dolibarr_syslog("Fournisseur.Commande.class::addline $desc, $pu, $qty, $txtva, $fk_product, $remise_percent"); - if ($qty < 1 && ! $fk_product) - { - $this->error=$langs->trans("ErrorFieldRequired",$langs->trans("Product")); - return -1; - } + if ($qty < 1 && ! $fk_product) + { + $this->error=$langs->trans("ErrorFieldRequired",$langs->trans("Product")); + return -1; + } - if ($this->brouillon) - { - $this->db->begin(); + if ($this->brouillon) + { + $this->db->begin(); - if ($fk_product > 0) - { - $prod = new Product($this->db, $fk_product); - if ($prod->fetch($fk_product) > 0) - { - $result=$prod->get_buyprice($this->fourn_id,$qty); - if ($result > 0) - { - $label = $prod->libelle; - $desc = $prod->description; - $txtva = $prod->tva_tx; - $pu = $prod->fourn_pu; - $ref = $prod->ref; - } - if ($result == 0 || $result == -1) - { - $this->error="Aucun tarif trouvé pour cette quantité. Quantité saisie insuffisante ?"; - $this->db->rollback(); - dolibarr_syslog("Fournisseur.commande.class::addline result=".$result." - ".$this->error); - return -1; - } - if ($result < -1) - { - $this->error=$prod->error; - $this->db->rollback(); - dolibarr_syslog("Fournisseur.commande.class::addline result=".$result." - ".$this->error); - return -1; - } - } - else - { - $this->error=$this->db->error(); - return -1; - } - } + if ($fk_product > 0) + { + $prod = new Product($this->db, $fk_product); + if ($prod->fetch($fk_product) > 0) + { + $result=$prod->get_buyprice($this->fourn_id,$qty); + if ($result > 0) + { + $label = $prod->libelle; + $desc = $prod->description; + $txtva = $prod->tva_tx; + $pu = $prod->fourn_pu; + $ref = $prod->ref; + } + if ($result == 0 || $result == -1) + { + $this->error="Aucun tarif trouvé pour cette quantité. Quantité saisie insuffisante ?"; + $this->db->rollback(); + dolibarr_syslog("Fournisseur.commande.class::addline result=".$result." - ".$this->error); + return -1; + } + if ($result < -1) + { + $this->error=$prod->error; + $this->db->rollback(); + dolibarr_syslog("Fournisseur.commande.class::addline result=".$result." - ".$this->error); + return -1; + } + } + else + { + $this->error=$this->db->error(); + return -1; + } + } - $remise = 0; - $price = price2num($pu); - $subprice = $price; - if ($remise_percent > 0) - { - $remise = round(($pu * $remise_percent / 100), 2); - $price = $pu - $remise; - } + $remise = 0; + $price = price2num($pu); + $subprice = $price; + if ($remise_percent > 0) + { + $remise = round(($pu * $remise_percent / 100), 2); + $price = $pu - $remise; + } - $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseurdet (fk_commande,label,description,fk_product, price, qty, tva_tx, remise_percent, subprice, remise, ref)"; - $sql .= " VALUES ($this->id, '" . addslashes($label) . "','" . addslashes($desc) . "',".$fk_product.",".price2num($price).", '$qty', $txtva, $remise_percent,'".price2num($subprice)."','".price2num($remise)."','".$ref."') ;"; - dolibarr_syslog('Fournisseur.commande.class::addline sql='.$sql); - $resql=$this->db->query($sql); - if ($resql) - { - $this->update_price(); + $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseurdet (fk_commande,label,description,fk_product, price, qty, tva_tx, remise_percent, subprice, remise, ref)"; + $sql .= " VALUES ($this->id, '" . addslashes($label) . "','" . addslashes($desc) . "',".$fk_product.",".price2num($price).", '$qty', $txtva, $remise_percent,'".price2num($subprice)."','".price2num($remise)."','".$ref."') ;"; + dolibarr_syslog('Fournisseur.commande.class::addline sql='.$sql); + $resql=$this->db->query($sql); + if ($resql) + { + $this->update_price(); - $this->db->commit(); - return 1; - } - else - { - $this->db->rollback(); - return -1; - } - } - } + $this->db->commit(); + return 1; + } + else + { + $this->db->rollback(); + return -1; + } + } + } + /** + * Dispatch un element de la commande dans un stock + * + * + * + */ + function DispatchProducts($user, $products, $qtys, $entrepots) + { + global $conf; + require_once DOL_DOCUMENT_ROOT ."/product/stock/mouvementstock.class.php"; - /** - * Supprime une ligne de la commande - * - */ - function delete_line($idligne) - { - if ($this->statut == 0) - { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseurdet WHERE rowid = ".$idligne; - $resql=$this->db->query($sql); + $this->db->begin(); - dolibarr_syslog("Fournisseur.commande.class::delete_line sql=".$sql); - if ($resql) - { - $result=$this->update_price(); - return 0; - } - else - { - $this->error=$this->db->error(); - return -1; - } - } - else - { - return -1; - } - } + if ( is_array($products) ) + { + + } + else + { + $res = $this->DispatchProduct($user, $product, $qty, $entrepot); + } + + $this->db->rollback(); + + return $res; + } + + function DispatchProduct($user, $product, $qty, $entrepot) + { + global $conf; + $error = 0; + require_once DOL_DOCUMENT_ROOT ."/product/stock/mouvementstock.class.php"; + + dolibarr_syslog("CommandeFournisseur::DispatchProduct"); + + if ( ($this->statut == 3 || $this->statut == 4) && $qty > 0) + { + $this->db->begin(); + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseur_dispatch "; + $sql.= " (fk_commande,fk_product, qty, fk_entrepot, fk_user, datec) VALUES "; + $sql.= " ('".$this->id."','".$product."','".$qty."','".$entrepot."','".$user->id."',now() );"; + + $resql = $this->db->query($sql); + if (! $resql) + { + $error = -1; + } + // Si module stock géré et que expedition faite depuis un entrepot + if (!$error && $conf->stock->enabled && $entrepot) + { + /* + * Enregistrement d'un mouvement de stock pour chaque produit de l'expedition + */ + $mouv = new MouvementStock($this->db); + $result=$mouv->reception($user, $product, $entrepot, $qty); + if ($result < 0) + { + $this->error=$this->db->error()." - sql=$sql"; + dolibarr_syslog("CommandeFournisseur::DispatchProduct".$this->error); + $error = -2; + } + $i++; + } + + if ($error == 0) + { + $this->db->commit(); + return 0; + } + else + { + $this->db->rollback(); + return -1; + } + } + else + { + return -2; + } + } + /** + * Supprime une ligne de la commande + * + */ + function delete_line($idligne) + { + if ($this->statut == 0) + { + $sql = "DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseurdet WHERE rowid = ".$idligne; + $resql=$this->db->query($sql); + + dolibarr_syslog("Fournisseur.commande.class::delete_line sql=".$sql); + if ($resql) + { + $result=$this->update_price(); + return 0; + } + else + { + $this->error=$this->db->error(); + return -1; + } + } + else + { + return -1; + } + } /** * Mettre à jour le prix * */ function update_price() - { - include_once DOL_DOCUMENT_ROOT . "/lib/price.lib.php"; + { + include_once DOL_DOCUMENT_ROOT . "/lib/price.lib.php"; - /* - * Liste des produits a ajouter - */ - $sql = "SELECT price, qty, tva_tx "; - $sql .= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet "; - $sql .= " WHERE fk_commande = $this->id"; + /* + * Liste des produits a ajouter + */ + $sql = "SELECT price, qty, tva_tx "; + $sql .= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet "; + $sql .= " WHERE fk_commande = $this->id"; - if ( $this->db->query($sql) ) - { - $num = $this->db->num_rows(); - $i = 0; + if ( $this->db->query($sql) ) + { + $num = $this->db->num_rows(); + $i = 0; - while ($i < $num) - { - $obj = $this->db->fetch_object(); - $products[$i][0] = $obj->price; - $products[$i][1] = $obj->qty; - $products[$i][2] = $obj->tva_tx; - $i++; - } - } - $calculs = calcul_price($products, $this->remise_percent); + while ($i < $num) + { + $obj = $this->db->fetch_object(); + $products[$i][0] = $obj->price; + $products[$i][1] = $obj->qty; + $products[$i][2] = $obj->tva_tx; + $i++; + } + } + $calculs = calcul_price($products, $this->remise_percent); - $totalht = $calculs[0]; - $totaltva = $calculs[1]; - $totalttc = $calculs[2]; - $total_remise = $calculs[3]; + $totalht = $calculs[0]; + $totaltva = $calculs[1]; + $totalttc = $calculs[2]; + $total_remise = $calculs[3]; - $this->remise = $total_remise; - $this->total_ht = $totalht; - $this->total_tva = $totaltva; - $this->total_ttc = $totalttc; - /* - * - */ - $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur set"; - $sql .= " amount_ht ='".price2num($totalht)."'"; - $sql .= ", total_ht ='".price2num($totalht)."'"; - $sql .= ", tva ='".price2num($totaltva)."'"; - $sql .= ", total_ttc ='".price2num($totalttc)."'"; - $sql .= ", remise ='".price2num($total_remise)."'"; - $sql .= " WHERE rowid = $this->id"; - if ( $this->db->query($sql) ) - { - return 1; - } - else - { - print "Erreur mise à jour du prix

".$sql; - return -1; - } - } + $this->remise = $total_remise; + $this->total_ht = $totalht; + $this->total_tva = $totaltva; + $this->total_ttc = $totalttc; + /* + * + */ + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur set"; + $sql .= " amount_ht ='".price2num($totalht)."'"; + $sql .= ", total_ht ='".price2num($totalht)."'"; + $sql .= ", tva ='".price2num($totaltva)."'"; + $sql .= ", total_ttc ='".price2num($totalttc)."'"; + $sql .= ", remise ='".price2num($total_remise)."'"; + $sql .= " WHERE rowid = $this->id"; + if ( $this->db->query($sql) ) + { + return 1; + } + else + { + print "Erreur mise à jour du prix

".$sql; + return -1; + } + } /** * \brief Supprime la commande * */ - function delete() - { - $err = 0; + function delete() + { + $err = 0; - $this->db->begin(); + $this->db->begin(); - $sql = "DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseurdet WHERE fk_commande =". $this->id ; - if (! $this->db->query($sql) ) - { - $err++; - } + $sql = "DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseurdet WHERE fk_commande =". $this->id ; + if (! $this->db->query($sql) ) + { + $err++; + } - $sql = "DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseur WHERE rowid =".$this->id; - if (! $this->db->query($sql) ) - { - $err++; - } + $sql = "DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseur WHERE rowid =".$this->id; + if (! $this->db->query($sql) ) + { + $err++; + } - if ($err == 0) - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('ORDER_SUPPLIER_DELETE',$this,$user,$langs,$conf); - // Fin appel triggers + if ($err == 0) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('ORDER_SUPPLIER_DELETE',$this,$user,$langs,$conf); + // Fin appel triggers - dolibarr_syslog("CommandeFournisseur::delete : Success"); - $this->db->commit(); - return 1; - } - else - { - $this->db->rollback(); - return -1; - } - } - - /** - * \brief Positionne modele derniere generation - * \param user Objet use qui modifie - * \param modelpdf Nom du modele - */ - function set_pdf_model($user, $modelpdf) - { - if ($user->rights->fournisseur->commande->creer) - { + dolibarr_syslog("CommandeFournisseur::delete : Success"); + $this->db->commit(); + return 1; + } + else + { + $this->db->rollback(); + return -1; + } + } + /** + * \brief Positionne modele derniere generation + * \param user Objet use qui modifie + * \param modelpdf Nom du modele + */ + function set_pdf_model($user, $modelpdf) + { + if ($user->rights->fournisseur->commande->creer) + { - $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur SET model_pdf = '$modelpdf'"; - $sql .= " WHERE rowid = $this->id AND fk_statut = 0 ;"; + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur SET model_pdf = '$modelpdf'"; + $sql .= " WHERE rowid = $this->id AND fk_statut = 0 ;"; - if ($this->db->query($sql) ) - { - $this->modelpdf=$modelpdf; - return 1; - } - else - { - dolibarr_print_error($this->db); - return 0; - } - } - } - - + if ($this->db->query($sql) ) + { + $this->modelpdf=$modelpdf; + return 1; + } + else + { + dolibarr_print_error($this->db); + return 0; + } + } + } /** * * @@ -898,119 +973,119 @@ class CommandeFournisseur extends Commande * */ function Livraison($user, $date, $type) - { - dolibarr_syslog("CommandeFournisseur::Livraison"); - $result = 0; - if ($user->rights->fournisseur->commande->receptionner && $date < time()) - { - if ($type == 'par') - { - $statut = 4; - } + { + dolibarr_syslog("CommandeFournisseur::Livraison"); + $result = 0; + if ($user->rights->fournisseur->commande->receptionner && $date < time()) + { + if ($type == 'par') + { + $statut = 4; + } - if ($type == 'tot') - { - $statut = 5; - } + if ($type == 'tot') + { + $statut = 5; + } - if ($statut == 4 or $statut == 5) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur"; - $sql .= " SET fk_statut = ".$statut; - $sql .= " WHERE rowid = ".$this->id; - $sql .= " AND (fk_statut = 3 OR fk_statut = 4) ;"; + if ($statut == 4 or $statut == 5) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur"; + $sql .= " SET fk_statut = ".$statut; + $sql .= " WHERE rowid = ".$this->id; + $sql .= " AND (fk_statut = 3 OR fk_statut = 4) ;"; - if ($this->db->query($sql) ) - { - $result = 0; - $this->log($user, $statut, $date); - } - else - { - dolibarr_syslog("CommandeFournisseur::Livraison Error -1"); - $result = -1; - } - } - else - { - dolibarr_syslog("CommandeFournisseur::Livraison Error -2"); - $result = -2; - } - } - else - { - dolibarr_syslog("CommandeFournisseur::Livraison Not Authorized"); - } - return $result ; - } - - /** \brief Créé la commande depuis une propale existante - \param user Utilisateur qui crée - \param propale_id id de la propale qui sert de modèle - */ - function updateFromCommandeClient($user, $idc, $comclientid) - { - $comclient = new Commande($this->db); - $comclient->fetch($comclientid); - - $this->id = $idc; - - $this->lines = array(); - - for ($i = 0 ; $i < sizeof($comclient->lignes) ; $i++) - { - $prod = new Product($this->db, $comclient->lignes[$i]->fk_product); - if ($prod->fetch($comclient->lignes[$i]->fk_product) > 0) - { - $libelle = $prod->libelle; - $ref = $prod->ref; - } - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseurdet"; - $sql .= " (fk_commande,label,description,fk_product, price, qty, tva_tx, remise_percent, subprice, remise, ref)"; - $sql .= " VALUES (".$idc.", '" . addslashes($libelle) . "','" . addslashes($comclient->lignes[$i]->desc) . "'"; - $sql .= ",".$comclient->lignes[$i]->fk_product.",'".price2num($comclient->lignes[$i]->price)."'"; - $sql .= ", '".$comclient->lignes[$i]->qty."', ".$comclient->lignes[$i]->tva_tx.", ".$comclient->lignes[$i]->remise_percent; - $sql .= ", '".price2num($comclient->lignes[$i]->subprice)."','0','".$ref."') ;"; - if ( $this->db->query( $sql) ) - { - $this->update_price(); - } - } - - return 1; - } - - - /** - * \brief Met a jour les notes - * \return int <0 si ko, >=0 si ok - */ - function UpdateNote($user, $note, $note_public) - { - dolibarr_syslog("CommandeFournisseur::UpdateNote"); - + if ($this->db->query($sql) ) + { $result = 0; + $this->log($user, $statut, $date); + } + else + { + dolibarr_syslog("CommandeFournisseur::Livraison Error -1"); + $result = -1; + } + } + else + { + dolibarr_syslog("CommandeFournisseur::Livraison Error -2"); + $result = -2; + } + } + else + { + dolibarr_syslog("CommandeFournisseur::Livraison Not Authorized"); + } + return $result ; + } + + /** \brief Créé la commande depuis une propale existante + \param user Utilisateur qui crée + \param propale_id id de la propale qui sert de modèle + */ + function updateFromCommandeClient($user, $idc, $comclientid) + { + $comclient = new Commande($this->db); + $comclient->fetch($comclientid); + + $this->id = $idc; + + $this->lines = array(); + + for ($i = 0 ; $i < sizeof($comclient->lignes) ; $i++) + { + $prod = new Product($this->db, $comclient->lignes[$i]->fk_product); + if ($prod->fetch($comclient->lignes[$i]->fk_product) > 0) + { + $libelle = $prod->libelle; + $ref = $prod->ref; + } + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseurdet"; + $sql .= " (fk_commande,label,description,fk_product, price, qty, tva_tx, remise_percent, subprice, remise, ref)"; + $sql .= " VALUES (".$idc.", '" . addslashes($libelle) . "','" . addslashes($comclient->lignes[$i]->desc) . "'"; + $sql .= ",".$comclient->lignes[$i]->fk_product.",'".price2num($comclient->lignes[$i]->price)."'"; + $sql .= ", '".$comclient->lignes[$i]->qty."', ".$comclient->lignes[$i]->tva_tx.", ".$comclient->lignes[$i]->remise_percent; + $sql .= ", '".price2num($comclient->lignes[$i]->subprice)."','0','".$ref."') ;"; + if ( $this->db->query( $sql) ) + { + $this->update_price(); + } + } + + return 1; + } - $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur"; - $sql.= " SET note ='".trim($note) ."',"; - $sql.= " note_public ='".trim($note_public) ."'"; - $sql.= " WHERE rowid = ".$this->id; - $resql=$this->db->query($sql); - if ($resql) - { - $result = 0; - } - else - { - $this->error=$this->db->error(); - dolibarr_syslog("CommandeFournisseur::UpdateNote "+$this->error); - $result = -1; - } + /** + * \brief Met a jour les notes + * \return int <0 si ko, >=0 si ok + */ + function UpdateNote($user, $note, $note_public) + { + dolibarr_syslog("CommandeFournisseur::UpdateNote"); - return $result ; - } + $result = 0; + + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur"; + $sql.= " SET note ='".trim($note) ."',"; + $sql.= " note_public ='".trim($note_public) ."'"; + $sql.= " WHERE rowid = ".$this->id; + + $resql=$this->db->query($sql); + if ($resql) + { + $result = 0; + } + else + { + $this->error=$this->db->error(); + dolibarr_syslog("CommandeFournisseur::UpdateNote "+$this->error); + $result = -1; + } + + return $result ; + } /* * @@ -1101,118 +1176,118 @@ class CommandeFournisseur extends Commande } - /** - * \brief Mets à jour une ligne de commande - * \param rowid Id de la ligne de facture - * \param desc Description de la ligne - * \param pu Prix unitaire - * \param qty Quantité - * \param remise_percent Pourcentage de remise de la ligne - * \param tva_tx Taux TVA - * \return int < 0 si erreur, > 0 si ok - */ - function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva) - { - dolibarr_syslog("CommandeFournisseur::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $txtva"); - include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); + /** + * \brief Mets à jour une ligne de commande + * \param rowid Id de la ligne de facture + * \param desc Description de la ligne + * \param pu Prix unitaire + * \param qty Quantité + * \param remise_percent Pourcentage de remise de la ligne + * \param tva_tx Taux TVA + * \return int < 0 si erreur, > 0 si ok + */ + function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva) + { + dolibarr_syslog("CommandeFournisseur::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $txtva"); + include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); - if ($this->brouillon) - { - $this->db->begin(); + if ($this->brouillon) + { + $this->db->begin(); - // Nettoyage paramètres - $remise_percent=price2num($remise_percent); - $qty=price2num($qty); - if (! $qty) $qty=1; - $pu = price2num($pu); - $txtva=price2num($txtva); + // Nettoyage paramètres + $remise_percent=price2num($remise_percent); + $qty=price2num($qty); + if (! $qty) $qty=1; + $pu = price2num($pu); + $txtva=price2num($txtva); - // Calcul du total TTC et de la TVA pour la ligne a partir de - // qty, pu, remise_percent et txtva - // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker - // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva); - $total_ht = $tabprice[0]; - $total_tva = $tabprice[1]; - $total_ttc = $tabprice[2]; + // Calcul du total TTC et de la TVA pour la ligne a partir de + // qty, pu, remise_percent et txtva + // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker + // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva); + $total_ht = $tabprice[0]; + $total_tva = $tabprice[1]; + $total_ttc = $tabprice[2]; - // Anciens indicateurs: $price, $subprice, $remise (a ne plus utiliser) - $price = $pu; - $subprice = $pu; - $remise = 0; - if ($remise_percent > 0) - { - $remise = round(($pu * $remise_percent / 100),2); - $price = ($pu - $remise); - } - $price = price2num($price); - $subprice = price2num($subprice); + // Anciens indicateurs: $price, $subprice, $remise (a ne plus utiliser) + $price = $pu; + $subprice = $pu; + $remise = 0; + if ($remise_percent > 0) + { + $remise = round(($pu * $remise_percent / 100),2); + $price = ($pu - $remise); + } + $price = price2num($price); + $subprice = price2num($subprice); - // Mise a jour ligne en base - $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseurdet SET"; - $sql.= " description='".addslashes($desc)."'"; - $sql.= ",price='".price2num($price)."'"; - $sql.= ",subprice='".price2num($subprice)."'"; - $sql.= ",remise='".price2num($remise)."'"; - $sql.= ",remise_percent='".price2num($remise_percent)."'"; - $sql.= ",tva_tx='".price2num($txtva)."'"; - $sql.= ",qty='".price2num($qty)."'"; - //if ($date_end) { $sql.= ",date_start='$date_end'"; } - //else { $sql.=',date_start=null'; } - //if ($date_end) { $sql.= ",date_end='$date_end'"; } - //else { $sql.=',date_end=null'; } - //$sql.= " info_bits=".$info_bits.","; - //$sql.= ",total_ht='".price2num($total_ht)."'"; - //$sql.= ",total_tva='".price2num($total_tva)."'"; - //$sql.= ",total_ttc='".price2num($total_ttc)."'"; - $sql.= " WHERE rowid = ".$rowid; + // Mise a jour ligne en base + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseurdet SET"; + $sql.= " description='".addslashes($desc)."'"; + $sql.= ",price='".price2num($price)."'"; + $sql.= ",subprice='".price2num($subprice)."'"; + $sql.= ",remise='".price2num($remise)."'"; + $sql.= ",remise_percent='".price2num($remise_percent)."'"; + $sql.= ",tva_tx='".price2num($txtva)."'"; + $sql.= ",qty='".price2num($qty)."'"; + //if ($date_end) { $sql.= ",date_start='$date_end'"; } + //else { $sql.=',date_start=null'; } + //if ($date_end) { $sql.= ",date_end='$date_end'"; } + //else { $sql.=',date_end=null'; } + //$sql.= " info_bits=".$info_bits.","; + //$sql.= ",total_ht='".price2num($total_ht)."'"; + //$sql.= ",total_tva='".price2num($total_tva)."'"; + //$sql.= ",total_ttc='".price2num($total_ttc)."'"; + $sql.= " WHERE rowid = ".$rowid; - $result = $this->db->query( $sql); - if ($result > 0) - { - // Mise a jour info denormalisees au niveau facture - $this->update_price($this->id); - $this->db->commit(); - return $result; - } - else - { - $this->error=$this->db->error(); - dolibarr_syslog("Commande.fournisseur.class::updateline ".$this->error); - $this->db->rollback(); - return -1; - } - } - else - { - $this->error="Commande::updateline Order status makes operation forbidden"; - dolibarr_syslog("Commande.fournisseur.class::updateline ".$this->error); - return -2; - } - } + $result = $this->db->query( $sql); + if ($result > 0) + { + // Mise a jour info denormalisees au niveau facture + $this->update_price($this->id); + $this->db->commit(); + return $result; + } + else + { + $this->error=$this->db->error(); + dolibarr_syslog("Commande.fournisseur.class::updateline ".$this->error); + $this->db->rollback(); + return -1; + } + } + else + { + $this->error="Commande::updateline Order status makes operation forbidden"; + dolibarr_syslog("Commande.fournisseur.class::updateline ".$this->error); + return -2; + } + } } class CommandeFournisseurLigne extends CommandeLigne { - // From llx_propaldet - var $qty; - var $tva_tx; - var $subprice; - var $remise_percent; - var $price; - var $fk_product; - var $desc; // Description ligne + // From llx_propaldet + var $qty; + var $tva_tx; + var $subprice; + var $remise_percent; + var $price; + var $fk_product; + var $desc; // Description ligne - // From llx_product - var $libelle; // Label produit - var $product_desc; // Description produit - var $ref; + // From llx_product + var $libelle; // Label produit + var $product_desc; // Description produit + var $ref; - function CommandeFournisseurLigne() - { + function CommandeFournisseurLigne() + { - } + } } ?>