示例#1
0
        protected override void VoegReservatieToe(Materiaal materiaal, int aantal, string startdatum, string[] dagen = null)
        {
            Reservatie reservatie = MaakReservatieObject(this, materiaal, startdatum, aantal);

            materiaal.AddReservatie(reservatie);
            Reservaties.Add(reservatie);
        }
示例#2
0
 public void VerwijderReservatie(Reservatie r)
 {
     if (Reservaties.Contains(r))
     {
         Reservaties.Remove(r);
     }
     else
     {
         throw new ArgumentException("Er is geen reservatie om te verwijderen");
     }
 }
示例#3
0
        private void MaakNieuweReservatieVoorStudent(Reservatie laatsReservatie, int verschil)
        {
            Student student = laatsReservatie.Gebruiker as Student;

            //Dit zou nooit moeten kunnen voorvallen
            //Toch voor de zekerheid opvangen
            if (student == null)
            {
                throw new ArgumentNullException("Gebruiken is null");
            }

            IDictionary <Materiaal, int> nieuw = new Dictionary <Materiaal, int>();

            nieuw.Add(laatsReservatie.Materiaal, verschil);

            student.MaakReservaties(nieuw, laatsReservatie.StartDatum.ToShortDateString());
        }
示例#4
0
 public void AddReservatie(Reservatie reservatie)
 {
     Reservaties.Add(reservatie);
 }
示例#5
0
        private void BerekenenOverrulenEnBlokkeren(Materiaal mat, int reserveerAantal, int aantalBeschikbaar, DateTime start, string[] geblokkeerdeDagen)
        {
            //Hier berekenen we hoeveel stuks we nog moeten Overrulen
            int aantal = reserveerAantal - aantalBeschikbaar;

            List <Reservatie> reservatiePool = new List <Reservatie>();

            //We vragen alle reservaties op van het materiaal tijdens de week dat we een reservatie willen doen
            reservatiePool = mat.GeeftReservatiesVanEenBepaaldeTijd(start) as List <Reservatie>;

            reservatiePool.Sort((r1, r2) => r1.CompareTo(r2));

            //We gaan een while lus willen starten omdat het kan zijn dat er verschillende gebruikers hun reservatie kwijtgeraken
            bool flag = false;

            while (!flag)
            {
                //Eerst kijken of er nog reservaties in de pool zitten die we gaan kunnen overrulen
                if (reservatiePool.Count == 0)
                {
                    break;
                }

                //De laatste Reservatie opvragen die er bij gekomen is
                Reservatie laatsteReservatie = reservatiePool.LastOrDefault(r => r is ReservatieStudent);
                if (laatsteReservatie == null)
                {
                    break;
                }

                //kijken heeft die genoeg stuks om het materiaal te kunnen reserveren
                if (aantal <= laatsteReservatie.AantalGereserveerd)
                {
                    //nu gaan we kijken of er nog over zijn in de reservatie
                    int verschil = laatsteReservatie.AantalGereserveerd - aantal;

                    ////Originele aantal wordt vermindert van de laatste reservatie
                    laatsteReservatie.AantalGereserveerd -= verschil;

                    if (!(laatsteReservatie is BlokkeringLector))
                    {
                        //Blijft er nog over dan wordt er een nieuwe reservatie gemaakt voor student
                        if (verschil > 0)
                        {
                            MaakNieuweReservatieVoorStudent(laatsteReservatie, verschil);
                        }
                        OverrulenVanReservatie(laatsteReservatie);
                        OverruledeReservaties.Add(laatsteReservatie);
                    }

                    //aantal wordt op nul gezet, want er zijn geen materialen meer te overrulen
                    aantal = 0;
                }
                else
                {
                    if (!(laatsteReservatie is BlokkeringLector))
                    {
                        //overrulen van de reservatie
                        OverrulenVanReservatie(laatsteReservatie);
                        OverruledeReservaties.Add(laatsteReservatie);
                    }

                    //Nu moeten we nog berekenen wat er nog overblijft
                    aantal -= laatsteReservatie.AantalGereserveerd;

                    //De laatstereservatie moet nu uit de lijst met potentiele reservatie verwijdert worden
                    reservatiePool.Remove(laatsteReservatie);
                }

                //Nu moet er nog een veiligheid in gebouwd worden zodat we nog uit de while lus geraken
                //als aantal minder dan 0 is moet er niet meer overruult worden
                if (aantal <= 0)
                {
                    flag = true;
                }
            }
        }
示例#6
0
 private void OverrulenVanReservatie(Reservatie laatsReservatie)
 {
     //Nu worden volledige reservaties overrult
     laatsReservatie.Overruul();
 }