public void RemoveReservationLijn(ReservatieLijn reservatieLijn, IReservatieRepository reservatieRepository) { if (reservatieLijn == null) { throw new ArgumentException("De reservatielijn is niet beschikbaar of mogelijk al verwijderd."); } if (!Reservaties.Contains(reservatieLijn.Reservatie)) { throw new ArgumentException("De reservatielijn is niet beschikbaar."); } if (!reservatieLijn.Reservatie.ReservatieLijnen.Contains(reservatieLijn)) { throw new ArgumentException("De reservatielijn is al verwijderd geweest."); } if (reservatieLijn.Reservatie.Opgehaald) { throw new ArgumentException("De reservatie is al opgehaald. Je kan geen wijzigingen meer aanbrengen."); } Reservatie r = reservatieLijn.Reservatie; reservatieLijn.Reservatie.ReservatieLijnen.Remove(reservatieLijn); reservatieRepository.RemoveReservationLine(reservatieLijn); // Verwijder de volledige reservatie wanneer er geen reservatielijnen meer zijn. if (r.ReservatieLijnen.Count == 0) { Reservaties.Remove(r); reservatieRepository.Delete(r); } }
public void AddReservation(Dictionary <Materiaal, int> teReserverenMaterialen, DateTime ophaalDatum, DateTime indienDatum, DateTime today) { if (teReserverenMaterialen == null || teReserverenMaterialen.Count == 0) { throw new ArgumentException("Er moet ten minste 1 materiaal gereserveerd worden."); } if (today > ophaalDatum) { throw new ArgumentException("De ophaaldatum moet na vandaag zijn."); } Reservatie reservatie = new Reservatie(this, ophaalDatum, indienDatum); reservatie.ReservatieLijnen = new List <ReservatieLijn>(); foreach (KeyValuePair <Materiaal, int> entry in teReserverenMaterialen) { Materiaal mat = entry.Key; int amount = entry.Value; long availableAmount = GetAmountAvailableForReservation(mat, ophaalDatum, indienDatum); if (amount > availableAmount) { throw new ArgumentException(string.Format("Het materiaal {0} heeft nog maar {1} exemplaren beschikbaar.", mat.Name, availableAmount)); } reservatie.AddReservationLine(mat, amount, ophaalDatum, indienDatum); } if (reservatie.ReservatieLijnen.Count == 0) { throw new ArgumentException("Een reservatie moet minstens één materiaal bevatten."); } Reservaties.Add(reservatie); }
public Reservatie RemoveReservation(Reservatie reservatie) { if (reservatie == null) { throw new ArgumentException("De reservatie is niet beschikbaar of mogelijk al verwijderd."); } if (!Reservaties.Contains(reservatie)) { throw new ArgumentException("De reservatie is al verwijderd geweest."); } if (reservatie.Opgehaald) { throw new ArgumentException("Een reservatie die is al is opgehaald kan niet geannnuleerd worden."); } Reservaties.Remove(reservatie); return(reservatie); }
public int FindConflicts(bool isLector) { //alle overlappende reservaties in 1 lijst List <ReservatieLijn> overlappendeLijnen = Materiaal.ReservatieLijnen.Where(r => ( (r.IndienMoment > this.OphaalMoment && r.OphaalMoment < this.IndienMoment) )).ToList(); int totaalAantalBeschikbaar = Materiaal.Amount - Materiaal.AmountNotAvailable; //als er meer gereserveerd zijn dan beschikbaar if (overlappendeLijnen.Sum(r => r.Amount) > totaalAantalBeschikbaar) { int aantalNogBeschikbaar = totaalAantalBeschikbaar; //als geen lector is //verminder aantalNogBeschikbare Reservaties indien een lijn wordt tegengekomen met //vroegere reservatiedatum if (!isLector) { foreach (var lijn in overlappendeLijnen) { Reservatie bijhorendeReservatie = lijn.Reservatie; if ((bijhorendeReservatie.Lener.CanSeeAllMaterials() || (bijhorendeReservatie.Reservatiemoment < this.Reservatie.Reservatiemoment))) { aantalNogBeschikbaar -= (int)lijn.Amount; } } } //als wel lector is //verminder aantalNogBeschikbare enkel wanneer de lijn met vroegere reservatiedatum //ook van een lector was else { foreach (var lijn in overlappendeLijnen) { Reservatie bijhorendeReservatie = lijn.Reservatie; if (bijhorendeReservatie.Lener.CanSeeAllMaterials() && bijhorendeReservatie.Reservatiemoment < Reservatie.Reservatiemoment) { aantalNogBeschikbaar -= (int)lijn.Amount; } } } //Indien gebruiker laatste was om te reserveren, en dus materiaal niet kan meekrijgen, //wordt er berekend hoeveel hij er slechts krijgt if (aantalNogBeschikbaar < this.Amount) { //laat view weten dat er geen materialen meer beschikbaar zijn voor gebruiker if (aantalNogBeschikbaar <= 0) { return(-1); } else { return((int)aantalNogBeschikbaar); } } } return(0); }
public ReservatieLijn(int amount, DateTime?ophaalMoment, DateTime?indienMoment, Materiaal mat, Reservatie r) : this() { if (mat == null) { throw new ArgumentNullException("Een materiaal is verplicht."); } if (ophaalMoment == null) { throw new ArgumentNullException("Een ophaalmoment is verplicht."); } if (indienMoment == null) { throw new ArgumentNullException("Een indienmoment is verplicht."); } if (amount <= 0) { throw new ArgumentException("Aantal mag niet kleiner of gelijk zijn aan 0."); } if (indienMoment < ophaalMoment) { throw new ArgumentException("Het ophaal moment moet voor het indien moment liggen."); } if (r == null) { throw new ArgumentNullException("Een reservatie is verplicht."); } this.Amount = amount; this.IndienMoment = indienMoment; this.OphaalMoment = ophaalMoment; this.Materiaal = mat; this.Reservatie = r; }