diff --git a/htdocs/comm/propal/stats/month.php b/htdocs/comm/propal/stats/month.php index e1f9cbc5fe6..b0b6076a94d 100644 --- a/htdocs/comm/propal/stats/month.php +++ b/htdocs/comm/propal/stats/month.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2006 Laurent Destailleur + * Copyright (C) 2004-2012 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 @@ -123,7 +123,7 @@ $data = array(); for ($i = 1 ; $i < 13 ; $i++) { - $data[$i-1] = array(ucfirst(substr(dol_print_date(dol_mktime(12,0,0,$i,1,$year),"%b"),0,3)), $res[$i]); + $data[$i-1] = array(ucfirst(dol_substr(dol_print_date(dol_mktime(12,0,0,$i,1,$year),"%b"),0,3)), $res[$i]); } if (!$user->rights->societe->client->voir || $user->societe_id) @@ -171,7 +171,8 @@ if ($mesg) { print $mesg; } else { print $px3->show(); } print ''; -$db->close(); llxFooter(); + +$db->close(); ?> diff --git a/htdocs/commande/stats/month.php b/htdocs/commande/stats/month.php index de2c595e048..402bb54d6db 100644 --- a/htdocs/commande/stats/month.php +++ b/htdocs/commande/stats/month.php @@ -139,7 +139,7 @@ $data = array(); for ($i = 1 ; $i < 13 ; $i++) { - $data[$i-1] = array(ucfirst(substr(dol_print_date(dol_mktime(12,0,0,$i,1,$year),"%b"),0,3)), $res[$i]); + $data[$i-1] = array(ucfirst(dol_substr(dol_print_date(dol_mktime(12,0,0,$i,1,$year),"%b"),0,3)), $res[$i]); } if (!$user->rights->societe->client->voir || $user->societe_id) diff --git a/htdocs/compta/bank/graph.php b/htdocs/compta/bank/graph.php index fa36854c1a8..a672650a170 100644 --- a/htdocs/compta/bank/graph.php +++ b/htdocs/compta/bank/graph.php @@ -241,7 +241,7 @@ else $px1->SetTitle($title); $px1->SetWidth($width); $px1->SetHeight($height); - $px1->SetType('lines'); + $px1->SetType(array('lines','lines')); $px1->setBgColor('onglet'); $px1->setBgColorGrid(array(255,255,255)); $px1->SetHorizTickIncrement(1); @@ -371,7 +371,7 @@ else $px2->SetTitle($title); $px2->SetWidth($width); $px2->SetHeight($height); - $px2->SetType('lines'); + $px2->SetType(array('lines','lines')); $px2->setBgColor('onglet'); $px2->setBgColorGrid(array(255,255,255)); $px2->SetHideXGrid(true); @@ -480,7 +480,7 @@ else $px3->SetTitle($title); $px3->SetWidth($width); $px3->SetHeight($height); - $px3->SetType('lines'); + $px3->SetType(array('lines','lines')); $px3->setBgColor('onglet'); $px3->setBgColorGrid(array(255,255,255)); $px3->SetPrecisionY(0); @@ -607,7 +607,7 @@ else $px4->SetTitle($title); $px4->SetWidth($width); $px4->SetHeight($height); - $px4->SetType('bars'); + $px4->SetType(array('bars','bars')); $px4->SetShading(3); $px4->setBgColor('onglet'); $px4->setBgColorGrid(array(255,255,255)); @@ -716,7 +716,7 @@ else $px5->SetTitle($title); $px5->SetWidth($width); $px5->SetHeight($height); - $px5->SetType('bars'); + $px5->SetType(array('bars','bars')); $px5->SetShading(3); $px5->setBgColor('onglet'); $px5->setBgColorGrid(array(255,255,255)); @@ -862,7 +862,7 @@ print ''; print "\n\n"; -$db->close(); - llxFooter(); + +$db->close(); ?> diff --git a/htdocs/compta/deplacement/stats/month.php b/htdocs/compta/deplacement/stats/month.php index 54b4d3b83af..e7b15624bb8 100755 --- a/htdocs/compta/deplacement/stats/month.php +++ b/htdocs/compta/deplacement/stats/month.php @@ -115,7 +115,7 @@ $data = array(); for ($i = 1 ; $i < 13 ; $i++) { - $data[$i-1] = array(ucfirst(substr(dol_print_date(dol_mktime(12,0,0,$i,1,$year),"%b"),0,3)), $res[$i]); + $data[$i-1] = array(ucfirst(dol_substr(dol_print_date(dol_mktime(12,0,0,$i,1,$year),"%b"),0,3)), $res[$i]); } $filename_avg = $dir."/tripsexpensesaverage-".$year.".png"; diff --git a/htdocs/compta/facture/stats/month.php b/htdocs/compta/facture/stats/month.php index 89f4472d6e1..1281152c002 100644 --- a/htdocs/compta/facture/stats/month.php +++ b/htdocs/compta/facture/stats/month.php @@ -126,7 +126,7 @@ $data = array(); for ($i = 1 ; $i < 13 ; $i++) { - $data[$i-1] = array(ucfirst(substr(dol_print_date(dol_mktime(12,0,0,$i,1,$year),"%b"),0,3)), $res[$i]); + $data[$i-1] = array(ucfirst(dol_substr(dol_print_date(dol_mktime(12,0,0,$i,1,$year),"%b"),0,3)), $res[$i]); } $filename_avg = $dir."/invoicesaverage-".$year.".png"; diff --git a/htdocs/core/class/dolgraph.class.php b/htdocs/core/class/dolgraph.class.php index c14cbeec790..8381f4361d7 100644 --- a/htdocs/core/class/dolgraph.class.php +++ b/htdocs/core/class/dolgraph.class.php @@ -1,6 +1,6 @@ - * Copyright (c) 2004-2011 Laurent Destailleur + * Copyright (c) 2004-2012 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 @@ -22,17 +22,18 @@ * \brief File for class to generate graph * * Usage: - * $graph_data = array(array('labelA',yA),array('labelB',yB)); - * array(array('labelA',yA1,...,yAn),array('labelB',yB1,...yBn)); + * $graph_data = array(array('labelxA',yA),array('labelxB',yB)); + * $graph_data = array(array('labelxA',yA1,...,yAn),array('labelxB',yB1,...yBn)); // when there is n value to show for each x + * $legend = array("Val1",...,"Valn"); // list of n series name * $px = new DolGraph(); * $px->SetData($graph_data); * $px->SetMaxValue($px->GetCeilMaxValue()); * $px->SetMinValue($px->GetFloorMinValue()); * $px->SetTitle("title"); - * $px->SetLegend(array("Val1","Val2")); + * $px->SetLegend($legend); * $px->SetWidth(width); * $px->SetHeight(height); - * $px->draw("file.png"); + * $px->draw("file.png","/viewdownload?..."); */ @@ -42,11 +43,12 @@ */ class DolGraph { - //! Type du graphique - var $type='bars'; // bars, lines, ... - var $mode='side'; // Mode bars graph: side, depth + //! Type of graph + var $type=array('bars'); // bars, lines, ... + var $mode='side'; // Mode bars graph: side, depth + private $_library='jflot'; // Graphic library to use (jflot, artichow) - //! Tableau de donnees + //! Array of data var $data; // array(array('abs1',valA1,valB1), array('abs2',valA2,valB2), ...) var $title; var $width=380; @@ -70,11 +72,9 @@ class DolGraph var $graph; // Objet Graph (Artichow, Phplot...) var $error; - var $library='artichow'; // Graphic library to use - var $bordercolor; // array(R,G,B) var $bgcolor; // array(R,G,B) - var $bgcolorgrid; // array(R,G,B) + var $bgcolorgrid=array(255,255,255); // array(R,G,B) var $datacolor; // array(array(R,G,B),...) private $_stringtoshow; // To store string to output graph into HTML page @@ -88,19 +88,23 @@ class DolGraph global $conf; global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; - // Test si module GD present - $modules_list = get_loaded_extensions(); - $isgdinstalled=0; - foreach ($modules_list as $module) + // To use old feature + if ($conf->global->MAIN_GRAPH_LIBRARY == 'artichow') { - if ($module == 'gd') { - $isgdinstalled=1; + $this->_library='artichow'; + + // Test if module GD present + $modules_list = get_loaded_extensions(); + $isgdinstalled=0; + foreach ($modules_list as $module) + { + if ($module == 'gd') $isgdinstalled=1; + } + if (! $isgdinstalled) + { + $this->error="Error: PHP GD module is not available. It is required to build graphics."; + return -1; } - } - if (! $isgdinstalled) - { - $this->error="Error: PHP GD module is not available. It is required to build graphics."; - return -1; } $this->bordercolor = array(235,235,224); @@ -234,12 +238,13 @@ class DolGraph function SetData($data) { $this->data = $data; + //var_dump($this->data); } /** * Set type * - * @param string $type Type + * @param array $type Array with type for each serie * @return void */ function SetType($type) @@ -538,8 +543,8 @@ class DolGraph dol_syslog(get_class($this)."::draw ".$this->error, LOG_ERR); return -1; } - $call = "draw_".$this->library; - $this->$call($file,$fileurl); + $call = "draw_".$this->_library; + call_user_func_array(array($this,$call), array($file,$fileurl)); } @@ -554,7 +559,7 @@ class DolGraph { global $artichow_defaultfont; - dol_syslog(get_class($this)."::draw_artichow this->type=".$this->type); + dol_syslog(get_class($this)."::draw_artichow this->type=".join(',',$this->type)); if (! defined('SHADOW_RIGHT_TOP')) define('SHADOW_RIGHT_TOP',3); if (! defined('LEGEND_BACKGROUND')) define('LEGEND_BACKGROUND',2); @@ -562,8 +567,8 @@ class DolGraph // Create graph $classname=''; - if ($this->type == 'bars') $classname='BarPlot'; - if ($this->type == 'lines') $classname='LinePlot'; + if ($this->type[0] == 'bars') $classname='BarPlot'; // Only first type of type is supported by artichow + if ($this->type[0] == 'lines') $classname='LinePlot'; include_once(ARTICHOW_PATH.$classname.".class.php"); // Definition de couleurs @@ -614,17 +619,16 @@ class DolGraph while ($i < $nblot) { - $j=0; + $x=0; $values=array(); foreach($this->data as $key => $valarray) { - $legends[$j] = $valarray[0]; - $values[$j] = $valarray[$i+1]; - $j++; + $legends[$x] = $valarray[0]; + $values[$x] = $valarray[$i+1]; + $x++; } - // Artichow ne gere pas les valeurs inconnues - // Donc si inconnu, on la fixe a null + // We fix unknown values to null $newvalues=array(); foreach($values as $val) { @@ -632,7 +636,7 @@ class DolGraph } - if ($this->type == 'bars') + if ($this->type[0] == 'bars') { //print "Lot de donnees $i
"; //print_r($values); @@ -668,7 +672,7 @@ class DolGraph $plot->SetYMin($this->MinValue); } - if ($this->type == 'lines') + if ($this->type[0] == 'lines') { $color=new Color($this->datacolor[$i][0],$this->datacolor[$i][1],$this->datacolor[$i][2],20); $colorbis=new Color(min($this->datacolor[$i][0]+20,255),min($this->datacolor[$i][1]+20,255),min($this->datacolor[$i][2]+20,255),60); @@ -699,8 +703,8 @@ class DolGraph // solve a bug in Artichow with UTF8 if (count($this->Legend)) { - if ($this->type == 'bars') $group->legend->add($plot, $this->Legend[$i], LEGEND_BACKGROUND); - if ($this->type == 'lines') $group->legend->add($plot, $this->Legend[$i], LEGEND_LINE); + if ($this->type[0] == 'bars') $group->legend->add($plot, $this->Legend[$i], LEGEND_BACKGROUND); + if ($this->type[0] == 'lines') $group->legend->add($plot, $this->Legend[$i], LEGEND_LINE); } $group->add($plot); @@ -718,10 +722,169 @@ class DolGraph // Generate file $graph->draw($file); - $this->_stringtoshow=''.dol_escape_htmltag($this->title?$this->title:$this->YLabel).''; + $this->_stringtoshow=''.dol_escape_htmltag($this->title?$this->title:$this->YLabel).''; } + /** + * Build a graph onto disk using JFlot library + * $graph_data = array(array('labelxA',yA),array('labelxB',yB)); + * $graph_data = array(array('labelxA',yA1,...,yAn),array('labelxB',yB1,...yBn)); // when there is n value to show for each x + * $legend = array("Val1",...,"Valn"); // list of n series name + * + * @param string $file Image file name to use if we save onto disk + * @param string $fileurl Url path to show image if saved onto disk + * @return void + */ + private function draw_jflot($file,$fileurl) + { + global $artichow_defaultfont; + + dol_syslog(get_class($this)."::draw_jflot this->type=".join(',',$this->type)); + + // On boucle sur chaque lot de donnees + $legends=array(); + $nblot=count($this->data[0])-1; // -1 to remove legend + $firstlot=0; + if ($nblot > 2) $firstlot = ($nblot - 2); // We limit nblot to 2 because jflot can't manage more than 2 bars on same x + + $i=$firstlot; + $serie=array(); + while ($i < $nblot) + { + $x=0; + $values=array(); + foreach($this->data as $key => $valarray) + { + $legends[$x] = $valarray[0]; + $values[$x] = $valarray[$i+1]; + $x++; + } + + // We fix unknown values to null + $newvalues=array(); + foreach($values as $val) + { + $newvalues[]=(is_numeric($val) ? $val : null); + } + + //print "Lot de donnees $i
"; + //print_r($values); + //print '
'; + $serie[$i]="var d".$i." = [];\n"; + $x=0; + foreach($newvalues as $key => $val) + { + if (isset($val)) $serie[$i].="d".$i.".push([".$x.", ".$val."]);\n"; + $x++; + } + + $i++; + } + + $tag=dol_escape_htmltag(dol_string_unaccent(dol_string_nospecial(basename($file),'_',array('-','.')))); + + $this->_stringtoshow =''."\n"; + $this->_stringtoshow.='
'.$this->title.'

'; + $this->_stringtoshow.='
'."\n"; + $this->_stringtoshow.=''."\n"; + } + + + /** * Output HTML string to show graph * diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index 43497a76c79..94164eede19 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -1,6 +1,6 @@ - * Copyright (c) 2008-2011 Laurent Destailleur + * Copyright (c) 2008-2012 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 @@ -115,7 +115,7 @@ abstract class Stats { $result = array(); - dol_syslog("Stats::_getNbByYear sql=".$sql); + dol_syslog(get_class($this)."::_getNbByYear sql=".$sql); $resql=$this->db->query($sql); if ($resql) { @@ -145,7 +145,7 @@ abstract class Stats { $result = array(); - dol_syslog("Stats::_getAllByYear sql=".$sql); + dol_syslog(get_class($this)."::_getAllByYear sql=".$sql); $resql=$this->db->query($sql); if ($resql) { @@ -179,7 +179,7 @@ abstract class Stats { $result = array(); - dol_syslog("Stats::_getNbByMonth sql=".$sql); + dol_syslog(get_class($this)."::_getNbByMonth sql=".$sql); $resql=$this->db->query($sql); if ($resql) { @@ -227,7 +227,7 @@ abstract class Stats { $result = array(); - dol_syslog("Stats::_getAmountByMonth sql=".$sql); + dol_syslog(get_class($this)."::_getAmountByMonth sql=".$sql); $resql=$this->db->query($sql); if ($resql) @@ -272,7 +272,7 @@ abstract class Stats { $result = array(); - dol_syslog("Stats::_getAverageByMonth sql=".$sql); + dol_syslog(get_class($this)."::_getAverageByMonth sql=".$sql); $resql=$this->db->query($sql); if ($resql) { diff --git a/scripts/banks/build-graph-sold-example.php b/scripts/banks/build-graph-sold-example.php deleted file mode 100644 index 8234510c1ac..00000000000 --- a/scripts/banks/build-graph-sold-example.php +++ /dev/null @@ -1,508 +0,0 @@ -#!/usr/bin/php - - * Copyright (C) 2006-2009 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, see . - */ - -/** - * \file scripts/banks/build-graph-sold-example.php - * \ingroup banque - * \brief Script to build graph of sold for each bank account - * \deprecated Ce script n'est plus utilise car les graphiques sont generes dynamiquement maintenant. - */ - -$sapi_type = php_sapi_name(); -$script_file = basename(__FILE__); -$path=dirname(__FILE__).'/'; - -// Test si mode batch -$sapi_type = php_sapi_name(); -if (substr($sapi_type, 0, 3) == 'cgi') { - echo "Erreur: Vous utilisez l'interpreteur PHP pour le mode CGI. Pour executer graph-solde.php en ligne de commande, vous devez utiliser l'interpreteur PHP pour le mode CLI.\n"; - exit; -} - -require_once($path."../../htdocs/master.inc.php"); -require_once(DOL_DOCUMENT_ROOT."/core/class/dolgraph.class.php"); - - -if (! isset($argv[1]) || ! $argv[1]) { - print "Usage: ".$script_file." now\n"; - exit; -} -$id=$argv[1]; - - -$error = 0; - -// Initialise opt, tableau des parametres -if (function_exists("getopt")) -{ - // getopt existe sur ce PHP - $opt = getopt("m:y:"); -} -else -{ - // getopt n'existe sur ce PHP - $opt=array('m'=>$argv[1]); -} - - -// Create output directory -create_exdir($conf->banque->dir_temp); - - -$datetime = time(); - -if ($opt['m'] > 0) -{ - $month = $opt['m']; -} -else -{ - $month = strftime("%m", $datetime); -} -$year = strftime("%Y", $datetime); - -if ($month == 1) -{ - $monthprev = "12"; - $yearprev = $year - 1; -} -else -{ - $monthprev = substr("00".($month - 1), -2); - $yearprev = $year ; -} - -if ($month == 12) -{ - $monthnext = "01"; - $yearnext = $year + 1; -} -else -{ - $monthnext = substr("00".($month + 1), -2); -} - -$sql = "SELECT distinct(fk_account)"; -$sql .= " FROM ".MAIN_DB_PREFIX."bank"; -$sql .= " WHERE fk_account IS NOT NULL"; - -$resql = $db->query($sql); - -$accounts = array(); - -if ($resql) -{ - $num = $db->num_rows($resql); - $i = 0; - - while ($i < $num) - { - $row = $db->fetch_row($resql); - array_push($accounts, $row[0]); - $i++; - } - -} - - -$width = 750; -$height = 350; - - -foreach ($accounts as $account) -{ - $datetime = time(); - $year = strftime("%Y", $datetime); - $month = strftime("%m", $datetime); - $day = strftime("%d", $datetime); - - - // Definition de $width et $height - $width = 750; - $height = 280; - - // Calcul de $min et $max - $sql = "SELECT min(datev), max(datev)"; - $sql.= " FROM ".MAIN_DB_PREFIX."bank"; - $sql.= " WHERE fk_account = ".$account; - $resql = $db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - $row = $db->fetch_row($resql); - $min = $db->jdate($row[0]); - $max = $db->jdate($row[1]); - } - else - { - dol_print_error($db); - } - // print strftime("%Y%m%d",$max); - - // Chargement du tableau $amounts - // TODO peut etre optimise en virant les date_format - $amounts = array(); - $sql = "SELECT date_format(datev,'%Y%m%d'), sum(amount)"; - $sql .= " FROM ".MAIN_DB_PREFIX."bank"; - $sql .= " WHERE fk_account = ".$account; - $sql .= " AND date_format(datev,'%Y%m') = '".$year.$month."'"; - $sql .= " GROUP BY date_format(datev,'%Y%m%d')"; - $resql = $db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - $i = 0; - - while ($i < $num) - { - $row = $db->fetch_row($resql); - $amounts[$row[0]] = $row[1]; - $i++; - } - } - else - { - dol_print_error($db); - } - - // Calcul de $solde avant le debut du graphe - $solde = 0; - $sql = "SELECT sum(amount)"; - $sql .= " FROM ".MAIN_DB_PREFIX."bank"; - $sql .= " WHERE fk_account = ".$account; - $sql .= " AND datev < '".$year."-".sprintf("%02s",$month)."-01'"; - $resql = $db->query($sql); - if ($resql) - { - $row = $db->fetch_row($resql); - $solde = $row[0]; - } - else - { - dol_print_error($db); - } - - // Chargement de labels et datas pour tableau 1 - $labels = array(); - $datas = array(); - - $subtotal = 0; - - $day = mktime(1,1,1,$month,1,$year); - - $xmonth = substr("00".strftime("%m",$day), -2); - $i = 0; - while ($xmonth == $month) - { - //print strftime ("%e %d %m %y",$day)."\n"; - $subtotal = $subtotal + (isset($amounts[strftime("%Y%m%d",$day)]) ? $amounts[strftime("%Y%m%d",$day)] : 0); - if ($day > time()) - { - $datas[$i] = ''; // Valeur sp�ciale permettant de ne pas tracer le graph - } - else - { - $datas[$i] = $solde + $subtotal; - } - //$labels[$i] = strftime("%d",$day); - $labels[$i] = strftime("%d",$day); - - $day += 86400; - $xmonth = substr("00".strftime("%m",$day), -2); - $i++; - } - - - // Fabrication tableau 1 - $file= $conf->banque->dir_temp."/solde.$account.$year.$month.png"; - $title=$langs->trans("Balance").' '.$langs->trans("Month").': '.$month.' '.$langs->trans("Year").': '.$year; - $graph_datas=array(); - foreach($datas as $i => $val) - { - $graph_datas[$i]=array("$labels[$i]",$datas[$i]); - } - $px1 = new DolGraph(); - $px1->SetData($graph_datas); - $px1->SetLegend(array($langs->trans("Balance"))); - $px1->SetMaxValue($px1->GetCeilMaxValue()); - $px1->SetMinValue($px1->GetFloorMinValue()); - $px1->SetTitle($title); - $px1->SetWidth($width); - $px1->SetHeight($height); - $px1->SetType('lines'); - $px1->draw($file,''); - - - // Chargement du tableau $amounts - // TODO peut etre optimise en virant les date_format - $amounts = array(); - $sql = "SELECT date_format(datev,'%Y%m%d'), sum(amount)"; - $sql .= " FROM ".MAIN_DB_PREFIX."bank"; - $sql .= " WHERE fk_account = ".$account; - $sql .= " AND date_format(datev,'%Y') = '".$year."'"; - $sql .= " GROUP BY date_format(datev,'%Y%m%d')"; - $resql = $db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - $i = 0; - - while ($i < $num) - { - $row = $db->fetch_row($resql); - $amounts[$row[0]] = $row[1]; - $i++; - } - } - else - { - dol_print_error($db); - } - - // Calcul de $solde avant le debut du graphe - $solde = 0; - $sql = "SELECT sum(amount)"; - $sql .= " FROM ".MAIN_DB_PREFIX."bank"; - $sql .= " WHERE fk_account = ".$account; - $sql .= " AND datev < '".$year."-01-01'"; - $resql = $db->query($sql); - if ($resql) - { - $row = $db->fetch_row($resql); - $solde = $row[0]; - } - else - { - dol_print_error($db); - } - - // Chargement de labels et datas pour tableau 2 - $labels = array(); - $datas = array(); - - $subtotal = 0; - - $day = mktime(1,1,1,1,1,$year); - - $xyear = strftime("%Y",$day); - $i = 0; - while ($xyear == $year) - { - $subtotal = $subtotal + (isset($amounts[strftime("%Y%m%d",$day)]) ? $amounts[strftime("%Y%m%d",$day)] : 0); - //print strftime ("%e %d %m %y",$day)." ".$subtotal."\n
"; - if ($day > time()) - { - $datas[$i] = ''; // Valeur sp�ciale permettant de ne pas tracer le graph - } - else - { - $datas[$i] = $solde + $subtotal; - } - if (strftime("%d",$day) == 15) - { - $labels[$i] = strftime("%m",$day); - } - - $day += 86400; - $xyear = strftime("%Y",$day); - $i++; - } - - // Fabrication tableau 2 - $file= $conf->banque->dir_temp."/solde.$account.$year.png"; - $title=$langs->trans("Balance").' '.$langs->trans("Year").': '.$year; - $graph_datas=array(); - foreach($datas as $i => $val) - { - $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); - } - $px2 = new DolGraph(); - $px2->SetData($graph_datas); - $px2->SetLegend(array($langs->trans("Balance"))); - $px2->SetMaxValue($px2->GetCeilMaxValue()); - $px2->SetTitle($title); - $px2->SetWidth($width); - $px2->SetHeight($height); - $px2->SetType('lines'); - $px2->draw($file,''); - - - // Chargement du tableau $amounts - // TODO peut etre optimise en virant les date_format - $amounts = array(); - $sql = "SELECT date_format(datev,'%Y%m%d'), sum(amount)"; - $sql .= " FROM ".MAIN_DB_PREFIX."bank"; - $sql .= " WHERE fk_account = ".$account; - $sql .= " GROUP BY date_format(datev,'%Y%m%d')"; - $resql = $db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - $i = 0; - - while ($i < $num) - { - $row = $db->fetch_row($resql); - $amounts[$row[0]] = $row[1]; - $i++; - } - } - else - { - dol_print_error($db); - } - - // Calcul de $solde avant le debut du graphe - $solde = 0; - - // Chargement de labels et datas pour tableau 3 - $labels = array(); - $datas = array(); - $subtotal = 0; - - $day = $min; - - $i = 0; - while ($day <= ($max+1000000)) // On va bien au dela du dernier jour - { - $subtotal = $subtotal + (isset($amounts[strftime("%Y%m%d",$day)]) ? $amounts[strftime("%Y%m%d",$day)] : 0); - //print strftime ("%e %d %m %y",$day)." ".$subtotal."\n
"; - if ($day > ($max+86400)) - { - $datas[$i] = ''; // Valeur sp�ciale permettant de ne pas tracer le graph - } - else - { - $datas[$i] = $solde + $subtotal; - } - if (strftime("%d",$day) == 1) - { - $labels[$i] = strftime("%m",$day); - } - $day += 86400; - $i++; - } - - // Fabrication tableau 3 - $file= $conf->banque->dir_temp."/solde.$account.png"; - $title=$langs->trans("Balance"); - $graph_datas=array(); - foreach($datas as $i => $val) - { - $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); - } - $px3 = new DolGraph(); - $px3->SetData($graph_datas); - $px3->SetLegend(array($langs->trans("Balance"))); - $px3->SetMaxValue($px3->GetCeilMaxValue()); - $px3->SetMinValue($px3->GetFloorMinValue()); - $px3->SetTitle($title); - $px3->SetWidth($width); - $px3->SetHeight($height); - $px3->SetType('lines'); - $px3->draw($file,''); - - - // Chargement du tableau $credits, $debits - $credits = array(); - $debits = array(); - - $sql = "SELECT date_format(datev,'%m'), sum(amount)"; - $sql .= " FROM ".MAIN_DB_PREFIX."bank"; - $sql .= " WHERE fk_account = ".$account; - $sql .= " AND date_format(datev,'%Y') = '".$year."'"; - $sql .= " AND amount > 0"; - $sql .= " GROUP BY date_format(datev,'%m');"; - - $resql = $db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - $i = 0; - - while ($i < $num) - { - $row = $db->fetch_row($resql); - $credits[$row[0]] = $row[1]; - $i++; - } - } - else - { - dol_print_error($db); - } - - $sql = "SELECT date_format(datev,'%m'), sum(amount)"; - $sql .= " FROM ".MAIN_DB_PREFIX."bank"; - $sql .= " WHERE fk_account = ".$account; - $sql .= " AND date_format(datev,'%Y') = '".$year."'"; - $sql .= " AND amount < 0"; - $sql .= " GROUP BY date_format(datev,'%m');"; - - $resql = $db->query($sql); - if ($resql) - { - while ($row = $db->fetch_row($resql)) - { - $debits[$row[0]] = abs($row[1]); - } - } - else - { - dol_print_error($db); - } - - // Chargement de labels et data_xxx pour tableau 4 - $labels = array(); - $data_credit = array(); - $data_debit = array(); - for ($i = 0 ; $i < 12 ; $i++) - { - $data_credit[$i] = isset($credits[substr("0".($i+1),-2)]) ? $credits[substr("0".($i+1),-2)] : 0; - $data_debit[$i] = isset($debits[substr("0".($i+1),-2)]) ? $debits[substr("0".($i+1),-2)] : 0; - $labels[$i] = $i+1; - } - - // Fabrication tableau 4 - $file= $conf->banque->dir_temp."/mouvement.$account.$year.png"; - $title=$langs->trans("Movements").' '.$langs->trans("Year").': '.$year; - $graph_datas=array(); - foreach($data_credit as $i => $val) - { - $graph_datas[$i]=array($labels[$i],$data_credit[$i],$data_debit[$i]); - } - $px4 = new DolGraph(); - $px4->SetData($graph_datas); - $px4->SetLegend(array($langs->trans("Debit"),$langs->trans("Credit"))); - $px4->SetMaxValue($px4->GetCeilMaxValue()); - $px4->SetMinValue($px4->GetFloorMinValue()); - $px4->SetTitle($title); - $px4->SetWidth($width); - $px4->SetHeight($height); - $px4->SetType('bars'); - $px4->SetShading(3); - $px4->draw($file,''); -} - -$db->close(); - -print 'Graph files generated into directory '.$conf->banque->dir_temp."\n"; - -?>