public ReservationConfirmationTopic(Reservation reservation) : base() { this.SubTopics.Add(CONFIRMATION_PROMPT, (object[] args) => { var confirmationPrompt = new Prompt <string>(); confirmationPrompt.Set .OnPrompt((context, lastTurnReason) => { var recapactivity = ReservationView.ReservationRecapCard(context, reservation); context.SendActivity(recapactivity); var activity = ReservationView.CreatedYesNoCard(); context.SendActivity(activity); }) .Validator(new ReservationConfirmationValidator()) .MaxTurns(2) .OnSuccess((context, value) => { this.ClearActiveTopic(); this.State.confirmation.confirmationState = value; this.OnTurn(context); }) .OnFailure((context, reason) => { this.ClearActiveTopic(); if (reason != null && reason == "toomanyattemps") { context.SendActivity("I'm sorry I'm having issues understanding you."); } this.OnFailure(context, reason); }); return(confirmationPrompt); }); }
public AddReservationTopic() : base() { this.SubTopics.Add(STARTDATE_PROMPT, (object[] args) => { var startdatePrompt = new Prompt <DateTime>(); startdatePrompt.Set .OnPrompt((context, lastTurnReason) => { if (lastTurnReason != null && lastTurnReason == "novaliddatetime") { context.SendActivity("insert a valid date"); } context.SendActivity("What's your check in date?"); }) .Validator(new ReservationStartDateValidator()) .MaxTurns(2) .OnSuccess((context, value) => { this.ClearActiveTopic(); this.State.reservation.StartDay = value; this.OnTurn(context); }) .OnFailure((context, reason) => { this.ClearActiveTopic(); if (reason != null && reason == "toomanyattemps") { context.SendActivity("I'm sorry I'm having issues understanding you."); } this.OnFailure(context, reason); }); return(startdatePrompt); }); this.SubTopics.Add(LOCATION_PROMPT, (object[] args) => { var locationPrompt = new Prompt <string>(); locationPrompt.Set .OnPrompt((context, lastTurnReason) => { context.SendActivity("Where you want to go?"); }) .Validator(new ReservationLocationValidator()) .MaxTurns(2) .OnSuccess((context, value) => { this.ClearActiveTopic(); this.State.reservation.Location = value; this.OnTurn(context); }) .OnFailure((context, reason) => { this.ClearActiveTopic(); if (reason != null && reason == "toomanyattemps") { context.SendActivity("I'm sorry I'm having issues understanding you."); } this.OnFailure(context, reason); }); return(locationPrompt); }); this.SubTopics.Add(PEOPLENUMBER_PROMPT, (object[] args) => { var peoplenumberPrompt = new Prompt <int>(); peoplenumberPrompt.Set .OnPrompt((context, lastTurnReason) => { context.SendActivity("How many people?"); }) .Validator(new ReservationNumberValidator()) .MaxTurns(2) .OnSuccess((context, value) => { this.ClearActiveTopic(); this.State.reservation.PeopleNumber = value; this.OnTurn(context); }) .OnFailure((context, reason) => { this.ClearActiveTopic(); if (reason != null && reason == "toomanyattemps") { context.SendActivity("I'm sorry I'm having issues understanding you."); } this.OnFailure(context, reason); }); return(peoplenumberPrompt); }); this.SubTopics.Add(DURATION_PROMPT, (object[] args) => { var durationPrompt = new Prompt <int>(); durationPrompt.Set .OnPrompt((context, lastTurnReason) => { context.SendActivity("How many days do you want to stay?"); }) .Validator(new ReservationNumberValidator()) .MaxTurns(2) .OnSuccess((context, value) => { this.ClearActiveTopic(); this.State.reservation.Duration = value; this.OnTurn(context); }) .OnFailure((context, reason) => { this.ClearActiveTopic(); if (reason != null && reason == "toomanyattemps") { context.SendActivity("I'm sorry I'm having issues understanding you."); } this.OnFailure(context, reason); }); return(durationPrompt); }); this.SubTopics.Add(CONFIRMATION_PROMPT, (object[] args) => { var confirmationPrompt = new ReservationConfirmationTopic(this.State.reservation); confirmationPrompt.Set .OnSuccess((ctx, confirmation) => { if (confirmation.confirmationState == "yes") { this.ClearActiveTopic(); this.State.reservation.Confirmed = "yes"; this.OnTurn(ctx); } else { this.ClearActiveTopic(); this.State.reservation.Confirmed = "no"; this.OnTurn(ctx); } }) .OnFailure((context, reason) => { this.ClearActiveTopic(); if (reason != null && reason == "toomanyattemps") { context.SendActivity("I'm sorry I'm having issues understanding you."); } this.OnFailure(context, reason); }); return(confirmationPrompt); }); this.SubTopics.Add(EDIT_PROMPT, (object[] args) => { var editPrompt = new Prompt <string>(); editPrompt.Set .OnPrompt((context, lastTurnReason) => { var actions = new Dictionary <string, string>(); actions.Add("startdate", "Change Start Date"); actions.Add("location", "Change Location"); actions.Add("duration", "Change Duration"); actions.Add("peoplenumber", "Change People Number"); actions.Add("confirmreservation", "Confirm Reservation"); var activity = ReservationView.CreateEditReservationHeroCard(actions); // Send the activity as a reply to the user. context.SendActivity(activity); }) .Validator(new ReservationEditValidator()) .MaxTurns(2) .OnSuccess((context, value) => { this.ClearActiveTopic(); switch (value) { case "location": this.State.reservation.Location = null; break; case "startdate": this.State.reservation.StartDay = default; break; case "duration": this.State.reservation.Duration = 0; break; case "peoplenumber": this.State.reservation.PeopleNumber = 0; break; case "confirmreservation": this.State.reservation.Confirmed = "yes"; break; default: break; } this.OnTurn(context); }) .OnFailure((context, reason) => { this.ClearActiveTopic(); if (reason != null && reason == "toomanyattemps") { context.SendActivity("I'm sorry I'm having issues understanding you."); } this.OnFailure(context, reason); }); return(editPrompt); });