Overboeking wijzigt saldo
This commit is contained in:
		| @@ -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"); | ||||
|         } | ||||
|         if(!Overboekingen::isValidFloat($bedrag)){ | ||||
|             throw new Exception("Geef als bedrag een getal op met maximaal 9 cijfers voor en 2 na de komma"); | ||||
|         } | ||||
|          | ||||
|  | ||||
|         //TODO geldigheid bedrag onderzoeken | ||||
|         //$bedragValue = (double) $bedrag; | ||||
|         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"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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()); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user