//Search results for events in selected date range in secondary event creation route public async Task <IActionResult> VenueSearchResults([Bind("StartDate,EndDate,TypeId,Type")] VenueSearchVM searchCriteria) { IEnumerable <EventTypeDto> eventTypes = await GetEventTypes(); if (searchCriteria.TypeList == null) { searchCriteria.TypeList = new SelectList(eventTypes, "Id", "Title"); } if (searchCriteria.Type == null || searchCriteria.TypeList == null) { searchCriteria.Type = eventTypes.First(e => e.Id == searchCriteria.TypeId).Title; } if (searchCriteria.TypeId == null) { searchCriteria.Message = "Please select an event type"; return(View("SearchVenues", searchCriteria)); } List <AvailabilitiesVM> availabilities = GetAvailability(searchCriteria.TypeId, searchCriteria.StartDate, searchCriteria.EndDate).Result.ToList(); if (availabilities.Count == 0) { searchCriteria.Message = "No venues available on this date"; return(View("SearchVenues", searchCriteria)); } EventVM eventVM = new EventVM(); eventVM.TypeId = searchCriteria.TypeId; EventVenueAvailabilityVM venueSelector = new EventVenueAvailabilityVM(eventVM, availabilities); return(View("SelectVenue", venueSelector)); }
// GET: Events/Select Venue //Second stage of create event process, displaying events available on date provided public async Task <IActionResult> SelectVenue(int day, int month, int year, int hour, int minute, int second, [Bind("Id,Title,Date,Duration,TypeId,VenueRef,Existing,VenueName,VenueDescription,VenueCapacity,VenueCost,OldRef")] EventVM @event) { // multiple if statements ensure correct braching and catching or errors simultaneously // instead of having one route through the entire system if (@event == null) { @event.Message = "Something went wrong. Please ensure all fields are completed and try again."; return(RedirectToAction("SelectVenue", @event)); } if (@event.Duration.HasValue && (@event.Duration).Value.TotalDays >= 1) { @event.Message = "Duration must be less than 24 hours. Please enter as HH:MM or HH:MM:SS"; return(RedirectToAction("Create", @event)); } if (day != 0 && month != 0 && year != 0) { DateTime fixedDate = new DateTime(year, month, day, hour, minute, second); @event.Date = fixedDate; } if (@event.Type == null) { IEnumerable <EventTypeDto> eventTypes = await GetEventTypes(); @event.Type = eventTypes.First(e => e.Id == @event.TypeId).Title; } if (@event.VenueName != null && @event.Existing == false) { return(RedirectToAction("ConfirmReservation", @event)); } else { if (@event.Existing) { // OldRef variable used to store the old referance when passinbg between views and actions //a llowing new reference to be stored without losing old reference which may be needed when accessing Venues API later in process @event.OldRef = @event.getBookingRef; } @event.OldRef = @event.getBookingRef; List <AvailabilitiesVM> availabilities = GetAvailability(@event.TypeId, @event.Date, @event.Date).Result.ToList(); if (availabilities.Count == 0) { @event.Message = "No venues available on this date"; if (@event.Existing == false) { return(RedirectToAction("Create", @event)); } else { return(RedirectToAction("Edit", new { Id = @event.Id, Message = @event.Message })); } } else { EventVenueAvailabilityVM venueSelector = new EventVenueAvailabilityVM(@event, availabilities); return(View(venueSelector)); } } }