diff --git a/htdocs/compta/bank/annuel.php b/htdocs/compta/bank/annuel.php index fc04a6ff987..fc60214cf79 100644 --- a/htdocs/compta/bank/annuel.php +++ b/htdocs/compta/bank/annuel.php @@ -53,7 +53,7 @@ llxHeader(); $form = new Form($db); -// R�cup�re info du compte +// Get account informations $acct = new Account($db); if ($_GET["account"]) { @@ -127,12 +127,28 @@ print ''; // Ref print ''; print ''; // Label print ''; -print ''; +print ''; print '
'.$langs->trans("Ref").''; -print $form->showrefnav($acct,'ref','',1,'ref'); +if ($_GET["account"]) +{ + print $form->showrefnav($acct,'ref','',1,'ref'); +} +else +{ + print $langs->trans("ALL"); +} print '
'.$langs->trans("Label").''.$acct->label.'
'; +if ($_GET["account"]) +{ + print $acct->label; +} +else +{ + print $langs->trans("AllAccounts"); +} +print '
'; diff --git a/htdocs/compta/bank/graph.php b/htdocs/compta/bank/graph.php index a7650a6715b..46b00d6fb04 100644 --- a/htdocs/compta/bank/graph.php +++ b/htdocs/compta/bank/graph.php @@ -18,11 +18,11 @@ */ /** - \file htdocs/compta/bank/graph.php - \ingroup banque - \brief Page graph des transactions bancaires - \version $Id$ -*/ + \file htdocs/compta/bank/graph.php + \ingroup banque + \brief Page graph des transactions bancaires + \version $Id$ + */ require("./pre.inc.php"); require_once(DOL_DOCUMENT_ROOT."/lib/bank.lib.php"); @@ -31,7 +31,7 @@ require_once(DOL_DOCUMENT_ROOT."/core/dolgraph.class.php"); $langs->load("banks"); if (!$user->rights->banque->lire) - accessforbidden(); +accessforbidden(); $account = $_GET["account"]; $mode='standard'; @@ -44,700 +44,713 @@ llxHeader(); $form = new Form($db); -if ($_GET["account"] || $_GET["ref"]) -{ - // If lib forced - if (! empty($_GET["lib"])) $conf->global->MAIN_GRAPH_LIBRARY=$_GET["lib"]; - - $datetime = time(); - $year = dolibarr_print_date($datetime, "%Y"); - $month = dolibarr_print_date($datetime, "%m"); - $day = dolibarr_print_date($datetime, "%d"); - if (! empty($_GET["year"])) $year=sprintf("%04d",$_GET["year"]); - if (! empty($_GET["month"])) $month=sprintf("%02d",$_GET["month"]); - - - $acct = new Account($db); - if ($_GET["account"]) - { - $result=$acct->fetch($_GET["account"]); - } - if ($_GET["ref"]) - { - $result=$acct->fetch(0,$_GET["ref"]); - $account=$acct->id; - } +// If lib forced +if (! empty($_GET["lib"])) $conf->global->MAIN_GRAPH_LIBRARY=$_GET["lib"]; - - $result=create_exdir($conf->banque->dir_temp); - if ($result < 0) + +$datetime = time(); +$year = dolibarr_print_date($datetime, "%Y"); +$month = dolibarr_print_date($datetime, "%m"); +$day = dolibarr_print_date($datetime, "%d"); +if (! empty($_GET["year"])) $year=sprintf("%04d",$_GET["year"]); +if (! empty($_GET["month"])) $month=sprintf("%02d",$_GET["month"]); + + +$acct = new Account($db); +if ($_GET["account"]) +{ + $result=$acct->fetch($_GET["account"]); +} +if ($_GET["ref"]) +{ + $result=$acct->fetch(0,$_GET["ref"]); + $account=$acct->id; +} + + +$result=create_exdir($conf->banque->dir_temp); +if ($result < 0) +{ + $langs->load("errors"); + $error++; + $mesg='
'.$langs->trans("ErrorFailedToCreateDir").'
'; +} +else +{ + // Definition de $width et $height + $width = 768; + $height = 200; + + // Calcul de $min et $max + $sql = "SELECT min(".$db->pdate("datev")."), max(".$db->pdate("datev").")"; + $sql.= " FROM ".MAIN_DB_PREFIX."bank"; + if ($account) $sql.= " WHERE fk_account = ".$account; + $resql = $db->query($sql); + if ($resql) { - $langs->load("errors"); - $error++; - $mesg='
'.$langs->trans("ErrorFailedToCreateDir").'
'; + $num = $db->num_rows($resql); + $row = $db->fetch_row($resql); + $min = $row[0]; + $max = $row[1]; } else { + dolibarr_print_error($db); + } + $log="graph.php: min=".$min." max=".$max; + dolibarr_syslog($log); - // Definition de $width et $height - $width = 768; - $height = 200; - - // Calcul de $min et $max - $sql = "SELECT min(".$db->pdate("datev")."), max(".$db->pdate("datev").")"; - $sql.= " FROM ".MAIN_DB_PREFIX."bank"; - $sql.= " WHERE fk_account = ".$account; + + // Tableau 1 + + if ($mode == 'standard') + { + // 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 date_format(datev,'%Y%m') = '".$year.$month."'"; + if ($account) $sql .= " AND fk_account = ".$account; + $sql .= " GROUP BY date_format(datev,'%Y%m%d')"; $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); - $row = $db->fetch_row($resql); - $min = $row[0]; - $max = $row[1]; + $i = 0; + while ($i < $num) + { + $row = $db->fetch_row($resql); + $amounts[$row[0]] = $row[1]; + $i++; + } + $db->free($resql); } else { dolibarr_print_error($db); } - $log="graph.php: min=".$min." max=".$max; - dolibarr_syslog($log); - - - // Tableau 1 - if ($mode == 'standard') + // Calcul de $solde avant le debut du graphe + $solde = 0; + $sql = "SELECT SUM(amount)"; + $sql .= " FROM ".MAIN_DB_PREFIX."bank"; + $sql .= " WHERE datev < '".$year."-".sprintf("%02s",$month)."-01'"; + if ($account) $sql .= " AND fk_account = ".$account; + $resql = $db->query($sql); + if ($resql) { - // 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) + $row = $db->fetch_row($resql); + $solde = $row[0]; + $db->free($resql); + } + else + { + dolibarr_print_error($db); + } + + // Chargement de labels et datas pour tableau 1 + $labels = array(); + $datas = array(); + $datamin = array(); + + $subtotal = 0; + $day = dolibarr_mktime(12,0,0,$month,1,$year); + $textdate = strftime("%Y%m%d",$day); + $xyear = substr($textdate,0,4); + $xday = substr($textdate,6,2); + $xmonth = substr($textdate,4,2); + + $i = 0; + while ($xmonth == $month) + { + $subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0); + if ($day > time()) { - $num = $db->num_rows($resql); - $i = 0; - while ($i < $num) - { - $row = $db->fetch_row($resql); - $amounts[$row[0]] = $row[1]; - $i++; - } - $db->free($resql); + $datas[$i] = ''; // Valeur speciale permettant de ne pas tracer le graph } else { - dolibarr_print_error($db); + $datas[$i] = $solde + $subtotal; } - - // 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]; - $db->free($resql); - } - else - { - dolibarr_print_error($db); - } - - // Chargement de labels et datas pour tableau 1 - $labels = array(); - $datas = array(); - $datamin = array(); - - $subtotal = 0; - $day = dolibarr_mktime(12,0,0,$month,1,$year); + $datamin[$i] = $acct->min_desired; + //$labels[$i] = strftime("%d",$day); + $labels[$i] = $xday; + + $day += 86400; $textdate = strftime("%Y%m%d",$day); $xyear = substr($textdate,0,4); $xday = substr($textdate,6,2); $xmonth = substr($textdate,4,2); - - $i = 0; - while ($xmonth == $month) - { - $subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0); - if ($day > time()) - { - $datas[$i] = ''; // Valeur speciale permettant de ne pas tracer le graph - } - else - { - $datas[$i] = $solde + $subtotal; - } - $datamin[$i] = $acct->min_desired; - //$labels[$i] = strftime("%d",$day); - $labels[$i] = $xday; - - $day += 86400; - $textdate = strftime("%Y%m%d",$day); - $xyear = substr($textdate,0,4); - $xday = substr($textdate,6,2); - $xmonth = substr($textdate,4,2); - - $i++; - } - // If we are the first of month, only $datas[0] is defined to an int value, others are defined to "" - // and this make artichow report a warning. - //$datas[0]=100; KO - //$datas[0]=100; $datas[1]=90; OK - //var_dump($datas); - //exit; - - // Fabrication tableau 1 - $file= $conf->banque->dir_temp."/balance".$account."-".$year.$month.".png"; - $title=$langs->transnoentities("Balance").' - '.$langs->transnoentities("Month").': '.$month.' '.$langs->transnoentities("Year").': '.$year; - $graph_datas=array(); - foreach($datas as $i => $val) - { - if ($acct->min_desired) $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i],$datamin[$i]); - else $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); - } - - $px = new DolGraph(); - $px->SetData($graph_datas); - if ($acct->min_desired) $px->SetLegend(array($langs->transnoentities("Balance"),$langs->transnoentities("BalanceMinimalDesired"))); - else $px->SetLegend(array($langs->transnoentities("Balance"))); - $px->SetLegendWidthMin(180); - $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); - $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); - $px->SetTitle($title); - $px->SetWidth($width); - $px->SetHeight($height); - $px->SetType('lines'); - $px->setBgColor('onglet'); - $px->setBgColorGrid(array(255,255,255)); - $px->SetHorizTickIncrement(1); - $px->SetPrecisionY(0); - $px->draw($file); - unset($graph_datas); - unset($px); - unset($datas); - unset($datamin); - unset($labels); - unset($amounts); - } - - // Tableau 2 - - if ($mode == 'standard') - { - // 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++; - } - $db->free($resql); - } - else - { - dolibarr_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]; - $db->free($resql); - } - else - { - dolibarr_print_error($db); - } - - // Chargement de labels et datas pour tableau 2 - $labels = array(); - $datas = array(); - $datamin = array(); - - $subtotal = 0; - $now = time(); - $day = dolibarr_mktime(12,0,0,1,1,$year); - $textdate = strftime("%Y%m%d",$day); - $xyear = substr($textdate,0,4); - $xday = substr($textdate,6,2); - - $i = 0; - while ($xyear == $year && $day <= $datetime) - { - $subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0); - if ($day > $now) - { - $datas[$i] = ''; // Valeur speciale permettant de ne pas tracer le graph - } - else - { - $datas[$i] = $solde + $subtotal; - } - $datamin[$i] = $acct->min_desired; - if ($xday == '15') - { - $labels[$i] = dolibarr_print_date($day,"%b"); - } - $day += 86400; - $textdate = strftime("%Y%m%d",$day); - $xyear = substr($textdate,0,4); - $xday = substr($textdate,6,2); - $i++; - } - - // Fabrication tableau 2 - $file= $conf->banque->dir_temp."/balance".$account."-".$year.".png"; - $title=$langs->transnoentities("Balance").' - '.$langs->transnoentities("Year").': '.$year; - $graph_datas=array(); - foreach($datas as $i => $val) - { - if ($acct->min_desired) $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i],$datamin[$i]); - else $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); - } - $px = new DolGraph(); - $px->SetData($graph_datas); - if ($acct->min_desired) $px->SetLegend(array($langs->transnoentities("Balance"),$langs->transnoentities("BalanceMinimalDesired"))); - else $px->SetLegend(array($langs->transnoentities("Balance"))); - $px->SetLegendWidthMin(180); - $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); - $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); - $px->SetTitle($title); - $px->SetWidth($width); - $px->SetHeight($height); - $px->SetType('lines'); - $px->setBgColor('onglet'); - $px->setBgColorGrid(array(255,255,255)); - $px->SetHideXGrid(true); - //$px->SetHorizTickIncrement(30.41); // 30.41 jours/mois en moyenne - $px->SetPrecisionY(0); - $px->draw($file); - - unset($px); - unset($graph_datas); - unset($datas); - unset($datamin); - unset($labels); - unset($amounts); - } - - // Tableau 3 - All time line - - if ($mode == 'showalltime') - { - // 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 - { - dolibarr_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(); - $datamin = array(); - - $subtotal = 0; - - $day = $min; - $textdate=strftime("%Y%m%d",$day); - //print "x".$textdate; - $i = 0; - while ($day <= ($max+86400)) // On va au dela du dernier jour - { - $subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0); - //print strftime ("%e %d %m %y",$day)." ".$subtotal."\n
"; - if ($day > ($max+86400)) - { - $datas[$i] = ''; // Valeur speciale permettant de ne pas tracer le graph - } - else - { - $datas[$i] = '' + $solde + $subtotal; - } - $datamin[$i] = $acct->min_desired; - if (substr($textdate,6,2) == '01' || $i == 0) - { - $labels[$i] = substr($textdate,4,2); - } - - $day += 86400; - $textdate=strftime("%Y%m%d",$day); - $i++; - } - - // Fabrication tableau 3 - $file= $conf->banque->dir_temp."/balance".$account.".png"; - $title=$langs->transnoentities("Balance")." - ".$langs->transnoentities("AllTime"); - $graph_datas=array(); - foreach($datas as $i => $val) - { - if ($acct->min_desired) $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i],$datamin[$i]); - else $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); - } - $px = new DolGraph(); - $px->SetData($graph_datas); - if ($acct->min_desired) $px->SetLegend(array($langs->transnoentities("Balance"),$langs->transnoentities("BalanceMinimalDesired"))); - else $px->SetLegend(array($langs->transnoentities("Balance"))); - $px->SetLegendWidthMin(180); - $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); - $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); - $px->SetTitle($title); - $px->SetWidth($width); - $px->SetHeight($height); - $px->SetType('lines'); - $px->setBgColor('onglet'); - $px->setBgColorGrid(array(255,255,255)); - $px->SetPrecisionY(0); - $px->draw($file); - - unset($graph_datas); - unset($datas); - unset($datamin); - unset($labels); - unset($amounts); - } - - // Tableau 4a - Credit/Debit - - if ($mode == 'standard') - { - // Chargement du tableau $credits, $debits - $credits = array(); - $debits = array(); - $sql = "SELECT date_format(datev,'%d'), sum(amount)"; - $sql .= " FROM ".MAIN_DB_PREFIX."bank"; - $sql .= " WHERE fk_account = ".$account; - $monthnext=$month+1; $yearnext=$year; - if ($monthnext > 12) { $monthnext=1; $yearnext++; } - $sql .= " AND datev >= '".$year."-".$month."-01 00:00:00'"; - $sql .= " AND datev < '".$yearnext."-".$monthnext."-01 00:00:00'"; - $sql .= " AND amount > 0"; - $sql .= " GROUP BY date_format(datev,'%d')"; - $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++; - } - $db->free($resql); - } - else - { - dolibarr_print_error($db); - } - $sql = "SELECT date_format(datev,'%d'), sum(amount)"; - $sql .= " FROM ".MAIN_DB_PREFIX."bank"; - $sql .= " WHERE fk_account = ".$account; - $monthnext=$month+1; $yearnext=$year; - if ($monthnext > 12) { $monthnext=1; $yearnext++; } - $sql .= " AND datev >= '".$year."-".$month."-01 00:00:00'"; - $sql .= " AND datev < '".$yearnext."-".$monthnext."-01 00:00:00'"; - $sql .= " AND amount < 0"; - $sql .= " GROUP BY date_format(datev,'%d')"; - $resql = $db->query($sql); - if ($resql) - { - while ($row = $db->fetch_row($resql)) - { - $debits[$row[0]] = abs($row[1]); - } - $db->free($resql); - } - else - { - dolibarr_print_error($db); - } - - - // Chargement de labels et data_xxx pour tableau 4 Mouvements - $labels = array(); - $data_credit = array(); - $data_debit = array(); - for ($i = 0 ; $i < 31 ; $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] = sprintf("%02d",$i+1); - $datamin[$i] = $acct->min_desired; - } - - // Fabrication tableau 4a - $file= $conf->banque->dir_temp."/movement".$account."-".$year.$month.".png"; - $title=$langs->transnoentities("BankMovements").' - '.$langs->transnoentities("Month").': '.$month.' '.$langs->transnoentities("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->transnoentities("Credit"),$langs->transnoentities("Debit"))); - $px->SetLegendWidthMin(180); - $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); - $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); - $px->SetTitle($title); - $px->SetWidth($width); - $px->SetHeight($height); - $px->SetType('bars'); - $px->SetShading(3); - $px->setBgColor('onglet'); - $px->setBgColorGrid(array(255,255,255)); - $px->SetHorizTickIncrement(1); - $px->SetPrecisionY(0); - $px->draw($file); - - unset($graph_datas); - unset($px); - unset($debits); - unset($credits); - } - - // Tableau 4b - Credit/Debit - - if ($mode == 'standard') - { - // 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 datev >= '".$year."-01-01 00:00:00'"; - $sql .= " AND datev <= '".$year."-12-31 23:59:59'"; - $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++; - } - $db->free($resql); - } - else - { - dolibarr_print_error($db); - } - $sql = "SELECT date_format(datev,'%m'), sum(amount)"; - $sql .= " FROM ".MAIN_DB_PREFIX."bank"; - $sql .= " WHERE fk_account = ".$account; - $sql .= " AND datev >= '".$year."-01-01 00:00:00'"; - $sql .= " AND datev <= '".$year."-12-31 23:59:59'"; - $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]); - } - $db->free($resql); - } - else - { - dolibarr_print_error($db); - } - - - // Chargement de labels et data_xxx pour tableau 4 Mouvements - $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] = dolibarr_print_date(dolibarr_mktime(12,0,0,$i+1,1,2000),"%b"); - $datamin[$i] = $acct->min_desired; - } - - // Fabrication tableau 4b - $file= $conf->banque->dir_temp."/movement".$account."-".$year.".png"; - $title=$langs->transnoentities("BankMovements").' - '.$langs->transnoentities("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->transnoentities("Credit"),$langs->transnoentities("Debit"))); - $px->SetLegendWidthMin(180); - $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); - $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); - $px->SetTitle($title); - $px->SetWidth($width); - $px->SetHeight($height); - $px->SetType('bars'); - $px->SetShading(3); - $px->setBgColor('onglet'); - $px->setBgColorGrid(array(255,255,255)); - $px->SetHorizTickIncrement(1); - $px->SetPrecisionY(0); - $px->draw($file); - - unset($graph_datas); - unset($px); - unset($debits); - unset($credits); + $i++; } + // If we are the first of month, only $datas[0] is defined to an int value, others are defined to "" + // and this make artichow report a warning. + //$datas[0]=100; KO + //$datas[0]=100; $datas[1]=90; OK + //var_dump($datas); + //exit; + + // Fabrication tableau 1 + $file= $conf->banque->dir_temp."/balance".$account."-".$year.$month.".png"; + $title=$langs->transnoentities("Balance").' - '.$langs->transnoentities("Month").': '.$month.' '.$langs->transnoentities("Year").': '.$year; + $graph_datas=array(); + foreach($datas as $i => $val) + { + if ($acct->min_desired) $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i],$datamin[$i]); + else $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); + } + + $px = new DolGraph(); + $px->SetData($graph_datas); + if ($acct->min_desired) $px->SetLegend(array($langs->transnoentities("Balance"),$langs->transnoentities("BalanceMinimalDesired"))); + else $px->SetLegend(array($langs->transnoentities("Balance"))); + $px->SetLegendWidthMin(180); + $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); + $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); + $px->SetTitle($title); + $px->SetWidth($width); + $px->SetHeight($height); + $px->SetType('lines'); + $px->setBgColor('onglet'); + $px->setBgColorGrid(array(255,255,255)); + $px->SetHorizTickIncrement(1); + $px->SetPrecisionY(0); + $px->draw($file); + + unset($graph_datas); + unset($px); + unset($datas); + unset($datamin); + unset($labels); + unset($amounts); } - - - // Onglets - $head=bank_prepare_head($acct); - dolibarr_fiche_head($head,'graph',$langs->trans("FinancialAccount"),0); - if ($mesg) print $mesg.'
'; - - print ''; - - // Ref - print ''; - print ''; - - // Label - print ''; - print ''; - - print '
'.$langs->trans("Ref").''; - $moreparam='&month='.$month.'&year='.$year.($mode=='showalltime'?'&mode=showalltime':''); - print $form->showrefnav($acct,'ref','',1,'ref','ref','',$moreparam); - print '
'.$langs->trans("Label").''.$acct->label.'
'; - - print '
'; - - - print ''; + // Tableau 2 if ($mode == 'standard') { - $prevyear=$year;$nextyear=$year; - $prevmonth=$month-1;$nextmonth=$month+1; - if ($prevmonth < 1) { $prevmonth=12; $prevyear--; } - if ($nextmonth > 12) { $nextmonth=1; $nextyear++; } - - // For month - $lien="".img_previous()." ".$langs->trans("Month")." ".img_next().""; - print ''; - - print ''; - - // For year - $prevyear=$year-1;$nextyear=$year+1; - $lien="".img_previous()." ".$langs->trans("Year")." ".img_next().""; - print ''; - - print ''; - - print ''; - } + // 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 date_format(datev,'%Y') = '".$year."'"; + if ($account) $sql .= " AND 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++; + } + $db->free($resql); + } + else + { + dolibarr_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 datev < '".$year."-01-01'"; + if ($account) $sql .= " AND fk_account = ".$account; + $resql = $db->query($sql); + if ($resql) + { + $row = $db->fetch_row($resql); + $solde = $row[0]; + $db->free($resql); + } + else + { + dolibarr_print_error($db); + } + + // Chargement de labels et datas pour tableau 2 + $labels = array(); + $datas = array(); + $datamin = array(); + + $subtotal = 0; + $now = time(); + $day = dolibarr_mktime(12,0,0,1,1,$year); + $textdate = strftime("%Y%m%d",$day); + $xyear = substr($textdate,0,4); + $xday = substr($textdate,6,2); + + $i = 0; + while ($xyear == $year && $day <= $datetime) + { + $subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0); + if ($day > $now) + { + $datas[$i] = ''; // Valeur speciale permettant de ne pas tracer le graph + } + else + { + $datas[$i] = $solde + $subtotal; + } + $datamin[$i] = $acct->min_desired; + if ($xday == '15') + { + $labels[$i] = dolibarr_print_date($day,"%b"); + } + $day += 86400; + $textdate = strftime("%Y%m%d",$day); + $xyear = substr($textdate,0,4); + $xday = substr($textdate,6,2); + $i++; + } + + // Fabrication tableau 2 + $file= $conf->banque->dir_temp."/balance".$account."-".$year.".png"; + $title=$langs->transnoentities("Balance").' - '.$langs->transnoentities("Year").': '.$year; + $graph_datas=array(); + foreach($datas as $i => $val) + { + if ($acct->min_desired) $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i],$datamin[$i]); + else $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); + } + $px = new DolGraph(); + $px->SetData($graph_datas); + if ($acct->min_desired) $px->SetLegend(array($langs->transnoentities("Balance"),$langs->transnoentities("BalanceMinimalDesired"))); + else $px->SetLegend(array($langs->transnoentities("Balance"))); + $px->SetLegendWidthMin(180); + $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); + $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); + $px->SetTitle($title); + $px->SetWidth($width); + $px->SetHeight($height); + $px->SetType('lines'); + $px->setBgColor('onglet'); + $px->setBgColorGrid(array(255,255,255)); + $px->SetHideXGrid(true); + //$px->SetHorizTickIncrement(30.41); // 30.41 jours/mois en moyenne + $px->SetPrecisionY(0); + $px->draw($file); + + unset($px); + unset($graph_datas); + unset($datas); + unset($datamin); + unset($labels); + unset($amounts); + } + + // Tableau 3 - All time line if ($mode == 'showalltime') { - print ''; + // 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"; + if ($account) $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 + { + dolibarr_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(); + $datamin = array(); + + $subtotal = 0; + + $day = $min; + $textdate=strftime("%Y%m%d",$day); + //print "x".$textdate; + $i = 0; + while ($day <= ($max+86400)) // On va au dela du dernier jour + { + $subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0); + //print strftime ("%e %d %m %y",$day)." ".$subtotal."\n
"; + if ($day > ($max+86400)) + { + $datas[$i] = ''; // Valeur speciale permettant de ne pas tracer le graph + } + else + { + $datas[$i] = '' + $solde + $subtotal; + } + $datamin[$i] = $acct->min_desired; + if (substr($textdate,6,2) == '01' || $i == 0) + { + $labels[$i] = substr($textdate,4,2); + } + + $day += 86400; + $textdate=strftime("%Y%m%d",$day); + $i++; + } + + // Fabrication tableau 3 + $file= $conf->banque->dir_temp."/balance".$account.".png"; + $title=$langs->transnoentities("Balance")." - ".$langs->transnoentities("AllTime"); + $graph_datas=array(); + foreach($datas as $i => $val) + { + if ($acct->min_desired) $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i],$datamin[$i]); + else $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]); + } + $px = new DolGraph(); + $px->SetData($graph_datas); + if ($acct->min_desired) $px->SetLegend(array($langs->transnoentities("Balance"),$langs->transnoentities("BalanceMinimalDesired"))); + else $px->SetLegend(array($langs->transnoentities("Balance"))); + $px->SetLegendWidthMin(180); + $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); + $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); + $px->SetTitle($title); + $px->SetWidth($width); + $px->SetHeight($height); + $px->SetType('lines'); + $px->setBgColor('onglet'); + $px->setBgColorGrid(array(255,255,255)); + $px->SetPrecisionY(0); + $px->draw($file); + + unset($graph_datas); + unset($datas); + unset($datamin); + unset($labels); + unset($amounts); } - - // Switch All time/Not all time - if ($mode == 'showalltime') + + // Tableau 4a - Credit/Debit + + if ($mode == 'standard') { - print ''; + // Chargement du tableau $credits, $debits + $credits = array(); + $debits = array(); + $sql = "SELECT date_format(datev,'%d'), sum(amount)"; + $sql .= " FROM ".MAIN_DB_PREFIX."bank"; + $monthnext=$month+1; $yearnext=$year; + if ($monthnext > 12) { $monthnext=1; $yearnext++; } + $sql .= " WHERE datev >= '".$year."-".$month."-01 00:00:00'"; + $sql .= " AND datev < '".$yearnext."-".$monthnext."-01 00:00:00'"; + $sql .= " AND amount > 0"; + if ($account) $sql .= " AND fk_account = ".$account; + $sql .= " GROUP BY date_format(datev,'%d')"; + $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++; + } + $db->free($resql); + } + else + { + dolibarr_print_error($db); + } + $sql = "SELECT date_format(datev,'%d'), sum(amount)"; + $sql .= " FROM ".MAIN_DB_PREFIX."bank"; + $monthnext=$month+1; $yearnext=$year; + if ($monthnext > 12) { $monthnext=1; $yearnext++; } + $sql .= " WHERE datev >= '".$year."-".$month."-01 00:00:00'"; + $sql .= " AND datev < '".$yearnext."-".$monthnext."-01 00:00:00'"; + $sql .= " AND amount < 0"; + if ($account) $sql .= " AND fk_account = ".$account; + $sql .= " GROUP BY date_format(datev,'%d')"; + $resql = $db->query($sql); + if ($resql) + { + while ($row = $db->fetch_row($resql)) + { + $debits[$row[0]] = abs($row[1]); + } + $db->free($resql); + } + else + { + dolibarr_print_error($db); + } + + + // Chargement de labels et data_xxx pour tableau 4 Mouvements + $labels = array(); + $data_credit = array(); + $data_debit = array(); + for ($i = 0 ; $i < 31 ; $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] = sprintf("%02d",$i+1); + $datamin[$i] = $acct->min_desired; + } + + // Fabrication tableau 4a + $file= $conf->banque->dir_temp."/movement".$account."-".$year.$month.".png"; + $title=$langs->transnoentities("BankMovements").' - '.$langs->transnoentities("Month").': '.$month.' '.$langs->transnoentities("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->transnoentities("Credit"),$langs->transnoentities("Debit"))); + $px->SetLegendWidthMin(180); + $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); + $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); + $px->SetTitle($title); + $px->SetWidth($width); + $px->SetHeight($height); + $px->SetType('bars'); + $px->SetShading(3); + $px->setBgColor('onglet'); + $px->setBgColorGrid(array(255,255,255)); + $px->SetHorizTickIncrement(1); + $px->SetPrecisionY(0); + $px->draw($file); + + unset($graph_datas); + unset($px); + unset($debits); + unset($credits); } - else + + // Tableau 4b - Credit/Debit + + if ($mode == 'standard') { - print ''; + // 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 datev >= '".$year."-01-01 00:00:00'"; + $sql .= " AND datev <= '".$year."-12-31 23:59:59'"; + $sql .= " AND amount > 0"; + if ($account) $sql .= " AND fk_account = ".$account; + $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++; + } + $db->free($resql); + } + else + { + dolibarr_print_error($db); + } + $sql = "SELECT date_format(datev,'%m'), sum(amount)"; + $sql .= " FROM ".MAIN_DB_PREFIX."bank"; + $sql .= " WHERE datev >= '".$year."-01-01 00:00:00'"; + $sql .= " AND datev <= '".$year."-12-31 23:59:59'"; + $sql .= " AND amount < 0"; + if ($account) $sql .= " AND fk_account = ".$account; + $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]); + } + $db->free($resql); + } + else + { + dolibarr_print_error($db); + } + + + // Chargement de labels et data_xxx pour tableau 4 Mouvements + $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] = dolibarr_print_date(dolibarr_mktime(12,0,0,$i+1,1,2000),"%b"); + $datamin[$i] = $acct->min_desired; + } + + // Fabrication tableau 4b + $file= $conf->banque->dir_temp."/movement".$account."-".$year.".png"; + $title=$langs->transnoentities("BankMovements").' - '.$langs->transnoentities("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->transnoentities("Credit"),$langs->transnoentities("Debit"))); + $px->SetLegendWidthMin(180); + $px->SetMaxValue($px->GetCeilMaxValue()<0?0:$px->GetCeilMaxValue()); + $px->SetMinValue($px->GetFloorMinValue()>0?0:$px->GetFloorMinValue()); + $px->SetTitle($title); + $px->SetWidth($width); + $px->SetHeight($height); + $px->SetType('bars'); + $px->SetShading(3); + $px->setBgColor('onglet'); + $px->setBgColorGrid(array(255,255,255)); + $px->SetHorizTickIncrement(1); + $px->SetPrecisionY(0); + $px->draw($file); + + unset($graph_datas); + unset($px); + unset($debits); + unset($credits); } - - print '
'.$lien.'
'; - $file = "movement".$account."-".$year.$month.".png"; - print ''; - - print '
'; - $file = "balance".$account."-".$year.$month.".png"; - print ''; - print '
'.$lien.'
'; - $file = "movement".$account."-".$year.".png"; - print ''; - print '
'; - $file = "balance".$account."-".$year.".png"; - print ''; - print '
'; - $file = "balance".$account.".png"; - print ''; - print '

'; - print ''; - print $langs->trans("GoBack"); - print ''; - print '

'; - print ''; - print $langs->trans("ShowAllTimeBalance"); - print ''; - print '
'; - - print "\n\n"; - } + +// Onglets +$head=bank_prepare_head($acct); +dolibarr_fiche_head($head,'graph',$langs->trans("FinancialAccount"),0); + +if ($mesg) print $mesg.'
'; + +print ''; + +// Ref +print ''; +print ''; + +// Label +print ''; +print ''; + +print '
'.$langs->trans("Ref").''; +if ($account) +{ + $moreparam='&month='.$month.'&year='.$year.($mode=='showalltime'?'&mode=showalltime':''); + print $form->showrefnav($acct,'ref','',1,'ref','ref','',$moreparam); +} +else +{ + print $langs->trans("ALL"); +} +print '
'.$langs->trans("Label").''; +if ($account) +{ + print $acct->label; +} +else +{ + print $langs->trans("AllAccounts"); +} +print '
'; + +print '
'; + + +print ''; + +if ($mode == 'standard') +{ + $prevyear=$year;$nextyear=$year; + $prevmonth=$month-1;$nextmonth=$month+1; + if ($prevmonth < 1) { $prevmonth=12; $prevyear--; } + if ($nextmonth > 12) { $nextmonth=1; $nextyear++; } + + // For month + $lien="".img_previous()." ".$langs->trans("Month")." ".img_next().""; + print ''; + + print ''; + + // For year + $prevyear=$year-1;$nextyear=$year+1; + $lien="".img_previous()." ".$langs->trans("Year")." ".img_next().""; + print ''; + + print ''; + + print ''; +} + +if ($mode == 'showalltime') +{ + print ''; +} + +// Switch All time/Not all time +if ($mode == 'showalltime') +{ + print ''; +} +else +{ + print ''; +} + +print '
'.$lien.'
'; + $file = "movement".$account."-".$year.$month.".png"; + print ''; + + print '
'; + $file = "balance".$account."-".$year.$month.".png"; + print ''; + print '
'.$lien.'
'; + $file = "movement".$account."-".$year.".png"; + print ''; + print '
'; + $file = "balance".$account."-".$year.".png"; + print ''; + print '
'; + $file = "balance".$account.".png"; + print ''; + print '

'; + print ''; + print $langs->trans("GoBack"); + print ''; + print '

'; + print ''; + print $langs->trans("ShowAllTimeBalance"); + print ''; + print '
'; + +print "\n\n"; + + $db->close(); llxFooter('$Date$ - $Revision$');