Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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());
     }
 }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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));
        }