예제 #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 Reservatie(Gebruiker gebruiker, Materiaal materiaal, string startDatum, int aantal)
        {
            if (materiaal == null)
            {
                throw new ArgumentNullException("U heeft nog geen items geselecteerd voor deze reservatie");
            }

            if (gebruiker is Student)
            {
                var week = HulpMethode.GetIso8601WeekOfYear(Convert.ToDateTime(startDatum));
                StartDatum = HulpMethode.FirstDateOfWeekISO8601(DateTime.Now.Year, week);
                EindDatum  = StartDatum.AddDays(4);
            }

            if (gebruiker is Lector)
            {
                StartDatum = Convert.ToDateTime(startDatum);
                EindDatum  = Convert.ToDateTime(HulpMethode.GetEindDatum(startDatum));
            }

            Materiaal          = materiaal;
            AantalGereserveerd = aantal;
            Gebruiker          = gebruiker;
            GeblokkeerdeDagen  = new List <Dag>();
            AanmaakDatum       = DateTime.Now;
        }
 public override IViewModel CreateFirmaViewModel(Materiaal materiaal)
 {
     if (materiaal.Firma == null)
     {
         return(null);
     }
     return(new FirmaViewModel(materiaal.Firma));
 }
        public bool BevatMateriaal(Materiaal materiaal)
        {
            if (Materialen.Count == 0)
            {
                return(false);
            }

            return(Materialen.Contains(materiaal));
        }
예제 #5
0
        public void VerwijderMateriaalUitVerlanglijst(Materiaal materiaal)
        {
            if (materiaal == null)
            {
                throw new ArgumentNullException(
                          "Materiaal mag niet null zijn als die wordt verwijdert van de verlanglijst!");
            }

            //Verwijderen van materiaal van de verlanglijst
            Verlanglijst.VerwijderMateriaal(materiaal);
        }
예제 #6
0
        protected override Reservatie MaakReservatieObject(Gebruiker gebruiker, Materiaal mat, string startdatum, int aantal, string[] dagen = null)
        {
            Reservatie reservatie = new ReservatieStudent(gebruiker, mat, startdatum, aantal);

            if (reservatie == null)
            {
                throw new ArgumentNullException("Er is geen reservatie Object gemaakt");
            }

            return(reservatie);
        }
 public void VoegMateriaalToe(Materiaal materiaal)
 {
     if (!BevatMateriaal(materiaal))
     {
         Materialen.Add(materiaal);
     }
     else
     {
         throw new ArgumentException("Het geselecteerde materiaal staat reeds in uw  verlanglijst");
     }
     //Toevoegen van materiaal
 }
예제 #8
0
 public void VoegMateriaalAanVerlanglijstToe(Materiaal materiaal)
 {
     if (materiaal == null)
     {
         throw new ArgumentNullException(
                   "Materiaal mag niet null zijn als die wordt toevoegd aan de verlanglijst!");
     }
     if (Verlanglijst == null)
     {
         Verlanglijst = new Verlanglijst();
     }
     //aan de Velanglijst materiaal Toevoegen
     Verlanglijst.VoegMateriaalToe(materiaal);
 }
        public void VerwijderMateriaal(Materiaal materiaal)
        {
            if (!BevatMateriaal(materiaal))
            {
                throw new ArgumentException("Er bevindt zich niks in de materiaal lijst");
            }

            if (Materialen.Contains(materiaal))
            {
                Materialen.Remove(materiaal);
            }
            else
            {
                throw new ArgumentException("Materiaal bevindt zich niet in de lijst");
            }
        }
예제 #10
0
        public void MaakBlokkeringen(IDictionary <Materiaal, int> potentieleReservaties, string startDatum, string[] dagen)
        {
            //Het converten van string naar DateTime
            DateTime start = HulpMethode.GetStartDatum(startDatum);
            DateTime einde = HulpMethode.GetEindDatum(startDatum);

            OverruledeReservaties = new List <Reservatie>();
            IDictionary <DateTime, IList <string> > dagenGeblokkeerd = verdeelDagenOverWeken(dagen);

            foreach (var pair in dagenGeblokkeerd)
            {
                string   startDate         = HulpMethode.DateToString(pair.Key);
                string[] geblokkeerdeDagen = pair.Value.ToArray();

                //Overlopen van map met potentiele reserveringen/blokkeringen/overrulingen
                foreach (KeyValuePair <Materiaal, int> potentiele in potentieleReservaties)
                {
                    //Aantal Lokale variabele aanmaken die we nodig hebben
                    Materiaal mat             = potentiele.Key;
                    int       reserveerAantal = potentiele.Value;

                    //opvragen van het aantal reservaties die niet geblokkeerd, opgehaald of overruult zijn
                    int aantalBeschikbaar = mat.GeefAantalBeschikbaarVoorBlokkering();

                    //Eerst gaan we kijken of er nog genoeg beschikbaar zijn om gwn te reserveren
                    //we vergelijken de aantal beschikbare stuks voor het materiaal met het aantal dat we nodig hebben voor onze reservatie
                    //Zo ja maken we gwn reservaties (lectoren blokkeren altijd!!)
                    //Zo niet gaan we over tot het overrulen van reservaties
                    if (aantalBeschikbaar >= reserveerAantal)
                    {
                        //Aanmaken van reservaties
                        VoegReservatieToe(mat, reserveerAantal, startDate, geblokkeerdeDagen);
                    }
                    else
                    {
                        //Overrulen
                        BerekenenOverrulenEnBlokkeren(mat, reserveerAantal, aantalBeschikbaar, start, geblokkeerdeDagen);

                        //Aanmaken van reservaties (overrulen betekend dat lector altijd zal kunnen reserveren)
                        VoegReservatieToe(mat, reserveerAantal, startDate, geblokkeerdeDagen);
                    }
                }
            }
        }
예제 #11
0
 protected abstract Reservatie MaakReservatieObject(Gebruiker gebruiker, Materiaal mat, string startdatum, int aantal, string[] dagen = null);
예제 #12
0
 public abstract string GeefBeschikbaarheid(DateTime startDatum, DateTime eindDaum, IList <DateTime> dagen, Materiaal materiaal, int aantal, bool onbeschikbaar);
예제 #13
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;
                }
            }
        }
예제 #14
0
 public override string GeefBeschikbaarheid(DateTime startDatum, DateTime eindDaum, IList <DateTime> dagen, Materiaal materiaal, int aantal, bool onbeschikbaar)
 {
     if (onbeschikbaar)
     {
         return($"Niet meer beschikbaar van {HulpMethode.DateToString(startDatum)} tot {HulpMethode.DateToString(eindDaum)}");
     }
     return("");
 }
예제 #15
0
 protected abstract void VoegReservatieToe(Materiaal materiaal, int aantal, string startdatum, string[] dagen = null);
 public override IViewModel CreateMateriaalViewModel(Materiaal materiaal)
 {
     return(new MateriaalViewModel(materiaal));
 }
예제 #17
0
        protected override Reservatie MaakReservatieObject(Gebruiker gebruiker, Materiaal mat, string startdatum, int aantal, string[] dagen = null)
        {
            Reservatie reservatie = new BlokkeringLector(gebruiker, mat, startdatum, aantal, dagen);

            return(reservatie);
        }
 public BlokkeringLector(Gebruiker gebruiker, Materiaal materiaal, string startDatum, int aantal, string[] dagen)
     : base(gebruiker, materiaal, startDatum, aantal)
 {
     ArrayNaarListDagen(dagen);
 }
예제 #19
0
 public override string GeefBeschikbaarheid(DateTime startDatum, DateTime eindDaum, IList <DateTime> dagen, Materiaal materiaal, int aantalGeselecteerd, bool onbeschikbaar)
 {
     if (dagen != null)
     {
         IList <DateTime> geblokeerdeDagen = new List <DateTime>();
         foreach (DateTime dag in dagen)
         {
             IList <Reservatie> reservaties = materiaal.Reservaties
                                              .Where(r => r.GeblokkeerdeDagen.Select(d => d.Datum).Contains(dag)).ToList();
             int aantalGereserveerd = reservaties.Sum(r => r.AantalGereserveerd);
             if (aantalGereserveerd + aantalGeselecteerd > materiaal.AantalInCatalogus)
             {
                 geblokeerdeDagen.Add(dag);
             }
         }
         if (geblokeerdeDagen.Any())
         {
             return($"Geen {aantalGeselecteerd} stuk(s) meer beschikbaar op {HulpMethode.DatesToString(geblokeerdeDagen)}");
         }
         return("");
     }
     return("");
 }