* Copyright (c) 2004-2010 Laurent Destailleur * Copyright (C) 2005-2010 Regis Houssin * Copyright (C) 2005 Eric Seigne * * 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. */ /** * \file htdocs/product/stats/fiche.php * \ingroup product * \brief Page des stats produits * \version $Id$ */ require("../../main.inc.php"); require_once(DOL_DOCUMENT_ROOT."/lib/product.lib.php"); require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/class/dolgraph.class.php"); $langs->load("companies"); $langs->load("products"); $langs->load("bills"); $langs->load("other"); $mode=isset($_GET["mode"])?$_GET["mode"]:'byunit'; // Security check if (isset($_GET["id"]) || isset($_GET["ref"])) { $id = isset($_GET["id"])?$_GET["id"]:(isset($_GET["ref"])?$_GET["ref"]:''); } $fieldid = isset($_GET["ref"])?'ref':'rowid'; if ($user->societe_id) $socid=$user->societe_id; $result=restrictedArea($user,'produit|service',$id,'product','','',$fieldid); $mesg = ''; /* * View */ $html = new Form($db); if ($_GET["id"] || $_GET["ref"]) { $product = new Product($db); if ($_GET["ref"]) $result = $product->fetch('',$_GET["ref"]); if ($_GET["id"]) $result = $product->fetch($_GET["id"]); llxHeader("","",$langs->trans("CardProduct".$product->type)); if ($result) { $head=product_prepare_head($product, $user); $titre=$langs->trans("CardProduct".$product->type); $picto=($product->type==1?'service':'product'); dol_fiche_head($head, 'stats', $titre, 0, $picto); print ''; // Reference print ''; print ''; print ''; // Libelle print ''; // Statut print ''; // Graphs additionels generes pas le script product-graph.php $year = strftime('%Y',time()); $file = get_exdir($product->id, 3) . "ventes-".$year."-".$product->id.".png"; if (file_exists (DOL_DATA_ROOT.'/product/temp/'.$file) ) { print ''; } print '
'.$langs->trans("Ref").''; print $html->showrefnav($product,'ref','',1,'ref'); print '
'.$langs->trans("Label").''.$product->libelle.'
'.$langs->trans("Status").''; print $product->getLibStatut(2); print '
Ventes'; $url=DOL_URL_ROOT.'/viewimage.php?modulepart=graph_product&file='.$file; print 'Ventes'; $file = get_exdir($product->id, 3) . "ventes-".$product->id.".png"; $url=DOL_URL_ROOT.'/viewimage.php?modulepart=graph_product&file='.$file; print 'Ventes'; print '
'; print ''; // Choice of stats if ($mode == 'bynumber') print ''; else print img_picto('','tick').' '; print $langs->trans("StatsByNumberOfUnits"); if ($mode == 'bynumber') print ''; print '       '; if ($mode == 'byunit') print ''; else print img_picto('','tick').' '; print $langs->trans("StatsByNumberOfEntities"); if ($mode == 'byunit') print ''; print '

'; print ''; // Generation des graphs $WIDTH=380; $HEIGHT=160; $dir = (!empty($conf->produit->dir_temp)?$conf->produit->dir_temp:$conf->service->dir_temp); if (! file_exists($dir.'/'.$product->id)) { if (create_exdir($dir.'/'.$product->id) < 0) { $mesg = $langs->trans("ErrorCanNotCreateDir",$dir); } } $graphfiles=array( 'propal' =>array('modulepart'=>'productstats_proposals', 'file' => $product->id.'/propal12m.png', 'label' => ($mode=='byunit'?$langs->trans("NumberOfUnitsProposals"):$langs->trans("NumberOfProposals"))), 'orders' =>array('modulepart'=>'productstats_orders', 'file' => $product->id.'/orders12m.png', 'label' => ($mode=='byunit'?$langs->trans("NumberOfUnitsCustomerOrders"):$langs->trans("NumberOfCustomerOrders"))), 'invoices' =>array('modulepart'=>'productstats_invoices', 'file' => $product->id.'/invoices12m.png', 'label' => ($mode=='byunit'?$langs->trans("NumberOfUnitsCustomerInvoices"):$langs->trans("NumberOfCustomerInvoices"))), 'invoicessuppliers'=>array('modulepart'=>'productstats_invoicessuppliers', 'file' => $product->id.'/invoicessuppliers12m.png', 'label' => ($mode=='byunit'?$langs->trans("NumberOfUnitsSupplierInvoices"):$langs->trans("NumberOfSupplierInvoices"))), // 'orderssuppliers' =>array('modulepart'=>'productstats_orderssuppliers', 'file' => $product->id.'/orderssuppliers12m.png', 'label' => $langs->trans("Nombre commande fournisseurs sur les 12 derniers mois")), // 'contracts' =>array('modulepart'=>'productstats_contracts', 'file' => $product->id.'/contracts12m.png', 'label' => $langs->trans("Nombre contrats sur les 12 derniers mois")), ); $px = new DolGraph(); $mesg = $px->isGraphKo(); if (! $mesg) { foreach($graphfiles as $key => $val) { if (! $graphfiles[$key]['file']) continue; $graph_data = array(); // TODO Test si deja existant et recent, on ne genere pas if ($key == 'propal') $graph_data = $product->get_nb_propal($socid,$mode); if ($key == 'orders') $graph_data = $product->get_nb_order($socid,$mode); if ($key == 'invoices') $graph_data = $product->get_nb_vente($socid,$mode); if ($key == 'invoicessuppliers') $graph_data = $product->get_nb_achat($socid,$mode); if (is_array($graph_data)) { $px->SetData($graph_data); $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); $px->SetWidth($WIDTH); $px->SetHeight($HEIGHT); $px->SetHorizTickIncrement(1); $px->SetPrecisionY(0); $px->SetShading(3); //print 'x '.$key.' '.$graphfiles[$key]['file']; $px->draw($dir."/".$graphfiles[$key]['file']); } else { dol_print_error($db,'Error for calculating graph on key='.$key.' - '.$product->error); } } } $mesg = $langs->trans("ChartGenerated"); // Affichage graphs $i=0; foreach($graphfiles as $key => $val) { if (! $graphfiles[$key]['file']) continue; if ($graphfiles == 'propal' && ! $user->right->propale->lire) continue; if ($graphfiles == 'order' && ! $user->right->commande->lire) continue; if ($graphfiles == 'invoices' && ! $user->right->facture->lire) continue; if ($graphfiles == 'invoices_suppliers' && ! $user->right->fournisseur->facture->lire) continue; if ($i % 2 == 0) print ''; // Show graph print ''; if ($i % 2 == 1) print ''; $i++; } if ($i % 2 == 1) print ''; print '
'; print ''; // Label print ''; // Image print ''; // Date generation print ''; if (file_exists($dir."/".$graphfiles[$key]['file']) && filemtime($dir."/".$graphfiles[$key]['file']) && ! $px->isGraphKo()) { print ''; } else { print ''; } print ''; print ''; print '
'; print $graphfiles[$key]['label']; print '
'; //print $graphfiles[$key]['modulepart']."x".urlencode($graphfiles[$key]['file']); $url=DOL_URL_ROOT.'/viewimage.php?modulepart='.$graphfiles[$key]['modulepart'].'&file='.urlencode($graphfiles[$key]['file']); //print $url; print ''.$graphfiles[$key]['label'].''; print '
'.$langs->trans("GeneratedOn",dol_print_date(filemtime($dir."/".$graphfiles[$key]['file']),"dayhour")).''.($mesg?''.$mesg.'':$langs->trans("ChartNotGenerated")).''.img_picto($langs->trans("ReCalculate"),'refresh').'
'; print '
 
'; print '
'; print '
'; } } else { dol_print_error(); } $db->close(); llxFooter('$Date$ - $Revision$'); ?>