1
0

Statistieken

This commit is contained in:
JelmerHinssen 2017-04-02 21:04:14 +02:00
parent ad9f70dc32
commit 184dbd5b4e
12 changed files with 241 additions and 74 deletions

14
assets/chart.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -42,6 +42,19 @@ ul.nv {
color: white; color: white;
} }
.circle {
border-radius: 50%;
color: #000000;
text-align: center;
background: #ffffff;
height: 20px;
width: 20px;
display: table-cell;
text-align: center;
border-radius: 50%;
}
/** Index **/ /** Index **/
.clickable { .clickable {
cursor: pointer; cursor: pointer;
@ -68,15 +81,3 @@ ul.nv {
color: grey; color: grey;
margin-top: 50px; margin-top: 50px;
} }
.circle {
border-radius: 50%;
color: #000000;
text-align: center;
background: #ffffff;
height: 20px;
width: 20px;
display: table-cell;
text-align: center;
border-radius: 50%;
}

View File

@ -1,24 +1,22 @@
<?php <?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
namespace Inforbank\Application\Helper; namespace Inforbank\Application\Helper;
use Exception; use Exception;
use Inforbank\Application; use Inforbank\Application;
use Inforbank\Application\Helper\Rekeningen; use Inforbank\Application\Helper\Rekeningen;
/** class Overboekingen {
* Description of Overboekingen
* public static $EIGENAAR = 1;
* @author Sjelm public static $IBAN = 2;
*/ public static $BANK = 3;
class Overboekingen public static $BESTAAN = 4;
{ public static $ZELFDE = 5;
public static $GETAL = 6;
public static $POSITIEF = 7;
public static $SALDO = 8;
public static $OMSCHRIJVING = 9;
private static function isValidFloat($bedrag) { private static function isValidFloat($bedrag) {
$hasdecimal = false; $hasdecimal = false;
@ -56,6 +54,7 @@ class Overboekingen
} }
return true; return true;
} }
/** /**
* *
* @param IBAN $van De rekening waar het bedrag vanaf wordt gehaald * @param IBAN $van De rekening waar het bedrag vanaf wordt gehaald
@ -64,28 +63,19 @@ class Overboekingen
* @param string $omschrijving De omschrijving van de overoeking * @param string $omschrijving De omschrijving van de overoeking
* $param string $type Het type overboeking * $param string $type Het type overboeking
*/ */
public static function createOverboeking($van, $naar, $bedrag, $omschrijving, $type) public static function createOverboeking($van, $naar, $bedrag, $omschrijving, $type) {
{ $vanRekening = Rekeningen::isEigenRekeningIBAN($van);
$rekeningen = Rekeningen::getCurrentUserRekeningen();
$vanRekening = false;
//Controleer of de rekening wel van de ingelogde klant is
foreach ($rekeningen as $rek) {
if ($rek['iban'] === $van) {
$vanRekening = $rek;
break;
}
}
if (!$vanRekening) { if (!$vanRekening) {
//error: rekening is niet van klant //error: rekening is niet van klant
throw new Exception("U bent niet de eigenaar van deze rekening"); throw new Exception("U bent niet de eigenaar van deze rekening", Overboekingen::$EIGENAAR);
} }
$ibanHelper = new IBAN(); $ibanHelper = new IBAN();
if (!$ibanHelper->isValidIBAN($naar)) { if (!$ibanHelper->isValidIBAN($naar)) {
//error: ongeldige iban //error: ongeldige iban
throw new Exception("De IBAN van de ontvanger is ongeldig"); throw new Exception("De IBAN van de ontvanger is ongeldig", Overboekingen::$IBAN);
} elseif (!($ibanHelper->getLand($naar) == "NL" && $ibanHelper->getBank($naar) === "INFO")) { } elseif (!($ibanHelper->getLand($naar) == "NL" && $ibanHelper->getBank($naar) === "INFO")) {
//error: andere bank //error: andere bank
throw new Exception("U kunt geen overboeking naar een andere bank doen"); throw new Exception("U kunt geen overboeking naar een andere bank doen", Overboekingen::$BANK);
} }
$naarRekeningnr = $ibanHelper->getRekeningNummer($naar); $naarRekeningnr = $ibanHelper->getRekeningNummer($naar);
@ -94,29 +84,29 @@ class Overboekingen
$naarRekening = $db->rekeningen->where("rekeningnr", $naarRekeningnr); $naarRekening = $db->rekeningen->where("rekeningnr", $naarRekeningnr);
if (count($naarRekening) !== 1) { if (count($naarRekening) !== 1) {
//error: rekening bestaat niet //error: rekening bestaat niet
throw new Exception("De ontvangende rekening bestaat niet"); throw new Exception("De ontvangende rekening bestaat niet", Overboekingen::$BESTAAN);
} }
foreach ($naarRekening as $rekening) { foreach ($naarRekening as $rekening) {
$naarid = $rekening['id']; $naarid = $rekening['id'];
} }
if ($naarRekeningnr == $vanRekening['nr']) { if ($naarRekeningnr == $vanRekening['nr']) {
//error: afzender is hetzelfde als ontvanger //error: afzender is hetzelfde als ontvanger
throw new Exception("De ontvangende rekening is hetzelfde als de verzendende"); throw new Exception("De ontvangende rekening is hetzelfde als de verzendende", Overboekingen::$ZELFDE);
} }
if (!Overboekingen::isValidFloat($bedrag)) { if (!Overboekingen::isValidFloat($bedrag)) {
throw new Exception("Geef als bedrag een getal op met maximaal 9 cijfers voor en 2 na de komma"); throw new Exception("Geef als bedrag een getal op met maximaal 9 cijfers voor en 2 na de komma", Overboekingen::$GETAL);
} }
if ($bedrag <= 0) { if ($bedrag <= 0) {
throw new Exception("Het bedrag moet positief zijn"); throw new Exception("Het bedrag moet positief zijn", Overboekingen::$POSITIEF);
} }
$bedragvalue = doubleval(str_replace(",", ".", $bedrag)); $bedragvalue = doubleval(str_replace(",", ".", $bedrag));
if ($bedragvalue > $vanRekening['saldo']) { if ($bedragvalue > $vanRekening['saldo']) {
throw new Exception("Te laag saldo"); throw new Exception("Te laag saldo", Overboekingen::$SALDO);
} }
if (strlen($omschrijving) > 40 && $type !== "id") { if (strlen($omschrijving) > 40 && $type !== "id") {
//error: te lange omschrijving //error: te lange omschrijving
throw new Exception("De omschrijving is te lang"); throw new Exception("De omschrijving is te lang", Overboekingen::$OMSCHRIJVING);
} }
//Voeg transactie toe //Voeg transactie toe
$db->transacties->insert([ $db->transacties->insert([
@ -124,7 +114,8 @@ class Overboekingen
"naar" => $naarRekeningnr, "naar" => $naarRekeningnr,
"bedrag" => $bedrag, "bedrag" => $bedrag,
"type" => $type, "type" => $type,
"omschrijving" => $omschrijving "omschrijving" => $omschrijving,
"datum" => date("Y-m-d")
]); ]);
//Wijzig saldo //Wijzig saldo
@ -144,4 +135,5 @@ class Overboekingen
Berichten::newBericht($naarRekening[$naarid]['klantid'], "De InforBank", "Uw saldo is te hoog"); Berichten::newBericht($naarRekening[$naarid]['klantid'], "De InforBank", "Uw saldo is te hoog");
} }
} }
} }

View File

@ -44,4 +44,30 @@ class Rekeningen
return $returnArray; return $returnArray;
} }
public static function isEigenRekeningIBAN($iban){
$rekeningen = Rekeningen::getCurrentUserRekeningen();
$vanRekening = false;
//Controleer of de rekening wel van de ingelogde klant is
foreach ($rekeningen as $rek) {
if ($rek['iban'] === $iban) {
$vanRekening = $rek;
break;
}
}
return $vanRekening;
}
public static function isEigenRekeningnr($nr){
$rekeningen = Rekeningen::getCurrentUserRekeningen();
$vanRekening = false;
//Controleer of de rekening wel van de ingelogde klant is
foreach ($rekeningen as $rek) {
if ($rek['nr'] === $nr) {
$vanRekening = $rek;
break;
}
}
return $vanRekening;
}
} }

View File

@ -0,0 +1,47 @@
<?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("d M", strtotime("-$i day"));
}
$container = Application::getContainer();
$user = $container->auth->getUserID();
$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)
->group("datum")->order("datum ASC, id DESC");
$erbij = $db->transacties->select("datum, SUM(bedrag) as bedr")->where("naar", $rekeningNummer)
->group("datum")->order("datum ASC, id DESC");
$huidigSaldo = (double)$saldo;
$yas = array($huidigSaldo);
for($i = 1; $i <= $dagen; $i++){
$af = (double)$eraf[array("datum" => date("Y-m-d", strtotime("-" . $i . " day")))]['bedr'];
$bij = (double)$erbij[array("datum" => date("Y-m-d", strtotime("-" . $i . " day")))]['bedr'];
if(!isset($af)){
$af = 0;
}
if(!isset($bij)){
$bij = 0;
}
$huidigSaldo += $af;
$huidigSaldo -= $bij;
array_unshift($yas, $huidigSaldo);
}
return [
"x-as" => $xas,
"y-as" => $yas
];
}
}

View File

@ -47,7 +47,7 @@ class Overboeking
Overboekingen::createOverboeking($ibanhelper->getIBAN($van), $naar, $bedrag, $omschrijving, "bg"); Overboekingen::createOverboeking($ibanhelper->getIBAN($van), $naar, $bedrag, $omschrijving, "bg");
return Redirect::create($request, $response, "/rekeningen/$van"); return Redirect::create($request, $response, "/rekeningen/$van");
} catch (Exception $e) { } catch (Exception $e) {
return Redirect::create($request, $response, "/overboeking?error=" . $e->getMessage() . ""); return Redirect::create($request, $response, "/overboeking?error=" . $e->getCode() . "");
} }
})->add(new Middleware()); })->add(new Middleware());
} }

View File

@ -0,0 +1,36 @@
<?php
/**
* Informatica Eindproject D4p
* 6in3, Stedelijk Gymnasium Nijmegen
* Docent: Hans de Wolf
*
* ==================
*
* Daniel Boutros,
* Christiaan Goossens,
* Jelmer Hinssen
*/
namespace Inforbank\Application;
use Inforbank\Application\Auth\Middleware;
use Inforbank\Application\Helper\Header;
use Inforbank\Application\Helper\Statistieken as StatistiekenHelper;
use Slim\App;
class Statistieken {
public function __construct(App $app)
{
$app->get('/statistieken/{rekeningnummer}', function ($request, $response, $args) {
$verloop = StatistiekenHelper::getSaldoverloop(30, $args['rekeningnummer']);
return $this->renderer->render($response, "statistieken.phtml", [
"header" => Header::getHeaderData(),
"statistieken" => [
"x-as" => $verloop['x-as'],
"y-as" => $verloop['y-as']
]
]);
})->add(new Middleware());
}
}

View File

@ -45,7 +45,8 @@ class Transacties {
} }
$container = Application::getContainer(); $container = Application::getContainer();
$db = $container->db; $db = $container->db;
$transacties = $db->transacties->where('van', '12345678')->or('naar', $rekeningnr); $transacties = $db->transacties->where('van', '12345678')->or('naar', $rekeningnr)
->order("datum DESC, id DESC");
$returnArray = array(); $returnArray = array();
@ -55,7 +56,8 @@ class Transacties {
"naar" => $ibanhelper->getIBAN($transactie['naar']), "naar" => $ibanhelper->getIBAN($transactie['naar']),
"bedrag" => $transactie['bedrag'], "bedrag" => $transactie['bedrag'],
"type" => $transactie['type'], "type" => $transactie['type'],
"omschrijving" => $transactie['omschrijving'] "omschrijving" => $transactie['omschrijving'],
"datum" => $transactie['datum']
); );
} }
return $this->renderer->render($response, 'transacties.phtml', [ return $this->renderer->render($response, 'transacties.phtml', [

View File

@ -134,6 +134,7 @@ new Inforbank\Application\Transacties($app);
new Inforbank\Application\Overboeking($app); new Inforbank\Application\Overboeking($app);
new Inforbank\Application\Rekeningen($app); new Inforbank\Application\Rekeningen($app);
new Inforbank\Application\Berichten($app); new Inforbank\Application\Berichten($app);
new Inforbank\Application\Statistieken($app);
/** /**
* Idob * Idob

View File

@ -1,3 +1,13 @@
<?php
//De functie money_format bestaat alleen op systemen met strfmon, dus niet op Windows
//Om een foutmelding tijdens het testen te voorkomen definiëren we deze functie
//als money_format niet bestaat
if(!function_exists("money_format")){
function money_format($format, $value){
return "€ " . $value;
}
}
?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
@ -5,6 +15,7 @@
<title>Inforbank</title> <title>Inforbank</title>
<link rel="stylesheet" href="<?= $header['base'] ?>assets/css/main.css"> <link rel="stylesheet" href="<?= $header['base'] ?>assets/css/main.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="<?= $header['base']?>assets/chart.min.js"></script>
<base href="<?= $header['base'] ?>"> <base href="<?= $header['base'] ?>">
</head> </head>
<body> <body>

View File

@ -0,0 +1,35 @@
<?php include '__header.phtml'; ?>
<canvas id="myChart" height="100"></canvas>
<script>
function newDate(days) {
return moment().add(days, 'd');
}
Chart.defaults.global.legend.display = false;//Geen legenda
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: "line",
options: {
title: {
display: true,
text: "Saldo van de afgelopen maand"
}
},
data: {
labels: <?php echo json_encode($statistieken['x-as']); ?>,
datasets: [{
label: "Saldo",
data: <?php echo json_encode($statistieken['y-as']); ?>,
borderWidth: 2,
lineTension: 0,
fill: false,
borderColor: "black",
pointRadius: 5,
pointBorderColor: "rgba(0, 0, 0, 0)", //Onzichtbare punten
pointBackgroundColor: "rgba(0, 0, 0, 0)",
pointHoverRadius: 5,
pointHoverBackgroundColor: "black"
}]
}
});
</script>
<?php include '__footer.phtml'; ?>

View File

@ -10,7 +10,9 @@ if (!$rekening) {
} else { } else {
?> ?>
<h2 class="page-header">Transactieoverzicht<a class="btn btn-default pull-right" href="overboeking" role="button">Nieuwe overboeking</a></h2> <h2 class="page-header">Transactieoverzicht
<a class="btn btn-default pull-right" href="overboeking" role="button">Nieuwe overboeking</a>
<a class="btn btn-default pull-right" href="statistieken/<?= $rekening['nr']?>" role="button">Statistieken</a></h2>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
<div class="row"> <div class="row">
@ -44,7 +46,7 @@ foreach ($transacties as $transactie) {
$transactie['omschrijving'] = ""; $transactie['omschrijving'] = "";
} }
echo "<tr>"; echo "<tr>";
echo "<td></td>"; echo "<td>" . $transactie['datum'] . "</td>";
echo "<td>" . $transactie['type'] . "</td>\n"; echo "<td>" . $transactie['type'] . "</td>\n";
echo "<td>" . $transactie['omschrijving'] . "</td>\n"; echo "<td>" . $transactie['omschrijving'] . "</td>\n";