From 377aecf983e006ca9250035b6475d8d5f84bf651 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur <eldy@users.sourceforge.net> Date: Tue, 1 Aug 2006 23:54:39 +0000 Subject: [PATCH] =?UTF-8?q?Factorisation=20du=20code=20des=20onglets=20pro?= =?UTF-8?q?duits=20D=E9buggage=20fiche=20produits=20fournisseurs=20Afficha?= =?UTF-8?q?ge=20du=20nombre=20de=20commande=20en=20cours=20d'un=20produit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/commande/commande.class.php | 21 ++-- htdocs/fourn/commande/fiche.php | 12 +-- htdocs/fourn/product/fiche.php | 48 ++++----- htdocs/lib/product.lib.php | 74 ++++++------- htdocs/product.class.php | 160 ++++++++++++++++++----------- htdocs/product/fiche.php | 58 +++++------ htdocs/product/stock/product.php | 60 +++++++---- 7 files changed, 243 insertions(+), 190 deletions(-) diff --git a/htdocs/commande/commande.class.php b/htdocs/commande/commande.class.php index 1485e48ad70..b1a50c550ee 100644 --- a/htdocs/commande/commande.class.php +++ b/htdocs/commande/commande.class.php @@ -1136,19 +1136,19 @@ class Commande extends CommonObject // Recherche total en stock pour chaque produit if (sizeof($array_of_product)) { - $sql = "SELECT fk_product, sum(ps.reel)"; + $sql = "SELECT fk_product, sum(ps.reel) as total"; $sql.= " FROM ".MAIN_DB_PREFIX."product_stock as ps"; $sql.= " WHERE ps.fk_product in (".join(',',$array_of_product).")"; $sql.= ' GROUP BY fk_product '; $result = $this->db->query($sql); if ($result) { - $num = $this->db->num_rows(); + $num = $this->db->num_rows($result); $i = 0; while ($i < $num) { - $row = $this->db->fetch_row( $i); - $this->stocks[$row[0]] = $row[1]; + $obj = $this->db->fetch_object($result); + $this->stocks[$obj->fk_product] = $obj->total; $i++; } $this->db->free(); @@ -1426,13 +1426,12 @@ class Commande extends CommonObject } } - /** - * \brief Renvoi la liste des commandes (�ventuellement filtr�e sur un user) dans un tableau - * \param brouillon 0=non brouillon, 1=brouillon - * \param user Objet user de filtre - * \return int -1 si erreur, tableau r�sultat si ok - */ - + /** + * \brief Renvoi la liste des commandes (�ventuellement filtr�e sur un user) dans un tableau + * \param brouillon 0=non brouillon, 1=brouillon + * \param user Objet user de filtre + * \return int -1 si erreur, tableau r�sultat si ok + */ function liste_array ($brouillon=0, $user='') { $ga = array(); diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php index 3f0b73f32f4..9ef9f3ba118 100644 --- a/htdocs/fourn/commande/fiche.php +++ b/htdocs/fourn/commande/fiche.php @@ -438,16 +438,8 @@ if ($_GET["id"] > 0) { $objp = $db->fetch_object($resql); print "<tr $bc[$var]>"; - print '<td><a href="'.DOL_URL_ROOT.'/fourn/product/fiche.php?id='.$objp->fk_product.'">'.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref.'</a></td>'; - if ($objp->fk_product > 0) - { - print '<td>'; - print '<a href="'.DOL_URL_ROOT.'/fourn/product/fiche.php?id='.$objp->fk_product.'">'.stripslashes(nl2br($objp->description)).'</a></td>'; - } - else - { - print "<td>".stripslashes(nl2br($objp->description))."</td>\n"; - } + print '<td><a href="'.DOL_URL_ROOT.'/product/fournisseurs.php?id='.$objp->fk_product.'">'.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref.'</a></td>'; + print "<td>".nl2br($objp->description)."</td>"; print '<td align="center">'.$objp->tva_tx.'%</td>'; print '<td align="center">'.$objp->qty.'</td>'; if ($objp->remise_percent > 0) diff --git a/htdocs/fourn/product/fiche.php b/htdocs/fourn/product/fiche.php index 892138ce82e..eb05cf75281 100644 --- a/htdocs/fourn/product/fiche.php +++ b/htdocs/fourn/product/fiche.php @@ -49,10 +49,11 @@ $types[1] = $langs->trans("Service"); if ($_GET["action"] == 'fastappro') { - $product = new Product($db); - $product->fetch($_GET["id"]); - $result = $product->fastappro($user); - Header("Location: fiche.php?id=".$_GET["id"]); + $product = new Product($db); + $product->fetch($_GET["id"]); + $result = $product->fastappro($user); + Header("Location: fiche.php?id=".$_GET["id"]); + exit; } @@ -572,27 +573,28 @@ else print "\n<div class=\"tabsAction\">\n"; - if ($_GET["action"] == '') - { - - print '<a class="butAction" href="fiche.php?id='.$product->id.'&action=ajout_fourn">'.$langs->trans("AddSupplier").'</a>'; - - if ($product->type == 0 && $user->rights->produit->commander && $num_fournisseur == 1) - { - print '<a class="tabAction" href="fiche.php?action=fastappro&id='.$product->id.'">'; - print $langs->trans("Order").'</a>'; - } - - if ( $user->rights->produit->creer) - { - print '<a class="tabAction" href="fiche.php?action=edit&id='.$product->id.'">'.$langs->trans("Edit").'</a>'; - } - - if ($product->type == 0 && $conf->stock->enabled) + if ($_GET["action"] == '') { - print '<a class="tabAction" href="'.DOL_URL_ROOT.'/product/stock/product.php?id='.$product->id.'&action=correction">'.$langs->trans("CorrectStock").'</a>'; + if ( $user->rights->produit->creer) + { + print '<a class="tabAction" href="fiche.php?action=edit&id='.$product->id.'">'.$langs->trans("Edit").'</a>'; + } + + if ($product->type == 0 && $conf->stock->enabled) + { + print '<a class="tabAction" href="'.DOL_URL_ROOT.'/product/stock/product.php?id='.$product->id.'&action=correction">'.$langs->trans("CorrectStock").'</a>'; + } + + print '<a class="butAction" href="fiche.php?id='.$product->id.'&action=ajout_fourn">'.$langs->trans("AddSupplier").'</a>'; + + if ($product->type == 0 && $user->rights->commande->creer) + { + $langs->load('orders'); + print '<a class="tabAction" href="fiche.php?action=fastappro&id='.$product->id.'">'; + print $langs->trans("CreateOrder").'</a>'; + } + } - } print "\n</div>\n"; diff --git a/htdocs/lib/product.lib.php b/htdocs/lib/product.lib.php index 56c56401fec..7fb269e65a8 100644 --- a/htdocs/lib/product.lib.php +++ b/htdocs/lib/product.lib.php @@ -1,4 +1,4 @@ -<?php +<?php /* Copyright (C) 2006 Laurent Destailleur <eldy@users.sourceforge.net> * * This program is free software; you can redistribute it and/or modify @@ -26,22 +26,22 @@ \version $Revision$ Ensemble de fonctions de base de dolibarr sous forme d'include -*/ - -function product_prepare_head($product) -{ - global $langs, $conf; - $h = 0; - $head = array(); - +*/ + +function product_prepare_head($product) +{ + global $langs, $conf; + $h = 0; + $head = array(); + $head[$h][0] = DOL_URL_ROOT."/product/fiche.php?id=".$product->id; $head[$h][1] = $langs->trans("Card"); - $head[$h][2] = 'card'; + $head[$h][2] = 'card'; $h++; $head[$h][0] = DOL_URL_ROOT."/product/price.php?id=".$product->id; $head[$h][1] = $langs->trans("Price"); - $head[$h][2] = 'price'; + $head[$h][2] = 'price'; $h++; //affichage onglet cat�gorie @@ -49,7 +49,7 @@ function product_prepare_head($product) { $head[$h][0] = DOL_URL_ROOT."/product/categorie.php?id=".$product->id; $head[$h][1] = $langs->trans('Categories'); - $head[$h][2] = 'category'; + $head[$h][2] = 'category'; $h++; } @@ -61,30 +61,19 @@ function product_prepare_head($product) { $head[$h][0] = DOL_URL_ROOT."/product/barcode.php?id=".$product->id; $head[$h][1] = $langs->trans("BarCode"); - $head[$h][2] = 'barcode'; + $head[$h][2] = 'barcode'; $h++; } } } - if($product->type == 0) // Si produit stockable - { - if ($conf->stock->enabled) - { - $head[$h][0] = DOL_URL_ROOT."/product/stock/product.php?id=".$product->id; - $head[$h][1] = $langs->trans("Stock"); - $head[$h][2] = 'stock'; - $h++; - } - } - - // Multilangs + // Multilangs // TODO Ecran a virer et � remplacer par if($conf->global->MAIN_MULTILANGS) { $head[$h][0] = DOL_URL_ROOT."/product/traduction.php?id=".$product->id; $head[$h][1] = $langs->trans("Translation"); - $head[$h][2] = 'translation'; + $head[$h][2] = 'translation'; $h++; } @@ -92,13 +81,13 @@ function product_prepare_head($product) { $head[$h][0] = DOL_URL_ROOT."/product/fournisseurs.php?id=".$product->id; $head[$h][1] = $langs->trans("Suppliers"); - $head[$h][2] = 'suppliers'; + $head[$h][2] = 'suppliers'; $h++; } $head[$h][0] = DOL_URL_ROOT."/product/stats/fiche.php?id=".$product->id; $head[$h][1] = $langs->trans('Statistics'); - $head[$h][2] = 'stats'; + $head[$h][2] = 'stats'; $h++; // sousproduits @@ -106,27 +95,38 @@ function product_prepare_head($product) { $head[$h][0] = DOL_URL_ROOT."/product/sousproduits/fiche.php?id=".$product->id; $head[$h][1] = $langs->trans('AssociatedProducts'); - $head[$h][2] = 'subproduct'; + $head[$h][2] = 'subproduct'; $h++; } $head[$h][0] = DOL_URL_ROOT."/product/stats/facture.php?id=".$product->id; $head[$h][1] = $langs->trans('Referers'); - $head[$h][2] = 'referers'; + $head[$h][2] = 'referers'; $h++; $head[$h][0] = DOL_URL_ROOT."/product/photos.php?id=".$product->id; $head[$h][1] = $langs->trans("Photos"); - $head[$h][2] = 'photos'; + $head[$h][2] = 'photos'; $h++; $head[$h][0] = DOL_URL_ROOT.'/product/document.php?id='.$product->id; $head[$h][1] = $langs->trans('Documents'); - $head[$h][2] = 'document'; - $h++; - - return $head; -} - + $head[$h][2] = 'document'; + $h++; + + if($product->type == 0) // Si produit stockable + { + if ($conf->stock->enabled) + { + $head[$h][0] = DOL_URL_ROOT."/product/stock/product.php?id=".$product->id; + $head[$h][1] = $langs->trans("Stock"); + $head[$h][2] = 'stock'; + $h++; + } + } + + return $head; +} + ?> \ No newline at end of file diff --git a/htdocs/product.class.php b/htdocs/product.class.php index 593fc9a7f78..e6876641928 100644 --- a/htdocs/product.class.php +++ b/htdocs/product.class.php @@ -964,14 +964,14 @@ class Product /** - * \brief Charge tableau des stats commande pour le produit/service - * \param socid Id societe - * \return array Tableau des stats + * \brief Charge tableau des stats commande client pour le produit/service + * \param socid Id societe pour filtrer sur une soci�t� + * \param filtrestatut Id statut pour filtrer sur un statut + * \return array Tableau des stats */ - function load_stats_commande($socid=0) + function load_stats_commande($socid=0,$filtrestatut='') { - global $conf; - global $user; + global $conf,$user; $sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_customers, COUNT(DISTINCT c.rowid) as nb,"; $sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty"; @@ -980,12 +980,15 @@ class Product if (!$user->rights->commercial->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= " WHERE c.rowid = cd.fk_commande AND cd.fk_product = ".$this->id; if (!$user->rights->commercial->client->voir && !$socid) $sql .= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id; - //$sql.= " AND c.fk_statut != 0"; if ($socid > 0) { - $sql .= " AND c.fk_soc = $socid"; + $sql.= " AND c.fk_soc = ".$socid; } - + if ($filtrestatut) + { + $sql.= " AND c.fk_statut = ".$filtrestatut; + } + $result = $this->db->query($sql) ; if ( $result ) { @@ -1003,6 +1006,49 @@ class Product } } + /** + * \brief Charge tableau des stats commande fournisseur pour le produit/service + * \param socid Id societe pour filtrer sur une soci�t� + * \param filtrestatut Id statut pour filtrer sur un statut + * \return array Tableau des stats + */ + function load_stats_commande_fournisseur($socid=0,$filtrestatut='') + { + global $conf,$user; + + $sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_suppliers, COUNT(DISTINCT c.rowid) as nb,"; + $sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty"; + $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as cd,"; + $sql.= " ".MAIN_DB_PREFIX."commande_fournisseur as c"; + if (!$user->rights->commercial->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + $sql.= " WHERE c.rowid = cd.fk_commande AND cd.fk_product = ".$this->id; + if (!$user->rights->commercial->client->voir && !$socid) $sql .= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($socid > 0) + { + $sql.= " AND c.fk_soc = ".$socid; + } + if ($filtrestatut) + { + $sql.= " AND c.fk_statut = ".$filtrestatut; + } + + $result = $this->db->query($sql) ; + if ( $result ) + { + $obj=$this->db->fetch_object($result); + $this->stats_commande_fournisseur['suppliers']=$obj->nb_suppliers; + $this->stats_commande_fournisseur['nb']=$obj->nb; + $this->stats_commande_fournisseur['rows']=$obj->nb_rows; + $this->stats_commande_fournisseur['qty']=$obj->qty?$obj->qty:0; + return 1; + } + else + { + $this->error=$this->db->error(); + return -1; + } + } + /** * \brief Charge tableau des stats contrat pour le produit/service * \param socid Id societe @@ -1360,61 +1406,55 @@ class Product } } - - /** - * \brief Renvoie le nombre de fournisseurs - * \return int nombre de fournisseur - */ - - function count_fournisseur() - { - $sql = "SELECT fk_soc"; - $sql .= " FROM ".MAIN_DB_PREFIX."product_fournisseur as p"; - $sql .= " WHERE p.fk_product = ".$this->id; - - $result = $this->db->query($sql) ; - - if ( $result ) + + /** + * \brief Renvoie la liste des fournisseurs du produit/service + * \return array Tableau des id de fournisseur + */ + function list_suppliers() { - $num = $this->db->num_rows(); - - if ($num == 1) - { - $row = $this->db->fetch_row(); - $this->fourn_appro_open = $row[0]; - return 1; - } - else - { - return 0; - } + $list = array(); + + $sql = "SELECT fk_soc"; + $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur as p"; + $sql.= " WHERE p.fk_product = ".$this->id; + + $result = $this->db->query($sql); + if ($result) + { + $num = $this->db->num_rows($result); + $i=0; + while ($i < $num) + { + $obj = $this->db->fetch_object($result); + $list[$i] = $obj->fk_soc; + $i++; + } + } + + return $list; } - else + + /** + * \brief Saisie une commande fournisseur + * \param user Objet user de celui qui demande + * \param int <0 si ko, >0 si ok + */ + function fastappro($user) { - return 0; + include_once DOL_DOCUMENT_ROOT."/fourn/fournisseur.class.php"; + + $list = $this->list_suppliers(); + if (sizeof($list) > 0) + { + dolibarr_syslog("Product::fastappro"); + $fournisseur = new Fournisseur($this->db); + $fournisseur->fetch($this->fourn_appro_open); + + $fournisseur->ProductCommande($user, $this->id); + } + return 1; } - } - - - /** - * - * - */ - function fastappro($user) - { - include_once DOL_DOCUMENT_ROOT."/fourn/fournisseur.class.php"; - - $nbf = $this->count_fournisseur(); - if ($nbf == 1) - { - dolibarr_syslog("Product::fastappro"); - $fournisseur = new Fournisseur($this->db); - $fournisseur->fetch($this->fourn_appro_open); - - $fournisseur->ProductCommande($user, $this->id); - } - - } /** diff --git a/htdocs/product/fiche.php b/htdocs/product/fiche.php index 16552176291..488826e8d5d 100644 --- a/htdocs/product/fiche.php +++ b/htdocs/product/fiche.php @@ -353,24 +353,6 @@ if ($_POST["action"] == 'addinfacture' && $user->rights->facture->creer) exit; } -if ($_POST["action"] == 'add_fourn' && $_POST["cancel"] <> $langs->trans("Cancel")) -{ - - $product = new Product($db); - if( $product->fetch($_GET["id"]) ) - { - if ($product->add_fournisseur($user, $_POST["id_fourn"], $_POST["ref_fourn"]) > 0) - { - $action = ''; - $mesg = $langs->trans("SupplierAdded"); - } - else - { - $action = ''; - } - } -} - if ($_POST["cancel"] == $langs->trans("Cancel")) { $action = ''; @@ -500,7 +482,7 @@ if ($_GET["action"] == 'create' && $user->rights->produit->creer) } -/* +/** * Fiche produit */ if ($_GET["id"] || $_GET["ref"]) @@ -509,8 +491,15 @@ if ($_GET["id"] || $_GET["ref"]) if ($_GET["action"] <> 're-edit') { $product = new Product($db); - if ($_GET["ref"]) $result = $product->fetch('',$_GET["ref"]); - if ($_GET["id"]) $result = $product->fetch($_GET["id"]); + if ($_GET["ref"]) + { + $result = $product->fetch('',$_GET["ref"]); + $_GET["id"] = $product->id; + } + elseif ($_GET["id"]) + { + $result = $product->fetch($_GET["id"]); + } llxHeader("","",$langs->trans("CardProduct".$product->type)); } @@ -600,7 +589,7 @@ if ($_GET["id"] || $_GET["ref"]) // Stock if ($product->type == 0 && $conf->stock->enabled) { - print '<tr><td><a href="stock/product.php?id='.$product->id.'">'.$langs->trans("Stock").'</a></td>'; + print '<tr><td>'.$langs->trans("Stock").'</td>'; if ($product->no_stock) { print "<td>Pas de d�finition de stock pour ce produit"; @@ -762,12 +751,6 @@ print "\n<div class=\"tabsAction\">\n"; if ($_GET["action"] == '') { - if ($product->type == 0 && $user->rights->produit->commander && $num_fournisseur == 1) - { - print '<a class="tabAction" href="fiche.php?action=fastappro&id='.$product->id.'">'; - print $langs->trans("Order").'</a>'; - } - if ( $user->rights->produit->creer) { print '<a class="tabAction" href="fiche.php?action=edit&id='.$product->id.'">'.$langs->trans("Edit").'</a>'; @@ -775,9 +758,24 @@ if ($_GET["action"] == '') print '<a class="tabAction" href="fiche.php?action=clone&id='.$product->id.'">'.$langs->trans("CreateCopy").'</a>'; } - $prod_use = $product->verif_prod_use($product->id); +/* + if ($product->type == 0 && $user->rights->commande->creer) + { + $langs->load('orders'); + print '<a class="tabAction" href="fiche.php?action=fastappro&id='.$product->id.'">'; + print $langs->trans("CreateCustomerOrder").'</a>'; + } + + if ($product->type == 0 && $user->rights->fournisseur->commande->creer) + { + $langs->load('orders'); + print '<a class="tabAction" href="fiche.php?action=fastappro&id='.$product->id.'">'; + print $langs->trans("CreateSupplierOrder").'</a>'; + } +*/ - if ($user->rights->produit->supprimer && $prod_use == 0) + $product_is_used = $product->verif_prod_use($product->id); + if ($user->rights->produit->supprimer && ! $product_is_used) { print '<a class="butActionDelete" href="fiche.php?action=delete&id='.$product->id.'">'.$langs->trans("Delete").'</a>'; } diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index 078b7369520..454cd4a1813 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -40,9 +40,9 @@ $langs->load("bills"); $user->getrights('produit'); $mesg = ''; -if (!$user->rights->produit->lire) +if (! $user->rights->produit->lire || ! $product->type == 0 || ! $conf->stock->enabled) { - accessforbidden(); + accessforbidden(); } @@ -142,32 +142,54 @@ if ($_GET["id"] || $_GET["ref"]) print $product->getLibStatut(2); print '</td></tr>'; - // TVA - $langs->load("bills"); - print '<tr><td>'.$langs->trans("VATRate").'</td><td>'.$product->tva_tx.'%</td></tr>'; - // Stock - if ($product->type == 0 && $conf->stock->enabled) + print '<tr><td>'.$langs->trans("TotalStock").'</td>'; + if ($product->no_stock) + { + print "<td>Pas de d�finition de stock pour ce produit"; + } + else { - print '<tr><td>'.$langs->trans("TotalStock").'</td>'; - if ($product->no_stock) + if ($product->stock_reel <= $product->seuil_stock_alerte) { - print "<td>Pas de d�finition de stock pour ce produit"; + print '<td class="alerte">'.$product->stock_reel.' Seuil : '.$product->seuil_stock_alerte; } else { - if ($product->stock_reel <= $product->seuil_stock_alerte) - { - print '<td class="alerte">'.$product->stock_reel.' Seuil : '.$product->seuil_stock_alerte; - } - else - { - print "<td>".$product->stock_reel; - } + print "<td>".$product->stock_reel; } - print '</td></tr>'; } + print '</td></tr>'; + + // Nbre de commande clients en cours + if ($conf->commande->enabled) + { + $result=$product->load_stats_commande(0,'1'); + if ($result < 0) dolibarr_print_error($db,$product->error); + print '<tr><td>'.$langs->trans("CustomersOrders").'</td>'; + print '<td>'; + print $product->stats_commande['qty']; + $result=$product->load_stats_commande(0,'0'); + if ($result < 0) dolibarr_print_error($db,$product->error); + print ' ('.$langs->trans("Draft").': '.$product->stats_commande['qty'].')'; + print '</td></tr>'; + } + + // Nbre de commande fournisseurs en cours + if ($conf->fournisseur->enabled) + { + $result=$product->load_stats_commande_fournisseur(0,'1'); + if ($result < 0) dolibarr_print_error($db,$product->error); + print '<tr><td>'.$langs->trans("SuppliersOrders").'</td>'; + print '<td>'; + print $product->stats_commande_fournisseur['qty']; + $result=$product->load_stats_commande_fournisseur(0,'0'); + if ($result < 0) dolibarr_print_error($db,$product->error); + print ' ('.$langs->trans("Draft").': '.$product->stats_commande_fournisseur['qty'].')'; + print '</td></tr>'; + } + print "</table>"; } -- GitLab