Example #1
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;
        }
Example #2
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("");
 }
Example #3
0
        public string GetDateToString(DateTime startDatum, IEnumerable <DateTime> dagen, DateTimeFormatInfo dtfi)
        {
            string datum;

            if (dagen != null)
            {
                datum = HulpMethode.DatesToString(dagen);
            }
            else
            {
                datum = HulpMethode.DateToString(startDatum);
            }
            return(datum);
        }
Example #4
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);
                    }
                }
            }
        }
Example #5
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("");
 }
Example #6
0
        private IDictionary <DateTime, IList <string> > verdeelDagenOverWeken(string[] dagen)
        {
            IDictionary <DateTime, IList <string> > dagenGeblokkeerd = new Dictionary <DateTime, IList <string> >();

            foreach (var dag in dagen)
            {
                DateTime startDatum = HulpMethode.GetStartDatum(dag);

                if (!dagenGeblokkeerd.ContainsKey(startDatum))
                {
                    IList <string> dagenInWeek = new List <string>();
                    dagenInWeek.Add(dag);
                    dagenGeblokkeerd.Add(startDatum, dagenInWeek);
                }
                else
                {
                    IList <string> dagenInWeek = dagenGeblokkeerd[startDatum];
                    dagenInWeek.Add(dag);
                    dagenGeblokkeerd[startDatum] = dagenInWeek;
                }
            }

            return(dagenGeblokkeerd);
        }
Example #7
0
        public Dictionary <DateTime, ICollection <Reservatie> > ReservatieDetails(int week)
        {
            Dictionary <DateTime, ICollection <Reservatie> > reservatieMap = new Dictionary <DateTime, ICollection <Reservatie> >();
            var reservaties = Reservaties;

            if (week > -1)
            {
                var geselecteerdeDatum = HulpMethode.FirstDateOfWeekISO8601(DateTime.Now.Year, week);
                reservaties = reservaties.Where(r => r.StartDatum.Equals(geselecteerdeDatum)).ToList();
            }

            foreach (Reservatie reservatie in reservaties)
            {
                if (week < 0 || reservatie.StartDatum.Equals(HulpMethode.FirstDateOfWeekISO8601(DateTime.Now.Year, week)))
                {
                }
                if (reservatie.Gebruiker is Lector)
                {
                    bool overschrijft = false;
                    //Kijken of de blokkering van de lector een reservatie van de student overschrijft.
                    //Zoja, dan wordt deze in dezelfde week als die van de student geplaatst.
                    foreach (var e in reservatieMap)
                    {
                        DateTime startStudent = Convert.ToDateTime(e.Key);
                        DateTime eindStudent  = startStudent.AddDays(4);
                        overschrijft = reservatie.KanOverschrijvenMetReservatie(startStudent, eindStudent);
                        if (overschrijft)
                        {
                            reservatieMap[e.Key].Add(reservatie);
                            break;
                        }
                    }

                    if (!overschrijft)
                    {
                        int      wk   = HulpMethode.GetIso8601WeekOfYear(reservatie.StartDatum);
                        DateTime date = HulpMethode.FirstDateOfWeekISO8601(DateTime.Now.Year, wk);

                        if (reservatieMap.ContainsKey(date))
                        {
                            reservatieMap[date].Add(reservatie);
                        }
                        else
                        {
                            reservatieMap.Add(date, new List <Reservatie> {
                                reservatie
                            });
                        }
                    }
                }
                else if (reservatie.Gebruiker is Student)
                {
                    if (!reservatieMap.ContainsKey(reservatie.StartDatum))
                    {
                        reservatieMap.Add(reservatie.StartDatum, new List <Reservatie> {
                            reservatie
                        });
                    }
                    else
                    {
                        reservatieMap[reservatie.StartDatum].Add(reservatie);
                    }
                }
            }
            return(reservatieMap);
        }