Overboeking wijzigt saldo
This commit is contained in:
		@@ -10,6 +10,7 @@ namespace Inforbank\Application\Helper;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use Exception;
 | 
					use Exception;
 | 
				
			||||||
use Inforbank\Application;
 | 
					use Inforbank\Application;
 | 
				
			||||||
 | 
					use Inforbank\Application\Helper\Rekeningen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Description of Overboekingen
 | 
					 * Description of Overboekingen
 | 
				
			||||||
@@ -18,6 +19,43 @@ use Inforbank\Application;
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
class Overboekingen
 | 
					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
 | 
					     * @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)
 | 
					    public static function createOverboeking($van, $naar, $bedrag, $omschrijving, $type)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $rekeningen = Rekeningen::getCurrentUserRekeningen();
 | 
					        $rekeningen = Rekeningen::getCurrentUserRekeningen();
 | 
				
			||||||
 | 
					 | 
				
			||||||
        $vanRekening = false;
 | 
					        $vanRekening = false;
 | 
				
			||||||
        //TODO fatsoenlijke errorafhandeling en redirect
 | 
					 | 
				
			||||||
        //Controleer of de rekening wel van de ingelogde klant is
 | 
					        //Controleer of de rekening wel van de ingelogde klant is
 | 
				
			||||||
        foreach ($rekeningen as $rek) {
 | 
					        foreach ($rekeningen as $rek) {
 | 
				
			||||||
            if ($rek['iban'] === $van) {
 | 
					            if ($rek['iban'] === $van) {
 | 
				
			||||||
@@ -52,20 +88,37 @@ class Overboekingen
 | 
				
			|||||||
            throw new Exception("U kunt geen overboeking naar een andere bank doen");
 | 
					            throw new Exception("U kunt geen overboeking naar een andere bank doen");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        $naarRekeningnr = $ibanHelper->getRekeningNummer($naar);
 | 
					        $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']) {
 | 
					        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");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        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") {
 | 
					        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");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        $db = Application::getContainer()->db;
 | 
					        //Voeg transactie toe
 | 
				
			||||||
        $db->transacties->insert([
 | 
					        $db->transacties->insert([
 | 
				
			||||||
            "van" => $vanRekening['nr'],
 | 
					            "van" => $vanRekening['nr'],
 | 
				
			||||||
            "naar" => $naarRekeningnr,
 | 
					            "naar" => $naarRekeningnr,
 | 
				
			||||||
@@ -74,7 +127,21 @@ class Overboekingen
 | 
				
			|||||||
            "omschrijving" => $omschrijving
 | 
					            "omschrijving" => $omschrijving
 | 
				
			||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //TODO update saldo
 | 
					        //Wijzig saldo
 | 
				
			||||||
        //TODO Checken of het saldo van de rekening onder de 20 euro komt, dan doe je een mededeling via de berichthelper.
 | 
					        $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");
 | 
					                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?$e");
 | 
					                return Redirect::create($request, $response, "/overboeking?error=" . $e->getMessage() . "");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        })->add(new Middleware());
 | 
					        })->add(new Middleware());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user