Fix: Message erreur plus clair si safe_mode actif
This commit is contained in:
parent
23cd017879
commit
5d7e0c4840
@ -22,7 +22,7 @@
|
|||||||
/**
|
/**
|
||||||
\file htdocs/compta/bank/graph.php
|
\file htdocs/compta/bank/graph.php
|
||||||
\ingroup banque
|
\ingroup banque
|
||||||
\brief Page de détail des transactions bancaires
|
\brief Page graph des transactions bancaires
|
||||||
\version $Revision$
|
\version $Revision$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -37,6 +37,7 @@ if (!$user->rights->banque->lire)
|
|||||||
|
|
||||||
$account = $_GET["account"];
|
$account = $_GET["account"];
|
||||||
$mesg = '';
|
$mesg = '';
|
||||||
|
$error=0;
|
||||||
|
|
||||||
|
|
||||||
llxHeader();
|
llxHeader();
|
||||||
@ -63,450 +64,459 @@ if ($_GET["account"] || $_GET["ref"])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
create_exdir($conf->banque->dir_temp);
|
$result=create_exdir($conf->banque->dir_temp);
|
||||||
|
if ($result < 0)
|
||||||
|
|
||||||
// Definition de $width et $height
|
|
||||||
$width = 800;
|
|
||||||
$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;
|
|
||||||
$resql = $db->query($sql);
|
|
||||||
if ($resql)
|
|
||||||
{
|
{
|
||||||
$num = $db->num_rows($resql);
|
$langs->load("errors");
|
||||||
$row = $db->fetch_row($resql);
|
$error++;
|
||||||
$min = $row[0];
|
$mesg='<div class="error">'.$langs->trans("ErrorFailedToCreateDir").'</div>';
|
||||||
$max = $row[1];
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dolibarr_print_error($db);
|
|
||||||
}
|
|
||||||
$log="graph.php: min=".$min." max=".$max;
|
|
||||||
dolibarr_syslog($log);
|
|
||||||
|
|
||||||
|
|
||||||
// Tableau 1
|
// Definition de $width et $height
|
||||||
|
$width = 800;
|
||||||
|
$height = 200;
|
||||||
|
|
||||||
|
// Calcul de $min et $max
|
||||||
// Chargement du tableau $amounts
|
$sql = "SELECT min(".$db->pdate("datev")."), max(".$db->pdate("datev").")";
|
||||||
// \todo peut etre optimise en virant les date_format
|
$sql.= " FROM ".MAIN_DB_PREFIX."bank";
|
||||||
$amounts = array();
|
$sql.= " WHERE fk_account = ".$account;
|
||||||
$sql = "SELECT date_format(datev,'%Y%m%d'), sum(amount)";
|
$resql = $db->query($sql);
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank";
|
if ($resql)
|
||||||
$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)
|
|
||||||
{
|
{
|
||||||
|
$num = $db->num_rows($resql);
|
||||||
$row = $db->fetch_row($resql);
|
$row = $db->fetch_row($resql);
|
||||||
$amounts[$row[0]] = $row[1];
|
$min = $row[0];
|
||||||
$i++;
|
$max = $row[1];
|
||||||
}
|
|
||||||
$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."-".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);
|
|
||||||
$xmonth = $month;
|
|
||||||
|
|
||||||
$i = 0;
|
|
||||||
while ($xmonth == $month)
|
|
||||||
{
|
|
||||||
$textdate = strftime("%Y%m%d",$day);
|
|
||||||
$xyear = substr($textdate,0,4);
|
|
||||||
$xday = substr($textdate,6,2);
|
|
||||||
$xmonth = substr($textdate,4,2);
|
|
||||||
|
|
||||||
//print strftime ("%e %d %m %y",$day)."\n";
|
|
||||||
$subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0);
|
|
||||||
if ($day > time())
|
|
||||||
{
|
|
||||||
$datas[$i] = ''; // Valeur spéciale permettant de ne pas tracer le graph
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$datas[$i] = $solde + $subtotal;
|
dolibarr_print_error($db);
|
||||||
}
|
}
|
||||||
$datamin[$i] = $acct->min_desired;
|
$log="graph.php: min=".$min." max=".$max;
|
||||||
//$labels[$i] = strftime("%d",$day);
|
dolibarr_syslog($log);
|
||||||
$labels[$i] = $xday;
|
|
||||||
$day += 86400;
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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->SetHorizTickIncrement(1);
|
|
||||||
$px->SetPrecisionY(0);
|
|
||||||
$px->draw($file);
|
|
||||||
|
|
||||||
unset($graph_datas);
|
// Tableau 1
|
||||||
unset($px);
|
|
||||||
unset($datas);
|
|
||||||
unset($datamin);
|
|
||||||
unset($labels);
|
|
||||||
unset($amounts);
|
|
||||||
|
|
||||||
|
|
||||||
// Tableau 2
|
// Chargement du tableau $amounts
|
||||||
|
// \todo peut etre optimise en virant les date_format
|
||||||
|
$amounts = array();
|
||||||
// Chargement du tableau $amounts
|
$sql = "SELECT date_format(datev,'%Y%m%d'), sum(amount)";
|
||||||
// \todo peut etre optimise en virant les date_format
|
$sql .= " FROM ".MAIN_DB_PREFIX."bank";
|
||||||
$amounts = array();
|
$sql .= " WHERE fk_account = ".$account;
|
||||||
$sql = "SELECT date_format(datev,'%Y%m%d'), sum(amount)";
|
$sql .= " AND date_format(datev,'%Y%m') = '".$year.$month."'";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank";
|
$sql .= " GROUP BY date_format(datev,'%Y%m%d')";
|
||||||
$sql .= " WHERE fk_account = ".$account;
|
$resql = $db->query($sql);
|
||||||
$sql .= " AND date_format(datev,'%Y') = '".$year."'";
|
if ($resql)
|
||||||
$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);
|
$num = $db->num_rows($resql);
|
||||||
$amounts[$row[0]] = $row[1];
|
$i = 0;
|
||||||
$i++;
|
while ($i < $num)
|
||||||
}
|
{
|
||||||
$db->free($resql);
|
$row = $db->fetch_row($resql);
|
||||||
}
|
$amounts[$row[0]] = $row[1];
|
||||||
else
|
$i++;
|
||||||
{
|
}
|
||||||
dolibarr_print_error($db);
|
$db->free($resql);
|
||||||
}
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
$i = 0;
|
|
||||||
$xyear = $year;
|
|
||||||
while ($xyear == $year)
|
|
||||||
{
|
|
||||||
$textdate = strftime("%Y%m%d",$day);
|
|
||||||
$xyear = substr($textdate,0,4);
|
|
||||||
$xday = substr($textdate,6,2);
|
|
||||||
|
|
||||||
$subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0);
|
|
||||||
if ($day > $now)
|
|
||||||
{
|
|
||||||
$datas[$i] = ''; // Valeur spéciale permettant de ne pas tracer le graph
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$datas[$i] = $solde + $subtotal;
|
dolibarr_print_error($db);
|
||||||
}
|
}
|
||||||
$datamin[$i] = $acct->min_desired;
|
|
||||||
if ($xday == '15')
|
|
||||||
{
|
|
||||||
$labels[$i] = dolibarr_print_date($day,"%b");
|
|
||||||
}
|
|
||||||
$day += 86400;
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fabrication tableau 2
|
// Calcul de $solde avant le debut du graphe
|
||||||
$file= $conf->banque->dir_temp."/balance.$account.$year.png";
|
$solde = 0;
|
||||||
$title=$langs->transnoentities("Balance").' '.$langs->transnoentities("Year").': '.$year;
|
$sql = "SELECT sum(amount)";
|
||||||
$graph_datas=array();
|
$sql .= " FROM ".MAIN_DB_PREFIX."bank";
|
||||||
foreach($datas as $i => $val)
|
$sql .= " WHERE fk_account = ".$account;
|
||||||
{
|
$sql .= " AND datev < '".$year."-".sprintf("%02s",$month)."-01'";
|
||||||
if ($acct->min_desired) $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i],$datamin[$i]);
|
$resql = $db->query($sql);
|
||||||
else $graph_datas[$i]=array(isset($labels[$i])?$labels[$i]:'',$datas[$i]);
|
if ($resql)
|
||||||
}
|
|
||||||
$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->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
|
|
||||||
|
|
||||||
|
|
||||||
// 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);
|
$row = $db->fetch_row($resql);
|
||||||
$amounts[$row[0]] = $row[1];
|
$solde = $row[0];
|
||||||
$i++;
|
$db->free($resql);
|
||||||
}
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
$i = 0;
|
|
||||||
while ($day <= ($max+86400)) // On va au dela du dernier jour
|
|
||||||
{
|
|
||||||
$textdate=strftime("%Y%m%d",$day);
|
|
||||||
|
|
||||||
$subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0);
|
|
||||||
//print strftime ("%e %d %m %y",$day)." ".$subtotal."\n<br>";
|
|
||||||
if ($day > ($max+86400))
|
|
||||||
{
|
|
||||||
$datas[$i] = ''; // Valeur spéciale permettant de ne pas tracer le graph
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$datas[$i] = '' + $solde + $subtotal;
|
dolibarr_print_error($db);
|
||||||
}
|
}
|
||||||
$datamin[$i] = $acct->min_desired;
|
|
||||||
if (substr($textdate,6,2) == '01')
|
|
||||||
{
|
|
||||||
$labels[$i] = substr($textdate,4,2);
|
|
||||||
}
|
|
||||||
$day += 86400;
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fabrication tableau 3
|
|
||||||
$file= $conf->banque->dir_temp."/balance.$account.png";
|
|
||||||
$title=$langs->transnoentities("Balance");
|
|
||||||
$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->SetPrecisionY(0);
|
|
||||||
$px->draw($file);
|
|
||||||
|
|
||||||
unset($graph_datas);
|
|
||||||
unset($datas);
|
|
||||||
unset($datamin);
|
|
||||||
unset($labels);
|
|
||||||
unset($amounts);
|
|
||||||
|
|
||||||
|
// Chargement de labels et datas pour tableau 1
|
||||||
|
$labels = array();
|
||||||
|
$datas = array();
|
||||||
|
$datamin = array();
|
||||||
|
|
||||||
// Tableau 4
|
$subtotal = 0;
|
||||||
|
$day = dolibarr_mktime(12,0,0,$month,1,$year);
|
||||||
|
$xmonth = $month;
|
||||||
|
|
||||||
|
|
||||||
// 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;
|
$i = 0;
|
||||||
while ($i < $num)
|
while ($xmonth == $month)
|
||||||
{
|
{
|
||||||
$row = $db->fetch_row($resql);
|
$textdate = strftime("%Y%m%d",$day);
|
||||||
$credits[$row[0]] = $row[1];
|
$xyear = substr($textdate,0,4);
|
||||||
|
$xday = substr($textdate,6,2);
|
||||||
|
$xmonth = substr($textdate,4,2);
|
||||||
|
|
||||||
|
//print strftime ("%e %d %m %y",$day)."\n";
|
||||||
|
$subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0);
|
||||||
|
if ($day > time())
|
||||||
|
{
|
||||||
|
$datas[$i] = ''; // Valeur sp<73>ciale 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;
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
$db->free($resql);
|
|
||||||
}
|
// Fabrication tableau 1
|
||||||
else
|
$file= $conf->banque->dir_temp."/balance.$account.$year.$month.png";
|
||||||
{
|
$title=$langs->transnoentities("Balance").' '.$langs->transnoentities("Month").': '.$month.' '.$langs->transnoentities("Year").': '.$year;
|
||||||
dolibarr_print_error($db);
|
$graph_datas=array();
|
||||||
}
|
foreach($datas as $i => $val)
|
||||||
$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]);
|
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->SetHorizTickIncrement(1);
|
||||||
|
$px->SetPrecisionY(0);
|
||||||
|
$px->draw($file);
|
||||||
|
|
||||||
|
unset($graph_datas);
|
||||||
|
unset($px);
|
||||||
|
unset($datas);
|
||||||
|
unset($datamin);
|
||||||
|
unset($labels);
|
||||||
|
unset($amounts);
|
||||||
|
|
||||||
|
|
||||||
|
// Tableau 2
|
||||||
|
|
||||||
|
|
||||||
|
// 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);
|
||||||
}
|
}
|
||||||
$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);
|
||||||
|
$i = 0;
|
||||||
|
$xyear = $year;
|
||||||
|
while ($xyear == $year)
|
||||||
|
{
|
||||||
|
$textdate = strftime("%Y%m%d",$day);
|
||||||
|
$xyear = substr($textdate,0,4);
|
||||||
|
$xday = substr($textdate,6,2);
|
||||||
|
|
||||||
|
$subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 0);
|
||||||
|
if ($day > $now)
|
||||||
|
{
|
||||||
|
$datas[$i] = ''; // Valeur sp<73>ciale 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;
|
||||||
|
$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->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
|
||||||
|
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
$i = 0;
|
||||||
|
while ($day <= ($max+86400)) // On va au dela du dernier jour
|
||||||
|
{
|
||||||
|
$textdate=strftime("%Y%m%d",$day);
|
||||||
|
|
||||||
|
$subtotal = $subtotal + (isset($amounts[$textdate]) ? $amounts[$textdate] : 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;
|
||||||
|
}
|
||||||
|
$datamin[$i] = $acct->min_desired;
|
||||||
|
if (substr($textdate,6,2) == '01')
|
||||||
|
{
|
||||||
|
$labels[$i] = substr($textdate,4,2);
|
||||||
|
}
|
||||||
|
$day += 86400;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fabrication tableau 3
|
||||||
|
$file= $conf->banque->dir_temp."/balance.$account.png";
|
||||||
|
$title=$langs->transnoentities("Balance");
|
||||||
|
$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->SetPrecisionY(0);
|
||||||
|
$px->draw($file);
|
||||||
|
|
||||||
|
unset($graph_datas);
|
||||||
|
unset($datas);
|
||||||
|
unset($datamin);
|
||||||
|
unset($labels);
|
||||||
|
unset($amounts);
|
||||||
|
|
||||||
|
|
||||||
|
// Tableau 4
|
||||||
|
|
||||||
|
|
||||||
|
// 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++;
|
||||||
|
}
|
||||||
|
$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 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]);
|
||||||
|
}
|
||||||
|
$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] = strftime("%b",dolibarr_mktime(12,0,0,$i+1,1,2000));
|
||||||
|
$datamin[$i] = $acct->min_desired;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fabrication tableau 4
|
||||||
|
$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(8);
|
||||||
|
$px->setBgColor('onglet');
|
||||||
|
$px->SetHorizTickIncrement(1);
|
||||||
|
$px->SetPrecisionY(0);
|
||||||
|
$px->draw($file);
|
||||||
|
|
||||||
|
unset($graph_datas);
|
||||||
|
unset($px);
|
||||||
|
unset($debits);
|
||||||
|
unset($credits);
|
||||||
}
|
}
|
||||||
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] = strftime("%b",dolibarr_mktime(12,0,0,$i+1,1,2000));
|
|
||||||
$datamin[$i] = $acct->min_desired;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fabrication tableau 4
|
|
||||||
$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(8);
|
|
||||||
$px->setBgColor('onglet');
|
|
||||||
$px->SetHorizTickIncrement(1);
|
|
||||||
$px->SetPrecisionY(0);
|
|
||||||
$px->draw($file);
|
|
||||||
|
|
||||||
unset($graph_datas);
|
|
||||||
unset($px);
|
|
||||||
unset($debits);
|
|
||||||
unset($credits);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Onglets
|
// Onglets
|
||||||
$head=bank_prepare_head($acct);
|
$head=bank_prepare_head($acct);
|
||||||
dolibarr_fiche_head($head,'graph',$langs->trans("FinancialAccount"),0);
|
dolibarr_fiche_head($head,'graph',$langs->trans("FinancialAccount"),0);
|
||||||
|
|
||||||
|
if ($mesg) print $mesg.'<br>';
|
||||||
|
|
||||||
print '<table class="border" width="100%">';
|
print '<table class="border" width="100%">';
|
||||||
|
|
||||||
// Ref
|
// Ref
|
||||||
|
|||||||
@ -14,4 +14,6 @@ ErrorSupplierCodeRequired=Supplier code required
|
|||||||
ErrorSupplierCodeAlreadyUsed=Supplier code already used
|
ErrorSupplierCodeAlreadyUsed=Supplier code already used
|
||||||
ErrorBadParameters=Bad parameters
|
ErrorBadParameters=Bad parameters
|
||||||
UserCannotBeDelete=User can not be deleted. May be it is associated on Dolibarr entities.
|
UserCannotBeDelete=User can not be deleted. May be it is associated on Dolibarr entities.
|
||||||
ErrorFieldsRequired=Some required fields were not filled.
|
ErrorFieldsRequired=Some required fields were not filled.
|
||||||
|
ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
|
||||||
|
|
||||||
|
|||||||
@ -14,4 +14,5 @@ ErrorSupplierCodeRequired=Code fournisseur obligatoire
|
|||||||
ErrorSupplierCodeAlreadyUsed=Code fournisseur deja utilise
|
ErrorSupplierCodeAlreadyUsed=Code fournisseur deja utilise
|
||||||
ErrorBadParameters=Parametres incorrects
|
ErrorBadParameters=Parametres incorrects
|
||||||
UserCannotBeDelete=L'utilisateur ne peut pas etre supprimée. Peut-être est-il associé à des éléments de Dolibarr.
|
UserCannotBeDelete=L'utilisateur ne peut pas etre supprimée. Peut-être est-il associé à des éléments de Dolibarr.
|
||||||
ErrorFieldsRequired=Des champs obligatoires n'ont pas été renseignés
|
ErrorFieldsRequired=Des champs obligatoires n'ont pas été renseignés
|
||||||
|
ErrorFailedToCreateDir=Echec a la creation d'un repertoire. Verifiez que le user du serveur Web a bien les droits d'ecriture dans les repertoires documents de Dolibarr. Si le parametre <b>safe_mode</b> a été activé sur ce PHP, vérifier que les fichiers php dolibarr appartiennent à l'utilisateur du serveur Web.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user