From 16b4e680f7a1decf24100258f1c5f1d6d1f1a7a3 Mon Sep 17 00:00:00 2001 From: futurehousestore Date: Sat, 22 Feb 2020 02:45:58 +0000 Subject: [PATCH] Add Products/Services by popularity in Orders --- htdocs/langs/en_US/other.lang | 6 +- htdocs/product/popucom.php | 217 ++++++++++++++++++++++++++++++++++ htdocs/product/popuprop.php | 9 +- htdocs/product/stats/card.php | 7 +- 4 files changed, 235 insertions(+), 4 deletions(-) create mode 100644 htdocs/product/popucom.php diff --git a/htdocs/langs/en_US/other.lang b/htdocs/langs/en_US/other.lang index 59950289236..b32dd7ed07e 100644 --- a/htdocs/langs/en_US/other.lang +++ b/htdocs/langs/en_US/other.lang @@ -31,7 +31,7 @@ NextYearOfInvoice=Following year of invoice date DateNextInvoiceBeforeGen=Date of next invoice (before generation) DateNextInvoiceAfterGen=Date of next invoice (after generation) GraphInBarsAreLimitedTo3Measures=Grapics are limited to 3 measures in 'Bars' mode. The mode 'Lines' was automatically selected instead. -OnlyOneFieldForXAxisIsPossible=Only 1 field is currently possible as X-Axis. Only the first selected field has been selected. +OnlyOneFieldForXAxisIsPossible=Only 1 field is currently possible as X-Axis. Only the first selected field has been selected. AtLeastOneMeasureIsRequired=At least 1 field for measure is required AtLeastOneXAxisIsRequired=At least 1 field for X-Axis is required @@ -278,3 +278,7 @@ LinesToImport=Lines to import MemoryUsage=Memory usage RequestDuration=Duration of request +PopuProp=Products/Services by popularity in Proposals +PopuCom=Products/Services by popularity in Orders +ProductStatistics=Products/Services Statistics +NbOfQtyInOrders=Qty in orders diff --git a/htdocs/product/popucom.php b/htdocs/product/popucom.php new file mode 100644 index 00000000000..41f14e25176 --- /dev/null +++ b/htdocs/product/popucom.php @@ -0,0 +1,217 @@ + + * Copyright (C) 2004-2005 Laurent Destailleur + * Copyright (C) 2004 Eric Seigne + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2014 Marcos García + * Copyright (C) 2015 Jean-François Ferry + * + * 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 3 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, see . + */ + +/** + * \file htdocs/product/popucom.php + * \ingroup commande, produit + * \brief Liste des produits/services par popularite + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; + +// Load translation files required by the page +//Required to translate NbOfCommande +$langs->load('commande'); + +$type=GETPOST("type", "int"); + +// Security check +if (! empty($user->socid)) $socid=$user->socid; +$result=restrictedArea($user, 'produit|service'); + +$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; +$sortfield = GETPOST("sortfield", 'alpha'); +$sortorder = GETPOST("sortorder", 'alpha'); +$page = GETPOST("page", 'int'); +if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +if (! $sortfield) $sortfield="c"; +if (! $sortorder) $sortorder="DESC"; +$offset = $limit * $page ; +$pageprev = $page - 1; +$pagenext = $page + 1; + + +$staticproduct=new Product($db); + + +/* + * View + */ + +$helpurl=''; +if ($type == '0') +{ + $helpurl='EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos'; +} +elseif ($type == '1') +{ + $helpurl='EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios'; +} +else +{ + $helpurl='EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios'; +} +$title=$langs->trans("Statistics"); + + +llxHeader('', $title, $helpurl); + +print load_fiche_titre($title, $mesg, 'products'); + + +$param = ''; +$title = $langs->trans("ListProductServiceByPopularity"); +if ((string) $type == '1') { + $title = $langs->trans("ListServiceByPopularity"); +} +if ((string) $type == '0') { + $title = $langs->trans("ListProductByPopularity"); +} + +if ($type != '') $param .= '&type='.$type; + + +$h=0; +$head = array(); + +$head[$h][0] = DOL_URL_ROOT.'/product/stats/card.php?id=all'; +$head[$h][1] = $langs->trans("Chart"); +$head[$h][2] = 'chart'; +$h++; + +$head[$h][0] = DOL_URL_ROOT.'/product/popuprop.php'; +$head[$h][1] = $langs->trans("PopuProp"); +$head[$h][2] = 'popularityprop'; +$h++; + +$head[$h][0] = DOL_URL_ROOT.'/product/popucom.php'; +$head[$h][1] = $langs->trans("PopuCom"); +$head[$h][2] = 'popularitycommande'; +$h++; + +dol_fiche_head($head, 'popularitycommande', $langs->trans("Statistics"), -1); + + +// Array of liens to show +$infoprod=array(); + + +// Add lines for commande +$sql = "SELECT p.rowid, p.label, p.ref, p.fk_product_type as type, SUM(pd.qty) as c"; +$sql.= " FROM ".MAIN_DB_PREFIX."commandedet as pd"; +$sql.= ", ".MAIN_DB_PREFIX."product as p"; +$sql.= ' WHERE p.entity IN ('.getEntity('product').')'; +$sql.= " AND p.rowid = pd.fk_product"; +if ($type !== '') { + $sql.= " AND fk_product_type = ".$type; +} +$sql.= " GROUP BY p.rowid, p.label, p.ref, p.fk_product_type"; + +$result=$db->query($sql); +if ($result) +{ + $totalnboflines = $db->num_rows($result); +} + +$sql.= $db->order($sortfield, $sortorder); +$sql.= $db->plimit($limit+1, $offset); + +$resql=$db->query($sql); +if ($resql) +{ + $num = $db->num_rows($resql); + $i = 0; + + while ($i < $num) + { + $objp = $db->fetch_object($resql); + + $infoprod[$objp->rowid]=array('type'=>$objp->type, 'ref'=>$objp->ref, 'label'=>$objp->label); + $infoprod[$objp->rowid]['nblinecommande']=$objp->c; + + $i++; + } + $db->free($resql); +} +else +{ + dol_print_error($db); +} +//var_dump($infoprod); + + +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, "", $num, $totalnboflines, ''); + +print ''; + +print ""; +print_liste_field_titre('Ref', $_SERVER["PHP_SELF"], 'p.ref', '', $param, '', $sortfield, $sortorder); +print_liste_field_titre('Type', $_SERVER["PHP_SELF"], 'p.fk_product_type', '', $param, '', $sortfield, $sortorder); +print_liste_field_titre('Label', $_SERVER["PHP_SELF"], 'p.label', '', $param, '', $sortfield, $sortorder); +print_liste_field_titre('NbOfQtyInOrders', $_SERVER["PHP_SELF"], 'c', '', $param, '', $sortfield, $sortorder, 'right '); +print "\n"; + +foreach($infoprod as $prodid => $vals) +{ + // Multilangs + if (! empty($conf->global->MAIN_MULTILANGS)) // si l'option est active + { + $sql = "SELECT label"; + $sql.= " FROM ".MAIN_DB_PREFIX."product_lang"; + $sql.= " WHERE fk_product=".$prodid; + $sql.= " AND lang='". $langs->getDefaultLang() ."'"; + $sql.= " LIMIT 1"; + + $resultp = $db->query($sql); + if ($resultp) + { + $objtp = $db->fetch_object($resultp); + if (! empty($objtp->label)) $vals['label'] = $objtp->label; + } + } + + print ""; + print ''; + print ''; + print ''; + print ''; + print "\n"; + $i++; +} + +print "
'; + if ($vals['type'] == 1) print img_object($langs->trans("ShowService"), "service"); + else print img_object($langs->trans("ShowProduct"), "product"); + print " "; + print $vals['ref'].''; + if ($vals['type'] == 1) print $langs->trans("Service"); + else print $langs->trans("Product"); + print ''.$vals['label'].''.$vals['nblinecommande'].'
"; + + + +dol_fiche_end(); + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/product/popuprop.php b/htdocs/product/popuprop.php index 95bf2b965a2..4df11c7d755 100644 --- a/htdocs/product/popuprop.php +++ b/htdocs/product/popuprop.php @@ -99,11 +99,16 @@ $head[$h][1] = $langs->trans("Chart"); $head[$h][2] = 'chart'; $h++; -$head[$h][0] = $_SERVER['PHP_SELF']; -$head[$h][1] = $title; +$head[$h][0] = DOL_URL_ROOT.'/product/popuprop.php'; +$head[$h][1] = $langs->trans("PopuProp"); $head[$h][2] = 'popularityprop'; $h++; +$head[$h][0] = DOL_URL_ROOT.'/product/popucom.php'; +$head[$h][1] = $langs->trans("PopuCom"); +$head[$h][2] = 'popularitycommande'; +$h++; + dol_fiche_head($head, 'popularityprop', $langs->trans("Statistics"), -1); diff --git a/htdocs/product/stats/card.php b/htdocs/product/stats/card.php index 24387ef8b73..c35d8401a8a 100644 --- a/htdocs/product/stats/card.php +++ b/htdocs/product/stats/card.php @@ -161,10 +161,15 @@ if (empty($id) & empty($ref)) } $head[$h][0] = DOL_URL_ROOT.'/product/popuprop.php'.($type != '' ? '?type='.$type : ''); - $head[$h][1] = $title; + $head[$h][1] = $langs->trans("PopuProp"); $head[$h][2] = 'popularityprop'; $h++; + $head[$h][0] = DOL_URL_ROOT.'/product/popucom.php'.($type != '' ? '?type='.$type : ''); + $head[$h][1] = $langs->trans("PopuCom"); + $head[$h][2] = 'popularitycommande'; + $h++; + dol_fiche_head($head, 'chart', $langs->trans("Statistics"), -1); }