public async Task <IActionResult> CreateEvent([Bind("Id,Title,TypeId,Date,Duration,VenueCode,VenueCost")] VenueCreateModel @event)
        {
            if (ModelState.IsValid)
            {
                //PostReservation
                HttpClient client = getClient("23652");

                ReservationPostApi req = new ReservationPostApi
                {
                    EventDate = DateTime.Parse(@event.Date),
                    VenueCode = @event.VenueCode,
                    StaffId   = 0 //Null for now, later if can, add this
                };

                HttpResponseMessage response = await client.PostAsJsonAsync("api/Reservations", req);

                if (response.IsSuccessStatusCode)
                {
                    var Reservation = await response.Content.ReadAsAsync <ReservationGetApi>();

                    var newEvent = new Event
                    {
                        Id             = @event.Id,
                        Title          = @event.Title,
                        Date           = DateTime.Parse(@event.Date),
                        Duration       = @event.Duration,
                        TypeId         = @event.TypeId,
                        VenueCode      = @event.VenueCode,
                        VenueReference = Reservation.Reference,
                        VenueCost      = @event.VenueCost
                    };

                    try
                    {
                        _eventsContext.Add(newEvent);
                        await _eventsContext.SaveChangesAsync();

                        return(RedirectToAction("EventIndex", "Event"));
                    }
                    catch (OverflowException)
                    {
                        await deleteReservationPostAsync(client, newEvent);

                        TempData["msg"] = $"Please type '{@event.Duration}:XX' instead of just '{@event.Duration}' alone";
                    }
                    catch (DbUpdateException)
                    {
                        await deleteReservationPostAsync(client, newEvent);

                        TempData["msg"]         = "There is an error while creating, please ensure your textfield are in correct format:";
                        TempData["msgDuration"] = $"Please ensure '{@event.Duration}' in HH:mm format instead of just '{@event.Duration}'";
                    }
                    catch (Exception ex)
                    {
                        await deleteReservationPostAsync(client, newEvent);

                        TempData["msg"] = ex.Message;
                    }
                }
            }

            return(View(@event));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> ConfirmReservation(int id, string VenueCode, int Staffings)
        {
            var @event = await _eventContext.Events
                         .FirstOrDefaultAsync(m => m.Id == id);

            if (@event == null)
            {
                return(NotFound());
            }

            HttpClient client = getClient("23652");

            //If alrdy have venue reserve, then delete the old one
            if (@event.VenueReference != null)
            {
                //Build the url api, delete the reserved venue
                String urlRes = "api/Reservations/" + @event.VenueReference;

                HttpResponseMessage responseRes = await client.DeleteAsync(urlRes);

                if (responseRes.IsSuccessStatusCode)
                {
                    @event.VenueReference = null;
                    _eventContext.Update(@event);
                    await _eventContext.SaveChangesAsync();
                }
                else
                {
                    // TODO : Prompt Error Msg
                }
            }

            //Set the Venue Cost
            var venues = await getVenuesAsync(@event.TypeId, @event.Date, @event.Date.Add(@event.Duration.Value));

            var vCost = venues.FirstOrDefault(a => a.Code == VenueCode);

            @event.VenueCost = vCost.CostPerHour;

            ReservationPostApi req = new ReservationPostApi
            {
                EventDate = @event.Date,
                VenueCode = VenueCode,
                StaffId   = Staffings
            };

            HttpResponseMessage response = await client.PostAsJsonAsync("api/Reservations", req);

            if (response.IsSuccessStatusCode)
            {
                var Reservation = await response.Content.ReadAsAsync <ReservationGetApi>();

                @event.VenueCode      = Reservation.VenueCode;
                @event.VenueReference = Reservation.Reference;
                _eventContext.Update(@event);

                await _eventContext.SaveChangesAsync();
            }

            //Get Cost


            return(RedirectToAction(nameof(EventIndex)));
        }