public Reservatie ReservatieMakenEnReturnen(int klantNr, DateTime startDatum, Arrengement arrengement, int startUur, int duur, int limoId, StalLocatie startStalLocatie, StalLocatie aankomstStalLocatie, string verwachtAdres)
        {
            Klant     klant   = VindVolledigeKlantVoorKlantNummer(klantNr);
            Limousine limo    = VindLimousineVoorId(limoId);
            double    korting = 0;

            if (klant.Categorie.StaffelKorting != null)
            {
                korting = BerekenKortingsPercentage(klant, startDatum);
            }
            Reservatie res = new Reservatie(klant, startDatum, arrengement, startUur, duur, limo, DateTime.Now, startStalLocatie, aankomstStalLocatie, verwachtAdres, korting);

            VoegReservatieToe(res);
            return(res);
        }
        public Reservatie(Klant klant, DateTime startDatum, Arrengement arrengement, int startUur, int aantalUur, Limousine limo, DateTime datumVanAanmaakReservatie,
                          StalLocatie startStalLocatie, StalLocatie aankomstStalLocatie, string verwachtAdres, double aangerekendeKorting)
        {
            if (startDatum.Hour != 0)
            {
                throw new IncorrectParameterException("Startdatum werd niet correct geleverd: mag geen uur bevatten, dit wordt in de startuur parameter geleverd");
            }
            if (startDatum.Minute != 0)
            {
                throw new IncorrectParameterException("Startdatum mag  geen minuten bevatten: Reservaties beginnen altijd op het uur");
            }
            if (startUur < 0 || aantalUur < 0)
            {
                throw new IncorrectParameterException("Startuur en aantal uur mogen niet negatief zijn");
            }
            if (aantalUur > 11 || aantalUur == 0)
            {
                throw new IncorrectParameterException("Elk arrengement moet minstens 1u duren en mag niet langer duren dan 11u");
            }
            //business regels
            if (arrengement == Arrengement.Wellness)
            {
                if (aantalUur != 10)
                {
                    throw new IncorrectParameterException("Een wellness arrengement duurt altijd 10u");
                }
                if (startUur > 12 || startUur < 7)
                {
                    throw new IncorrectParameterException("Een wellness arrengement begint altijd tussen 7 en 12u");
                }
            }
            else if (arrengement == Arrengement.NightLife)
            {
                if (aantalUur < 7)
                {
                    throw new IncorrectParameterException("Een nightlife arrengement duurt altijd minstens 7u");
                }
                if (startUur < 20 && startUur != 0)
                {
                    throw new IncorrectParameterException("Een nightlife arrengement begint altijd tussen 20 en 24u");
                }
            }
            else if (arrengement == Arrengement.Wedding)
            {
                if (aantalUur < 7)
                {
                    throw new IncorrectParameterException("Een wedding arrengement duurt altijd minstens 7u");
                }
                if (startUur > 15 || startUur < 7)
                {
                    throw new IncorrectParameterException("Een wedding arrengement begint altijd tussen 7 en 15u");
                }
            }
            StartMoment = startDatum.AddHours(startUur);
            if (StartMoment < datumVanAanmaakReservatie)
            {
                throw new IncorrectParameterException("Er mag geen reservatie in het verleden worden aangemaakt.");
            }
            Klant = klant;
            DatumVanReservering = datumVanAanmaakReservatie;
            // ReserveringsNummer = reservatieNummer;
            Limousine           = limo;
            StartStalLocatie    = startStalLocatie;
            AankomstStalLocatie = aankomstStalLocatie;
            Arrengement         = arrengement;
            AantalUur           = aantalUur;
            AangerekendeKorting = aangerekendeKorting;
            VerwachtAdres       = verwachtAdres;

            if (TotaalTeBetalen == 0)
            {
                PrijsBerekening();
            }
        }