public ReservationResult(ReservationProperty property, ReservationStatus status = ReservationStatus.Unknown, ReservationOutcome outcome = null) { NewReservation = property ?? throw new ArgumentNullException(nameof(property)); Status = status; Outcome = new List <ReservationOutcome>(); Outcome.Add(outcome); }
private async Task <DialogTurnResult> GetAllRequiredPropertiesAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var context = stepContext.Context; // Get current reservation from accessor. var newReservation = await ReservationsAccessor.GetAsync(stepContext.Context, () => new ReservationProperty()); // Get on turn (includes LUIS entities captured by parent). var onTurnProperty = await OnTurnAccessor.GetAsync(context); ReservationResult reservationResult = null; if (onTurnProperty != null) { if (newReservation != null) { // Update reservation object and gather results. reservationResult = newReservation.UpdateProperties(onTurnProperty); } else { reservationResult = ReservationProperty.FromOnTurnProperty(onTurnProperty); } } // Set the reservation. await ReservationsAccessor.SetAsync(context, reservationResult.NewReservation); // see if updadte reservtion resulted in errors, if so, report them to user. if (reservationResult != null && reservationResult.Status == ReservationStatus.Incomplete && reservationResult.Outcome != null && reservationResult.Outcome.Count > 0) { // Start the prompt with the initial feedback based on update results. var options = new PromptOptions() { Prompt = MessageFactory.Text(reservationResult.Outcome[0].Message), }; return(await stepContext.PromptAsync(GetLocationDateTimePartySizePrompt, options)); } else { if (reservationResult.NewReservation.HaveCompleteReservation()) { await context.SendActivityAsync("Ok. I have a table for " + reservationResult.NewReservation.ConfirmationReadOut()); await context.SendActivityAsync(MessageFactory.SuggestedActions(new List <string> { "Yes", "No" }, "Should I go ahead and book the table ?")); } var options = new PromptOptions() { Prompt = MessageFactory.Text(reservationResult.NewReservation.GetMissingPropertyReadOut()), }; // Start the prompt with the first missing piece of information. return(await stepContext.PromptAsync(GetLocationDateTimePartySizePrompt, options)); } }