2005-09-17 04:32:22 +02:00
#!/usr/bin/php
2005-07-31 19:24:43 +02:00
< ? PHP
2008-08-25 23:56:04 +02:00
/* Copyright ( C ) 2005 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2006 - 2008 Laurent Destailleur < eldy @ users . sourceforge . net >
2005-07-31 19:24:43 +02:00
*
* 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 .
*/
2005-09-17 04:32:22 +02:00
/**
2008-08-25 23:56:04 +02:00
\file scripts / banque / graph - solde . php
\ingroup banque
\brief Script de g<EFBFBD> n<EFBFBD> ration des images des soldes des comptes
\deprecated Ce script n ' est pas utilise .
\version $Id $
2005-09-17 04:32:22 +02:00
*/
// Test si mode batch
$sapi_type = php_sapi_name ();
if ( substr ( $sapi_type , 0 , 3 ) == 'cgi' ) {
2006-08-13 02:34:16 +02:00
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 ;
2005-09-17 04:32:22 +02:00
}
// Recupere root dolibarr
$path = eregi_replace ( 'graph-solde.php' , '' , $_SERVER [ " PHP_SELF " ]);
2005-10-18 16:03:05 +02:00
require_once ( $path . " ../../htdocs/master.inc.php " );
2008-08-25 23:56:04 +02:00
require_once ( DOL_DOCUMENT_ROOT . " /core/dolgraph.class.php " );
2005-09-17 04:32:22 +02:00
2005-07-31 19:24:43 +02:00
$error = 0 ;
2005-09-17 04:32:22 +02:00
// Initialise opt, tableau des parametres
if ( function_exists ( " getopt " ))
{
2006-08-13 02:34:16 +02:00
// getopt existe sur ce PHP
$opt = getopt ( " m:y: " );
2005-09-17 04:32:22 +02:00
}
else
{
2006-08-13 02:34:16 +02:00
// getopt n'existe sur ce PHP
$opt = array ( 'm' => $argv [ 1 ]);
}
2005-09-17 04:32:22 +02:00
// Cr<43> e r<> pertoire accueil
2006-08-19 17:50:48 +02:00
create_exdir ( $conf -> banque -> dir_temp );
2005-09-17 04:32:22 +02:00
2005-07-31 19:24:43 +02:00
$datetime = time ();
2005-08-01 10:48:40 +02:00
if ( $opt [ 'm' ] > 0 )
{
2006-08-13 02:34:16 +02:00
$month = $opt [ 'm' ];
2005-08-01 10:48:40 +02:00
}
else
{
2006-08-13 02:34:16 +02:00
$month = strftime ( " %m " , $datetime );
2005-08-01 10:48:40 +02:00
}
2005-07-31 19:24:43 +02:00
$year = strftime ( " %Y " , $datetime );
if ( $month == 1 )
{
2006-08-13 02:34:16 +02:00
$monthprev = " 12 " ;
$yearprev = $year - 1 ;
2005-07-31 19:24:43 +02:00
}
else
{
2006-08-13 02:34:16 +02:00
$monthprev = substr ( " 00 " . ( $month - 1 ), - 2 ) ;
$yearprev = $year ;
2005-07-31 19:24:43 +02:00
}
if ( $month == 12 )
{
2006-08-13 02:34:16 +02:00
$monthnext = " 01 " ;
$yearnext = $year + 1 ;
2005-07-31 19:24:43 +02:00
}
else
{
2006-08-13 02:34:16 +02:00
$monthnext = substr ( " 00 " . ( $month + 1 ), - 2 ) ;
2005-07-31 19:24:43 +02:00
}
2005-07-31 20:33:29 +02:00
$sql = " SELECT distinct(fk_account) " ;
2005-07-31 19:24:43 +02:00
$sql .= " FROM " . MAIN_DB_PREFIX . " bank " ;
2005-08-01 10:52:03 +02:00
$sql .= " WHERE fk_account IS NOT NULL " ;
2005-07-31 19:24:43 +02:00
$resql = $db -> query ( $sql );
2005-07-31 20:33:29 +02:00
2005-07-31 20:36:05 +02:00
$accounts = array ();
2005-07-31 20:33:29 +02:00
2005-07-31 19:24:43 +02:00
if ( $resql )
{
2006-08-13 02:34:16 +02:00
$num = $db -> num_rows ( $resql );
$i = 0 ;
2005-07-31 20:33:29 +02:00
2006-08-13 02:34:16 +02:00
while ( $i < $num )
{
$row = $db -> fetch_row ( $resql );
array_push ( $accounts , $row [ 0 ]);
$i ++ ;
}
2005-07-31 20:33:29 +02:00
2005-07-31 19:24:43 +02:00
}
2006-08-13 02:34:16 +02:00
2006-08-13 17:19:33 +02:00
$width = 750 ;
$height = 350 ;
2005-07-31 20:33:29 +02:00
foreach ( $accounts as $account )
2005-07-31 19:24:43 +02:00
{
2006-08-13 17:19:33 +02:00
$datetime = time ();
$year = strftime ( " %Y " , $datetime );
$month = strftime ( " %m " , $datetime );
$day = strftime ( " %d " , $datetime );
// Definition de $width et $height
$width = 750 ;
$height = 280 ;
2006-08-13 02:34:16 +02:00
2006-08-13 17:19:33 +02:00
// Calcul de $min et $max
$sql = " SELECT min( " . $db -> pdate ( " datev " ) . " ),max( " . $db -> pdate ( " datev " ) . " ) " ;
2006-08-13 02:34:16 +02:00
$sql .= " FROM " . MAIN_DB_PREFIX . " bank " ;
$sql .= " WHERE fk_account = " . $account ;
$resql = $db -> query ( $sql );
if ( $resql )
{
2006-08-13 17:19:33 +02:00
$num = $db -> num_rows ( $resql );
2006-08-13 02:34:16 +02:00
$row = $db -> fetch_row ( $resql );
2006-08-13 17:19:33 +02:00
$min = $row [ 0 ];
$max = $row [ 1 ];
2006-08-13 02:34:16 +02:00
}
else
{
2006-08-13 17:19:33 +02:00
dolibarr_print_error ( $db );
2006-08-13 02:34:16 +02:00
}
2006-08-13 17:19:33 +02:00
// print strftime("%Y%m%d",$max);
2006-08-13 02:34:16 +02:00
2006-08-13 17:19:33 +02:00
// Chargement du tableau $amounts
// \todo peut etre optimise en virant les date_format
$amounts = array ();
2006-08-13 02:34:16 +02:00
$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 . " ' " ;
2006-08-13 17:19:33 +02:00
$sql .= " GROUP BY date_format(datev,'%Y%m%d') " ;
2006-08-13 02:34:16 +02:00
$resql = $db -> query ( $sql );
if ( $resql )
2005-07-31 20:36:05 +02:00
{
2006-08-13 02:34:16 +02:00
$num = $db -> num_rows ( $resql );
$i = 0 ;
while ( $i < $num )
{
$row = $db -> fetch_row ( $resql );
$amounts [ $row [ 0 ]] = $row [ 1 ];
$i ++ ;
}
2005-08-01 10:48:40 +02:00
}
2006-08-13 02:34:16 +02:00
else
2005-08-01 10:48:40 +02:00
{
2006-08-13 17:19:33 +02:00
dolibarr_print_error ( $db );
2005-08-01 10:48:40 +02:00
}
2006-08-13 17:19:33 +02:00
// 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
{
dolibarr_print_error ( $db );
}
// Chargement de labels et datas pour tableau 1
$labels = array ();
$datas = array ();
2006-08-13 02:34:16 +02:00
$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";
2006-08-13 17:19:33 +02:00
$subtotal = $subtotal + ( isset ( $amounts [ strftime ( " %Y%m%d " , $day )]) ? $amounts [ strftime ( " %Y%m%d " , $day )] : 0 );
2006-08-13 02:34:16 +02:00
if ( $day > time ())
{
2006-08-13 17:19:33 +02:00
$datas [ $i ] = '' ; // Valeur sp<73> ciale permettant de ne pas tracer le graph
2006-08-13 02:34:16 +02:00
}
else
{
$datas [ $i ] = $solde + $subtotal ;
}
2006-08-13 17:19:33 +02:00
//$labels[$i] = strftime("%d",$day);
2006-08-13 02:34:16 +02:00
$labels [ $i ] = strftime ( " %d " , $day );
$day += 86400 ;
$xmonth = substr ( " 00 " . strftime ( " %m " , $day ), - 2 );
$i ++ ;
}
2006-08-13 17:19:33 +02:00
// Fabrication tableau 1
2006-08-19 17:50:48 +02:00
$file = $conf -> banque -> dir_temp . " /solde. $account . $year . $month .png " ;
2006-08-13 17:19:33 +02:00
$title = $langs -> trans ( " Balance " ) . ' ' . $langs -> trans ( " Month " ) . ': ' . $month . ' ' . $langs -> trans ( " Year " ) . ': ' . $year ;
$graph_datas = array ();
foreach ( $datas as $i => $val )
2005-08-10 12:00:24 +02:00
{
2006-08-13 17:19:33 +02:00
$graph_datas [ $i ] = array ( " $labels[$i] " , $datas [ $i ]);
}
$px = new DolGraph ();
$px -> SetData ( $graph_datas );
$px -> SetLegend ( array ( $langs -> trans ( " Balance " )));
$px -> SetMaxValue ( $px -> GetCeilMaxValue ());
$px -> SetMinValue ( $px -> GetFloorMinValue ());
$px -> SetTitle ( $title );
$px -> SetWidth ( $width );
$px -> SetHeight ( $height );
$px -> SetType ( 'lines' );
$px -> draw ( $file );
// Chargement du tableau $amounts
// \todo peut etre optimise en virant les date_format
$amounts = array ();
2006-08-13 02:34:16 +02:00
$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 . " ' " ;
2006-08-13 17:19:33 +02:00
$sql .= " GROUP BY date_format(datev,'%Y%m%d') " ;
2006-08-13 02:34:16 +02:00
$resql = $db -> query ( $sql );
if ( $resql )
2005-08-10 12:00:24 +02:00
{
2006-08-13 02:34:16 +02:00
$num = $db -> num_rows ( $resql );
$i = 0 ;
while ( $i < $num )
{
$row = $db -> fetch_row ( $resql );
$amounts [ $row [ 0 ]] = $row [ 1 ];
$i ++ ;
}
2005-08-10 12:00:24 +02:00
}
2006-08-13 02:34:16 +02:00
else
2005-08-10 12:00:24 +02:00
{
2006-08-13 17:19:33 +02:00
dolibarr_print_error ( $db );
2006-08-13 02:34:16 +02:00
}
2006-08-13 17:19:33 +02:00
// 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
{
dolibarr_print_error ( $db );
}
// Chargement de labels et datas pour tableau 2
$labels = array ();
$datas = array ();
2006-08-13 02:34:16 +02:00
$subtotal = 0 ;
2005-08-10 12:00:24 +02:00
2006-08-13 02:34:16 +02:00
$day = mktime ( 1 , 1 , 1 , 1 , 1 , $year );
$xyear = strftime ( " %Y " , $day );
$i = 0 ;
while ( $xyear == $year )
{
2006-08-13 17:19:33 +02:00
$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<br>";
2006-08-13 02:34:16 +02:00
if ( $day > time ())
{
2006-08-13 17:19:33 +02:00
$datas [ $i ] = '' ; // Valeur sp<73> ciale permettant de ne pas tracer le graph
2006-08-13 02:34:16 +02:00
}
else
{
$datas [ $i ] = $solde + $subtotal ;
}
2006-08-13 17:19:33 +02:00
if ( strftime ( " %d " , $day ) == 15 )
2006-08-13 02:34:16 +02:00
{
2006-08-13 17:19:33 +02:00
$labels [ $i ] = strftime ( " %m " , $day );
2006-08-13 02:34:16 +02:00
}
$day += 86400 ;
$xyear = strftime ( " %Y " , $day );
$i ++ ;
2005-08-10 12:00:24 +02:00
}
2006-08-13 02:34:16 +02:00
2006-08-13 17:19:33 +02:00
// Fabrication tableau 2
2006-08-19 17:50:48 +02:00
$file = $conf -> banque -> dir_temp . " /solde. $account . $year .png " ;
2006-08-13 17:19:33 +02:00
$title = $langs -> trans ( " Balance " ) . ' ' . $langs -> trans ( " Year " ) . ': ' . $year ;
$graph_datas = array ();
foreach ( $datas as $i => $val )
2006-08-13 02:34:16 +02:00
{
2006-08-13 17:19:33 +02:00
$graph_datas [ $i ] = array ( isset ( $labels [ $i ]) ? $labels [ $i ] : '' , $datas [ $i ]);
}
$px = new DolGraph ();
$px -> SetData ( $graph_datas );
$px -> SetLegend ( array ( $langs -> trans ( " Balance " )));
$px -> SetMaxValue ( $px -> GetCeilMaxValue ());
$px -> SetTitle ( $title );
$px -> SetWidth ( $width );
$px -> SetHeight ( $height );
$px -> SetType ( 'lines' );
$px -> draw ( $file );
// Chargement du tableau $amounts
// \todo peut etre optimise en virant les date_format
$amounts = array ();
2006-08-13 02:34:16 +02:00
$sql = " SELECT date_format(datev,'%Y%m%d'), sum(amount) " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " bank " ;
$sql .= " WHERE fk_account = " . $account ;
2006-08-13 17:19:33 +02:00
$sql .= " GROUP BY date_format(datev,'%Y%m%d') " ;
2006-08-13 02:34:16 +02:00
$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
2005-08-10 14:20:51 +02:00
{
2006-08-13 17:19:33 +02:00
dolibarr_print_error ( $db );
2006-08-13 02:34:16 +02:00
}
2006-08-13 17:19:33 +02:00
// Calcul de $solde avant le debut du graphe
$solde = 0 ;
// Chargement de labels et datas pour tableau 3
$labels = array ();
$datas = array ();
2006-08-13 02:34:16 +02:00
$subtotal = 0 ;
$day = $min ;
$i = 0 ;
2006-08-13 17:19:33 +02:00
while ( $day <= ( $max + 1000000 )) // On va bien au dela du dernier jour
2006-08-13 02:34:16 +02:00
{
2006-08-13 17:19:33 +02:00
$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<br>";
if ( $day > ( $max + 86400 ))
{
$datas [ $i ] = '' ; // Valeur sp<73> ciale permettant de ne pas tracer le graph
}
else
{
$datas [ $i ] = $solde + $subtotal ;
}
if ( strftime ( " %d " , $day ) == 1 )
{
$labels [ $i ] = strftime ( " %m " , $day );
}
2006-08-13 02:34:16 +02:00
$day += 86400 ;
$i ++ ;
}
2006-08-13 17:19:33 +02:00
// Fabrication tableau 3
2006-08-19 17:50:48 +02:00
$file = $conf -> banque -> dir_temp . " /solde. $account .png " ;
2006-08-13 17:19:33 +02:00
$title = $langs -> trans ( " Balance " );
$graph_datas = array ();
foreach ( $datas as $i => $val )
2006-08-13 02:34:16 +02:00
{
2006-08-13 17:19:33 +02:00
$graph_datas [ $i ] = array ( isset ( $labels [ $i ]) ? $labels [ $i ] : '' , $datas [ $i ]);
}
$px = new DolGraph ();
$px -> SetData ( $graph_datas );
$px -> SetLegend ( array ( $langs -> trans ( " Balance " )));
$px -> SetMaxValue ( $px -> GetCeilMaxValue ());
$px -> SetMinValue ( $px -> GetFloorMinValue ());
$px -> SetTitle ( $title );
$px -> SetWidth ( $width );
$px -> SetHeight ( $height );
$px -> SetType ( 'lines' );
$px -> draw ( $file );
// Chargement du tableau $credits, $debits
2006-08-13 02:34:16 +02:00
$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
{
2006-08-13 17:19:33 +02:00
dolibarr_print_error ( $db );
2006-08-13 02:34:16 +02:00
}
$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 )
2005-11-13 18:05:59 +01:00
{
2006-08-13 02:34:16 +02:00
while ( $row = $db -> fetch_row ( $resql ))
{
$debits [ $row [ 0 ]] = abs ( $row [ 1 ]);
}
}
else
2005-11-13 18:05:59 +01:00
{
2006-08-13 17:19:33 +02:00
dolibarr_print_error ( $db );
2006-08-13 02:34:16 +02:00
}
2006-08-13 17:19:33 +02:00
// Chargement de labels et data_xxx pour tableau 4
$labels = array ();
$data_credit = array ();
$data_debit = array ();
2006-08-13 02:34:16 +02:00
for ( $i = 0 ; $i < 12 ; $i ++ )
{
2006-08-13 17:19:33 +02:00
$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 ;
2006-08-13 02:34:16 +02:00
$labels [ $i ] = $i + 1 ;
}
2006-08-13 17:19:33 +02:00
// Fabrication tableau 4
2006-08-19 17:50:48 +02:00
$file = $conf -> banque -> dir_temp . " /mouvement. $account . $year .png " ;
2006-08-13 17:19:33 +02:00
$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 ]);
}
$px = new DolGraph ();
$px -> SetData ( $graph_datas );
$px -> SetLegend ( array ( $langs -> trans ( " Debit " ), $langs -> trans ( " Credit " )));
$px -> SetMaxValue ( $px -> GetCeilMaxValue ());
$px -> SetMinValue ( $px -> GetFloorMinValue ());
$px -> SetTitle ( $title );
$px -> SetWidth ( $width );
$px -> SetHeight ( $height );
$px -> SetType ( 'bars' );
2007-12-21 04:34:32 +01:00
$px -> SetShading ( 3 );
2006-08-13 17:19:33 +02:00
$px -> draw ( $file );
2005-11-13 18:05:59 +01:00
}
2006-08-13 17:19:33 +02:00
$db -> close ();
2005-07-31 19:24:43 +02:00
?>