From c275c8f8748617670a6829641a9432d86a784f71 Mon Sep 17 00:00:00 2001 From: JelmerHinssen Date: Thu, 30 Mar 2017 15:49:27 +0200 Subject: [PATCH] Overboekingen Je kan een soort van een overboeking doen --- src/Application/Helper/IBAN.php | 66 ++++++++++++++++++--------- src/Application/Overboeking.php | 80 +++++++++++++++++++++++++++------ src/Application/Transacties.php | 57 ++++++++++++----------- templates/overboeking.phtml | 14 +++--- 4 files changed, 152 insertions(+), 65 deletions(-) diff --git a/src/Application/Helper/IBAN.php b/src/Application/Helper/IBAN.php index a6f97cb..e5664db 100644 --- a/src/Application/Helper/IBAN.php +++ b/src/Application/Helper/IBAN.php @@ -21,12 +21,55 @@ class IBAN $newword = ""; $wordarray = str_split($word); foreach ($wordarray as $v) { - $newword .= ord(strtolower($v)) - 87; + if(ctype_alpha($v)){ + $newword .= ord(strtolower($v)) - 87; + }else{ + $newword .= $v; + } } return $newword; } - + private function getCheckDigits($bignum){ + //Modulo staartdeling + $modulo97 = (int)substr($bignum, 0, 6); + $modulo97 = $modulo97 % 97; + $modulo97 = (1000000 * $modulo97) + (int)substr($bignum, 6, 6); + $modulo97 = $modulo97 % 97; + $modulo97 = (1000000 * $modulo97) + (int)substr($bignum, 12, 6); + $modulo97 = $modulo97 % 97; + $modulo97 = (1000000 * $modulo97) + (int)substr($bignum, 18, 6); + $modulo97 = $modulo97 % 97; + $checkdigits = 98 - $modulo97; + if (strlen($checkdigits) < 2) { + $checkdigits = '0' . $checkdigits; + } + return $checkdigits; + } + + public function isValidIBAN($iban){ + $iban = str_replace(" ", "", $iban); + $landcode = substr($iban, 0, 2); + $controle = substr($iban, 2, 2); + $identificatie = substr($iban, 4); + $identificatie .= $landcode; + $identificatie .= "00"; + $nummer = $this->wordToNumbers($identificatie); + return $controle == $this->getCheckDigits($nummer); + } + + public function getRekeningNummer($iban){ + return substr(str_replace(" ", "", $iban), 8); + } + + public function getBank($iban){ + return substr(str_replace(" ", "", $iban), 4, 4); + } + + public function getLand($iban){ + return substr(str_replace(" ", "", $iban), 0, 2); + } + public function getIBAN($rekeningnr) { $landcode = "NL"; // NL in vertaling @@ -39,24 +82,7 @@ class IBAN $rekeningnr = str_pad($rekeningnr, 10, 0, STR_PAD_LEFT); $bignum = $banknumber . $rekeningnr . $landnumber . "00"; - - $modulo97 = ''; - $checkdigits = '00'; - - // begin modulo staartdeling - $modulo97 = (int)substr($bignum, 0, 6); - $modulo97 = $modulo97 % 97; - $modulo97 = (1000000 * $modulo97) + (int)substr($bignum, 6, 6); - $modulo97 = $modulo97 % 97; - $modulo97 = (1000000 * $modulo97) + (int)substr($bignum, 12, 6); - $modulo97 = $modulo97 % 97; - $modulo97 = (1000000 * $modulo97) + (int)substr($bignum, 18, 6); - $modulo97 = $modulo97 % 97; - $checkdigits = 98 - $modulo97; - // einde modulo staartdeling - if (strlen($checkdigits) < 2) { - $checkdigits = '0' . $checkdigits; - } + $checkdigits = $this->getCheckDigits($bignum); $rekeningnrarr = str_split($rekeningnr, 4); return $landcode.$checkdigits." ".$bankcode." ".$rekeningnrarr[0]." ".$rekeningnrarr[1]." ".$rekeningnrarr[2]; diff --git a/src/Application/Overboeking.php b/src/Application/Overboeking.php index 275db21..b80a941 100644 --- a/src/Application/Overboeking.php +++ b/src/Application/Overboeking.php @@ -14,26 +14,80 @@ namespace Inforbank\Application; -use \Slim\App; -use Inforbank\Application\Helper\Klant; -use Inforbank\Application\Helper\Rekeningen; -use Inforbank\Application\Helper\IBAN; use Inforbank\Application; +use Inforbank\Application\Helper\IBAN; +use Inforbank\Application\Helper\Klant; +use Inforbank\Application\Helper\Redirect; +use Inforbank\Application\Helper\Rekeningen; +use Slim\App; -class Overboeking -{ - public function __construct(App $app) - { +class Overboeking { + + public function __construct(App $app) { $app->get('/overboeking', function ($request, $response, $args) { $klant = Klant::getCurrentUser(); $rekeningen = Rekeningen::getCurrentUserRekeningen(); - - - return $this->renderer->render($response, 'overboeking.phtml', [ - 'klant' => $klant, - 'rekeningen' => $rekeningen + 'klant' => $klant, + 'rekeningen' => $rekeningen ]); }); + + $app->post('/overboeking', function ($request, $response, $args) { + $post = $request->getParsedBody(); + $van = $post['van']; + $naar = $post['naar']; + $bedrag = $post['bedrag']; + $omschrijving = $post['omschrijving']; + + $rekeningen = Rekeningen::getCurrentUserRekeningen(); + + $vanRekening = false; + //TODO fatsoenlijke errorafhandeling en redirect + //Controleer of de rekening wel van de ingelogde klant is + foreach ($rekeningen as $rek) { + if ($rek['nr'] === $van) { + $vanRekening = $rek; + break; + } + } + if (!$vanRekening) { + //error: rekening is niet van klant + return Redirect::create($request, $response, "/eigenaar"); + } + $ibanHelper = new IBAN(); + if (!$ibanHelper->isValidIBAN($naar)) { + //error: ongeldige iban + return Redirect::create($request, $response, "/ongeldig"); + } else if (!($ibanHelper->getLand($naar) == "NL" && $ibanHelper->getBank($naar) === "INFO")) { + //error: andere bank + return Redirect::create($request, $response, "/andere"); + } + $naarRekeningnr = $ibanHelper->getRekeningNummer($naar); + //TODO kijk of de rekening wel bestaat + if ($naarRekeningnr == $vanRekening['nr']) { + //error: afzender is hetzelfde als ontvanger + return Redirect::create($request, $response, "/zelfde"); + } + + + //TODO geldigheid bedrag onderzoeken + //$bedragValue = (double) $bedrag; + //TODO omschrijving in database stoppen + if (strlen($omschrijving) > 40) { + //error: te lange omschrijving + } + $db = Application::getContainer()->db; + $db->transacties->insert([ + "van" => $vanRekening['nr'], + "naar" => $naarRekeningnr, + "bedrag" => $bedrag, + "type" => "GT" //GT staat voor internetbankieren + ]); + + //TODO update saldo + return Redirect::create($request, $response, "/"); + }); } + } diff --git a/src/Application/Transacties.php b/src/Application/Transacties.php index cbc5f7a..a289b2b 100644 --- a/src/Application/Transacties.php +++ b/src/Application/Transacties.php @@ -28,36 +28,41 @@ class Transacties $klant = Klant::getCurrentUser(); $rekeningen = Rekeningen::getCurrentUserRekeningen(); - $ibanhelper = new IBAN; - $rekening = false; - $rekeningnr = $args['rekeningnummer']; - - foreach($rekeningen as $rek){ - if($rek['nr'] === $rekeningnr){ - $rekening = $rek; - break; - } - } - - $container = Application::getContainer(); - $db = $container->db; - $transacties = $db->transacties->where('van', '12345678')->or('naar', $rekeningnr); - - $returnArray = array(); + $ibanhelper = new IBAN; + $rekening = false; + $rekeningnr = $args['rekeningnummer']; - foreach ($transacties as $transactie) { - $returnArray[] = array( - "van" => $ibanhelper->getIBAN($transactie['van']), - "naar" => $ibanhelper->getIBAN($transactie['naar']), - "bedrag" => $transactie['bedrag'], - "type" => $transactie['type'] - ); - } - + //Controleer of deze rekening wel van de ingelogde klant is + foreach($rekeningen as $rek){ + if($rek['nr'] === $rekeningnr){ + $rekening = $rek; + break; + } + } + if(!$rekening){ + return $this->renderer->render($response, 'transacties.phtml', [ + 'klant' => $klant, + 'rekening' => false + ]); + } + $container = Application::getContainer(); + $db = $container->db; + $transacties = $db->transacties->where('van', '12345678')->or('naar', $rekeningnr); + + $returnArray = array(); + + foreach ($transacties as $transactie) { + $returnArray[] = array( + "van" => $ibanhelper->getIBAN($transactie['van']), + "naar" => $ibanhelper->getIBAN($transactie['naar']), + "bedrag" => $transactie['bedrag'], + "type" => $transactie['type'] + ); + } return $this->renderer->render($response, 'transacties.phtml', [ 'klant' => $klant, 'rekening' => $rekening, - 'transacties' => $returnArray + 'transacties' => $returnArray ]); }); } diff --git a/templates/overboeking.phtml b/templates/overboeking.phtml index 6fc185a..701d91b 100644 --- a/templates/overboeking.phtml +++ b/templates/overboeking.phtml @@ -1,14 +1,16 @@ - " . $rekening['rekeningnr'] . "\n"; + echo "\n"; } ?>
-
-
- - +
+
+
+ +