private async Task OnPickCabana(IDialogContext context, IAwaitable <string> result) { string optionSelected = await result; string cabanaIdText = optionSelected.Substring(optionSelected.LastIndexOf(' ') + 1); int cabanaId = int.Parse(cabanaIdText); await context.PostAsync($"Booking your cabana '{optionSelected}', please wait ..."); CabanaQuery searchQuery = context.ConversationData.GetValue <CabanaQuery>("CabanaQuery"); int reservationId = 1; DateTime startDate = searchQuery.Start; int days = searchQuery.Days; UserProfile userInfo = context.ConversationData.GetValue <UserProfile>(UserSessionDataKey); ICabanaReservationOperations icro = ServiceLocator.GetCabanaReservationOperations(); CabanaReservation cres = await icro.ReserveCabana(reservationId, cabanaId, startDate, days); await context.PostAsync($"Cabana booked. Your Cabana Booking Id is {cres.CabanaBookingId}."); context.Done <object>(null); }
private async Task ResumeAfterCabanaFormDialog(IDialogContext context, IAwaitable <CabanaQuery> result) { try { CabanaQuery searchQuery = await result; context.ConversationData.SetValue("CabanaQuery", searchQuery); await context.PostAsync($"Ok. Searching for Cabanas starting {searchQuery.Start.ToString("MM/dd")} " + $"to {searchQuery.Start.AddDays(searchQuery.Days).ToString("MM/dd")}..."); ICabanaReservationOperations icro = ServiceLocator.GetCabanaReservationOperations(); IList <Cabana> cabanas = await icro.GetCabanaAvailability(reservationChoice, searchQuery); await context.PostAsync($"I found in total {cabanas.Count()} cabanas for your dates:"); var resultMessage = context.MakeMessage(); resultMessage.AttachmentLayout = AttachmentLayoutTypes.Carousel; resultMessage.Attachments = new List <Attachment>(); List <string> cabanaChoices = new List <string>(); foreach (var cabana in cabanas) { cabanaChoices.Add(cabana.Name); HeroCard heroCard = new HeroCard() { Title = cabana.Name, Subtitle = $"{cabana.Rating} stars. {cabana.NumberOfReviews} reviews. From ${cabana.PriceStarting} per day.", Images = new List <CardImage>() { new CardImage() { Url = cabana.Image } }, Buttons = new List <CardAction>() { new CardAction() { Title = "More details", Type = ActionTypes.OpenUrl, Value = $"https://www.bing.com/search?q=hotels+in+" + HttpUtility.UrlEncode(cabana.Location) } } }; resultMessage.Attachments.Add(heroCard.ToAttachment()); } await context.PostAsync(resultMessage); cabanaChoices.Sort((h1, h2) => h1.CompareTo(h2)); PromptDialog.Choice(context, this.OnPickCabana, cabanaChoices, "Please pick your cabana:", "Not a valid option", 3); } catch (FormCanceledException ex) { string reply; if (ex.InnerException == null) { reply = "You have canceled the operation. Quitting from the CabanaDialog"; } else { reply = $"Oops! Something went wrong :( Technical Details: {ex.InnerException.Message}"; } await context.PostAsync(reply); } }