public async Task <ActionResult> CreateReservation(ApplicationUser user, ReservationDateRangeViewModel reservationDateRangeViewModel, NewReservationMaterialsViewModel reservationMaterialsViewModel)
        {
            var requestedMaterials = reservationMaterialsViewModel.Materials
                                     .ToDictionary(detail => _materialRepository.FindById(detail.Material.Id), detail => detail.RequestedAmount);

            user.CreateReservation(reservationDateRangeViewModel.StartDate, reservationDateRangeViewModel.EndDate, requestedMaterials);
            _reservationRepository.SaveChanges();
            await MailService.SendMailAsync(user.Reservations.Last().ReservationBody, "Reservering IIM", user.Email);

            return(RedirectToAction("Index"));
        }
        public ActionResult Create(ApplicationUser user, ReservationDateRangeViewModel reservationDateRangeViewModel)
        {
            reservationDateRangeViewModel.UserType = user.Type;
            CheckDateRangeModel(reservationDateRangeViewModel, reservationDateRangeViewModel.StartDate, reservationDateRangeViewModel.EndDate, false);
            var materials = user.WishList.Materials.Select(m => new ReservationDetailSelectionViewModel(
                                                               m,
                                                               m.GetAvailableIdentifiersCount(reservationDateRangeViewModel.StartDate, reservationDateRangeViewModel.EndDate, user.Type),
                                                               0));
            var materialsPicker = new NewReservationMaterialsViewModel(materials, false);
            var wrapper         = new NewReservationViewModel(reservationDateRangeViewModel, materialsPicker);

            return(View(wrapper));
        }
 public ActionResult ChangeReservationRange(ApplicationUser user, ReservationDateRangeViewModel reservationDateRangeViewModel, DateTime startDate, DateTime?endDate)
 {
     if (ModelState.IsValid)
     {
         reservationDateRangeViewModel.UserType  = user.Type;
         reservationDateRangeViewModel.StartDate = startDate;
         if (endDate != null)
         {
             reservationDateRangeViewModel.EndDate = endDate.Value;
         }
         CheckDateRangeModel(reservationDateRangeViewModel, reservationDateRangeViewModel.StartDate, reservationDateRangeViewModel.EndDate);
     }
     return(RedirectToAction("Create", reservationDateRangeViewModel));
 }
        public void CheckDateRangeModel(ReservationDateRangeViewModel reservationDateRangeViewModel, DateTime?start, DateTime?end, bool displayError = true)
        {
            if (start == null || !(AppSettings.GetStartDateRangeRestriction(reservationDateRangeViewModel.UserType)?.IsDateValid(start.Value) ?? true))
            {
                if (displayError)
                {
                    reservationDateRangeViewModel.StartDateError = "Deze datum is niet geschikt als begindatum van uw reservatie.";
                }
                var defaultStartDateTime = GetDefaultStartDateTime(reservationDateRangeViewModel.UserType);
                if (defaultStartDateTime != null)
                {
                    reservationDateRangeViewModel.StartDate = (DateTime)defaultStartDateTime;
                }
            }
            else
            {
                reservationDateRangeViewModel.StartDate      = start.Value;
                reservationDateRangeViewModel.StartDateError = null;
            }

            if (end == null || !(AppSettings.GetEndDateRangeRestriction(reservationDateRangeViewModel.UserType)?.IsDateValid(end.Value) ?? true))
            {
                if (displayError)
                {
                    reservationDateRangeViewModel.EndDateError = "Deze datum is niet geschikt als einddatum van uw reservatie.";
                }
                var defaultEndDateTime = GetDefaultEndDateTime(reservationDateRangeViewModel.UserType);
                if (defaultEndDateTime != null)
                {
                    reservationDateRangeViewModel.EndDate = (DateTime)defaultEndDateTime;
                }
            }
            else
            {
                reservationDateRangeViewModel.EndDate      = end.Value;
                reservationDateRangeViewModel.EndDateError = null;
            }
        }