diff --git a/htdocs/commande/commande.class.php b/htdocs/commande/commande.class.php index 0ed671016b4..6ad586d096e 100644 --- a/htdocs/commande/commande.class.php +++ b/htdocs/commande/commande.class.php @@ -1,808 +1,836 @@ - - * Copyright (C) 2004-2005 Laurent Destailleur - * - * 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. - * - * $Id$ - * $Source$ - * - */ - -/** - \file htdocs/commande/commande.class.php - \ingroup commande - \brief Fichier des classes de commandes - \version $Revision$ -*/ - - -/** - \class Commande - \brief Classe de gestion de commande -*/ - -class Commande -{ - var $db ; - var $id ; - var $brouillon; - - /** \brief Constructeur - */ - function Commande($DB) - { - global $langs; - $langs->load("orders"); - - $this->db = $DB; - - $this->sources[0] = "Proposition commerciale"; - $this->sources[1] = "Internet"; - $this->sources[2] = "Courrier"; - $this->sources[3] = "Téléphone"; - $this->sources[4] = "Fax"; - $this->sources[5] = "Commercial"; - - $this->statuts[-1] = $langs->trans("StatusOrderCanceled"); - $this->statuts[0] = $langs->trans("StatusOrderDraft"); - $this->statuts[1] = $langs->trans("StatusOrderValidated"); - $this->statuts[2] = $langs->trans("StatusOrderOnProcess"); - $this->statuts[3] = $langs->trans("StatusOrderProcessed"); - - $this->products = array(); - } - - /** \brief Créé la facture depuis une propale existante - \param user Utilisateur qui crée - \param propale_id id de la propale qui sert de modèle - */ - function create_from_propale($user, $propale_id) - { - $propal = new Propal($this->db); - $propal->fetch($propale_id); - - $this->lines = array(); - - $this->date_commande = time(); - $this->source = 0; - - for ($i = 0 ; $i < sizeof($propal->lignes) ; $i++) - { - $CommLigne = new CommandeLigne(); - - $CommLigne->libelle = $propal->lignes[$i]->libelle; - $CommLigne->price = $propal->lignes[$i]->subprice; - $CommLigne->subprice = $propal->lignes[$i]->subprice; - $CommLigne->tva_tx = $propal->lignes[$i]->tva_tx; - $CommLigne->qty = $propal->lignes[$i]->qty; - $CommLigne->remise_percent = $propal->lignes[$i]->remise_percent; - $CommLigne->product_id = $propal->lignes[$i]->product_id; - - $this->lines[$i] = $CommLigne; - } - - $this->soc_id = $propal->soc_id; - - /* Définit la société comme un client */ - $soc = new Societe($this->db); - $soc->id = $this->soc_id; - $soc->set_as_client(); - - $this->propale_id = $propal->id; - return $this->create($user); - } - - /** \brief Valide la commande - \param user Utilisateur qui valide - */ - function valid($user) - { - $result = 0; - if ($user->rights->commande->valider) - { - if (defined("COMMANDE_ADDON")) - { - if (is_readable(DOL_DOCUMENT_ROOT ."/includes/modules/commande/".COMMANDE_ADDON.".php")) - { - require_once DOL_DOCUMENT_ROOT ."/includes/modules/commande/".COMMANDE_ADDON.".php"; - - // Definition du nom de module de numerotation de commande - - // \todo Normer le nom des classes des modules de numérotation de ref de commande avec un nom du type NumRefCommandesXxxx - // - //$list=split("_",COMMANDE_ADDON); - //$numrefname=$list[2]; - //$modName = "NumRefCommandes".ucfirst($numrefname); - $modName=COMMANDE_ADDON; - - // Recuperation de la nouvelle reference - $objMod = new $modName($this->db); - $soc = new Societe($this->db); - $soc->fetch($this->soc_id); - $num = $objMod->commande_get_num($soc); - - $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET ref='$num', fk_statut = 1, date_valid=now(), fk_user_valid=$user->id"; - $sql .= " WHERE rowid = $this->id AND fk_statut = 0 ;"; - - if ($this->db->query($sql) ) - { - $result = 1; - } - else - { - $result = -1; - dolibarr_print_error($this->db); - } - - } - else - { - print "Impossible de lire le module de numérotation"; - } - } - else - { - print "Le module de numérotation n'est pas définit" ; - } - } - return $result ; - } - /** - * Cloture la commande - * - */ - function cloture($user) - { - if ($user->rights->commande->valider) - { - - $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET fk_statut = 3"; - $sql .= " WHERE rowid = $this->id AND fk_statut > 0 ;"; - - if ($this->db->query($sql) ) - { - return 1; - } - else - { - dolibarr_print_error($this->db); - } - } - } - - /** - * Annule la commande - * - */ - function cancel($user) - { - if ($user->rights->commande->valider) - { - - $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET fk_statut = -1"; - $sql .= " WHERE rowid = $this->id AND fk_statut = 1 ;"; - - if ($this->db->query($sql) ) - { - return 1; - } - else - { - dolibarr_print_error($this->db); - } - } - } - - /** - * Créé la commande - * - */ - function create($user) - { - /* On positionne en mode brouillon la commande */ - $this->brouillon = 1; - - if (! $remise) - { - $remise = 0 ; - } - - if (! $this->projetid) - { - $this->projetid = 0; - } - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande (fk_soc, date_creation, fk_user_author, fk_projet, date_commande, source) "; - $sql .= " VALUES ($this->soc_id, now(), $user->id, $this->projetid, ".$this->db->idate($this->date_commande).", $this->source)"; - - if ( $this->db->query($sql) ) - { - $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."commande"); - - /* - * Insertion des produits dans la base - */ - for ($i = 0 ; $i < sizeof($this->products) ; $i++) - { - $prod = new Product($this->db, $this->products[$i]); - if ($prod->fetch($this->products[$i])) - { - $this->insert_product_generic($prod->libelle, - $prod->price, - $this->products_qty[$i], - $prod->tva_tx, - $this->products[$i], - $this->products_remise_percent[$i]); - } - } - /* - * - * - */ - - $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET ref='(PROV".$this->id.")' WHERE rowid=".$this->id; - if ($this->db->query($sql)) - { - - if ($this->id && $this->propale_id) - { - $sql = "INSERT INTO ".MAIN_DB_PREFIX."co_pr (fk_commande, fk_propale) VALUES (".$this->id.",".$this->propale_id.")"; - $this->db->query($sql); - } - /* - * Produits - * - */ - for ($i = 0 ; $i < sizeof($this->lines) ; $i++) - { - $result_insert = $this->insert_product_generic( - $this->lines[$i]->libelle, - $this->lines[$i]->price, - $this->lines[$i]->qty, - $this->lines[$i]->tva_tx, - $this->lines[$i]->product_id, - $this->lines[$i]->remise_percent); - - if ( $result_insert < 0) - { - dolibarr_print_error($this->db); - } - } - - /* - * - * - */ - return $this->id; - } - else - { - return -1; - } - } - else - { - dolibarr_print_error($this->db); - return 0; - } - } - /** - * Ajoute un produit - * - */ - function insert_product_generic($p_desc, $p_price, $p_qty, $p_tva_tx=19.6, $p_product_id=0, $remise_percent=0) - { - if ($this->statut == 0) - { - if (strlen(trim($p_qty)) == 0) - { - $p_qty = 1; - } - - $p_price = ereg_replace(",",".",$p_price); - - $price = $p_price; - $subprice = $p_price; - if ($remise_percent > 0) - { - $remise = round(($p_price * $remise_percent / 100), 2); - $price = $p_price - $remise; - } - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."commandedet (fk_commande, fk_product, qty, price, tva_tx, description, remise_percent, subprice) VALUES "; - $sql .= " ('".$this->id."', '$p_product_id','". $p_qty."','". $price."','".$p_tva_tx."','".addslashes($p_desc)."','$remise_percent', '$subprice') ; "; - - if ($this->db->query($sql) ) - { - - if ($this->update_price() > 0) - { - return 1; - } - else - { - return -1; - } - } - else - { - dolibarr_print_error($this->db); - return -2; - } - } - } - /** - * Ajoute une ligne de commande - * - */ - function addline( $desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0) - { - $qty = ereg_replace(",",".",$qty); - $pu = ereg_replace(",",".",$pu); - - if ($this->brouillon && strlen(trim($desc))) - { - if (strlen(trim($qty))==0) - { - $qty=1; - } - - if ($fk_product > 0) - { - $prod = new Product($this->db, $fk_product); - if ($prod->fetch($fk_product) > 0) - { - $desc = $prod->libelle; - $pu = $prod->price; - $txtva = $prod->tva_tx; - } - } - - - $remise = 0; - $price = round(ereg_replace(",",".",$pu), 2); - $subprice = $price; - if (trim(strlen($remise_percent)) > 0) - { - $remise = round(($pu * $remise_percent / 100), 2); - $price = $pu - $remise; - } - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."commandedet (fk_commande,label,description,fk_product, price,qty,tva_tx, remise_percent, subprice, remise)"; - $sql .= " VALUES ($this->id, '" . addslashes($desc) . "','" . addslashes($desc) . "',$fk_product,".ereg_replace(",",".",$price).", '$qty', $txtva, $remise_percent,'".ereg_replace(",",".",$subprice)."','".ereg_replace(",",".", $remise)."') ;"; - - if ( $this->db->query( $sql) ) - { - $this->update_price(); - return 1; - } - else - { - dolibarr_print_error($this->db); - return -1; - } - } - } - /** - * Ajoute un produit dans la commande - * - */ - function add_product($idproduct, $qty, $remise_percent=0) - { - if ($idproduct > 0) - { - $i = sizeof($this->products); - $this->products[$i] = $idproduct; - if (!$qty) - { - $qty = 1 ; - } - $this->products_qty[$i] = $qty; - $this->products_remise_percent[$i] = $remise_percent; - } - } - - /** - * 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.facture"; - $sql .= " FROM ".MAIN_DB_PREFIX."commande as c"; - $sql .= " WHERE c.rowid = ".$id; - - $result = $this->db->query($sql) ; - - if ( $result ) - { - $obj = $this->db->fetch_object(); - - $this->id = $obj->rowid; - $this->ref = $obj->ref; - $this->soc_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 = $obj->date_commande; - $this->remise_percent = $obj->remise_percent; - - $this->source = $obj->source; - $this->facturee = $obj->facture; - $this->projet_id = $obj->fk_projet; - - $this->db->free(); - - if ($this->statut == 0) - $this->brouillon = 1; - - /* - * Propale associée - */ - $sql = "SELECT fk_propale FROM ".MAIN_DB_PREFIX."co_pr WHERE fk_commande = ".$this->id; - if ($this->db->query($sql) ) - { - if ($this->db->num_rows()) - { - $obj = $this->db->fetch_object(); - $this->propale_id = $obj->fk_propale; - } - - return 1; - } - else - { - dolibarr_print_error($this->db); - return -1; - } - } - else - { - dolibarr_print_error($this->db); - return -1; - } - } - /** - * - * - */ - function fetch_lignes($only_product=0) - { - $this->lignes = array(); - - $sql = "SELECT l.fk_product, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice"; - - if ($only_product==1) - { - $sql .= " FROM ".MAIN_DB_PREFIX."commandedet as l LEFT JOIN ".MAIN_DB_PREFIX."product as p ON (p.rowid = l.fk_product) WHERE l.fk_commande = ".$this->id." AND p.fk_product_type <> 1 ORDER BY l.rowid"; - } - else - { - $sql .= " FROM ".MAIN_DB_PREFIX."commandedet as l WHERE l.fk_commande = $this->id ORDER BY l.rowid"; - } - - $result = $this->db->query($sql); - if ($result) - { - $num = $this->db->num_rows(); - $i = 0; - while ($i < $num) - { - $ligne = new CommandeLigne(); - - $objp = $this->db->fetch_object($result); - - $ligne->id = $objp->rowid; - - $ligne->qty = $objp->qty; - $ligne->price = $objp->price; - $ligne->tva_tx = $objp->tva_tx; - $ligne->subprice = $objp->subprice; - $ligne->remise_percent = $objp->remise_percent; - $ligne->product_id = $objp->fk_product; - $ligne->description = stripslashes($objp->description); - - $this->lignes[$i] = $ligne; - $i++; - } - $this->db->free(); - } - - return $this->lignes; - } - /** - * Renvoie un tableau avec les livraison par ligne - * - * - */ - function livraison_array() - { - $this->livraisons = array(); - - $sql = "SELECT fk_product, sum(ed.qty)"; - $sql .= " FROM ".MAIN_DB_PREFIX."expeditiondet as ed, ".MAIN_DB_PREFIX."commande as c, ".MAIN_DB_PREFIX."commandedet as cd"; - $sql .=" WHERE ed.fk_commande_ligne = cd .rowid AND cd.fk_commande = c.rowid"; - $sql .= " AND cd.fk_commande =" .$this->id; - $sql .= " GROUP BY fk_product "; - $result = $this->db->query($sql); - if ($result) - { - $num = $this->db->num_rows(); - $i = 0; - while ($i < $num) - { - $row = $this->db->fetch_row( $i); - - $this->livraisons[$row[0]] = $row[1]; - - $i++; - } - $this->db->free(); - } - } - /** - * Renvoie un tableau avec les livraison par ligne - * - */ - function nb_expedition() - { - $sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."expedition as e"; - $sql .=" WHERE e.fk_commande = $this->id"; - - $result = $this->db->query($sql); - if ($result) - { - $row = $this->db->fetch_row(0); - - return $row[0]; - } - } - - /** - * Supprime une ligne de la commande - * - */ - 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 - { - return 0; - } - } - } - /** - * - * - */ - function set_remise($user, $remise) - { - if ($user->rights->commande->creer) - { - - $remise = ereg_replace(",",".",$remise); - - $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET remise_percent = ".$remise; - $sql .= " WHERE rowid = $this->id AND fk_statut = 0 ;"; - - if ($this->db->query($sql) ) - { - $this->remise_percent = $remise; - $this->update_price(); - return 1; - } - else - { - dolibarr_print_error($this->db); - } - } - } - /** - * Classe la facture comme facturée - * - */ - function classer_facturee() - { - $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET facture = 1"; - $sql .= " WHERE rowid = ".$this->id." AND fk_statut > 0 ;"; - - if ($this->db->query($sql) ) - { - return 1; - } - else - { - dolibarr_print_error($this->db); - } - - } - /** - * Mettre à jour le prix - * - */ - function update_price() - { - include_once DOL_DOCUMENT_ROOT . "/lib/price.lib.php"; - - /* - * Liste des produits a ajouter - */ - $sql = "SELECT price, qty, tva_tx FROM ".MAIN_DB_PREFIX."commandedet WHERE fk_commande = $this->id"; - 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); - - $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 set"; - $sql .= " amount_ht ='".ereg_replace(",",".",$totalht)."'"; - $sql .= ", total_ht ='".ereg_replace(",",".",$totalht)."'"; - $sql .= ", tva ='".ereg_replace(",",".",$totaltva)."'"; - $sql .= ", total_ttc ='".ereg_replace(",",".",$totalttc)."'"; - $sql .= ", remise ='".ereg_replace(",",".",$total_remise)."'"; - $sql .= " WHERE rowid = $this->id"; - if ( $this->db->query($sql) ) - { - return 1; - } - else - { - print "Erreur mise à jour du prix

".$sql; - return -1; - } - } - /** - * Mets à jour une ligne de commande - * - */ - function update_line($rowid, $desc, $pu, $qty, $remise_percent=0) - { - if ($this->brouillon) - { - if (strlen(trim($qty))==0) - { - $qty=1; - } - $remise = 0; - $price = round(ereg_replace(",",".",$pu), 2); - $subprice = $price; - if (trim(strlen($remise_percent)) > 0) - { - $remise = round(($pu * $remise_percent / 100), 2); - $price = $pu - $remise; - } - else - { - $remise_percent=0; - } - - $sql = "UPDATE ".MAIN_DB_PREFIX."commandedet SET description='$desc',price=$price,subprice=$subprice,remise=$remise,remise_percent=$remise_percent,qty=$qty WHERE rowid = $rowid ;"; - if ( $this->db->query( $sql) ) - { - $this->update_price($this->id); - } - else - { - dolibarr_print_error($this->db); - } - } - } - - - /** - * Supprime la commande - * - */ - function delete() - { - $err = 0; - - $this->db->begin(); - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."commandedet WHERE fk_commande = $this->id ;"; - if (! $this->db->query($sql) ) - { - $err++; - } - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."commande WHERE rowid = $this->id;"; - if (! $this->db->query($sql) ) - { - $err++; - } - - $sql = "DELETE FROM ".MAIN_DB_PREFIX."co_pr WHERE fk_commande = $this->id;"; - if (! $this->db->query($sql) ) - { - $err++; - } - - if ($err == 0) - { - $this->db->commit(); - return 1; - } - else - { - $this->db->rollback(); - return -1; - } - } - /** - * Classe la commande - * - */ - function classin($cat_id) - { - $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET fk_projet = $cat_id"; - $sql .= " WHERE rowid = $this->id;"; - - if ($this->db->query($sql) ) - { - return 1; - } - else - { - dolibarr_print_error($this->db); - } - } - -} - -/** \class CommandeLigne - \brief Classe de gestion des lignes de commande -*/ - -class CommandeLigne -{ - var $pu; -} - -?> + + * Copyright (C) 2004-2005 Laurent Destailleur + * + * 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. + * + * $Id$ + * $Source$ + * + */ + +/** + \file htdocs/commande/commande.class.php + \ingroup commande + \brief Fichier des classes de commandes + \version $Revision$ +*/ + + +/** + \class Commande + \brief Classe de gestion de commande +*/ + +class Commande +{ + var $db ; + var $id ; + var $brouillon; + + /** \brief Constructeur + */ + function Commande($DB) + { + global $langs; + $langs->load("orders"); + + $this->db = $DB; + + $this->sources[0] = "Proposition commerciale"; + $this->sources[1] = "Internet"; + $this->sources[2] = "Courrier"; + $this->sources[3] = "Téléphone"; + $this->sources[4] = "Fax"; + $this->sources[5] = "Commercial"; + + $this->statuts[-1] = $langs->trans("StatusOrderCanceled"); + $this->statuts[0] = $langs->trans("StatusOrderDraft"); + $this->statuts[1] = $langs->trans("StatusOrderValidated"); + $this->statuts[2] = $langs->trans("StatusOrderOnProcess"); + $this->statuts[3] = $langs->trans("StatusOrderProcessed"); + + $this->products = array(); + } + + /** \brief Créé la facture depuis une propale existante + \param user Utilisateur qui crée + \param propale_id id de la propale qui sert de modèle + */ + function create_from_propale($user, $propale_id) + { + $propal = new Propal($this->db); + $propal->fetch($propale_id); + + $this->lines = array(); + + $this->date_commande = time(); + $this->source = 0; + + for ($i = 0 ; $i < sizeof($propal->lignes) ; $i++) + { + $CommLigne = new CommandeLigne(); + + $CommLigne->libelle = $propal->lignes[$i]->libelle; + $CommLigne->price = $propal->lignes[$i]->subprice; + $CommLigne->subprice = $propal->lignes[$i]->subprice; + $CommLigne->tva_tx = $propal->lignes[$i]->tva_tx; + $CommLigne->qty = $propal->lignes[$i]->qty; + $CommLigne->remise_percent = $propal->lignes[$i]->remise_percent; + $CommLigne->product_id = $propal->lignes[$i]->product_id; + + $this->lines[$i] = $CommLigne; + } + + $this->soc_id = $propal->soc_id; + + /* Définit la société comme un client */ + $soc = new Societe($this->db); + $soc->id = $this->soc_id; + $soc->set_as_client(); + + $this->propale_id = $propal->id; + return $this->create($user); + } + + /** \brief Valide la commande + \param user Utilisateur qui valide + */ + function valid($user) + { + $result = 0; + if ($user->rights->commande->valider) + { + if (defined("COMMANDE_ADDON")) + { + if (is_readable(DOL_DOCUMENT_ROOT ."/includes/modules/commande/".COMMANDE_ADDON.".php")) + { + require_once DOL_DOCUMENT_ROOT ."/includes/modules/commande/".COMMANDE_ADDON.".php"; + + // Definition du nom de module de numerotation de commande + + // \todo Normer le nom des classes des modules de numérotation de ref de commande avec un nom du type NumRefCommandesXxxx + // + //$list=split("_",COMMANDE_ADDON); + //$numrefname=$list[2]; + //$modName = "NumRefCommandes".ucfirst($numrefname); + $modName=COMMANDE_ADDON; + + // Recuperation de la nouvelle reference + $objMod = new $modName($this->db); + $soc = new Societe($this->db); + $soc->fetch($this->soc_id); + $num = $objMod->commande_get_num($soc); + + $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET ref='$num', fk_statut = 1, date_valid=now(), fk_user_valid=$user->id"; + $sql .= " WHERE rowid = $this->id AND fk_statut = 0 ;"; + + if ($this->db->query($sql) ) + { + $result = 1; + } + else + { + $result = -1; + dolibarr_print_error($this->db); + } + + } + else + { + print "Impossible de lire le module de numérotation"; + } + } + else + { + print "Le module de numérotation n'est pas définit" ; + } + } + return $result ; + } + /** + * Cloture la commande + * + */ + function cloture($user) + { + if ($user->rights->commande->valider) + { + + $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET fk_statut = 3"; + $sql .= " WHERE rowid = $this->id AND fk_statut > 0 ;"; + + if ($this->db->query($sql) ) + { + return 1; + } + else + { + dolibarr_print_error($this->db); + } + } + } + + /** + * Annule la commande + * + */ + function cancel($user) + { + if ($user->rights->commande->valider) + { + + $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET fk_statut = -1"; + $sql .= " WHERE rowid = $this->id AND fk_statut = 1 ;"; + + if ($this->db->query($sql) ) + { + return 1; + } + else + { + dolibarr_print_error($this->db); + } + } + } + + /** + * Créé la commande + * + */ + function create($user) + { + /* On positionne en mode brouillon la commande */ + $this->brouillon = 1; + + if (! $remise) + { + $remise = 0 ; + } + + if (! $this->projetid) + { + $this->projetid = 0; + } + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande (fk_soc, date_creation, fk_user_author, fk_projet, date_commande, source) "; + $sql .= " VALUES ($this->soc_id, now(), $user->id, $this->projetid, ".$this->db->idate($this->date_commande).", $this->source)"; + + if ( $this->db->query($sql) ) + { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."commande"); + + /* + * Insertion des produits dans la base + */ + for ($i = 0 ; $i < sizeof($this->products) ; $i++) + { + $prod = new Product($this->db, $this->products[$i]); + if ($prod->fetch($this->products[$i])) + { + $this->insert_product_generic($prod->libelle, + $prod->price, + $this->products_qty[$i], + $prod->tva_tx, + $this->products[$i], + $this->products_remise_percent[$i]); + } + } + /* + * + * + */ + + $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET ref='(PROV".$this->id.")' WHERE rowid=".$this->id; + if ($this->db->query($sql)) + { + + if ($this->id && $this->propale_id) + { + $sql = "INSERT INTO ".MAIN_DB_PREFIX."co_pr (fk_commande, fk_propale) VALUES (".$this->id.",".$this->propale_id.")"; + $this->db->query($sql); + } + /* + * Produits + * + */ + for ($i = 0 ; $i < sizeof($this->lines) ; $i++) + { + $result_insert = $this->insert_product_generic( + $this->lines[$i]->libelle, + $this->lines[$i]->price, + $this->lines[$i]->qty, + $this->lines[$i]->tva_tx, + $this->lines[$i]->product_id, + $this->lines[$i]->remise_percent); + + if ( $result_insert < 0) + { + dolibarr_print_error($this->db); + } + } + + /* + * + * + */ + return $this->id; + } + else + { + return -1; + } + } + else + { + dolibarr_print_error($this->db); + return 0; + } + } + /** + * Ajoute un produit + * + */ + function insert_product_generic($p_desc, $p_price, $p_qty, $p_tva_tx=19.6, $p_product_id=0, $remise_percent=0) + { + if ($this->statut == 0) + { + if (strlen(trim($p_qty)) == 0) + { + $p_qty = 1; + } + + $p_price = ereg_replace(",",".",$p_price); + + $price = $p_price; + $subprice = $p_price; + if ($remise_percent > 0) + { + $remise = round(($p_price * $remise_percent / 100), 2); + $price = $p_price - $remise; + } + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."commandedet (fk_commande, fk_product, qty, price, tva_tx, description, remise_percent, subprice) VALUES "; + $sql .= " ('".$this->id."', '$p_product_id','". $p_qty."','". $price."','".$p_tva_tx."','".addslashes($p_desc)."','$remise_percent', '$subprice') ; "; + + if ($this->db->query($sql) ) + { + + if ($this->update_price() > 0) + { + return 1; + } + else + { + return -1; + } + } + else + { + dolibarr_print_error($this->db); + return -2; + } + } + } + /** + * Ajoute une ligne de commande + * + */ + function addline( $desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0) + { + $qty = ereg_replace(",",".",$qty); + $pu = ereg_replace(",",".",$pu); + + if ($this->brouillon && strlen(trim($desc))) + { + if (strlen(trim($qty))==0) + { + $qty=1; + } + + if ($fk_product > 0) + { + $prod = new Product($this->db, $fk_product); + if ($prod->fetch($fk_product) > 0) + { + $desc = $prod->libelle; + $pu = $prod->price; + $txtva = $prod->tva_tx; + } + } + + + $remise = 0; + $price = round(ereg_replace(",",".",$pu), 2); + $subprice = $price; + if (trim(strlen($remise_percent)) > 0) + { + $remise = round(($pu * $remise_percent / 100), 2); + $price = $pu - $remise; + } + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."commandedet (fk_commande,label,description,fk_product, price,qty,tva_tx, remise_percent, subprice, remise)"; + $sql .= " VALUES ($this->id, '" . addslashes($desc) . "','" . addslashes($desc) . "',$fk_product,".ereg_replace(",",".",$price).", '$qty', $txtva, $remise_percent,'".ereg_replace(",",".",$subprice)."','".ereg_replace(",",".", $remise)."') ;"; + + if ( $this->db->query( $sql) ) + { + $this->update_price(); + return 1; + } + else + { + dolibarr_print_error($this->db); + return -1; + } + } + } + /** + * Ajoute un produit dans la commande + * + */ + function add_product($idproduct, $qty, $remise_percent=0) + { + if ($idproduct > 0) + { + $i = sizeof($this->products); + $this->products[$i] = $idproduct; + if (!$qty) + { + $qty = 1 ; + } + $this->products_qty[$i] = $qty; + $this->products_remise_percent[$i] = $remise_percent; + } + } + + /** + * 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.facture, c.note"; + $sql .= " FROM ".MAIN_DB_PREFIX."commande as c"; + $sql .= " WHERE c.rowid = ".$id; + + $result = $this->db->query($sql) ; + + if ( $result ) + { + $obj = $this->db->fetch_object(); + + $this->id = $obj->rowid; + $this->ref = $obj->ref; + $this->soc_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 = $obj->date_commande; + $this->remise_percent = $obj->remise_percent; + + $this->source = $obj->source; + $this->facturee = $obj->facture; + $this->note = $obj->note; + $this->projet_id = $obj->fk_projet; + + $this->db->free(); + + if ($this->statut == 0) + $this->brouillon = 1; + + /* + * Propale associée + */ + $sql = "SELECT fk_propale FROM ".MAIN_DB_PREFIX."co_pr WHERE fk_commande = ".$this->id; + if ($this->db->query($sql) ) + { + if ($this->db->num_rows()) + { + $obj = $this->db->fetch_object(); + $this->propale_id = $obj->fk_propale; + } + + return 1; + } + else + { + dolibarr_print_error($this->db); + return -1; + } + } + else + { + dolibarr_print_error($this->db); + return -1; + } + } + /** + * + * + */ + function fetch_lignes($only_product=0) + { + $this->lignes = array(); + + $sql = "SELECT l.fk_product, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice"; + + if ($only_product==1) + { + $sql .= " FROM ".MAIN_DB_PREFIX."commandedet as l LEFT JOIN ".MAIN_DB_PREFIX."product as p ON (p.rowid = l.fk_product) WHERE l.fk_commande = ".$this->id." AND p.fk_product_type <> 1 ORDER BY l.rowid"; + } + else + { + $sql .= " FROM ".MAIN_DB_PREFIX."commandedet as l WHERE l.fk_commande = $this->id ORDER BY l.rowid"; + } + + $result = $this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows(); + $i = 0; + while ($i < $num) + { + $ligne = new CommandeLigne(); + + $objp = $this->db->fetch_object($result); + + $ligne->id = $objp->rowid; + + $ligne->qty = $objp->qty; + $ligne->price = $objp->price; + $ligne->tva_tx = $objp->tva_tx; + $ligne->subprice = $objp->subprice; + $ligne->remise_percent = $objp->remise_percent; + $ligne->product_id = $objp->fk_product; + $ligne->description = stripslashes($objp->description); + + $this->lignes[$i] = $ligne; + $i++; + } + $this->db->free(); + } + + return $this->lignes; + } + /** + * Renvoie un tableau avec les livraison par ligne + * + * + */ + function livraison_array() + { + $this->livraisons = array(); + + $sql = "SELECT fk_product, sum(ed.qty)"; + $sql .= " FROM ".MAIN_DB_PREFIX."expeditiondet as ed, ".MAIN_DB_PREFIX."commande as c, ".MAIN_DB_PREFIX."commandedet as cd"; + $sql .=" WHERE ed.fk_commande_ligne = cd .rowid AND cd.fk_commande = c.rowid"; + $sql .= " AND cd.fk_commande =" .$this->id; + $sql .= " GROUP BY fk_product "; + $result = $this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows(); + $i = 0; + while ($i < $num) + { + $row = $this->db->fetch_row( $i); + + $this->livraisons[$row[0]] = $row[1]; + + $i++; + } + $this->db->free(); + } + } + /** + * Renvoie un tableau avec les livraison par ligne + * + */ + function nb_expedition() + { + $sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."expedition as e"; + $sql .=" WHERE e.fk_commande = $this->id"; + + $result = $this->db->query($sql); + if ($result) + { + $row = $this->db->fetch_row(0); + + return $row[0]; + } + } + + /** + * Supprime une ligne de la commande + * + */ + 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 + { + return 0; + } + } + } + /** + * + * + */ + function set_remise($user, $remise) + { + if ($user->rights->commande->creer) + { + + $remise = ereg_replace(",",".",$remise); + + $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET remise_percent = ".$remise; + $sql .= " WHERE rowid = $this->id AND fk_statut = 0 ;"; + + if ($this->db->query($sql) ) + { + $this->remise_percent = $remise; + $this->update_price(); + return 1; + } + else + { + dolibarr_print_error($this->db); + } + } + } + + /** + * + * + */ + function set_note($user, $note) + { + if ($user->rights->commande->creer) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET note = '".addslashes($note)."'"; + $sql .= " WHERE rowid = $this->id AND fk_statut = 0 ;"; + if ($this->db->query($sql)) + { + $this->note = $note; + return 1; + } + else + { + dolibarr_print_error($this->db); + return 0; + } + } + else + { + return 0; + } + } + /** + * Classe la facture comme facturée + * + */ + function classer_facturee() + { + $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET facture = 1"; + $sql .= " WHERE rowid = ".$this->id." AND fk_statut > 0 ;"; + + if ($this->db->query($sql) ) + { + return 1; + } + else + { + dolibarr_print_error($this->db); + } + + } + /** + * Mettre à jour le prix + * + */ + function update_price() + { + include_once DOL_DOCUMENT_ROOT . "/lib/price.lib.php"; + + /* + * Liste des produits a ajouter + */ + $sql = "SELECT price, qty, tva_tx FROM ".MAIN_DB_PREFIX."commandedet WHERE fk_commande = $this->id"; + 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); + + $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 set"; + $sql .= " amount_ht ='".ereg_replace(",",".",$totalht)."'"; + $sql .= ", total_ht ='".ereg_replace(",",".",$totalht)."'"; + $sql .= ", tva ='".ereg_replace(",",".",$totaltva)."'"; + $sql .= ", total_ttc ='".ereg_replace(",",".",$totalttc)."'"; + $sql .= ", remise ='".ereg_replace(",",".",$total_remise)."'"; + $sql .= " WHERE rowid = $this->id"; + if ( $this->db->query($sql) ) + { + return 1; + } + else + { + print "Erreur mise à jour du prix

".$sql; + return -1; + } + } + /** + * Mets à jour une ligne de commande + * + */ + function update_line($rowid, $desc, $pu, $qty, $remise_percent=0) + { + if ($this->brouillon) + { + if (strlen(trim($qty))==0) + { + $qty=1; + } + $remise = 0; + $price = round(ereg_replace(",",".",$pu), 2); + $subprice = $price; + if (trim(strlen($remise_percent)) > 0) + { + $remise = round(($pu * $remise_percent / 100), 2); + $price = $pu - $remise; + } + else + { + $remise_percent=0; + } + + $sql = "UPDATE ".MAIN_DB_PREFIX."commandedet SET description='$desc',price=$price,subprice=$subprice,remise=$remise,remise_percent=$remise_percent,qty=$qty WHERE rowid = $rowid ;"; + if ( $this->db->query( $sql) ) + { + $this->update_price($this->id); + } + else + { + dolibarr_print_error($this->db); + } + } + } + + + /** + * Supprime la commande + * + */ + function delete() + { + $err = 0; + + $this->db->begin(); + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."commandedet WHERE fk_commande = $this->id ;"; + if (! $this->db->query($sql) ) + { + $err++; + } + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."commande WHERE rowid = $this->id;"; + if (! $this->db->query($sql) ) + { + $err++; + } + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."co_pr WHERE fk_commande = $this->id;"; + if (! $this->db->query($sql) ) + { + $err++; + } + + if ($err == 0) + { + $this->db->commit(); + return 1; + } + else + { + $this->db->rollback(); + return -1; + } + } + /** + * Classe la commande + * + */ + function classin($cat_id) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET fk_projet = $cat_id"; + $sql .= " WHERE rowid = $this->id;"; + + if ($this->db->query($sql) ) + { + return 1; + } + else + { + dolibarr_print_error($this->db); + } + } + +} + +/** \class CommandeLigne + \brief Classe de gestion des lignes de commande +*/ + +class CommandeLigne +{ + var $pu; +} + +?> diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index 5f5d2cac48f..98dcbeb62fa 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -1,901 +1,914 @@ - - * Copyright (C) 2004-2005 Laurent Destailleur - * - * 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. - * - * $Id$ - * $Source$ - * - */ - -/** - \file htdocs/commande/fiche.php - \ingroup commande - \brief Fiche commande - \version $Revision$ -*/ - -require("./pre.inc.php"); - -$langs->load("sendings"); -$langs->load("companies"); -$langs->load("bills"); - -$user->getrights('commande'); -$user->getrights('expedition'); - -if (!$user->rights->commande->lire) accessforbidden(); - -require_once DOL_DOCUMENT_ROOT."/project.class.php"; -require_once DOL_DOCUMENT_ROOT."/propal.class.php"; -require_once DOL_DOCUMENT_ROOT."/commande/commande.class.php"; - -/* - * Sécurité accés client - */ -if ($user->societe_id > 0) -{ - $action = ''; - $socidp = $user->societe_id; -} -/* - * - */ -if ($_POST["action"] == 'classin' && $user->rights->commande->creer) -{ - $commande = new Commande($db); - $commande->fetch($_GET["id"]); - $commande->classin($_POST["projetid"]); -} -/* - * - */ -if ($_POST["action"] == 'add' && $user->rights->commande->creer) -{ - $datecommande = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); - - $commande = new Commande($db); - - $commande->soc_id = $_POST["soc_id"]; - $commande->date_commande = $datecommande; - $commande->note = $_POST["note"]; - $commande->source = $_POST["source_id"]; - $commande->projetid = $_POST["projetid"]; - $commande->remise_percent = $_POST["remise_percent"]; - - $commande->add_product($_POST["idprod1"],$_POST["qty1"],$_POST["remise_percent1"]); - $commande->add_product($_POST["idprod2"],$_POST["qty2"],$_POST["remise_percent2"]); - $commande->add_product($_POST["idprod3"],$_POST["qty3"],$_POST["remise_percent3"]); - $commande->add_product($_POST["idprod4"],$_POST["qty4"],$_POST["remise_percent4"]); - - $commande_id = $commande->create($user); - - $_GET["id"] = $commande->id; - - $action = ''; -} - -/* - * - */ - - -if ($_POST["action"] == 'setremise' && $user->rights->commande->creer) -{ - $commande = new Commande($db); - $commande->fetch($id); - - $commande->set_remise($user, $_POST["remise"]); -} - -if ($_POST["action"] == 'addligne' && $user->rights->commande->creer) -{ - $commande = new Commande($db); - $commande->fetch($_GET["id"]); - - if ($_POST["p_idprod"] > 0) - { - $result = $commande->addline("DESC", - $_POST["pu"], - $_POST["pqty"], - $_POST["tva_tx"], - $_POST["p_idprod"], - $_POST["premise"]); - } - else - { - $result = $commande->addline($_POST["desc"], - $_POST["pu"], - $_POST["qty"], - $_POST["tva_tx"], - 0, - $_POST["remise_percent"]); - } -} - -if ($_POST["action"] == 'updateligne' && $user->rights->commande->creer) -{ - $commande = new Commande($db,"",$_GET["id"]); - if ($commande->fetch($_GET["id"]) ) - { - $result = $commande->update_line($_POST["elrowid"], - $_POST["eldesc"], - $_POST["elprice"], - $_POST["elqty"], - $_POST["elremise_percent"]); - } - else - { - print "Erreur"; - } -} - -if ($_GET["action"] == 'deleteline' && $user->rights->commande->creer) -{ - $commande = new Commande($db); - $commande->fetch($_GET["id"]); - $result = $commande->delete_line($_GET["lineid"]); - Header("Location: fiche.php?id=".$_GET["id"]); -} - -if ($_GET["action"] == 'facturee') -{ - $commande = new Commande($db); - $commande->fetch($_GET["id"]); - $commande->classer_facturee(); -} - -if ($_POST["action"] == 'confirm_valid' && $_POST["confirm"] == yes && $user->rights->commande->valider) -{ - $commande = new Commande($db); - $commande->fetch($_GET["id"]); - $soc = new Societe($db); - $soc->fetch($commande->soc_id); - $result = $commande->valid($user); -} - -if ($_POST["action"] == 'confirm_cancel' && $_POST["confirm"] == yes && $user->rights->commande->valider) -{ - $commande = new Commande($db); - $commande->fetch($_GET["id"]); - $result = $commande->cancel($user); -} - -if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == yes) -{ - if ($user->rights->commande->supprimer ) - { - $commande = new Commande($db); - $commande->id = $_GET["id"]; - $commande->delete(); - Header("Location: index.php"); - } -} - -if ($_GET["action"] == 'pdf') -{ - /* - * Generation de la commande - * définit dans /includes/modules/commande/modules_commande.php - */ - commande_pdf_create($db, $_GET["id"]); -} - - -llxHeader('',$langs->trans("OrderCard"),"Commande"); - - - -$html = new Form($db); - -/********************************************************************* - * - * Mode creation - * - * - ************************************************************************/ -if ($_GET["action"] == 'create' && $user->rights->commande->creer) -{ - print_titre($langs->trans("CreateOrder")); - - $new_commande = new Commande($db); - - if ($propalid) - { - $sql = "SELECT s.nom, s.prefix_comm, s.idp, p.price, p.remise, p.remise_percent, p.tva, p.total, p.ref, ".$db->pdate("p.datep")." as dp, c.id as statut, c.label as lst"; - $sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."propal as p, ".MAIN_DB_PREFIX."c_propalst as c"; - $sql .= " WHERE p.fk_soc = s.idp AND p.fk_statut = c.id"; - $sql .= " AND p.rowid = $propalid"; - } - else - { - $sql = "SELECT s.nom, s.prefix_comm, s.idp "; - $sql .= "FROM ".MAIN_DB_PREFIX."societe as s "; - $sql .= "WHERE s.idp = ".$_GET["socidp"]; - } - - $resql = $db->query($sql); - - if ( $resql ) - { - $num = $db->num_rows($resql); - if ($num) - { - $obj = $db->fetch_object($resql); - - $soc = new Societe($db); - $soc->fetch($obj->idp); - - print '

'; - print ''; - print '' ."\n"; - print ''; - print ''; - - print ''; - - print ''; - print ''; - - print ''; - - print ''; - - print '"; - - print ''; - - - print '"; - - print '"; - - if ($propalid > 0) - { - $amount = ($obj->price); - print ''."\n"; - print ''."\n"; - print ''."\n"; - print ''."\n"; - print ''."\n"; - print ''; - - print ''; - print ''; - print '"; - print '"; - } - else - { - print ''; - print ''; - } - - /* - * - */ - print ''; - print "\n"; - print "
'.$langs->trans("Customer").' :'.$soc->nom_url.''.$langs->trans("Comments").' :
'.$langs->trans("Author").' :'.$user->fullname.''; - print '
'.$langs->trans("Date").' :'; - $html->select_date(); - print "
'.$langs->trans("Ref").' :Provisoire
'.$langs->trans("Source").' :'; - $html->select_array("source_id",$new_commande->sources,2); - print "
'.$langs->trans("Project").' :'; - $proj = new Project($db); - $html->select_array("projetid",$proj->liste_array($soc->id),0,1); - print "
'.$langs->trans("Ref").''.$obj->ref.'
'.$langs->trans("TotalTTC").''.price($amount).'
'.$langs->trans("VAT").''.price($obj->tva)."
'.$langs->trans("TotalTTC").''.price($obj->total)."
'.$langs->trans("Services").'/'.$langs->trans("Products").'
'; - /* - * - * Liste des elements - * - */ - $sql = "SELECT p.rowid,p.label,p.ref,p.price FROM ".MAIN_DB_PREFIX."product as p "; - $sql .= " WHERE envente = 1"; - $sql .= " ORDER BY p.nbvente DESC LIMIT 20"; - if ( $db->query($sql) ) - { - $opt = ""; - if ($result) - { - $num = $db->num_rows(); $i = 0; - while ($i < $num) - { - $objp = $db->fetch_object(); - $opt .= "\n"; - $i++; - } - } - $db->free(); - } - else - { - dolibarr_print_error($db); - } - - print ''; - print ''; - for ($i = 1 ; $i < 5 ; $i++) - { - print ''; - print ''; - print ''; - } - - print '
20 Produits les plus vendus'.$langs->trans("Qty").''.$langs->trans("Discount").'
%
'; - print '
\n"; - - if ($propalid) - { - /* - * Produits - */ - print_titre($langs->trans("Products")); - - print ''; - print ''; - print ''; - - $sql = "SELECT pt.rowid, p.label as product, p.ref, pt.price, pt.qty, p.rowid as prodid, pt.remise_percent"; - $sql .= " FROM ".MAIN_DB_PREFIX."propaldet as pt, ".MAIN_DB_PREFIX."product as p WHERE pt.fk_product = p.rowid AND pt.fk_propal = $propalid"; - $sql .= " ORDER BY pt.rowid ASC"; - $result = $db->query($sql); - if ($result) - { - $num = $db->num_rows(); - $i = 0; - $var=True; - while ($i < $num) - { - $objp = $db->fetch_object(); - $var=!$var; - print "\n"; - print ''; - print ""; - print ''; - print "\n"; - $i++; - } - } - - $sql = "SELECT pt.rowid, pt.description as product, pt.price, pt.qty, pt.remise_percent"; - $sql .= " FROM ".MAIN_DB_PREFIX."propaldet as pt WHERE pt.fk_propal = $propalid AND pt.fk_product = 0"; - $sql .= " ORDER BY pt.rowid ASC"; - if ($db->query($sql)) - { - $num = $db->num_rows(); - $i = 0; - while ($i < $num) - { - $objp = $db->fetch_object(); - $var=!$var; - print "\n"; - print ''; - print ''; - print ''; - print "\n"; - $i++; - } - } - else - { - print $sql; - } - - print '
'.$langs->trans("Ref").''.$langs->trans("Product").''.$langs->trans("Price").''.$langs->trans("Discount").''.$langs->trans("Qty").'
[$objp->ref]'.img_object($langs->trans("ShowProduct"),"product").' '.$objp->product.'".price($objp->price)."'.$objp->remise_percent.' %".$objp->qty."
 '.img_object($langs->trans("ShowProduct"),"product").' '.$objp->product.''.price($objp->price).''.$objp->remise_percent.' %".$objp->qty."
'; - } - } - } - else - { - dolibarr_print_error($db); - } -} -else -/* *************************************************************************** */ -/* */ -/* Mode vue et edition */ -/* */ -/* *************************************************************************** */ -{ - $id = $_GET["id"]; - if ($id > 0) - { - $commande = new Commande($db); - if ( $commande->fetch($_GET["id"]) > 0) - { - $soc = new Societe($db); - $soc->fetch($commande->soc_id); - $author = new User($db); - $author->id = $commande->user_author_id; - $author->fetch(); - - $h=0; - - if ($conf->commande->enabled && $user->rights->commande->lire) - { - $head[$h][0] = DOL_URL_ROOT.'/commande/fiche.php?id='.$commande->id; - $head[$h][1] = $langs->trans("OrderCard"); - $hselected = $h; - $h++; - } - - if ($conf->expedition->enabled && $user->rights->expedition->lire) - { - $head[$h][0] = DOL_URL_ROOT.'/expedition/commande.php?id='.$commande->id; - $head[$h][1] = $langs->trans("SendingCard"); - $h++; - } - - if ($conf->compta->enabled) - { - $head[$h][0] = DOL_URL_ROOT.'/compta/commande/fiche.php?id='.$commande->id; - $head[$h][1] = $langs->trans("ComptaCard"); - $h++; - } - - dolibarr_fiche_head($head, $hselected, $soc->nom." / ".$langs->trans("Order")." : $commande->ref"); - - /* - * Confirmation de la suppression de la commande - * - */ - if ($_GET["action"] == 'delete') - { - $html->form_confirm("fiche.php?id=$id",$langs->trans("DeleteOrder"),$langs->trans("ConfirmDeleteOrder"),"confirm_delete"); - print "
\n"; - } - - /* - * Confirmation de la validation - * - */ - if ($_GET["action"] == 'valid') - { - //$numfa = commande_get_num($soc); - $html->form_confirm("fiche.php?id=$id",$langs->trans("ValidateOrder"),$langs->trans("ConfirmValidateOrder"),"confirm_valid"); - print "
\n"; - } - /* - * Confirmation de l'annulation - * - */ - if ($_GET["action"] == 'annuler') - { - $html->form_confirm("fiche.php?id=$id",$langs->trans("Cancel"),$langs->trans("ConfirmCancel"),"confirm_cancel"); - print "
\n"; - } - - /* - * Commande - */ - if ($commande->brouillon == 1 && $user->rights->commande->creer) - { - print '
'; - print ''; - } - - print ''; - print '"; - print ''; - print ''; - print ''; - - print ""; - print ''; - - print '"; - - print ''; - print "\n"; - - print ''; - - // Ligne de 3 colonnes - print ''; - print ''; - print ''; - print ''; - - print ''; - - print ''; - print ''; - print ''; - print ''; - if ($commande->note) - { - print '"; - } - - print "
'.$langs->trans("Order")."'.$commande->ref.''.$commande->statuts[$commande->statut].''; - - if ($conf->projet->enabled) - { - $langs->load("projects"); - if ($commande->projet_id > 0) - { - print $langs->trans("Project").' : '; - $projet = New Project($db); - $projet->fetch($commande->projet_id); - print ''.$projet->title.''; - } - else - { - print $langs->trans("Project").' : '; - print 'Classer la commande'; - } - } - print ' 
".$langs->trans("Customer")."'; - print ''.$soc->nom.''.$langs->trans("Source").' : ' . $commande->sources[$commande->source] ; - if ($commande->source == 0) - { - /* Propale */ - $propal = new Propal($db); - $propal->fetch($commande->propale_id); - print ' -> '.$propal->ref.''; - } - print "
'.$langs->trans("Date").'".dolibarr_print_date($commande->date,"%A %d %B %Y")."'; - print $langs->trans("Author").' : '.$author->fullname.'
'.$langs->trans("AmountHT").''.price($commande->total_ht).''.$conf->monnaie.''.$langs->trans("Note").' :
'.$langs->trans("GlobalDiscount").''; - - if ($commande->brouillon == 1 && $user->rights->commande->creer) - { - print '%'; - print ''; - } - else - { - print $commande->remise_percent.' % '; - } - print '
'.$langs->trans("VAT").''.price($commande->total_tva).''.$conf->monnaie.'
'.$langs->trans("TotalTTC").''.price($commande->total_ttc).''.$conf->monnaie.'
'.$langs->trans("Note").' : '.nl2br($commande->note)."
"; - - if ($commande->brouillon == 1 && $user->rights->commande->creer) - { - print '
'; - } - - /* - * Lignes de commandes - * - */ - echo '
'; - - $sql = "SELECT l.fk_product, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice"; - $sql .= " FROM ".MAIN_DB_PREFIX."commandedet as l"; - $sql .= " WHERE l.fk_commande = ".$commande->id; - $sql .= " ORDER BY l.rowid"; - - $result = $db->query($sql); - if ($result) - { - $num = $db->num_rows($result); - $i = 0; $total = 0; - - if ($num) - { - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print "\n"; - } - $var=True; - while ($i < $num) - { - $objp = $db->fetch_object($result); - print ""; - if ($objp->fk_product > 0) - { - print ''; - } - else - { - print "\n"; - } - print ''; - print ''; - if ($objp->remise_percent > 0) - { - print '\n"; - } - else - { - print ''; - } - print '\n"; - if ($commande->statut == 0 && $user->rights->commande->creer && $_GET["action"] == '') - { - print ''; - print ''; - } - else - { - print ''; - } - print ""; - - if ($_GET["action"] == 'editline' && $_GET["rowid"] == $objp->rowid) - { - print ""; - print ''; - print ''; - print ""; - print ''; - print ''; - print ''; - print ''; - print ''; - print '' . "\n"; - print "\n"; - } - $i++; - $var=!$var; - } - $db->free(); - } - else - { - dolibarr_print_error($db); - } - - /* - * Ajouter une ligne - * - */ - if ($commande->statut == 0 && $user->rights->commande->creer && $_GET["action"] == '') - { - $sql = "SELECT p.rowid,p.label,p.ref,p.price FROM ".MAIN_DB_PREFIX."product as p "; - $sql .= " WHERE envente = 1"; - $sql .= " ORDER BY p.nbvente DESC"; - $sql .= " LIMIT 20"; - if ( $db->query($sql) ) - { - $opt = ""; - if ($result) - { - $num = $db->num_rows(); - $i = 0; - while ($i < $num) - { - $objp = $db->fetch_object(); - $opt .= "\n"; - $i++; - } - } - $db->free(); - } - else - { - dolibarr_print_error($db); - } - - print ""; - print ""; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''."\n"; - print ''; - print "".''; - print ''; - print ''; - print ''; - print ''; - - print ''; - - $var=!$var; - print ""; - print ''; - print ''; - print ''; - print ''; - print "\n"; - - print ""; - } - print "
'.$langs->trans("Description").''.$langs->trans("VAT").''.$langs->trans("Qty").''.$langs->trans("Discount").''.$langs->trans("PriceU").'  
'; - print ''.img_object($langs->trans("ShowProduct"),"product").' '.stripslashes(nl2br($objp->description)).'".stripslashes(nl2br($objp->description))."'.$objp->tva_tx.' %'.$objp->qty.''.$objp->remise_percent."% '.price($objp->subprice)."'; - print img_edit(); - print ''; - print img_delete(); - print '  
%
'.$langs->trans("Description").''.$langs->trans("VAT").''.$langs->trans("Qty").''.$langs->trans("Discount").''.$langs->trans("PriceU").'  
'; - print $html->select_tva("tva_tx",$conf->defaulttx); - print '%
% 

"; - /* - * Fin Ajout ligne - * - */ - - print ''; - - if ($user->societe_id == 0 && $commande->statut < 3 && $_GET["action"] == '') - { - print '
'; - - if ($conf->expedition->enabled && $commande->statut > 0 && $commande->statut < 3 && $user->rights->expedition->creer) - { - print ''.$langs->trans("Send").''; - } - - - if ($commande->statut == 0) - { - if ($user->rights->commande->valider) - { - print ''.$langs->trans("Valid").''; - } - } - - if ($commande->statut == 0 && $user->rights->commande->supprimer) - { - print ''.$langs->trans("Delete").''; - } - - if ($commande->statut == 1) - { - $nb_expedition = $commande->nb_expedition(); - if ($user->rights->commande->valider && $nb_expedition == 0) - { - print ''.$langs->trans("Cancel").''; - } - } - - print "
"; - } - print "
\n"; - - - print '
'; - - /* - * Liste des expéditions - */ - $sql = "SELECT e.rowid,e.ref,".$db->pdate("e.date_expedition")." as de"; - $sql .= " FROM ".MAIN_DB_PREFIX."expedition as e"; - $sql .= " WHERE e.fk_commande = ". $commande->id; - - $result = $db->query($sql); - if ($result) - { - $num = $db->num_rows($result); - if ($num) - { - print_titre($langs->trans("Sendings")); - $i = 0; $total = 0; - print ''; - print "\n"; - - $var=True; - while ($i < $num) - { - $objp = $db->fetch_object($result); - $var=!$var; - print ""; - print ''; - print "\n"; - $i++; - } - print "
".$langs->trans("Sendings")."".$langs->trans("Date")."
'.img_object($langs->trans("ShowSending"),"sending").' '.$objp->ref.'".dolibarr_print_date($objp->de)."
"; - } - } - else - { - dolibarr_print_error($db); - } - print " 
"; - - /* - * Liste des factures - */ - $sql = "SELECT f.rowid,f.facnumber,".$db->pdate("f.datef")." as df"; - $sql .= " FROM ".MAIN_DB_PREFIX."facture as f, ".MAIN_DB_PREFIX."co_fa as cf"; - $sql .= " WHERE f.rowid = cf.fk_facture AND cf.fk_commande = ". $commande->id; - - $result = $db->query($sql); - if ($result) - { - $num = $db->num_rows($result); - if ($num) - { - print_titre($langs->trans("Bills")); - $i = 0; $total = 0; - print ''; - print "\n"; - - $var=True; - while ($i < $num) - { - $objp = $db->fetch_object($result); - $var=!$var; - print ""; - print ''; - print "\n"; - $i++; - } - print "
".$langs->trans("Bill")."".$langs->trans("Date")."
'.img_object($langs->trans("ShowBill"),"bill").' '.$objp->facnumber.'".dolibarr_print_date($objp->df)."
"; - } - } - else - { - dolibarr_print_error($db); - } - print " 
"; - - /* - * Documents générés - * - */ - $file = $conf->commande->dir_output . "/" . $commande->ref . "/" . $commande->ref . ".pdf"; - $relativepath = $commande->ref."/".$commande->ref.".pdf"; - - $var=true; - - if (file_exists($file)) - { - - print_titre($langs->trans("Documents")); - print ''; - - print ""; - print ''; - print ''; - print ''; - print ''; - - print "
".$langs->trans("Order")." PDF'.$commande->ref.'.pdf'.filesize($file). ' bytes'.strftime("%d %b %Y %H:%M:%S",filemtime($file)).'
\n"; - print ''; - } - /* - * Classe la commande dans un projet - * TODO finir le look & feel très moche - */ - if ($_GET["action"] == 'classer') - { - print '
'; - print ''; - print ''; - print '"; - print '
'.$langs->trans("Project").''; - - $proj = new Project($db); - $html->select_array("projetid",$proj->liste_array($commande->soc_id)); - - print "
'; - } - - /* - * - * - */ - } - else - { - /* Commande non trouvée */ - print "Commande inexistante ou accés refusé"; - } - } -} - -$db->close(); - -llxFooter("Dernière modification $Date$ révision $Revision$"); -?> + + * Copyright (C) 2004-2005 Laurent Destailleur + * + * 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. + * + * $Id$ + * $Source$ + * + */ + +/** + \file htdocs/commande/fiche.php + \ingroup commande + \brief Fiche commande + \version $Revision$ +*/ + +require("./pre.inc.php"); + +$langs->load("sendings"); +$langs->load("companies"); +$langs->load("bills"); + +$user->getrights('commande'); +$user->getrights('expedition'); + +if (!$user->rights->commande->lire) accessforbidden(); + +require_once DOL_DOCUMENT_ROOT."/project.class.php"; +require_once DOL_DOCUMENT_ROOT."/propal.class.php"; +require_once DOL_DOCUMENT_ROOT."/commande/commande.class.php"; + +/* + * Sécurité accés client + */ +if ($user->societe_id > 0) +{ + $action = ''; + $socidp = $user->societe_id; +} +/* + * + */ +if ($_POST["action"] == 'classin' && $user->rights->commande->creer) +{ + $commande = new Commande($db); + $commande->fetch($_GET["id"]); + $commande->classin($_POST["projetid"]); +} +/* + * + */ +if ($_POST["action"] == 'add' && $user->rights->commande->creer) +{ + $datecommande = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); + + $commande = new Commande($db); + + $commande->soc_id = $_POST["soc_id"]; + $commande->date_commande = $datecommande; + $commande->note = $_POST["note"]; + $commande->source = $_POST["source_id"]; + $commande->projetid = $_POST["projetid"]; + $commande->remise_percent = $_POST["remise_percent"]; + + $commande->add_product($_POST["idprod1"],$_POST["qty1"],$_POST["remise_percent1"]); + $commande->add_product($_POST["idprod2"],$_POST["qty2"],$_POST["remise_percent2"]); + $commande->add_product($_POST["idprod3"],$_POST["qty3"],$_POST["remise_percent3"]); + $commande->add_product($_POST["idprod4"],$_POST["qty4"],$_POST["remise_percent4"]); + + $commande_id = $commande->create($user); + + $_GET["id"] = $commande->id; + + $action = ''; +} + +/* + * + */ + + +if ($_POST["action"] == 'setremise' && $user->rights->commande->creer) +{ + $commande = new Commande($db); + $commande->fetch($_GET["id"]); + + $commande->set_remise($user, $_POST["remise"]); +} + +if ($_POST["action"] == 'setnote' && $user->rights->commande->creer) +{ + $commande = new Commande($db); + $commande->fetch($_GET['id']); + $commande->set_note($user, $_POST['note']); +} + +if ($_POST["action"] == 'addligne' && $user->rights->commande->creer) +{ + $commande = new Commande($db); + $commande->fetch($_GET["id"]); + + if ($_POST["p_idprod"] > 0) + { + $result = $commande->addline("DESC", + $_POST["pu"], + $_POST["pqty"], + $_POST["tva_tx"], + $_POST["p_idprod"], + $_POST["premise"]); + } + else + { + $result = $commande->addline($_POST["desc"], + $_POST["pu"], + $_POST["qty"], + $_POST["tva_tx"], + 0, + $_POST["remise_percent"]); + } +} + +if ($_POST["action"] == 'updateligne' && $user->rights->commande->creer) +{ + $commande = new Commande($db,"",$_GET["id"]); + if ($commande->fetch($_GET["id"]) ) + { + $result = $commande->update_line($_POST["elrowid"], + $_POST["eldesc"], + $_POST["elprice"], + $_POST["elqty"], + $_POST["elremise_percent"]); + } + else + { + print "Erreur"; + } +} + +if ($_GET["action"] == 'deleteline' && $user->rights->commande->creer) +{ + $commande = new Commande($db); + $commande->fetch($_GET["id"]); + $result = $commande->delete_line($_GET["lineid"]); + Header("Location: fiche.php?id=".$_GET["id"]); +} + +if ($_GET["action"] == 'facturee') +{ + $commande = new Commande($db); + $commande->fetch($_GET["id"]); + $commande->classer_facturee(); +} + +if ($_POST["action"] == 'confirm_valid' && $_POST["confirm"] == yes && $user->rights->commande->valider) +{ + $commande = new Commande($db); + $commande->fetch($_GET["id"]); + $soc = new Societe($db); + $soc->fetch($commande->soc_id); + $result = $commande->valid($user); +} + +if ($_POST["action"] == 'confirm_cancel' && $_POST["confirm"] == yes && $user->rights->commande->valider) +{ + $commande = new Commande($db); + $commande->fetch($_GET["id"]); + $result = $commande->cancel($user); +} + +if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == yes) +{ + if ($user->rights->commande->supprimer ) + { + $commande = new Commande($db); + $commande->id = $_GET["id"]; + $commande->delete(); + Header("Location: index.php"); + } +} + +if ($_GET["action"] == 'pdf') +{ + /* + * Generation de la commande + * définit dans /includes/modules/commande/modules_commande.php + */ + commande_pdf_create($db, $_GET["id"]); +} + + +llxHeader('',$langs->trans("OrderCard"),"Commande"); + + + +$html = new Form($db); + +/********************************************************************* + * + * Mode creation + * + * + ************************************************************************/ +if ($_GET["action"] == 'create' && $user->rights->commande->creer) +{ + print_titre($langs->trans("CreateOrder")); + + $new_commande = new Commande($db); + + if ($propalid) + { + $sql = "SELECT s.nom, s.prefix_comm, s.idp, p.price, p.remise, p.remise_percent, p.tva, p.total, p.ref, ".$db->pdate("p.datep")." as dp, c.id as statut, c.label as lst"; + $sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."propal as p, ".MAIN_DB_PREFIX."c_propalst as c"; + $sql .= " WHERE p.fk_soc = s.idp AND p.fk_statut = c.id"; + $sql .= " AND p.rowid = $propalid"; + } + else + { + $sql = "SELECT s.nom, s.prefix_comm, s.idp "; + $sql .= "FROM ".MAIN_DB_PREFIX."societe as s "; + $sql .= "WHERE s.idp = ".$_GET["socidp"]; + } + + $resql = $db->query($sql); + + if ( $resql ) + { + $num = $db->num_rows($resql); + if ($num) + { + $obj = $db->fetch_object($resql); + + $soc = new Societe($db); + $soc->fetch($obj->idp); + + print '
'; + print ''; + print '' ."\n"; + print ''; + print ''; + + print ''; + + print ''; + print ''; + + print ''; + + print ''; + + print '"; + + print ''; + + + print '"; + + print '"; + + if ($propalid > 0) + { + $amount = ($obj->price); + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''; + + print ''; + print ''; + print '"; + print '"; + } + else + { + print ''; + print ''; + } + + /* + * + */ + print ''; + print "\n"; + print "
'.$langs->trans("Customer").' :'.$soc->nom_url.''.$langs->trans("Comments").' :
'.$langs->trans("Author").' :'.$user->fullname.''; + print '
'.$langs->trans("Date").' :'; + $html->select_date(); + print "
'.$langs->trans("Ref").' :Provisoire
'.$langs->trans("Source").' :'; + $html->select_array("source_id",$new_commande->sources,2); + print "
'.$langs->trans("Project").' :'; + $proj = new Project($db); + $html->select_array("projetid",$proj->liste_array($soc->id),0,1); + print "
'.$langs->trans("Ref").''.$obj->ref.'
'.$langs->trans("TotalTTC").''.price($amount).'
'.$langs->trans("VAT").''.price($obj->tva)."
'.$langs->trans("TotalTTC").''.price($obj->total)."
'.$langs->trans("Services").'/'.$langs->trans("Products").'
'; + /* + * + * Liste des elements + * + */ + $sql = "SELECT p.rowid,p.label,p.ref,p.price FROM ".MAIN_DB_PREFIX."product as p "; + $sql .= " WHERE envente = 1"; + $sql .= " ORDER BY p.nbvente DESC LIMIT 20"; + if ( $db->query($sql) ) + { + $opt = ""; + if ($result) + { + $num = $db->num_rows(); $i = 0; + while ($i < $num) + { + $objp = $db->fetch_object(); + $opt .= "\n"; + $i++; + } + } + $db->free(); + } + else + { + dolibarr_print_error($db); + } + + print ''; + print ''; + for ($i = 1 ; $i < 5 ; $i++) + { + print ''; + print ''; + print ''; + } + + print '
20 Produits les plus vendus'.$langs->trans("Qty").''.$langs->trans("Discount").'
%
'; + print '
\n"; + + if ($propalid) + { + /* + * Produits + */ + print_titre($langs->trans("Products")); + + print ''; + print ''; + print ''; + + $sql = "SELECT pt.rowid, p.label as product, p.ref, pt.price, pt.qty, p.rowid as prodid, pt.remise_percent"; + $sql .= " FROM ".MAIN_DB_PREFIX."propaldet as pt, ".MAIN_DB_PREFIX."product as p WHERE pt.fk_product = p.rowid AND pt.fk_propal = $propalid"; + $sql .= " ORDER BY pt.rowid ASC"; + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows(); + $i = 0; + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object(); + $var=!$var; + print "\n"; + print ''; + print ""; + print ''; + print "\n"; + $i++; + } + } + + $sql = "SELECT pt.rowid, pt.description as product, pt.price, pt.qty, pt.remise_percent"; + $sql .= " FROM ".MAIN_DB_PREFIX."propaldet as pt WHERE pt.fk_propal = $propalid AND pt.fk_product = 0"; + $sql .= " ORDER BY pt.rowid ASC"; + if ($db->query($sql)) + { + $num = $db->num_rows(); + $i = 0; + while ($i < $num) + { + $objp = $db->fetch_object(); + $var=!$var; + print "\n"; + print ''; + print ''; + print ''; + print "\n"; + $i++; + } + } + else + { + print $sql; + } + + print '
'.$langs->trans("Ref").''.$langs->trans("Product").''.$langs->trans("Price").''.$langs->trans("Discount").''.$langs->trans("Qty").'
[$objp->ref]'.img_object($langs->trans("ShowProduct"),"product").' '.$objp->product.'".price($objp->price)."'.$objp->remise_percent.' %".$objp->qty."
 '.img_object($langs->trans("ShowProduct"),"product").' '.$objp->product.''.price($objp->price).''.$objp->remise_percent.' %".$objp->qty."
'; + } + } + } + else + { + dolibarr_print_error($db); + } +} +else +/* *************************************************************************** */ +/* */ +/* Mode vue et edition */ +/* */ +/* *************************************************************************** */ +{ + $id = $_GET["id"]; + if ($id > 0) + { + $commande = new Commande($db); + if ( $commande->fetch($_GET["id"]) > 0) + { + $soc = new Societe($db); + $soc->fetch($commande->soc_id); + $author = new User($db); + $author->id = $commande->user_author_id; + $author->fetch(); + + $h=0; + + if ($conf->commande->enabled && $user->rights->commande->lire) + { + $head[$h][0] = DOL_URL_ROOT.'/commande/fiche.php?id='.$commande->id; + $head[$h][1] = $langs->trans("OrderCard"); + $hselected = $h; + $h++; + } + + if ($conf->expedition->enabled && $user->rights->expedition->lire) + { + $head[$h][0] = DOL_URL_ROOT.'/expedition/commande.php?id='.$commande->id; + $head[$h][1] = $langs->trans("SendingCard"); + $h++; + } + + if ($conf->compta->enabled) + { + $head[$h][0] = DOL_URL_ROOT.'/compta/commande/fiche.php?id='.$commande->id; + $head[$h][1] = $langs->trans("ComptaCard"); + $h++; + } + + dolibarr_fiche_head($head, $hselected, $soc->nom." / ".$langs->trans("Order")." : $commande->ref"); + + /* + * Confirmation de la suppression de la commande + * + */ + if ($_GET["action"] == 'delete') + { + $html->form_confirm("fiche.php?id=$id",$langs->trans("DeleteOrder"),$langs->trans("ConfirmDeleteOrder"),"confirm_delete"); + print "
\n"; + } + + /* + * Confirmation de la validation + * + */ + if ($_GET["action"] == 'valid') + { + //$numfa = commande_get_num($soc); + $html->form_confirm("fiche.php?id=$id",$langs->trans("ValidateOrder"),$langs->trans("ConfirmValidateOrder"),"confirm_valid"); + print "
\n"; + } + /* + * Confirmation de l'annulation + * + */ + if ($_GET["action"] == 'annuler') + { + $html->form_confirm("fiche.php?id=$id",$langs->trans("Cancel"),$langs->trans("ConfirmCancel"),"confirm_cancel"); + print "
\n"; + } + + /* + * Commande + */ + + print ''; + print '"; + print ''; + print ''; + print ''; + + print ""; + print ''; + + print '"; + + print ''; + print "\n"; + + print ''; + + // Ligne de 3 colonnes + print ''; + print ''; + print ''; + print ''; + + print ''; + + print ''; + print ''; + print ''; + print ''; + + print "
'.$langs->trans("Order")."'.$commande->ref.''.$commande->statuts[$commande->statut].''; + + if ($conf->projet->enabled) + { + $langs->load("projects"); + if ($commande->projet_id > 0) + { + print $langs->trans("Project").' : '; + $projet = New Project($db); + $projet->fetch($commande->projet_id); + print ''.$projet->title.''; + } + else + { + print $langs->trans("Project").' : '; + print 'Classer la commande'; + } + } + print ' 
".$langs->trans("Customer")."'; + print ''.$soc->nom.''.$langs->trans("Source").' : ' . $commande->sources[$commande->source] ; + if ($commande->source == 0) + { + /* Propale */ + $propal = new Propal($db); + $propal->fetch($commande->propale_id); + print ' -> '.$propal->ref.''; + } + print "
'.$langs->trans("Date").'".dolibarr_print_date($commande->date,"%A %d %B %Y")."'; + print $langs->trans("Author").' : '.$author->fullname.'
'.$langs->trans("AmountHT").''.price($commande->total_ht).''.$conf->monnaie.''.$langs->trans("Note").' :
'; + if ($commande->brouillon == 1 && $user->rights->commande->creer) + { + print '
'; + print ''; + print '
'; + print '
'; + } + else + { + print nl2br($commande->note); + } + print '
'.$langs->trans("GlobalDiscount").''; + + if ($commande->brouillon == 1 && $user->rights->commande->creer) + { + print '
'; + print ''; + print '%'; + print '
'; + print ''; + } + else + { + print $commande->remise_percent.' % '; + } + print '
'.$langs->trans("VAT").''.price($commande->total_tva).''.$conf->monnaie.'
'.$langs->trans("TotalTTC").''.price($commande->total_ttc).''.$conf->monnaie.'
"; + + if ($commande->brouillon == 1 && $user->rights->commande->creer) + { + print ''; + } + + /* + * Lignes de commandes + * + */ + echo '
'; + + $sql = "SELECT l.fk_product, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice"; + $sql .= " FROM ".MAIN_DB_PREFIX."commandedet as l"; + $sql .= " WHERE l.fk_commande = ".$commande->id; + $sql .= " ORDER BY l.rowid"; + + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows($result); + $i = 0; $total = 0; + + if ($num) + { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + } + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object($result); + print ""; + if ($objp->fk_product > 0) + { + print ''; + } + else + { + print "\n"; + } + print ''; + print ''; + if ($objp->remise_percent > 0) + { + print '\n"; + } + else + { + print ''; + } + print '\n"; + if ($commande->statut == 0 && $user->rights->commande->creer && $_GET["action"] == '') + { + print ''; + print ''; + } + else + { + print ''; + } + print ""; + + if ($_GET["action"] == 'editline' && $_GET["rowid"] == $objp->rowid) + { + print ""; + print ''; + print ''; + print ""; + print ''; + print ''; + print ''; + print ''; + print ''; + print '' . "\n"; + print "\n"; + } + $i++; + $var=!$var; + } + $db->free(); + } + else + { + dolibarr_print_error($db); + } + + /* + * Ajouter une ligne + * + */ + if ($commande->statut == 0 && $user->rights->commande->creer && $_GET["action"] == '') + { + $sql = "SELECT p.rowid,p.label,p.ref,p.price FROM ".MAIN_DB_PREFIX."product as p "; + $sql .= " WHERE envente = 1"; + $sql .= " ORDER BY p.nbvente DESC"; + $sql .= " LIMIT 20"; + if ( $db->query($sql) ) + { + $opt = ""; + if ($result) + { + $num = $db->num_rows(); + $i = 0; + while ($i < $num) + { + $objp = $db->fetch_object(); + $opt .= "\n"; + $i++; + } + } + $db->free(); + } + else + { + dolibarr_print_error($db); + } + + print ""; + print ""; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''."\n"; + print ''; + print "".''; + print ''; + print ''; + print ''; + print ''; + + print ''; + + $var=!$var; + print ""; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + print ""; + } + print "
'.$langs->trans("Description").''.$langs->trans("VAT").''.$langs->trans("Qty").''.$langs->trans("Discount").''.$langs->trans("PriceU").'  
'; + print ''.img_object($langs->trans("ShowProduct"),"product").' '.stripslashes(nl2br($objp->description)).'".stripslashes(nl2br($objp->description))."'.$objp->tva_tx.' %'.$objp->qty.''.$objp->remise_percent."% '.price($objp->subprice)."'; + print img_edit(); + print ''; + print img_delete(); + print '  
%
'.$langs->trans("Description").''.$langs->trans("VAT").''.$langs->trans("Qty").''.$langs->trans("Discount").''.$langs->trans("PriceU").'  
'; + print $html->select_tva("tva_tx",$conf->defaulttx); + print '%
% 

"; + /* + * Fin Ajout ligne + * + */ + + print ''; + + if ($user->societe_id == 0 && $commande->statut < 3 && $_GET["action"] == '') + { + print '
'; + + if ($conf->expedition->enabled && $commande->statut > 0 && $commande->statut < 3 && $user->rights->expedition->creer) + { + print ''.$langs->trans("Send").''; + } + + + if ($commande->statut == 0) + { + if ($user->rights->commande->valider) + { + print ''.$langs->trans("Valid").''; + } + } + + if ($commande->statut == 0 && $user->rights->commande->supprimer) + { + print ''.$langs->trans("Delete").''; + } + + if ($commande->statut == 1) + { + $nb_expedition = $commande->nb_expedition(); + if ($user->rights->commande->valider && $nb_expedition == 0) + { + print ''.$langs->trans("Cancel").''; + } + } + + print "
"; + } + print "
\n"; + + + print '
'; + + /* + * Liste des expéditions + */ + $sql = "SELECT e.rowid,e.ref,".$db->pdate("e.date_expedition")." as de"; + $sql .= " FROM ".MAIN_DB_PREFIX."expedition as e"; + $sql .= " WHERE e.fk_commande = ". $commande->id; + + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows($result); + if ($num) + { + print_titre($langs->trans("Sendings")); + $i = 0; $total = 0; + print ''; + print "\n"; + + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object($result); + $var=!$var; + print ""; + print ''; + print "\n"; + $i++; + } + print "
".$langs->trans("Sendings")."".$langs->trans("Date")."
'.img_object($langs->trans("ShowSending"),"sending").' '.$objp->ref.'".dolibarr_print_date($objp->de)."
"; + } + } + else + { + dolibarr_print_error($db); + } + print " 
"; + + /* + * Liste des factures + */ + $sql = "SELECT f.rowid,f.facnumber,".$db->pdate("f.datef")." as df"; + $sql .= " FROM ".MAIN_DB_PREFIX."facture as f, ".MAIN_DB_PREFIX."co_fa as cf"; + $sql .= " WHERE f.rowid = cf.fk_facture AND cf.fk_commande = ". $commande->id; + + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows($result); + if ($num) + { + print_titre($langs->trans("Bills")); + $i = 0; $total = 0; + print ''; + print "\n"; + + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object($result); + $var=!$var; + print ""; + print ''; + print "\n"; + $i++; + } + print "
".$langs->trans("Bill")."".$langs->trans("Date")."
'.img_object($langs->trans("ShowBill"),"bill").' '.$objp->facnumber.'".dolibarr_print_date($objp->df)."
"; + } + } + else + { + dolibarr_print_error($db); + } + print " 
"; + + /* + * Documents générés + * + */ + $file = $conf->commande->dir_output . "/" . $commande->ref . "/" . $commande->ref . ".pdf"; + $relativepath = $commande->ref."/".$commande->ref.".pdf"; + + $var=true; + + if (file_exists($file)) + { + + print_titre($langs->trans("Documents")); + print ''; + + print ""; + print ''; + print ''; + print ''; + print ''; + + print "
".$langs->trans("Order")." PDF'.$commande->ref.'.pdf'.filesize($file). ' bytes'.strftime("%d %b %Y %H:%M:%S",filemtime($file)).'
\n"; + print ''; + } + /* + * Classe la commande dans un projet + * TODO finir le look & feel très moche + */ + if ($_GET["action"] == 'classer') + { + print '
'; + print ''; + print ''; + print '"; + print '
'.$langs->trans("Project").''; + + $proj = new Project($db); + $html->select_array("projetid",$proj->liste_array($commande->soc_id)); + + print "
'; + } + + /* + * + * + */ + } + else + { + /* Commande non trouvée */ + print "Commande inexistante ou accés refusé"; + } + } +} + +$db->close(); + +llxFooter("Dernière modification $Date$ révision $Revision$"); +?>