private async Task <DialogTurnResult> AgeStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            //PersonalDetails = (PersonalDetails)stepContext.Options;

            //if (PersonalDetails.Name == null)
            //{
            //    luisResult = await MainDialog.Get_luisRecognizer().RecognizeAsync<FlightBooking>(stepContext.Context, cancellationToken);
            //    PersonalDetails.Name = (luisResult.Entities.personName != null ? char.ToUpper(luisResult.Entities.personName[0][0]) + luisResult.Entities.personName[0].Substring(1) : null);
            //    //PersonalDetails.Name = (string)stepContext.Result;
            //}

            // Sand to DB
            MainDialog.WriteToDB(stepContext, cancellationToken);

            // Test for questionnairs
            //MainDialog.WriteQuestionnairesTempAsync(stepContext, cancellationToken);
            //MainDialog.WriteQuestionnairesTemp2Async(stepContext, cancellationToken);

            if (PersonalDetails.Age == null)
            {
                var AgeStepMsgText = MainDialog.Response.AskAge();
                var promptMessage  = MessageFactory.Text(AgeStepMsgText, AgeStepMsgText, InputHints.ExpectingInput);
                var retryText      = MainDialog.Response.RetryAge();
                var retryMessage   = MessageFactory.Text(retryText, retryText, InputHints.ExpectingInput);
                return(await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage, RetryPrompt = retryMessage, Validations = Validator.Age }, cancellationToken));
            }

            return(await stepContext.NextAsync(PersonalDetails.Age, cancellationToken));
        }
        private async Task <DialogTurnResult> FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            if (finished)
            {
                finished = false;
                return(await stepContext.BeginDialogAsync(nameof(QuestionnaireChoiceDialog), PersonalDetails, cancellationToken));
            }
            else if ((bool)stepContext.Result)
            {
                //var personalDetails = (PersonalDetails)stepContext.Options;

                // Upload to database

                // Wipe the personalDetails for testing purposes
                //PersonalDetails = new PersonalDetails();


                // Sand to DB
                MainDialog.WriteToDB(stepContext, cancellationToken);
                //var changes = new Dictionary<string, object>() { { PersonalDetails.UserID, PersonalDetails } };
                //try
                //{
                //    MainDialog.CosmosDBQuery.WriteAsync(changes, cancellationToken);
                //    finished = false;
                //}
                //catch (Exception e)
                //{
                //    await stepContext.Context.SendActivityAsync($"Error while connecting to database.\n\n{e}");
                //}

                //return await stepContext.EndDialogAsync(PersonalDetails, cancellationToken);
                return(await stepContext.BeginDialogAsync(nameof(QuestionnaireChoiceDialog), PersonalDetails, cancellationToken));
            }
            else
            {
                //PersonalDetails = new PersonalDetails();
                //PersonalDetails.Name = PersonalDetails.Sex = null;
                //PersonalDetails.Age = null;
                ClearDetails();

                return(await stepContext.BeginDialogAsync(nameof(PersonalDetailsDialog), PersonalDetails, cancellationToken));
            }

            //return await stepContext.EndDialogAsync(null, cancellationToken);
        }
        private async Task <DialogTurnResult> ConfirmStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            if (PersonalDetails.PhysicalActivity == null)
            {
                PersonalDetails.PhysicalActivity = (int)stepContext.Result;
            }

            //PersonalDetails = (PersonalDetails)stepContext.Options;

            //if(Regex.IsMatch((string)stepContext.Result, "female", RegexOptions.IgnoreCase))
            //    PersonalDetails.Sex = "Female";
            //else if (Regex.IsMatch((string)stepContext.Result, "male", RegexOptions.IgnoreCase))
            //    PersonalDetails.Sex = "Male";
            //else
            //    PersonalDetails.Sex = null;


            //if (PersonalDetails.Sex == null)
            //    PersonalDetails.Sex = ((FoundChoice)stepContext.Result).Value;

            //    //PersonalDetails.Sex = stepContext.Result.ToString();
            //    PersonalDetails.Sex = char.ToUpper(stepContext.Context.Activity.Text[0]) + stepContext.Context.Activity.Text.Substring(1).ToLower();

            //var choice = (FoundChoice)stepContext.Result;
            //PersonalDetails.Sex = choice.Value;

            //var userProfile = (UserProfile)stepContext.Values[UserInfo];
            //userProfile.CompaniesToReview = stepContext.Result as List<string> ?? new List<string>();

            // Sand to DB
            MainDialog.WriteToDB(stepContext, cancellationToken);

            var messageText   = $"Please confirm, this is your personal info:\n\nName: {PersonalDetails.Name}\n\nAge: {PersonalDetails.Age}\n\nSex: {PersonalDetails.Sex}\n\nSmoker: {PersonalDetails.Smoker}\n\nWater Consumption: {PersonalDetails.WaterConsumption} cups per day\n\nSleep: {PersonalDetails.Sleep} hours per day\n\nPhysical Activity: {PersonalDetails.PhysicalActivity} hours per week\n\nIs this correct?";
            var promptMessage = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput);

            if (!finished)
            {
                return(await stepContext.PromptAsync(nameof(ConfirmPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken));
            }
            else
            {
                return(await stepContext.NextAsync(PersonalDetails, cancellationToken));
            }
        }
        private async Task <DialogTurnResult> SexStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            //PersonalDetails= (PersonalDetails)stepContext.Options;

            //PersonalDetails.Age = Regex.Match((string)stepContext.Result, @"\d+").Value;
            //if (PersonalDetails.Age == null)
            //{
            //    luisResult = await MainDialog.Get_luisRecognizer().RecognizeAsync<FlightBooking>(stepContext.Context, cancellationToken);
            //    PersonalDetails.Age = (luisResult.Entities.age != null ? luisResult.Entities.age[0].Number.ToString() : Regex.Match((string)stepContext.Result, @"\d+").Value);
            //}

            //personalDetails.Age = (string)stepContext.Result;

            //if(PersonalDetails.Age == null)
            //{
            //    string errorMessage = "Didnt get that, lets try again.";
            //    var promptMessage = MessageFactory.Text(errorMessage, errorMessage, InputHints.ExpectingInput);
            //    await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken);


            //    return await stepContext.ReplaceDialogAsync(nameof(PersonalDetailsDialog.AgeStepAsync), PersonalDetails, cancellationToken);
            //}

            // Sand to DB
            MainDialog.WriteToDB(stepContext, cancellationToken);

            if (PersonalDetails.Sex == null)
            {
                var SexStepMsgText  = MainDialog.Response.AskSex();
                var promptMessage   = MessageFactory.Text(SexStepMsgText, SexStepMsgText, InputHints.ExpectingInput);
                var retryText       = $"Please choose one option.\n\n{SexStepMsgText}";
                var retryPromptText = MessageFactory.Text(retryText, retryText, InputHints.ExpectingInput);
                //return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken);

                var sexChoice = new List <Choice>()
                {
                    new Choice("Male"), new Choice("Female")
                };

                return(await stepContext.PromptAsync(nameof(ChoicePrompt), new PromptOptions { Prompt = promptMessage, Choices = sexChoice, RetryPrompt = retryPromptText, Style = ListStyle.HeroCard }, cancellationToken));
            }

            return(await stepContext.NextAsync(PersonalDetails.Sex, cancellationToken));
        }
Example #5
0
        private async Task <DialogTurnResult> FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            // Send a message the this questionnaire has already been finished
            if (finishedBefore)
            {
                var finishedText        = MainDialog.Response.FinishedQuestionnaire();
                var finishedTextMessage = MessageFactory.Text(finishedText, finishedText, InputHints.IgnoringInput);
                await stepContext.Context.SendActivityAsync(finishedTextMessage, cancellationToken);
            }

            if (finished)
            {
                await CalculatePersonalityTraitsAsync();

                string tip = await MainDialog.Response.TipMessageAsync();

                MainDialog.WriteToDB(stepContext, cancellationToken);

                var resultCard = CreateAdaptiveCardAttachment();
                var response   = MessageFactory.Attachment(resultCard /*, ssml: "Here are your results!"*/);
                await stepContext.Context.SendActivityAsync(response, cancellationToken);

                // Show results
                //var resultsText = /*$"Here are your results!\n\nExtraversion: {PersonalDetailsDialog.PersonalDetails.Extraversion}\n\nAgreeableness: {PersonalDetailsDialog.PersonalDetails.Agreeableness}\n\nConscientiousness: {PersonalDetailsDialog.PersonalDetails.Conscientiousness}\n\nNeuroticism: {PersonalDetailsDialog.PersonalDetails.Neuroticism}\n\nOpenness: {PersonalDetailsDialog.PersonalDetails.Openness}\n\nCLUSTER: {PersonalDetailsDialog.PersonalDetails.Cluster}\n\n{tip}"*/$"CLUSTER: {PersonalDetailsDialog.PersonalDetails.Cluster}\n\n{tip}";
                //var resultsTextMessage = MessageFactory.Text(resultsText, resultsText, InputHints.IgnoringInput);
                //await stepContext.Context.SendActivityAsync(resultsTextMessage, cancellationToken);

                // Resseting the flag, in case new user comes
                finished       = false;
                finishedBefore = true;
                return(await stepContext.EndDialogAsync(PersonalDetailsDialog.PersonalDetails, cancellationToken));
            }
            else
            {
                //PersonalDetailsDialog.PersonalDetails.QuestionnaireAnswers.Add(new KeyValuePair<string, string>(activeQuestion, ((FoundChoice)stepContext.Result).Value));
                // Adding 1 to the answers index because it starts from 0
                PersonalDetailsDialog.PersonalDetails.QuestionnaireAnswers.Add(activeQuestion, ++((FoundChoice)stepContext.Result).Index);
                MainDialog.WriteToDB(stepContext, cancellationToken);

                return(await stepContext.BeginDialogAsync(nameof(TopFiveDialog), PersonalDetailsDialog.PersonalDetails, cancellationToken));
            }
        }
        private async Task <DialogTurnResult> SmokerStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            if (PersonalDetails.Sex == null)
            {
                PersonalDetails.Sex = ((FoundChoice)stepContext.Result).Value;
            }

            // Sand to DB
            MainDialog.WriteToDB(stepContext, cancellationToken);

            if (PersonalDetails.Smoker == null)
            {
                var messageText   = MainDialog.Response.AskSmoker();
                var promptMessage = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput);
                return(await stepContext.PromptAsync(nameof(ConfirmPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken));
            }
            else
            {
                return(await stepContext.NextAsync(PersonalDetails, cancellationToken));
            }
        }
        private async Task <DialogTurnResult> PhysicalActivityStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            if (PersonalDetails.Sleep == null)
            {
                PersonalDetails.Sleep = (int)stepContext.Result;
            }

            // Sand to DB
            MainDialog.WriteToDB(stepContext, cancellationToken);

            if (PersonalDetails.PhysicalActivity == null)
            {
                var messageText     = MainDialog.Response.AskPhysicalActivity();
                var promptMessage   = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput);
                var retryText       = MainDialog.Response.RetryPhysycalActivity();
                var retryPromptText = MessageFactory.Text(retryText, retryText, InputHints.ExpectingInput);
                return(await stepContext.PromptAsync(nameof(NumberPrompt <int>), new PromptOptions { Prompt = promptMessage, RetryPrompt = retryPromptText }, cancellationToken));
            }
            else
            {
                return(await stepContext.NextAsync(PersonalDetails, cancellationToken));
            }
        }