Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
        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));
            }
        }