public IActionResult SelectVenue(string id) { if (id == null) { return(NotFound()); } TempData["controllerCheck"] = "Event"; TempData["eventId"] = id; var currentVenueId = _context.Events.Where(x => x.Id == id).Select(x => x.VenueId).FirstOrDefault(); var currentVenue = _context.Venues.Where(x => x.Id == currentVenueId).FirstOrDefault(); if (currentVenue == null) { currentVenue = new Venue(); } Event currentEvent = _context.Events.Where(x => x.Id == id).FirstOrDefault(); EventVenueViewModel eventVenue = new EventVenueViewModel(); eventVenue.currentVenue = currentVenue; eventVenue.currentEvent = currentEvent; TempData["startDate"] = currentEvent.StartDate; TempData["endDate"] = currentEvent.EndDate; TempData["eveId"] = currentEvent.Id; var Venues = _context.Venues.ToList(); eventVenue.Venues = Venues; return(View(eventVenue)); }
public IActionResult ConfirmVenuePick(string venueId) { WeatherApi weather = new WeatherApi(); var start = (DateTime)TempData["startDate"]; var eveId = (string)TempData["eveId"]; EventVenueViewModel vm = new EventVenueViewModel(); var ven = _context.Venues.Where(x => x.Id == venueId).FirstOrDefault(); var eve = _context.Events.Where(x => x.Id == eveId).FirstOrDefault(); vm.currentVenue = ven; vm.currentEvent = eve; bool withinRange = weather.CheckDateRange(start); if (withinRange == true) { string location = weather.SetRequestString(ven.City, ven.State); var forecast = weather.GetForecast(location); TimeSpan day = start - DateTime.Today; var startForecast = forecast[day.Days]; vm.Forecast = forecast[0].text; int code = forecast[0].code; if (code < 20 || (code > 36 && code < 44) || (code > 44 && code < 48)) { string warning = "Warning, the weather forecast for this venue is poor"; vm.Warning = warning; } } return(View(vm)); }
public ActionResult EventVenue(EventVenueViewModel eventVenueVm) { try { if (User.IsInRole(AppEnum.RoleEnum.User.ToString())) { return(new HttpNotFoundResult()); } if (ModelState.IsValid) { EventVenue eventVenue = new EventVenue(); eventVenue.EventVenueName = eventVenueVm.EventVenueName; db.EventVenues.Add(eventVenue); var count = db.SaveChanges(); if (count > 0) { ModelState.Clear(); TempData["msg"] = "Event Venue information has been successfully saved."; return(View("EventVenue")); } } return(RedirectToAction("Index", "Home", "Home")); } catch (Exception) { return(View()); } }
public async Task <IActionResult> Venue(int?id, [Bind("Id,Date,SelectedVenue,TypeId")] EventVenueViewModel ev) { if (!ModelState.IsValid || !id.HasValue) { return(View(ev)); } if (ev.Id != id) { return(NotFound()); } Event @event = await _context.Events.FindAsync(id); if (@event == null || @event.Cancelled) { return(NotFound()); } // Create the reservation. ReservationGetDto reservationGetDto = await _reservations.CreateReservation(ev.Date, ev.SelectedVenue); // Empty view model in case reservation fails. EventVenueViewModel model = new EventVenueViewModel() { Id = ev.Id, Date = ev.Date, Title = @event.Title, Duration = @event.Duration, TypeId = ev.TypeId, TypeTitle = (await _eventTypes.GetEventType(ev.TypeId)).Title }; if (reservationGetDto.Reference == null) { return(View(model)); } // Assign reservation information. model.Reservation = new EventReservationViewModel() { EventDate = reservationGetDto.EventDate, Reference = reservationGetDto.Reference, //StaffId = reservationGetDto.StaffId, // Read above for the same reasoning for the removal of this property. VenueCode = reservationGetDto.VenueCode, WhenMade = reservationGetDto.WhenMade }; // Get venue information from any other availabilities of the same VenueCode (due to the lack of // information on the API). List <AvailabilityApiGetDto> avail = await _availabilities .GetAvailabilities(ev.TypeId, new DateTime(2018, 07, 10), new DateTime(2019, 2, 10)); Venue venue = avail .Where(x => x.Code == reservationGetDto.VenueCode) .Select(a => new Venue() { Code = a.Code, Capacity = a.Capacity, Description = a.Description, Name = a.Name }) .FirstOrDefault(); model.Venue = venue; // Update reservation on the database entity. @event.VenueReservation = reservationGetDto.Reference; model.ReservationReference = reservationGetDto.Reference; await _context.SaveChangesAsync(); // Push database changes. // Show that view model from before. return(View(model)); }
public async Task <IActionResult> Venue(int?id) { if (!id.HasValue) { return(NotFound()); } Event @event = await _context.Events.Where(x => !x.Cancelled) .FirstOrDefaultAsync(m => m.Id == id); if (@event == null) { return(NotFound()); } if (@event.VenueReservation != null) { ReservationGetDto reservation = await _reservations.GetReservation(@event.VenueReservation); if (reservation.Reference == null) { goto NO_RES; } // HACKY WORKAROUND List <AvailabilityApiGetDto> avail = await _availabilities .GetAvailabilities(@event.TypeId, new DateTime(2018, 07, 10), new DateTime(2019, 2, 10)); Venue venue = avail .Where(x => x.Code == reservation.VenueCode) .Select(a => new Venue() { Code = a.Code, Capacity = a.Capacity, Description = a.Description, Name = a.Name }).FirstOrDefault(); if (venue == null) { return(BadRequest()); // Unfortunately ran out of valid venues for this type due to some scuffed design preventing us doing it properly. } EventVenueViewModel reservedViewModel = new EventVenueViewModel() { Title = @event.Title, Date = @event.Date, Duration = @event.Duration, Id = @event.Id, TypeId = @event.TypeId, TypeTitle = (await _eventTypes.GetEventType(@event.TypeId)).Title, Reservation = new EventReservationViewModel() { Reference = reservation.Reference, //StaffId = reservation.StaffId, // In the case of StaffId, it makes little sense having to include a single staff for a reservation // when many staff can be assigned to an event and be added/removed at will. WhenMade = reservation.WhenMade, VenueCode = reservation.VenueCode, EventDate = reservation.EventDate }, Venue = venue, ReservationReference = reservation.Reference }; return(View(reservedViewModel)); } NO_RES: // Label to redirect execution out of the if statement and to avoid nested / inverted if statements. // (I know a few people who would kill me for using this.) List <AvailabilityApiGetDto> apiGetDtoList = await _availabilities .GetAvailabilities(@event.TypeId, @event.Date, @event.Date.Add(@event.Duration.Value)); List <Availability> availabilities = apiGetDtoList .Select(x => new Availability { CostPerHour = x.CostPerHour, Date = x.Date, VenueCode = x.Code, Venue = new Venue { Code = x.Code, Description = x.Description, Name = x.Name, Capacity = x.Capacity } }).ToList(); // This block may be redundant depending on the availability behaviour and if a reserved availability is not included in the list. // (I assume its redundant so its commented out.) //List<Availability> nonReserved = new List<Availability>(); //foreach (Availability availability in availabilities) //{ // ReservationGetDto reservations = await _reservations.GetReservation(availability.VenueCode, @event.Date); // if (reservations.Reference == null) // nonReserved.Add(availability); // If the availability in the list has a reservation assigne then it is reserved. //} //availabilities.Clear(); SelectList list = new SelectList( availabilities.Select(x => new { x.Venue.Name, x.VenueCode, x.Date, x.CostPerHour } ), "VenueCode", "Name"); EventVenueViewModel novenue = new EventVenueViewModel() { Title = @event.Title, Date = @event.Date, Duration = @event.Duration, Id = @event.Id, TypeId = @event.TypeId, TypeTitle = (await _eventTypes.GetEventType(@event.TypeId)).Title, Availabilities = availabilities, AvailabilitiesSelectList = list }; return(View(novenue)); }