From 9983c63af364ec3a880f7b43f2b7923c1e7cac9a Mon Sep 17 00:00:00 2001 From: JelmerHinssen Date: Sun, 2 Apr 2017 15:06:55 +0200 Subject: [PATCH] Overboeking wijzigt saldo --- src/Application/Helper/Overboekingen.php | 87 +++++++++++++++++++++--- src/Application/Overboeking.php | 2 +- 2 files changed, 78 insertions(+), 11 deletions(-) diff --git a/src/Application/Helper/Overboekingen.php b/src/Application/Helper/Overboekingen.php index 263ebe8..51bd109 100644 --- a/src/Application/Helper/Overboekingen.php +++ b/src/Application/Helper/Overboekingen.php @@ -10,6 +10,7 @@ namespace Inforbank\Application\Helper; use Exception; use Inforbank\Application; +use Inforbank\Application\Helper\Rekeningen; /** * Description of Overboekingen @@ -18,6 +19,43 @@ use Inforbank\Application; */ class Overboekingen { + + private static function isValidFloat($bedrag){ + $hasdecimal = false; + $decimals = 0; + $voorcijfers = 0; + for($i = 0; $i < strlen($bedrag); $i++){ + $char = substr($bedrag, $i, 1); + $ascii = ord($char); + if($hasdecimal){ + if($char === "." || $char === ","){ + //Twee komma's + return false; + }else if($ascii >= ord("0") && $ascii <= ord("9")){ + $decimals++; + if($decimals > 2){ + //Meer dan twee cijfers achter de komma + return false; + } + }else{ + //Ongeldig teken + return false; + } + }else if($char === "." || $char === ","){ + $hasdecimal = true; + }else if($ascii >= ord("0") || $ascii <= ord("9")){ + $voorcijfers++; + if($voorcijfers > 9){ + //Te veel cijfers voor de komma + return false; + } + }else{ + //Ongeldig teken + return false; + } + } + return true; + } /** * * @param IBAN $van De rekening waar het bedrag vanaf wordt gehaald @@ -29,9 +67,7 @@ class Overboekingen public static function createOverboeking($van, $naar, $bedrag, $omschrijving, $type) { $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['iban'] === $van) { @@ -52,20 +88,37 @@ class Overboekingen throw new Exception("U kunt geen overboeking naar een andere bank doen"); } $naarRekeningnr = $ibanHelper->getRekeningNummer($naar); - //TODO kijk of de rekening wel bestaat + + //Controleer of de rekening bestaat + $db = Application::getContainer()->db; + $naarRekening = $db->rekeningen->where("rekeningnr", $naarRekeningnr); + if(count($naarRekening) !== 1){ + //error: rekening bestaat niet + throw new Exception("De ontvangende rekening bestaat niet"); + } + foreach($naarRekening as $rekening){ + $naarid = $rekening['id']; + } if ($naarRekeningnr == $vanRekening['nr']) { //error: afzender is hetzelfde als ontvanger throw new Exception("De ontvangende rekening is hetzelfde als de verzendende"); } - - - //TODO geldigheid bedrag onderzoeken - //$bedragValue = (double) $bedrag; + if(!Overboekingen::isValidFloat($bedrag)){ + throw new Exception("Geef als bedrag een getal op met maximaal 9 cijfers voor en 2 na de komma"); + } + + if($bedrag <= 0){ + throw new Exception("Het bedrag moet positief zijn"); + } + $bedragvalue = doubleval(str_replace(",", ".", $bedrag)); + if($bedragvalue > $vanRekening['saldo']){ + throw new Exception("Te laag saldo"); + } if (strlen($omschrijving) > 40 && $type !== "id") { //error: te lange omschrijving throw new Exception("De omschrijving is te lang"); } - $db = Application::getContainer()->db; + //Voeg transactie toe $db->transacties->insert([ "van" => $vanRekening['nr'], "naar" => $naarRekeningnr, @@ -74,7 +127,21 @@ class Overboekingen "omschrijving" => $omschrijving ]); - //TODO update saldo - //TODO Checken of het saldo van de rekening onder de 20 euro komt, dan doe je een mededeling via de berichthelper. + //Wijzig saldo + $db->rekeningen->where("rekeningnr", $vanRekening['nr'])->update([ + "saldo" => $vanRekening['saldo'] - $bedragvalue + ]); + $naarRekening[$naarid]->update([ + "saldo" => $naarRekening[$naarid]['saldo'] + $bedragvalue + ]); + //Stuur bericht bij laag saldo + if($vanRekening['saldo'] - $bedragvalue < 20){ + Berichten::newBericht(Application::getContainer()->auth->getUserID(), "De InforBank", "U heeft een laag saldo"); + } + //In de database worden de getallen met 10 cijfers voor de komma opgeslagen + //Als het saldo te hoog wordt heb je een probleem + if($naarRekening[$naarid]['saldo'] + $bedragvalue > 9000000000){ + Berichten::newBericht($naarRekening[$naarid]['klantid'], "De InforBank", "Uw saldo is te hoog"); + } } } diff --git a/src/Application/Overboeking.php b/src/Application/Overboeking.php index ddfba0e..6a2b9db 100644 --- a/src/Application/Overboeking.php +++ b/src/Application/Overboeking.php @@ -47,7 +47,7 @@ class Overboeking Overboekingen::createOverboeking($ibanhelper->getIBAN($van), $naar, $bedrag, $omschrijving, "bg"); return Redirect::create($request, $response, "/rekeningen/$van"); } catch (Exception $e) { - return Redirect::create($request, $response, "/overboeking?$e"); + return Redirect::create($request, $response, "/overboeking?error=" . $e->getMessage() . ""); } })->add(new Middleware()); }