diff --git a/htdocs/expedition/commande.php b/htdocs/expedition/commande.php new file mode 100644 index 00000000000..a1f4357c9a3 --- /dev/null +++ b/htdocs/expedition/commande.php @@ -0,0 +1,341 @@ + + * + * 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$ + * + */ +require("./pre.inc.php"); + +$user->getrights('commande'); +$user->getrights('expedition'); +if (!$user->rights->commande->lire) + accessforbidden(); + +require("../project.class.php"); +require("../propal.class.php"); +require("../product/stock/entrepot.class.php"); +/* + * Sécurité accés client + */ +if ($user->societe_id > 0) +{ + $action = ''; + $socidp = $user->societe_id; +} +/* + * + */ + +if ($HTTP_POST_VARS["action"] == 'confirm_valid' && $HTTP_POST_VARS["confirm"] == yes && $user->rights->commande->valider) +{ + $commande = new Commande($db); + $commande->fetch($_GET["id"]); + $result = $commande->cloture($user); +} + +llxHeader('','Fiche commande',''); + +$html = new Form($db); + +/* *************************************************************************** */ +/* */ +/* Mode vue et edition */ +/* */ +/* *************************************************************************** */ + +if ($id > 0) +{ + $commande = New Commande($db); + if ( $commande->fetch($id) > 0) + { + $commande->livraison_array(); + + $soc = new Societe($db); + $soc->fetch($commande->soc_id); + $author = new User($db); + $author->id = $commande->user_author_id; + $author->fetch(); + + print_titre("Commande : ".$commande->ref); + + /* + * Commande + */ + print '
'; + print ''; + print ''; + print ''; + print ''; + print "'; + + print '"; + + print ""; + print "\n"; + + print '"; + + print ""; + + print '"; + + if ($commande->note) + { + print ''; + print '"; + } + + print ''; + print ''; + print ''; + } + print "
Client"; + print ''.$soc->nom.''; + print $commande->statuts[$commande->statut]; + print "
Date".strftime("%A %d %B %Y",$commande->date)."Source : ' . $commande->sources[$commande->source] ; + if ($commande->source == 0) + { + /* Propale */ + $propal = new Propal($db); + $propal->fetch($commande->propale_id); + print ' -> '.$propal->ref.''; + } + print "
Auteur$author->fullname- '; + + print " 
Note
Note : '.nl2br($commande->note)."
'; + + /* + * 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 llx_commandedet as l WHERE l.fk_commande = $id ORDER BY l.rowid"; + + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows(); + $i = 0; $total = 0; + + if ($num) + { + print ''; + print ''; + print ''; + print ''; + print ''; + if (defined("MAIN_MODULE_STOCK")) + { + print ''; + } + print "\n"; + } + $var=True; + $reste_a_livrer = array(); + while ($i < $num) + { + $objp = $db->fetch_object( $i); + print ""; + if ($objp->fk_product > 0) + { + + $product = new Product($db); + $product->fetch($objp->fk_product); + + print ''; + } + else + { + print "\n"; + } + + print ''; + + print ''; + + $reste_a_livrer[$objp->fk_product] = $objp->qty - $quantite_livree; + $reste_a_livrer_x = $objp->qty - $quantite_livree; + $reste_a_livrer_total = $reste_a_livrer_total + $reste_a_livrer_x; + print ''; + + if (defined("MAIN_MODULE_STOCK")) + { + if ($product->stock_reel < $reste_a_livrer_x) + { + print ''; + } + else + { + print ''; + } + } + print ""; + + $i++; + $var=!$var; + } + $db->free(); + print "
DescriptionQuan. CommandéeQuan. livréeReste à livrerStock
'; + print ''.stripslashes(nl2br($objp->description)).'".stripslashes(nl2br($objp->description))."'.$objp->qty.''; + $quantite_livree = $commande->livraisons[$objp->fk_product]; + print $quantite_livree; + print ''; + print $reste_a_livrer[$objp->fk_product]; + print ''.$product->stock_reel.''.$product->stock_reel.'
"; + } + else + { + print $db->error(); + } + + /* + * + * + */ + if ($reste_a_livrer_total > 0) + { + $entrepot = new Entrepot($db); + + print '
Entrepôt'; + $html->select_array("entrepot_id",$entrepot->list_array()); + print '
"; + print "
\n"; + + /* + * Alerte de seuil + * + */ + if ($reste_a_livrer_total > 0 && defined("MAIN_MODULE_STOCK")) + { + print '
'; + foreach ($reste_a_livrer as $key => $value) + { + if ($value > 0) + { + $sql = "SELECT e.label as entrepot, ps.reel, p.label "; + $sql .= " FROM llx_entrepot as e, llx_product_stock as ps, llx_product as p"; + $sql .= " WHERE e.rowid = ps.fk_entrepot AND ps.fk_product = p.rowid AND ps.fk_product = $key"; + $sql .= " AND reel < $value"; + + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows(); + $i = 0; + + $var=True; + while ($i < $num) + { + $obja = $db->fetch_object( $i); + print ""; + print ''; + print "\n"; + $i++; + } + $db->free(); + } + } + } + print "
'.$obja->label.''.$obja->entrepot.'Stock : '.$obja->reel.'
"; + } + /* + * + * + */ + if ($user->societe_id == 0) + { + print '

'; + + print ''; + print ''; + + if ($user->rights->expedition->valider && $reste_a_livrer_total == 0) + { + print ''; + } + else + { + print ''; + } + + print ''; + print ''; + print "
--Clôturer---
"; + } + /* + * Déjà livré + * + * + */ + $sql = "SELECT cd.fk_product, cd.description, cd.rowid, cd.qty as qty_commande, ed.qty as qty_livre, e.ref, e.rowid as expedition_id"; + $sql .= " FROM llx_commandedet as cd , llx_expeditiondet as ed, llx_expedition as e"; + $sql .= " WHERE cd.fk_commande = $id AND cd.rowid = ed.fk_commande_ligne AND ed.fk_expedition = e.rowid"; + $sql .= " ORDER BY cd.fk_product"; + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows(); + $i = 0; $total = 0; + + if ($num) + { + print '
'; + print ''; + print ''; + print ''; + print ''; + + print "\n"; + + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object( $i); + print ""; + if ($objp->fk_product > 0) + { + print ''; + } + else + { + print "\n"; + } + print ''; + print ''; + $i++; + } + + print '
DescriptionQuan. livréeExpédition
'; + print ''.stripslashes(nl2br($objp->description)).'".stripslashes(nl2br($objp->description))."'.$objp->qty_livre.''.$objp->ref.'
'; + } + } + } + else + { + /* Commande non trouvée */ + print "Commande inexistante ou accés refusé"; + } +} + + +$db->close(); + +llxFooter("Dernière modification $Date$ révision $Revision$"); +?> diff --git a/htdocs/expedition/expedition.class.php b/htdocs/expedition/expedition.class.php new file mode 100644 index 00000000000..c06aa30d930 --- /dev/null +++ b/htdocs/expedition/expedition.class.php @@ -0,0 +1,400 @@ + + * + * 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$ + * + */ + +class Expedition +{ + var $db ; + var $id ; + var $brouillon; + var $entrepot_id; + /** + * Initialisation + * + */ + Function Expedition($DB) + { + $this->db = $DB; + $this->lignes = array(); + + $this->sources[0] = "Proposition commerciale"; + $this->sources[1] = "Internet"; + $this->sources[2] = "Courrier"; + $this->sources[3] = "Téléphone"; + $this->sources[4] = "Fax"; + + $this->statuts[-1] = "Annulée"; + $this->statuts[0] = "Brouillon"; + $this->statuts[1] = "Validée"; + + $this->products = array(); + } + /** + * Créé + * + * + */ + Function create($user) + { + require_once DOL_DOCUMENT_ROOT ."/product/stock/mouvementstock.class.php"; + $error = 0; + /* On positionne en mode brouillon la commande */ + $this->brouillon = 1; + + + $this->user = $user; + $this->db->begin(); + + $sql = "INSERT INTO llx_expedition (date_creation, fk_user_author, date_expedition, fk_commande, fk_entrepot) "; + $sql .= " VALUES (now(), $user->id, ".$this->db->idate($this->date_expedition).",$this->commande_id, $this->entrepot_id)"; + + if ( $this->db->query($sql) ) + { + $this->id = $this->db->last_insert_id(); + + /* + * + * + */ + + $sql = "UPDATE llx_expedition SET ref='(PROV".$this->id.")' WHERE rowid=".$this->id; + if ($this->db->query($sql)) + { + + $this->commande = new Commande($this->db); + $this->commande->id = $this->commande_id; + $this->commande->fetch_lignes(); + + /* + * Insertion des produits dans la base + */ + for ($i = 0 ; $i < sizeof($this->lignes) ; $i++) + { + //TODO + if (! $this->create_line(0, $this->lignes[$i]->commande_ligne_id, $this->lignes[$i]->qty)) + { + $error++; + } + } + /* + * + * + */ + $sql = "UPDATE llx_commande SET fk_statut = 2 WHERE rowid=".$this->commande_id; + if (! $this->db->query($sql)) + { + $error++; + } + + + if ($error ==0) + { + $this->db->commit(); + } + else + { + $this->db->rollback(); + } + + return $this->id; + } + else + { + $error++; + return -1; + } + } + else + { + $error++; + print $this->db->error() . '
'.$sql; + return 0; + } + } + /** + * + * + */ + Function create_line($transaction, $commande_ligne_id, $qty) + { + $error = 0; + $mouvS = new MouvementStock($this->db); + + $idprod = 0; + $j = 0; + while (($j < sizeof($this->commande->lignes)) && idprod == 0) + { + if ($this->commande->lignes[$j]->id == $commande_ligne_id) + { + $idprod = $this->commande->lignes[$j]->product_id; + } + $j++; + } + + if (! $mouvS->livraison($this->user, $idprod, $this->entrepot_id, $qty, 0) ) + { + $error++; + } + + $sql = "INSERT INTO llx_expeditiondet (fk_expedition, fk_commande_ligne, qty)"; + $sql .= " VALUES ($this->id,".$commande_ligne_id.",".$qty.")"; + + if (! $this->db->query($sql) ) + { + $error++; + } + + + if ($error == 0 ) + { + return 1; + } + + } + /** + * + * Lit une commande + * + */ + Function fetch ($id) + { + $sql = "SELECT e.rowid, e.date_creation, e.ref, e.fk_user_author, e.fk_statut, e.fk_commande"; + $sql .= ", ".$this->db->pdate("e.date_expedition")." as date_expedition "; + $sql .= " FROM llx_expedition as e"; + $sql .= " WHERE e.rowid = $id"; + + $result = $this->db->query($sql) ; + + if ( $result ) + { + $obj = $this->db->fetch_object(); + + $this->id = $obj->rowid; + $this->ref = $obj->ref; + $this->statut = $obj->fk_statut; + $this->commande_id = $obj->fk_commande; + $this->user_author_id = $obj->fk_user_author; + $this->date = $obj->date_expedition; + + $this->db->free(); + + if ($this->statut == 0) + $this->brouillon = 1; + + return 1; + } + else + { + print $this->db->error(); + return -1; + } + } + + /** + * Valide l'expedition + * + * + */ + Function valid($user) + { + $result = 0; + if ($user->rights->expedition->valider) + { + + $sql = "UPDATE llx_expedition SET ref='EXP".$this->id."', 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; + print $this->db->error() . ' in ' . $sql; + } + } + return $result ; + } + /** + * Annule la commande + * + * + */ + Function cancel($user) + { + if ($user->rights->commande->valider) + { + + $sql = "UPDATE llx_commande SET fk_statut = -1"; + $sql .= " WHERE rowid = $this->id AND fk_statut = 1 ;"; + + if ($this->db->query($sql) ) + { + return 1; + } + else + { + print $this->db->error() . ' in ' . $sql; + } + } + } + + /** + * 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 llx_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.",'".$p_desc."',$remise_percent, $subprice) ; "; + + if ($this->db->query($sql) ) + { + + if ($this->update_price() > 0) + { + return 1; + } + else + { + return -1; + } + } + else + { + print $this->db->error(); + print "
".$sql; + return -2; + } + } + } + /** + * Ajoute une ligne + * + */ + Function addline( $id, $qty ) + { + $num = sizeof($this->lignes); + $ligne = new ExpeditionLigne(); + + $ligne->commande_ligne_id = $id; + $ligne->qty = $qty; + + $this->lignes[$num] = $ligne; + } + + /** + * + * + */ + Function delete_line($idligne) + { + if ($this->statut == 0) + { + $sql = "DELETE FROM llx_commandedet WHERE rowid = $idligne"; + + if ($this->db->query($sql) ) + { + $this->update_price(); + + return 1; + } + else + { + return 0; + } + } + } + /** + * Supprime la fiche + * + */ + Function delete() + { + $this->db->begin(); + + $sql = "DELETE FROM llx_expeditiondet WHERE fk_expedition = $this->id ;"; + if ( $this->db->query($sql) ) + { + $sql = "DELETE FROM llx_expedition WHERE rowid = $this->id;"; + if ( $this->db->query($sql) ) + { + $this->db->commit(); + return 1; + } + else + { + $this->db->rollback(); + return -2; + } + } + else + { + $this->db->rollback(); + return -1; + } + } + /** + * Class la commande + * + * + */ + Function classin($cat_id) + { + $sql = "UPDATE llx_commande SET fk_projet = $cat_id"; + $sql .= " WHERE rowid = $this->id;"; + + if ($this->db->query($sql) ) + { + return 1; + } + else + { + print $this->db->error() . ' in ' . $sql; + } + } +} + + +class ExpeditionLigne +{ + +} + +?> diff --git a/htdocs/expedition/fiche.php b/htdocs/expedition/fiche.php new file mode 100644 index 00000000000..a4564e481fc --- /dev/null +++ b/htdocs/expedition/fiche.php @@ -0,0 +1,634 @@ + + * + * 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$ + * + */ +require("./pre.inc.php"); + +$user->getrights('commande'); +$user->getrights('expedition'); +if (!$user->rights->expedition->lire) + accessforbidden(); + +require("../project.class.php"); +require("../propal.class.php"); +require("../product/stock/entrepot.class.php"); + +/* + * Sécurité accés client + */ +if ($user->societe_id > 0) +{ + $action = ''; + $socidp = $user->societe_id; +} +/* + * + */ +if ($HTTP_POST_VARS["action"] == 'classin') +{ + $commande = new Commande($db); + $commande->fetch($_GET["id"]); + $commande->classin($HTTP_POST_VARS["projetid"]); +} +/* + * + */ +if ($HTTP_POST_VARS["action"] == 'add') +{ + $expedition = new Expedition($db); + + $expedition->date_expedition = time(); + $expedition->note = $HTTP_POST_VARS["note"]; + $expedition->commande_id = $HTTP_POST_VARS["commande_id"]; + $expedition->entrepot_id = $HTTP_POST_VARS["entrepot_id"]; + + $commande = new Commande($db); + $commande->fetch($expedition->commande_id); + $commande->fetch_lignes(); + + for ($i = 0 ; $i < sizeof($commande->lignes) ; $i++) + { + $qty = "qtyl".$i; + $idl = "idl".$i; + if ($HTTP_POST_VARS[$qty] > 0) + { + $expedition->addline($HTTP_POST_VARS[$idl],$HTTP_POST_VARS[$qty]); + } + } + + $expedition->create($user); + + $id = $expedition->id; + + $action = ''; +} + +/* + * + */ + + +if ($HTTP_POST_VARS["action"] == 'confirm_valid' && $HTTP_POST_VARS["confirm"] == yes && $user->rights->expedition->valider) +{ + $expedition = new Expedition($db); + $expedition->fetch($_GET["id"]); + $result = $expedition->valid($user); +} + +if ($HTTP_POST_VARS["action"] == 'confirm_delete' && $HTTP_POST_VARS["confirm"] == yes) +{ + if ($user->rights->expedition->supprimer ) + { + $expedition = new Expedition($db); + $expedition->id = $_GET["id"]; + $expedition->delete(); + Header("Location: liste.php"); + } +} + +/* + * + */ + +llxHeader('','Fiche expedition','ch-expedition.html',$form_search); + +$html = new Form($db); + +/********************************************************************* + * + * Mode creation + * + * + * + ************************************************************************/ +if ($HTTP_POST_VARS["action"] == 'create') +{ + print_titre("Créer une expédition"); + + $commande = new Commande($db); + $commande->livraison_array(); + + if ( $commande->fetch($HTTP_POST_VARS["commande_id"])) + { + $soc = new Societe($db); + $soc->fetch($commande->soc_id); + $author = new User($db); + $author->id = $commande->user_author_id; + $author->fetch(); + + $entrepot = new Entrepot($db); + /* + * Commande + */ + print '

'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '"; + + print ""; + print "\n"; + + print '\n"; + + print ''; + print ''; + print "\n"; + + if ($commande->note) + { + print '"; + } + print "
Client'.$soc->nom.''; + print $commande->statuts[$commande->statut]; + print "
Date".strftime("%A %d %B %Y",$commande->date)."Commande : ' . $commande->ref ; + print "
Entrepôt'; + $ents = $entrepot->list_array(); + print $ents[$HTTP_POST_VARS["entrepot_id"]]; + print 'Auteur$author->fullname
Note : '.nl2br($commande->note)."
"; + + /* + * Lignes de commandes + * + */ + echo '
'; + + $lignes = $commande->fetch_lignes(); + + $num = sizeof($commande->lignes); + $i = 0; $total = 0; + + if ($num) + { + print ''; + print ''; + print ''; + print ''; + print ''; + if (defined("MAIN_MODULE_STOCK")) + { + print ''; + } + print "\n"; + } + $var=True; + while ($i < $num) + { + $ligne = $commande->lignes[$i]; + print "\n"; + if ($ligne->product_id > 0) + { + $product = new Product($db); + $product->fetch($ligne->product_id); + + print ''; + } + else + { + print "\n"; + } + + print ''; + /* + * + */ + print ''; + /* + * + */ + print ''; + + if ($stock < $quantite_a_livrer) + { + print ''; + } + else + { + print ''; + } + } + else + { + print ''; + print ''; + } + print "\n"; + + $i++; + $var=!$var; + } + + /* + * + */ + + print ''; + print "
DescriptionQuan. commandéeQuan. livréeQuan. à livrerStock
'; + print ''.nl2br($ligne->description).'".nl2br($ligne->description)."'.$ligne->qty.''; + $quantite_livree = $commande->livraisons[$ligne->product_id]; + print $quantite_livree;; + print ''; + print ''; + + $quantite_commandee = $ligne->qty; + $quantite_a_livrer = $quantite_commandee - $quantite_livree; + + if (defined("MAIN_MODULE_STOCK")) + { + $stock = $product->stock_entrepot[$HTTP_POST_VARS["entrepot_id"]]; + + print ''; + print ''.$stock.''.$stock.'
"; + print ''; + } + else + { + print $db->error() . "
$sql";; + } +} +else +/* *************************************************************************** */ +/* */ +/* Mode vue et edition */ +/* */ +/* *************************************************************************** */ +{ + if ($id > 0) + { + $expedition = New Expedition($db); + if ( $expedition->fetch($id) > 0) + { + $author = new User($db); + $author->id = $expedition->user_author_id; + $author->fetch(); + + $commande = New Commande($db); + $commande->fetch($expedition->commande_id); + + $soc = new Societe($db); + $soc->fetch($commande->soc_id); + + print_titre("Expedition : ".$expedition->ref); + + /* + * Confirmation de la suppression + * + */ + if ($action == 'delete') + { + $html->form_confirm("$PHP_SELF?id=$id","Supprimer l'expedition","Etes-vous sûr de vouloir supprimer cette expedition ?","confirm_delete"); + } + + /* + * Confirmation de la validation + * + */ + if ($_GET["action"] == 'valid') + { + $html->form_confirm("$PHP_SELF?id=$id","Valider l'expédition","Etes-vous sûr de vouloir valider cette expédition ?","confirm_valid"); + } + /* + * Confirmation de l'annulation + * + */ + if ($_GET["action"] == 'annuler') + { + $html->form_confirm("$PHP_SELF?id=$id","Annuler la commande","Etes-vous sûr de vouloir annuler cette commande ?","confirm_cancel"); + } + + /* + * Commande + */ + if ($commande->brouillon == 1 && $user->rights->commande->creer) + { + print '
'; + print ''; + } + + print ''; + print ''; + print ''; + + print '"; + + print ""; + print '\n"; + + print ""; + print "\n"; + + print '"; + + print ""; + + print "
Client'; + print ''.$soc->nom.''; + print $commande->statuts[$commande->statut]; + print "
Commande'.$commande->ref."
Date".strftime("%A %d %B %Y",$commande->date)."'; + print "
Auteur$author->fullname
"; + + /* + * Lignes + * + */ + echo '
'; + + $sql = "SELECT cd.fk_product, cd.description, cd.rowid, cd.qty as qty_commande, ed.qty as qty_livre"; + $sql .= " FROM llx_commandedet as cd , llx_expeditiondet as ed"; + $sql .= " WHERE ed.fk_expedition = $id AND cd.rowid = ed.fk_commande_ligne "; + + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows(); + $i = 0; $total = 0; + + if ($num) + { + print ''; + print ''; + print ''; + print ''; + print "\n"; + } + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object( $i); + print ""; + if ($objp->fk_product > 0) + { + print ''; + } + else + { + print "\n"; + } + print ''; + print ''; + + print ""; + + $i++; + $var=!$var; + } + $db->free(); + } + else + { + print "$sql"; + print $db->error(); + } + + + print "
DescriptionQuan. commandéeQuan. livrée
'; + print ''.stripslashes(nl2br($objp->description)).'".stripslashes(nl2br($objp->description))."'.$objp->qty_commande.''.$objp->qty_livre.'
"; + /* + * Fin Ajout ligne + * + */ + if ($user->societe_id == 0) + { + print '

'; + + if ($expedition->brouillon && $user->rights->expedition->supprimer) + { + print ""; + } + else + { + print ""; + } + + + print ""; + + + + print ''; + print ''; + + if ($expedition->statut == 0) + { + if ($user->rights->expedition->valider) + { + print ""; + } + else + { + print ''; + } + } + elseif ($commande->statut == 1) + { + if ($user->rights->commande->valider) + { + print ""; + } + else + { + print ''; + } + } + else + { + print ''; + } + + print "
Supprimer----Valider-Annuler la commande--
"; + } + print "

\n"; + + /* + * Déjà livré + * + * + */ + $sql = "SELECT cd.fk_product, cd.description, cd.rowid, cd.qty as qty_commande, ed.qty as qty_livre, e.ref"; + $sql .= " FROM llx_commandedet as cd , llx_expeditiondet as ed, llx_expedition as e"; + $sql .= " WHERE cd.fk_commande = $expedition->commande_id AND e.rowid <> $expedition->id AND cd.rowid = ed.fk_commande_ligne AND ed.fk_expedition = e.rowid"; + $sql .= " ORDER BY cd.fk_product"; + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows(); + $i = 0; $total = 0; + + if ($num) + { + print '
'; + print ''; + print ''; + print ''; + print ''; + + print "\n"; + + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object( $i); + print ""; + if ($objp->fk_product > 0) + { + print ''; + } + else + { + print "\n"; + } + print ''; + print ''; + $i++; + } + + print '
DescriptionQuan. livréeExpédition
'; + print ''.stripslashes(nl2br($objp->description)).'".stripslashes(nl2br($objp->description))."'.$objp->qty_livre.''.$objp->ref.'
'; + } + } + + + /* + * Documents générés + * + */ + $file = FAC_OUTPUTDIR . "/" . $commande->ref . "/" . $commande->ref . ".pdf"; + + if (file_exists($file)) + { + print "
"; + print_titre("Documents"); + print ''; + + print ""; + print ''; + print ''; + print ''; + print ''; + + print "
Commande PDFref."/".$commande->ref.'.pdf">'.$commande->ref.'.pdf'.filesize($file). ' bytes'.strftime("%d %b %Y %H:%M:%S",filemtime($file)).'
\n"; + print '
'; + print_titre("Actions"); + /* + * Liste des actions + * + */ + $sql = "SELECT ".$db->pdate("a.datea")." as da, a.note"; + $sql .= " FROM llx_actioncomm as a WHERE a.fk_soc = $commande->socidp AND a.fk_action in (9,10) AND a.fk_commande = $id"; + + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows(); + if ($num) + { + $i = 0; $total = 0; + print ''; + print "\n"; + + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object( $i); + $var=!$var; + print ""; + print "\n"; + print ''; + print ""; + $i++; + } + print "
DateAction
".strftime("%d %B %Y",$objp->da)."'.stripslashes($objp->note).'
"; + } + } + else + { + print $db->error(); + } + + /* + * + * + */ + print "
"; + } + /* + * + * + */ + if ($action == 'classer') + { + print "

\n"; + print ''; + print ''; + print '"; + print '
Projet'; + + $proj = new Project($db); + $html->select_array("projetid",$proj->liste_array($commande->soc_id)); + + print "

'; + } + /* + * + * + */ + if ($action == 'presend') + { + $replytoname = $user->fullname; + $from_name = $replytoname; + + $replytomail = $user->email; + $from_mail = $replytomail; + + print "
\n"; + print ''; + print ''; + + print "

Envoyer la commande par mail"; + print ""; + print '"; + print ""; + print ""; + print "
Destinataire'; + + $form = new Form($db); + $form->select_array("destinataire",$soc->contact_email_array()); + + print "email\">
Expéditeur$from_name$from_mail
Reply-to$replytoname$replytomail
"; + + print "

"; + } + } + else + { + /* Commande non trouvée */ + print "Commande inexistante ou accés refusé"; + } + } +} + +$db->close(); + +llxFooter("Dernière modification $Date$ révision $Revision$"); +?> diff --git a/htdocs/expedition/index.php b/htdocs/expedition/index.php new file mode 100644 index 00000000000..f38e6b63127 --- /dev/null +++ b/htdocs/expedition/index.php @@ -0,0 +1,181 @@ + + * + * 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$ + * + */ + +require("./pre.inc.php"); + +llxHeader('','Expéditions','',$form_search); + +print_titre("Expeditions"); + +print ''; + +print '
'; +/* + * + */ + +/* + * Expeditions à valider + */ +$sql = "SELECT e.rowid, e.ref, s.nom, s.idp, c.ref as commande_ref, c.rowid as commande_id FROM llx_expedition as e, llx_societe as s, llx_commande as c"; +$sql .= " WHERE e.fk_commande = c.rowid AND c.fk_soc = s.idp AND e.fk_statut = 0"; +if ($socidp) +{ + $sql .= " AND c.fk_soc = $socidp"; +} + +print ''; +print ''; +print ''; + + +if ( $db->query($sql) ) +{ + $num = $db->num_rows(); + if ($num) + { + $i = 0; + + while ($i < $num) + { + $var=!$var; + $obj = $db->fetch_object($i); + print ""; + print ''; + print ''; + $i++; + } + } +} +print "
'.translate("Expeditions à valider").'
rowid\">$obj->ref'.$obj->nom.''.$obj->commande_ref.'

"; + +/* + * + */ +print '
'; + +/* + * Commandes à traiter + */ +$sql = "SELECT c.rowid, c.ref, s.nom, s.idp FROM llx_commande as c, llx_societe as s"; +$sql .= " WHERE c.fk_soc = s.idp AND c.fk_statut = 1"; +if ($socidp) +{ + $sql .= " AND c.fk_soc = $socidp"; +} + +if ( $db->query($sql) ) +{ + $num = $db->num_rows(); + if ($num) + { + $i = 0; + print ''; + print ''; + print ''; + + while ($i < $num) + { + $var=!$var; + $obj = $db->fetch_object($i); + print ""; + print ''; + $i++; + } + print "
'.translate("Commandes à traiter").'
rowid\">$obj->ref'.$obj->nom.'

"; + } +} + +/* + * Commandes à traiter + */ +$sql = "SELECT c.rowid, c.ref, s.nom, s.idp FROM llx_commande as c, llx_societe as s"; +$sql .= " WHERE c.fk_soc = s.idp AND c.fk_statut = 2"; +if ($socidp) +{ + $sql .= " AND c.fk_soc = $socidp"; +} + +if ( $db->query($sql) ) +{ + $num = $db->num_rows(); + if ($num) + { + $i = 0; + print ''; + print ''; + print ''; + + while ($i < $num) + { + $var=!$var; + $obj = $db->fetch_object($i); + print ""; + print ''; + $i++; + } + print "
'.translate("Commandes en traitement").'
rowid\">$obj->ref'.$obj->nom.'

"; + } +} + + + +/* + * Expeditions à valider + */ +$sql = "SELECT e.rowid, e.ref, s.nom, s.idp, c.ref as commande_ref, c.rowid as commande_id FROM llx_expedition as e, llx_societe as s, llx_commande as c"; +$sql .= " WHERE e.fk_commande = c.rowid AND c.fk_soc = s.idp AND e.fk_statut = 1"; +if ($socidp) +{ + $sql .= " AND c.fk_soc = $socidp"; +} +$sql .= " ORDER BY c.rowid DESC"; +$sql .= $db->plimit(5, 0); +if ( $db->query($sql) ) +{ + $num = $db->num_rows(); + if ($num) + { + $i = 0; + print ''; + print ''; + print ''; + + while ($i < $num) + { + $var=!$var; + $obj = $db->fetch_object($i); + print ""; + print ''; + print ''; + $i++; + } + print "
'.translate("5 dernières expéditions").'
rowid\">$obj->ref'.$obj->nom.''.$obj->commande_ref.'

"; + } +} + +print '
'; + +$db->close(); + +llxFooter("Dernière modification $Date$ révision $Revision$"); +?> diff --git a/htdocs/expedition/liste.php b/htdocs/expedition/liste.php new file mode 100644 index 00000000000..2387834615a --- /dev/null +++ b/htdocs/expedition/liste.php @@ -0,0 +1,159 @@ + + * + * 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$ + * + */ + +/** +* Gestion d'une proposition commerciale +* @package propale +*/ + +require("./pre.inc.php"); + +$user->getrights('expedition'); +if (!$user->rights->expedition->lire) + accessforbidden(); + +/* + * Sécurité accés client + */ +if ($user->societe_id > 0) +{ + $action = ''; + $socidp = $user->societe_id; +} + + + +llxHeader(); + +/******************************************************************************/ +/* Fin des Actions */ +/******************************************************************************/ + +/**************************************************************************** + * * + * * + * * + * * + ****************************************************************************/ + +if ($sortfield == "") +{ + $sortfield="e.rowid"; +} +if ($sortorder == "") +{ + $sortorder="DESC"; +} + +if ($page == -1) { $page = 0 ; } + +$limit = $conf->liste_limit; +$offset = $limit * $page ; +$pageprev = $page - 1; +$pagenext = $page + 1; + +$sql = "SELECT e.rowid, e.ref,".$db->pdate("e.date_expedition")." as date_expedition" ; +$sql .= " FROM llx_expedition as e "; +$sql_add = " WHERE "; +if ($socidp) +{ + $sql .= $sql_add . " s.idp = $socidp"; + $sql_add = " AND "; +} + +if (strlen($HTTP_POST_VARS["sf_ref"]) > 0) +{ + $sql .= $sql_add . " e.ref like '%".$HTTP_POST_VARS["sf_ref"] . "%'"; +} + +$sql .= " ORDER BY $sortfield $sortorder"; +$sql .= $db->plimit($limit + 1,$offset); + +if ( $db->query($sql) ) +{ + $num = $db->num_rows(); + print_barre_liste("Expeditions", $page, $PHP_SELF,"&socidp=$socidp",$sortfield,$sortorder,'',$num); + + + $i = 0; + print ''; + + print ''; + + print_liste_field_titre_new ("Réf",$PHP_SELF,"p.ref","","&socidp=$socidp",'width="15%"',$sortfield); + + print_liste_field_titre_new ("Société",$PHP_SELF,"s.nom","","&socidp=$socidp",'width="30%"',$sortfield); + + print_liste_field_titre_new ("Date",$PHP_SELF,"c.date_expedition","","&socidp=$socidp", 'width="25%" align="right" colspan="2"',$sortfield); + + print_liste_field_titre_new ("Statut",$PHP_SELF,"p.fk_statut","","&socidp=$socidp",'width="10%" align="center"',$sortfield); + print "\n"; + $var=True; + + while ($i < min($num,$limit)) + { + $objp = $db->fetch_object( $i); + + $var=!$var; + print ""; + print "\n"; + print "\n"; + + $now = time(); + $lim = 3600 * 24 * 15 ; + + if ( ($now - $objp->date_expedition) > $lim && $objp->statutid == 1 ) + { + print ""; + } + else + { + print ""; + } + + print "\n"; + + print "\n"; + print "\n"; + + $i++; + } + + print "
rowid\">$objp->refidp\">$objp->nom > 15 jours "; + $y = strftime("%Y",$objp->date_expedition); + $m = strftime("%m",$objp->date_expedition); + + print strftime("%d",$objp->date_expedition)."\n"; + print " "; + print strftime("%B",$objp->date_expedition)."\n"; + print " "; + print strftime("%Y",$objp->date_expedition)."$objp->statut
"; + $db->free(); + } + else + { + print $db->error(); + } + +$db->close(); +llxFooter("Dernière modification $Date$ révision $Revision$"); +?>