Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 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);
 }
Beispiel #4
0
        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);
        }
Beispiel #5
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;
 }