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