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 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(""); }
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); }
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); } } } }
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(""); }
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); }
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); }