You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.0 KiB
PHP
59 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace Inforbank\Application\Helper;
|
|
|
|
use Exception;
|
|
use Inforbank\Application;
|
|
|
|
class Statistieken
|
|
{
|
|
public static $EIGENAAR = 1;
|
|
|
|
public static function getSaldoverloop($dagen, $rekeningNummer)
|
|
{
|
|
if (!Rekeningen::isEigenRekeningnr($rekeningNummer)) {
|
|
throw new Exception("Dit is niet uw eigen rekening", Statistieken::$EIGENAAR);
|
|
}
|
|
$xas = array();
|
|
for ($i = $dagen; $i >= 0; $i--) {
|
|
$xas[] = date("Y-m-d", strtotime("now") - $i * 86400);
|
|
}
|
|
$container = Application::getContainer();
|
|
$db = $container->db;
|
|
$saldo = $db->rekeningen->where("rekeningnr", $rekeningNummer)[array("rekeningnr" => $rekeningNummer)]['saldo'];
|
|
$eraf = $db->transacties->select("datum, SUM(bedrag) as bedr")->where("van", $rekeningNummer)
|
|
->and("`datum` >= '" . date("Y-m-d", strtotime("now") - $dagen * 86400) . "'")->group("datum")->order("datum DESC");
|
|
$erbij = $db->transacties->select("datum, SUM(bedrag) as bedr")->where("naar", $rekeningNummer)
|
|
->group("datum")->order("datum DESC");
|
|
$huidigSaldo = (double)$saldo;
|
|
$vandaag = strtotime("now");
|
|
$yas = array_fill(0, $dagen + 1, 0);
|
|
foreach ($eraf as $af) {
|
|
$dag = strtotime($af['datum']);
|
|
$diff = floor(($vandaag - $dag)/86400);
|
|
if ($diff <= $dagen) {
|
|
$yas[$dagen - $diff] = (double)$af['bedr'];
|
|
}
|
|
}
|
|
foreach ($erbij as $bij) {
|
|
$dag = strtotime($bij['datum']);
|
|
$diff = floor(($vandaag - $dag)/86400);
|
|
if ($diff <= $dagen) {
|
|
$yas[$dagen - $diff + 1] -= (double)$bij['bedr'];
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
$verandering = 0;
|
|
for ($i = $dagen; $i >= 0; $i--) {
|
|
$huidigSaldo += $verandering;
|
|
$verandering = $yas[$i];
|
|
$yas[$i] = $huidigSaldo;
|
|
}
|
|
return [
|
|
"x-as" => $xas,
|
|
"y-as" => $yas
|
|
];
|
|
}
|
|
}
|