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)); }
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))); }