private bool CheckSeatAvailability(ViewModels.ReserveringViewModel model)
        {
            var cvList     = db.Couverts.Where(c => c.Reservering.Datum == model.Reservering.Datum && c.Reservering.StartTijd == model.Reservering.StartTijd).ToList();
            int totalSeats = 0;

            foreach (var couvert in cvList)
            {
                //checken of reservering dit menu al heeft besteld
                if (couvert.Reservering.Id == model.Reservering.Id && couvert.Menu.Id == model.Menu.Id)
                {
                    //tel de huidige couvert aantal niet
                    totalSeats += model.Total; continue;
                }
                totalSeats += couvert.Aantal;
                if (totalSeats + model.Total > _maxSeats)
                {
                    return(false);
                }
            }
            if (totalSeats > _maxSeats)
            {
                return(false);
            }
            return(true);
        }
        public ActionResult MenuToReservering(ViewModels.ReserveringViewModel model)
        {
            if (ModelState.IsValid)
            {
                //voordat een reservering komt in de database te staan
                //moeten we eerst checken of er genoeg beschikbare stoelen zijn
                //voor de gekozen datum en tijd
                _available = CheckSeatAvailability(model);
                if (!_available)
                {
                    //een foutmelding is teruggestuurd, kan mooier
                    TempData["ErrorMessage"] = "Helaas zijn wij volgeboekt op de door uw gekozen datum en tijd !";
                    return(RedirectToAction("Index"));
                }

                Reservering reservering  = db.Reserverings.Find(model.Reservering.Id);
                List <Menu> orderedMenus = reservering.BesteldeMenus.ToList();

                //checken of de menu al besteld is
                //zo niet, maken we een nieuwe couvert aan
                Menu existingMenu = orderedMenus.Where(m => m.Id == model.Menu.Id).FirstOrDefault();
                if (existingMenu == null)
                {
                    Menu menu = db.Menus.Find(model.Menu.Id);

                    Couverts cv = new Couverts
                    {
                        Menu        = menu,
                        Aantal      = model.Total,
                        Reservering = reservering
                    };

                    reservering.BesteldeMenus.Add(menu);
                    db.Couverts.Add(cv);
                    db.Entry(reservering).State = EntityState.Modified;
                    db.SaveChanges();
                }
                //als de menu al besteld is met deze reservering
                //geven we alleen een nieuwe aantal aan
                //Ik heb voor deze manier gekozen omdat het eenvoudiger is om
                //een nieuw aantal aan te geven ipv toe te voegen of weg te halen.
                else
                {
                    var cou = db.Couverts.Where(c => c.Menu.Id == existingMenu.Id).FirstOrDefault();
                    if (cou != null)
                    {
                        cou.Aantal          = model.Total;
                        db.Entry(cou).State = EntityState.Modified;

                        db.SaveChanges();
                    }
                }
                return(RedirectToAction("Index"));
            }
            return(RedirectToAction("Index"));
        }
        public Reservering ChangedReservering(ViewModels.ReserveringViewModel res)
        {
            Reservering changedRes = db.Reserverings.Find(res.ReserveringID);

            if (changedRes != null)
            {
                DateTime newDate = res.SelectedDate;
                changedRes.Datum     = newDate;
                changedRes.StartTijd = newDate.AddHours(res.SelectedHour);
                changedRes.EindTijd  = changedRes.StartTijd.Value.AddMinutes(120);
                return(changedRes);
            }
            return(null);
        }
 public ActionResult Edit(ViewModels.ReserveringViewModel reservering)
 {
     if (ModelState.IsValid)
     {
         Reservering changedReservering = ChangedReservering(reservering);
         if (changedReservering != null)
         {
             db.Entry(changedReservering).State = EntityState.Modified;
             db.SaveChanges();
             return(RedirectToAction("Index"));
         }
     }
     return(View(reservering));
 }
        public ActionResult Create(ViewModels.ReserveringViewModel mrViewmodel)
        {
            var currentUser = User.Identity.GetUserId();

            if (ModelState.IsValid)
            {
                Reservering reservering  = new Reservering();
                DateTime    reservedDate = mrViewmodel.SelectedDate;

                reservering.StartTijd = reservedDate.AddHours(mrViewmodel.SelectedHour);
                reservering.Klant     = db.Users.Where(u => u.Id == currentUser).FirstOrDefault();
                reservering.Datum     = mrViewmodel.SelectedDate;

                //eindtijd van een reservering is standaard 2uur later dan de begintijd
                reservering.EindTijd = reservering.StartTijd.Value.AddMinutes(120);

                db.Reserverings.Add(reservering);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(mrViewmodel.Reservering));
        }