public ActionResult PostDetails(int?id, LocationBookingViewModel model)
        {
            if (!DoesLocationExist(id))
            {
                return(RedirectToAction("Index"));
            }

            if (model.From > model.To)
            {
                ModelState.AddModelError("From", "Van datum moet voor Tot datum liggen");
            }

            if (!ModelState.IsValid)
            {
                return(Details((int)id, model));
            }

            // Only allow booking if the location is not yet booked during this period
            var  bookingsRepository = _unitOfWork.BookingsRepository;
            bool isAlreadyBooked    = bookingsRepository.IsLocationBookedDuringPeriod((int)id, model.From, model.To);

            if (isAlreadyBooked)
            {
                ModelState.AddModelError(string.Empty, "Locatie is al geboekt in deze periode");
                return(Details((int)id, model));
            }

            try
            {
                DbBooking booking = new DbBooking();
                booking.LocationId    = (int)id;
                booking.Organisation  = model.Organisation;
                booking.StartDateTime = model.From;
                booking.EndDateTime   = model.To;
                booking.StatusId      = (int)EBookingStatus.Pending;
                booking.UserId        = ((AuthenticatedUser)User).Id;
                bookingsRepository.Insert(booking);

                TempData["AlertType"]    = "success";
                TempData["AlertMessage"] = "De aanvraag om deze locatie te boeken van " + model.From.Date + " tot " + model.To.Date + " is successvol ingediend.";
            }
            catch
            {
                TempData["AlertType"]    = "danger";
                TempData["AlertMessage"] = "Er is iets fout gelopen tijdens het verwerken van de boeking!";
                return(Details((int)id, model));
            }

            return(RedirectToAction("Details", new { id = id }));
        }
        private ActionResult Details(int id, LocationBookingViewModel model = null)
        {
            var        locationsRepository = _unitOfWork.LocationsRepository;
            DbLocation location            = locationsRepository.Get(id);

            ViewBag.Location = location;

            var locationReviewsRepository            = _unitOfWork.LocationReviewsRepository;
            IList <DbLocationReview> locationReviews = locationReviewsRepository.GetAllByLocationId(id);

            ViewBag.LocationReviews = locationReviews;

            string locationImagesDirectoryPath = HostingEnvironment.MapPath("~/Resources/Location/" + location.Id + "/Images/");

            string[] locationImagesPaths = new string[0];
            if (Directory.Exists(locationImagesDirectoryPath))
            {
                locationImagesPaths = Directory.GetFiles(locationImagesDirectoryPath);
                for (int x = 0; x < locationImagesPaths.Length; x++)
                {
                    locationImagesPaths[x] = locationImagesPaths[x].Replace(HostingEnvironment.ApplicationPhysicalPath, "/");
                }
            }
            ViewBag.LocationImagesPaths = locationImagesPaths;

            string calenderEventArray = "[";

            foreach (DbBooking booking in location.Bookings)
            {
                if (booking.StatusId != (int)EBookingStatus.Cancelled && booking.StatusId != (int)EBookingStatus.Denied)
                {
                    calenderEventArray += "{ startDate: '" + booking.StartDateTime.Date.ToString("yyyy-MM-dd") + "', endDate: '" + booking.EndDateTime.Date.ToString("yyyy-MM-dd") + "'},";
                }
            }
            calenderEventArray        += "]";
            ViewBag.CalenderEventArray = calenderEventArray;

            return(View(model));
        }