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); }
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)); }
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); }
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 }
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"); } }
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); } } } }
protected abstract Reservatie MaakReservatieObject(Gebruiker gebruiker, Materiaal mat, string startdatum, int aantal, string[] dagen = null);
public abstract string GeefBeschikbaarheid(DateTime startDatum, DateTime eindDaum, IList <DateTime> dagen, Materiaal materiaal, int aantal, bool onbeschikbaar);
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; } } }
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(""); }
protected abstract void VoegReservatieToe(Materiaal materiaal, int aantal, string startdatum, string[] dagen = null);
public override IViewModel CreateMateriaalViewModel(Materiaal materiaal) { return(new MateriaalViewModel(materiaal)); }
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); }
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(""); }