Пример #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);
            }
        }
        public override void VoegReservatieToe(Dictionary <Product, int> map, DateTime startDate, DateTime eindDate, Email[] email, bool[] dagen = null)
        {
            EmailService service = new EmailService();
            Reservatie   r       = new Reservatie
            {
                StartDatum       = startDate,
                EindDatum        = eindDate,
                ReservatieStatus = ReservatieStatus.Gereserveerd,
                ReservatieUser   = this,
                AanmaakDatum     = DateTime.Now
            };

            foreach (KeyValuePair <Product, int> entry in map)
            {
                if (entry.Value != 0)
                {
                    if (entry.Value > entry.Key.GeefAantalReserveerbaarInPeriode(startDate, eindDate))
                    {
                        throw new ArgumentOutOfRangeException("Er zijn niet genoeg stuks beschikbaar van  " + entry.Key.Artikelnaam);
                    }
                    else if (entry.Value < 0)
                    {
                        throw new ArgumentOutOfRangeException("U kan geen negatieve waarde toekennen aan  " + entry.Key.Artikelnaam);
                    }
                    r.VoegReservatieLijnToe(entry.Key, entry.Value);
                }
            }
            Reservaties.Add(r);
            service.VerzendEmail(r, this, email[0]);
        }
Пример #3
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);
        }
Пример #4
0
        public Dictionary <DateTime, int[]> MaakLijstReservatieDataSpecifiekeDagen(DateTime[] dagen)
        {
            Dictionary <DateTime, int[]> reservatieMap = new Dictionary <DateTime, int[]>();

            //De reservaties overlopen en reservatieDataDTO objecten met juiste waarden maken.
            foreach (var r in Reservaties.Where(r => !(r.ReservatieState is Overruled) && r.Gebruiker is Lector).OrderBy(r => r.StartDatum))
            {
                IList <DateTime> gemeenschappelijkeDagen = r.GeblokkeerdeDagen.Select(g => g.Datum).Intersect(dagen).ToList();
                if (gemeenschappelijkeDagen.Any())
                {
                    foreach (var dag in gemeenschappelijkeDagen)
                    {
                        reservatieMap = UpdateReservatieMap(reservatieMap, dag, r.AantalGereserveerd);
                    }
                }
            }
            var dagenZonderReservaties = dagen.Where(dag => !Reservaties.Any(r => r.GeblokkeerdeDagen.Select(d => d.Datum).Contains(dag)));

            foreach (var dag in dagenZonderReservaties)
            {
                reservatieMap = UpdateReservatieMap(reservatieMap, dag, 0);
            }

            return(reservatieMap);
        }
Пример #5
0
        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);
        }
Пример #6
0
        public int GeefAantalBeschikbaarVoorBlokkering()
        {
            int aantal = AantalInCatalogus -
                         Reservaties.Where(r => r.ReservatieState is Gereserveerd || r.ReservatieState is Geblokkeerd || r.ReservatieState is Opgehaald)
                         .Sum(r => r.AantalGereserveerd);

            return(aantal <= 0 ? 0 : aantal);
        }
        public override void VoegReservatieToe(Dictionary <Product, int> map, DateTime van, DateTime tot, Email[] email, bool[] dagen)
        {
            EmailService emailService = new EmailService();
            Blokkering   b            = new Blokkering
            {
                StartDatum       = van,
                EindDatum        = tot,
                ReservatieUser   = this,
                ReservatieStatus = ReservatieStatus.Geblokkeerd,
                AanmaakDatum     = DateTime.Now,
            };
            int i = 0;

            foreach (KeyValuePair <Product, int> entry in map)
            {
                if (entry.Value != 0)
                {
                    if (entry.Value > entry.Key.AantalInCatalogus)
                    {
                        throw new ArgumentOutOfRangeException("Er zijn niet genoeg stuks beschikbaar van " + entry.Key.Artikelnaam);
                    }
                    if (entry.Value < 0)
                    {
                        throw new ArgumentOutOfRangeException("U kan geen negatieve waarde toekennen aan " + entry.Key.Artikelnaam);
                    }
                    if (dagen == null || dagen.All(l => !l))
                    {
                        throw new ArgumentNullException("Selecteer 1 of meerdere dagen voor " + entry.Key.Artikelnaam);
                    }
                    int aantal = entry.Key.GeefAantalReserveerbaarInPeriode(van, tot);
                    if (aantal < entry.Value)
                    {
                        entry.Key.WijzigReservatieAantal(entry.Value - aantal)
                        .ForEach(s => addStudenten(s));
                    }
                    bool[] dagenProduct = new bool[5];
                    Array.Copy(dagen, i, dagenProduct, 0, 5);
                    b.VoegReservatieLijnToe(entry.Key, entry.Value, dagenProduct);
                }
                i += 5;
            }
            Reservaties.Add(b);
            emailService.VerzendEmail(b, this, email[0]);

            studenten.Reverse();
            ApplicationUser[] array = studenten.ToArray();
            for (int j = 0; j < teller; j++)
            {
                if (j == 0)//Wijzigen
                {
                    emailService.VerzendEmail(b, array[j], email[2]);
                }
                else//anuleren
                {
                    emailService.VerzendEmail(b, array[j], email[1]);
                }
            }
        }
Пример #8
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);
 }
Пример #9
0
        public int GeefAantalPerStatus(ReservatieState status, DateTime startDatum, DateTime eindDatum)
        {
            if (status is Geblokkeerd)
            {
                int aantal =
                    Reservaties.Where(
                        r => r.KanOverschrijvenMetReservatie(startDatum, eindDatum) && r.ReservatieState is Geblokkeerd)
                    .Sum(r => r.AantalGereserveerd);
                return(aantal > AantalInCatalogus ? AantalInCatalogus : aantal);
            }

            if (status is Gereserveerd)
            {
                return(Reservaties.Where(r => r.StartDatum.Equals(startDatum) && r.ReservatieState is Gereserveerd).Sum(r => r.AantalGereserveerd));
            }

            return(0);
        }
Пример #10
0
        public Dictionary <DateTime, int[]> MaakLijstReservatieDataInRange(DateTime startDatumFilter, DateTime eindDatumFilter)
        {
            Dictionary <DateTime, int[]> reservatieMap = new Dictionary <DateTime, int[]>();

            //De reservaties overlopen en reservatieDataDTO objecten met juiste waarden maken.
            foreach (var r in Reservaties.Where(r => !(r.ReservatieState is Overruled)).OrderBy(r => r.StartDatum))
            {
                if (r.StartDatum >= startDatumFilter && r.StartDatum <= eindDatumFilter)
                {
                    reservatieMap = UpdateReservatieMap(reservatieMap, r.StartDatum, r.AantalGereserveerd);
                }
            }
            //Voor de data waar geen reservaties zijn worden reservatieDataDTO objecten met standaardWaarden gemaakt.
            while (startDatumFilter <= eindDatumFilter)
            {
                reservatieMap    = UpdateReservatieMap(reservatieMap, startDatumFilter, 0);
                startDatumFilter = startDatumFilter.AddDays(7);
            }

            return(reservatieMap);
        }
Пример #11
0
        public int GeefAantalBeschikbaar(DateTime startDatum, DateTime eindDatum, IList <DateTime> dagen, Gebruiker gebruiker)
        {
            int aantal = AantalInCatalogus;

            if (gebruiker is Lector && dagen != null)
            {
                foreach (var dag in dagen)
                {
                    IEnumerable <Reservatie> overschijvendeReservaties = Reservaties.Where(r => r.GeblokkeerdeDagen.Select(d => d.Datum).Contains(dag)).ToList();
                    int aantalGereserveerd = overschijvendeReservaties.Sum(r => r.AantalGereserveerd);
                    aantal = Math.Min(aantal, AantalInCatalogus - aantalGereserveerd);
                }
            }
            else if (gebruiker is Student)
            {
                aantal = AantalInCatalogus -
                         Reservaties.Where(r => r.KanOverschrijvenMetReservatie(startDatum, eindDatum) &&
                                           (r.ReservatieState is Geblokkeerd || r.ReservatieState is Gereserveerd))
                         .Sum(r => r.AantalGereserveerd);
            }
            return(aantal <= 0 ? 0 : aantal);
        }
 public int GeefAantalReservatiesVoorKlantInJaar(Klant klant, int jaar)
 {
     return(Reservaties.Where(r => r.Klant == klant && r.StartMoment.Year == jaar).Count());
 }
 public List <Reservatie> VindReservatiesVoorKlantNummerEnDatum(int klantNummer, DateTime datum)
 {
     return(Reservaties.Include(r => r.Limousine).Include(r => r.Klant).ThenInclude(k => k.Categorie).ThenInclude(c => c.StaffelKorting).Where(r => r.StartMoment.Date == datum.Date && r.Klant.KlantNummer == klantNummer).ToList());
 }
 public List <Reservatie> VindReservatiesVoorKlantNaamEnDatum(string klantNaam, DateTime datum)
 {
     return(Reservaties.Include(r => r.Limousine).Include(r => r.Klant).ThenInclude(k => k.Categorie).ThenInclude(c => c.StaffelKorting).Where(r => r.StartMoment.Date == datum.Date && r.Klant.Naam.Contains(klantNaam)).ToList());
 }
 public List <Reservatie> VindReservatiesVoorKlantNummer(int klantNummer)
 {
     return(Reservaties.Include(r => r.Limousine).Include(r => r.Klant).ThenInclude(k => k.Categorie).ThenInclude(c => c.StaffelKorting).Where(r => r.Klant.KlantNummer == klantNummer).ToList());
 }
 public List <Reservatie> VindReservatiesVoorKlantNaam(string klantNaam)
 {
     return(Reservaties.Include(r => r.Limousine).Include(r => r.Klant).ThenInclude(k => k.Categorie).ThenInclude(c => c.StaffelKorting).Where(r => r.Klant.Naam.Contains(klantNaam)).ToList());
 }
 public Reservatie VindReservatieVoorReservatieNummer(int reservatieNummer)
 {
     return(Reservaties.Find(reservatieNummer));
 }
Пример #18
0
 public void AddReservatie(Reservatie reservatie)
 {
     Reservaties.Add(reservatie);
 }
 public void VoegReservatieToe(Reservatie reservatie)
 {
     Reservaties.Add(reservatie);
     SaveChanges();
 }
Пример #20
0
 public ICollection <Reservatie> GeeftReservatiesVanEenBepaaldeTijd(DateTime start)
 {
     return(Reservaties.Where(r => r.StartDatum <= start && (!(r.ReservatieState is Opgehaald || r.ReservatieState is Overruled))).ToList());
 }