Esempio n. 1
0
        public async Task <ActionResult> PathwayStart(string pathwayNumber, string gender, int age, string args)
        {
            var decryptedArgs           = new QueryStringEncryptor(args);
            var decryptedFilterServices = string.IsNullOrEmpty(decryptedArgs["filterServices"]) || bool.Parse(decryptedArgs["filterServices"]);

            var model = new JustToBeSafeViewModel {
                SessionId       = Guid.Parse(decryptedArgs["sessionId"]),
                PathwayNo       = pathwayNumber,
                DigitalTitle    = decryptedArgs["digitalTitle"],
                EntrySearchTerm = decryptedArgs["searchTerm"],
                CurrentPostcode = decryptedArgs["postcode"],
                UserInfo        = new UserInfo
                {
                    Demography = new AgeGenderViewModel
                    {
                        Age    = age,
                        Gender = gender
                    }
                },
                FilterServices = decryptedFilterServices,
                Campaign       = decryptedArgs["campaign"],
                Source         = decryptedArgs["source"]
            };

            return(await JustToBeSafeFirst(model));
        }
        public async Task <ActionResult> JustToBeSafeFirst(JustToBeSafeViewModel model)
        {
            ModelState.Clear();
            var viewData = await _justToBeSafeFirstViewModelBuilder.JustToBeSafeFirstBuilder(model).ConfigureAwait(false);

            return(View(viewData.Item1, viewData.Item2));
        }
        public async Task <ActionResult> JustToBeSafeNext(JustToBeSafeViewModel model)
        {
            ModelState.Clear();
            var next = await _justToBeSafeViewModelBuilder.JustToBeSafeNextBuilder(model).ConfigureAwait(false);

            return(View(next.Item1, next.Item2));
        }
        private async Task <JustToBeSafeViewModel> DoWorkPreviouslyDoneInQuestionBuilder(JustToBeSafeViewModel model)
        {
            var businessApiPathwayUrl = _configuration.GetBusinessApiPathwayUrl(model.PathwayId);
            var response = await _restfulHelper.GetAsync(businessApiPathwayUrl);

            var pathway = JsonConvert.DeserializeObject <Pathway>(response);

            if (pathway == null)
            {
                return(null);
            }

            var derivedAge = model.UserInfo.Demography.Age == -1 ? pathway.MinimumAgeInclusive : model.UserInfo.Demography.Age;
            var newModel   = new JustToBeSafeViewModel
            {
                PathwayId    = pathway.Id,
                PathwayNo    = pathway.PathwayNo,
                PathwayTitle = pathway.Title,
                DigitalTitle = string.IsNullOrEmpty(model.DigitalTitle) ? pathway.Title : model.DigitalTitle,
                UserInfo     = new UserInfo {
                    Demography = new AgeGenderViewModel {
                        Age = derivedAge, Gender = pathway.Gender
                    }
                },
                JourneyJson = model.JourneyJson,
                SymptomDiscriminatorCode = model.SymptomDiscriminatorCode,
                State          = JourneyViewModelStateBuilder.BuildState(pathway.Gender, derivedAge),
                SessionId      = model.SessionId,
                FilterServices = model.FilterServices
            };

            newModel.StateJson = JourneyViewModelStateBuilder.BuildStateJson(newModel.State);

            return(newModel);
        }
        public async Task <ActionResult> JustToBeSafeFirst(JourneyViewModel model)
        {
            var newModel = new JustToBeSafeViewModel
            {
                PathwayId = model.PathwayId,
                UserInfo  = model.UserInfo
            };

            return(await JustToBeSafeFirst(newModel));
        }
        public async Task <Tuple <string, JourneyViewModel> > BuildNextAction(List <QuestionWithAnswers> questions, Journey journey, JustToBeSafeViewModel model, Answer selectedAnswer, QuestionWithAnswers selectedQuestion, string questionsJson)
        {
            if (!questions.Any())
            {
                journey.Steps = journey.Steps.Where(step => step.QuestionId != model.SelectedQuestionId).ToList();
                var questionViewModel = new QuestionViewModel
                {
                    PathwayId                = model.PathwayId,
                    PathwayNo                = model.PathwayNo,
                    PathwayTitle             = model.PathwayTitle,
                    SymptomDiscriminatorCode = model.SymptomDiscriminatorCode,
                    UserInfo       = model.UserInfo,
                    JourneyJson    = JsonConvert.SerializeObject(journey),
                    SelectedAnswer = JsonConvert.SerializeObject(selectedAnswer),
                };

                _mappingEngine.Mapper.Map(selectedQuestion, questionViewModel);
                questionViewModel = _mappingEngine.Mapper.Map(selectedAnswer, questionViewModel);
                var nextNode = await GetNextNode(questionViewModel);

                return(new Tuple <string, JourneyViewModel>("TODO NOT USED?", await _journeyViewModelBuilder.Build(questionViewModel, nextNode)));
            }

            if (questions.Count() == 1)
            {
                var journeyViewModel = new JourneyViewModel
                {
                    PathwayId    = model.PathwayId,
                    PathwayNo    = model.PathwayNo,
                    PathwayTitle = model.PathwayTitle,
                    UserInfo     = model.UserInfo,
                    JourneyJson  = JsonConvert.SerializeObject(journey),
                };

                _mappingEngine.Mapper.Map(questions.First(), journeyViewModel);
                journeyViewModel = _mappingEngine.Mapper.Map(selectedAnswer, journeyViewModel);

                return(new Tuple <string, JourneyViewModel>("../Question/Question", journeyViewModel));
            }

            var viewModel = new JustToBeSafeViewModel
            {
                PathwayId                = model.PathwayId,
                PathwayNo                = model.PathwayNo,
                PathwayTitle             = model.PathwayTitle,
                JourneyJson              = JsonConvert.SerializeObject(journey),
                SymptomDiscriminatorCode = selectedAnswer.SymptomDiscriminator ?? model.SymptomDiscriminatorCode,
                Part          = model.Part + 1,
                Questions     = questions,
                QuestionsJson = questionsJson,
                UserInfo      = model.UserInfo
            };

            return(new Tuple <string, JourneyViewModel>("JustToBeSafe", viewModel));
        }
        public async Task <ActionResult> JustToBeSafe(JourneyViewModel model)
        {
            var sliderModel = await _questionViewModelBuilder.BuildSlider(model);

            var justToBeSafeViewModel = new JustToBeSafeViewModel
            {
                PathwayId    = sliderModel.PathwayId,
                PathwayNo    = sliderModel.PathwayNo,
                PathwayTitle = sliderModel.PathwayTitle,
                UserInfo     = sliderModel.UserInfo
            };
            var next = await _justToBeSafeFirstViewModelBuilder.JustToBeSafeFirstBuilder(justToBeSafeViewModel);

            return(View(next.Item1, next.Item2));
        }
        private static QuestionInfoViewModel BuildModel(string pathwayNumber, JustToBeSafeViewModel jtbsModel)
        {
            var userInfo = jtbsModel.UserInfo;
            var demogs   = userInfo != null ? jtbsModel.UserInfo.Demography : null;
            var age      = userInfo != null &&
                           demogs != null && demogs.Age > 0
                ? demogs.Age
                : 111;

            var gender = userInfo != null &&
                         demogs != null && !string.IsNullOrEmpty(demogs.Gender)
                ? demogs.Gender
                : "Male";

            var state = new Dictionary <string, string>();

            state.Add("PATIENT_GENDER", string.Format("\"{0}\"", gender.Substring(0, 1)));
            state.Add("SYMPTOMS_STARTED_DAYS_AGO", "-1");
            if (demogs != null && demogs.Age > 0)
            {
                state.Add("PATIENT_AGE", age.ToString());
            }
            else
            {
                state.Add("PATIENT_AGE", "-1");
            }


            var model = new QuestionInfoViewModel
            {
                SessionId       = jtbsModel.SessionId,
                PathwayNo       = pathwayNumber,
                EntrySearchTerm = string.Format("External get to {0}", pathwayNumber),
                State           = state,
                StateJson       = JsonConvert.SerializeObject(state),
                UserInfo        = new UserInfo
                {
                    Demography = new AgeGenderViewModel
                    {
                        Age    = age,
                        Gender = gender
                    }
                },
                CurrentPostcode = jtbsModel.CurrentPostcode
            };

            return(model);
        }
        private async Task <JustToBeSafeViewModel> BuildIdentifiedModel(JustToBeSafeViewModel model)
        {
            var pathway = JsonConvert.DeserializeObject <Pathway>(await _restfulHelper.GetAsync(_configuration.GetBusinessApiPathwayIdUrl(model.PathwayNo, model.UserInfo.Demography.Gender, model.UserInfo.Demography.Age)));

            if (pathway == null)
            {
                return(null);
            }

            model.PathwayId         = pathway.Id;
            model.PathwayTitle      = pathway.Title;
            model.PathwayNo         = pathway.PathwayNo;
            model.State             = JourneyViewModelStateBuilder.BuildState(model.UserInfo.Demography.Gender, model.UserInfo.Demography.Age, model.State);
            model.StateJson         = JourneyViewModelStateBuilder.BuildStateJson(model.State);
            model.CollectedKeywords = new KeywordBag(_keywordCollector.ParseKeywords(pathway.Keywords, false).ToList(), _keywordCollector.ParseKeywords(pathway.ExcludeKeywords, false).ToList());
            return(model);
        }
Esempio n. 10
0
        public async Task <ActionResult> PathwayStart(string pathwayNumber, string gender, int age, string digitalTitle, string entrySearchTerm, bool?filterServices)
        {
            var model = new JustToBeSafeViewModel {
                PathwayNo       = pathwayNumber,
                DigitalTitle    = digitalTitle,
                EntrySearchTerm = entrySearchTerm,
                UserInfo        = new UserInfo {
                    Demography = new AgeGenderViewModel {
                        Age    = age,
                        Gender = gender
                    }
                },
                FilterServices = filterServices.HasValue ? filterServices.Value : true
            };

            return(await JustToBeSafeFirst(model));
        }
        public static string EncryptedKeys(JustToBeSafeViewModel model)
        {
            var encryptor = new QueryStringEncryptor();

            encryptor["sessionId"]          = model.SessionId.ToString();
            encryptor["postcode"]           = !string.IsNullOrEmpty(model.CurrentPostcode) ? model.CurrentPostcode : string.Empty;
            encryptor["filterServices"]     = model.FilterServices.ToString();
            encryptor["campaign"]           = !string.IsNullOrEmpty(model.Campaign) ? model.Campaign : string.Empty;
            encryptor["source"]             = !string.IsNullOrEmpty(model.Source) ? model.Source : string.Empty;
            encryptor["digitalTitle"]       = !string.IsNullOrEmpty(model.DigitalTitle) ? model.DigitalTitle : string.Empty;
            encryptor["isCovidjourney"]     = model.IsCovidJourney.ToString();
            encryptor["viaGuidedSelection"] = model.ViaGuidedSelection.HasValue ? model.ViaGuidedSelection.Value.ToString() : string.Empty;
            encryptor["searchTerm"]         = !string.IsNullOrWhiteSpace(model.EntrySearchTerm) ? model.EntrySearchTerm : string.Empty;
            encryptor["startParameter"]     = !string.IsNullOrEmpty(model.StartParameter) ? model.StartParameter : string.Empty;

            return(encryptor.ToString());
        }
Esempio n. 12
0
        private async Task <JustToBeSafeViewModel> DoWorkPreviouslyDoneInQuestionBuilder(JustToBeSafeViewModel model)
        {
            var businessApiPathwayUrl = _configuration.GetBusinessApiPathwayUrl(model.PathwayId);
            var response = await _restClient.ExecuteAsync <Pathway>(new JsonRestRequest(businessApiPathwayUrl, Method.GET));

            CheckResponse(response);

            if (response.Data == null)
            {
                return(null);
            }

            var pathway    = response.Data;
            var derivedAge = model.UserInfo.Demography.Age == -1 ? pathway.MinimumAgeInclusive : model.UserInfo.Demography.Age;
            var state      = !string.IsNullOrEmpty(model.StateJson)
                ? JsonConvert.DeserializeObject <Dictionary <string, string> >(model.StateJson)
                : new Dictionary <string, string>();

            var newModel = new JustToBeSafeViewModel
            {
                PathwayId         = pathway.Id,
                PathwayNo         = pathway.PathwayNo,
                PathwayTitle      = pathway.Title,
                PathwayTraumaType = pathway.TraumaType,
                DigitalTitle      = string.IsNullOrEmpty(model.DigitalTitle) ? pathway.Title : model.DigitalTitle,
                UserInfo          = new UserInfo {
                    Demography = new AgeGenderViewModel {
                        Age = derivedAge, Gender = pathway.Gender
                    }
                },
                JourneyJson = model.JourneyJson,
                SymptomDiscriminatorCode = model.SymptomDiscriminatorCode,
                State          = JourneyViewModelStateBuilder.BuildState(pathway.Gender, derivedAge, state),
                SessionId      = model.SessionId,
                Campaign       = model.Campaign,
                Source         = model.Source,
                FilterServices = model.FilterServices,
                StartParameter = model.StartParameter
            };

            newModel.StateJson = JourneyViewModelStateBuilder.BuildStateJson(newModel.State);

            return(newModel);
        }
        public async Task <Tuple <string, JourneyViewModel> > ActionSelection(JourneyViewModel model)
        {
            var nonOutcome = new[] { "Dx011", "Dx012", "Dx013", "Dx016", };

            if (nonOutcome.Contains(model.Id))
            {
                var newModel = _mappingEngine.Map <OutcomeViewModel>(model);
                return(new Tuple <string, JourneyViewModel>("../Outcome/Emergency", await _outcomeViewModelBuilder.DispositionBuilder(newModel)));
            }

            switch (model.NodeType)
            {
            case NodeType.Outcome:
            {
                var newModel = _mappingEngine.Map <OutcomeViewModel>(model);
                newModel.CareAdviceMarkers = model.State.Keys.Where(key => key.StartsWith("Cx"));
                var disposition2 = new[] { "Dx02", "Dx25", "Dx75", "Dx30", "Dx03", "Dx16", "Dx94", "Dx09" };
                return(disposition2.Contains(model.Id)
                            ? new Tuple <string, JourneyViewModel>("../Outcome/Disposition2", await _outcomeViewModelBuilder.DispositionBuilder(newModel))
                            : new Tuple <string, JourneyViewModel>("../Outcome/Disposition", await _outcomeViewModelBuilder.DispositionBuilder(newModel)));
            }

            case NodeType.Pathway:
            {
                var pathway  = JsonConvert.DeserializeObject <Pathway>(await _restfulHelper.GetAsync(string.Format(_configuration.BusinessApiPathwayUrl, model.Id)));
                var newModel = new JustToBeSafeViewModel
                {
                    PathwayId            = pathway.Id,
                    PathwayNo            = pathway.PathwayNo,
                    PathwayTitle         = pathway.Title,
                    UserInfo             = model.UserInfo,
                    JourneyJson          = model.JourneyJson,
                    SymptomDiscriminator = model.SymptomDiscriminator,
                };
                return(await _justToBeSafeFirstViewModelBuilder.JustToBeSafeFirstBuilder(newModel));

                //TODO delete return new Tuple<string, JourneyViewModel>("../JustToBeSafe/JustToBeSafe", await _justToBeSafeFirstViewModelBuilder.JustToBeSafeFirstBuilder(newModel));
            }

            case NodeType.Question:
            default:
                return(new Tuple <string, JourneyViewModel>("../Question/Question", model));
            }
        }
Esempio n. 14
0
        private async Task <JourneyViewModel> DeriveJourneyView(string pathwayId, int?age, string pathwayTitle, int[] answers, string postcode)
        {
            var questionViewModel = BuildQuestionViewModel(pathwayId, age, pathwayTitle, postcode);
            var response          = await
                                    _restClientBusinessApi.ExecuteAsync <Pathway>(new JsonRestRequest(_configuration.GetBusinessApiPathwayUrl(pathwayId, true), Method.GET))
                                    .ConfigureAwait(false);

            var pathway = response.Data;

            if (pathway == null)
            {
                return(null);
            }

            var derivedAge = questionViewModel.UserInfo.Demography.Age == -1 ? pathway.MinimumAgeInclusive : questionViewModel.UserInfo.Demography.Age;
            var newModel   = new JustToBeSafeViewModel
            {
                PathwayId    = pathway.Id,
                PathwayNo    = pathway.PathwayNo,
                PathwayTitle = pathway.Title,
                DigitalTitle = string.IsNullOrEmpty(questionViewModel.DigitalTitle) ? pathway.Title : questionViewModel.DigitalTitle,
                UserInfo     = new UserInfo()
                {
                    Demography = new AgeGenderViewModel {
                        Age = derivedAge, Gender = pathway.Gender
                    }
                },
                JourneyJson = questionViewModel.JourneyJson,
                SymptomDiscriminatorCode = questionViewModel.SymptomDiscriminatorCode,
                State           = JourneyViewModelStateBuilder.BuildState(pathway.Gender, derivedAge),
                CurrentPostcode = questionViewModel.CurrentPostcode
            };

            newModel.StateJson = JourneyViewModelStateBuilder.BuildStateJson(newModel.State);
            questionViewModel  = (await _justToBeSafeFirstViewModelBuilder.JustToBeSafeFirstBuilder(newModel).ConfigureAwait(false)).Item2; //todo refactor tuple away

            var resultingModel = await AnswerQuestions(questionViewModel, answers)
                                 .ConfigureAwait(false);

            return(resultingModel);
        }
Esempio n. 15
0
        private async Task <JustToBeSafeViewModel> BuildIdentifiedModel(JustToBeSafeViewModel model)
        {
            var response = await _restClient.ExecuteAsync <Pathway>(new JsonRestRequest(_configuration.GetBusinessApiPathwayIdUrl(model.PathwayNo, model.UserInfo.Demography.Gender, model.UserInfo.Demography.Age), Method.GET));

            CheckResponse(response);

            if (response.Data == null)
            {
                return(null);
            }

            var pathway = response.Data;

            model.PathwayId         = pathway.Id;
            model.PathwayTitle      = pathway.Title;
            model.PathwayNo         = pathway.PathwayNo;
            model.PathwayTraumaType = pathway.TraumaType;
            model.State             = JourneyViewModelStateBuilder.BuildState(model.UserInfo.Demography.Gender, model.UserInfo.Demography.Age, model.State);
            model.StateJson         = JourneyViewModelStateBuilder.BuildStateJson(model.State);
            model.CollectedKeywords = new KeywordBag(_keywordCollector.ParseKeywords(pathway.Keywords, false).ToList(), _keywordCollector.ParseKeywords(pathway.ExcludeKeywords, false).ToList());
            return(model);
        }
        public async Task <Tuple <string, JourneyViewModel> > JustToBeSafeNextBuilder(JustToBeSafeViewModel model)
        {
            model.State = JsonConvert.DeserializeObject <Dictionary <string, string> >(model.StateJson);
            var questionsWithAnswers = JsonConvert.DeserializeObject <List <QuestionWithAnswers> >(model.QuestionsJson);
            var selectedQuestion     = questionsWithAnswers.FirstOrDefault(q => q.Question.Id == model.SelectedQuestionId);

            var selectedAnswer = model.SelectedNoneApply()
                ? new Answer()
                : selectedQuestion.Answers.FirstOrDefault(a => a.Title.ToLower().StartsWith("yes")) ?? new Answer();

            var journey = JsonConvert.DeserializeObject <Journey>(model.JourneyJson).Add(
                new Journey
            {
                Steps = questionsWithAnswers.
                        Select(q => new JourneyStep
                {
                    QuestionId    = q.Question.Id,
                    QuestionNo    = q.Question.QuestionNo,
                    QuestionTitle = q.Question.Title,
                    Answer        = q.Question.Id == model.SelectedQuestionId
                                ? selectedAnswer
                                : q.Answers.First(a => a.Title.ToLower().StartsWith("no")),
                    IsJustToBeSafe = true
                }).ToList()
            });

            var questionsJson = await _restfulHelper.GetAsync(string.Format(_configuration.BusinessApiJustToBeSafePartTwoUrl, model.PathwayId,
                                                                            model.SelectedQuestionId ?? "", String.Join(",", questionsWithAnswers.Select(question => question.Question.Id)), selectedQuestion != null && selectedQuestion.Answers.Count > 3));

            var questions = JsonConvert.DeserializeObject <List <QuestionWithAnswers> >(questionsJson);

            journey.Steps = journey.Steps.Where(step => !questions.Exists(question => question.Question.Id == step.QuestionId)).ToList();

            return(await BuildNextAction(questions, journey, model, selectedAnswer, selectedQuestion, questionsJson));
        }
        public async Task <ActionResult> JustToBeSafeFirst(JustToBeSafeViewModel model)
        {
            var viewData = await _justToBeSafeFirstViewModelBuilder.JustToBeSafeFirstBuilder(model);

            return(View(viewData.Item1, viewData.Item2));
        }
Esempio n. 18
0
        public async Task <Tuple <string, QuestionViewModel> > JustToBeSafeFirstBuilder(JustToBeSafeViewModel model)
        {
            if (model.PathwayId != null)
            {
                model = await DoWorkPreviouslyDoneInQuestionBuilder(model); //todo refactor away
            }
            var identifiedModel = await BuildIdentifiedModel(model);

            var questionsWithAnswers = await _restClient.ExecuteAsync <IEnumerable <QuestionWithAnswers> >(new JsonRestRequest(_configuration.GetBusinessApiJustToBeSafePartOneUrl(identifiedModel.PathwayId), Method.GET));

            CheckResponse(questionsWithAnswers);

            if (!questionsWithAnswers.Data.Any())
            {
                var questionViewModel = new QuestionViewModel
                {
                    PathwayId          = identifiedModel.PathwayId,
                    PathwayNo          = identifiedModel.PathwayNo,
                    PathwayTitle       = identifiedModel.PathwayTitle,
                    PathwayTraumaType  = identifiedModel.PathwayTraumaType,
                    DigitalTitle       = string.IsNullOrEmpty(identifiedModel.DigitalTitle) ? identifiedModel.PathwayTitle : identifiedModel.DigitalTitle,
                    UserInfo           = identifiedModel.UserInfo,
                    JourneyJson        = identifiedModel.JourneyJson,
                    State              = JsonConvert.DeserializeObject <Dictionary <string, string> >(identifiedModel.StateJson),
                    StateJson          = identifiedModel.StateJson,
                    CollectedKeywords  = identifiedModel.CollectedKeywords,
                    Journey            = JsonConvert.DeserializeObject <Journey>(identifiedModel.JourneyJson),
                    SessionId          = model.SessionId,
                    JourneyId          = Guid.NewGuid(),
                    FilterServices     = model.FilterServices,
                    Campaign           = model.Campaign,
                    Source             = model.Source,
                    CurrentPostcode    = model.CurrentPostcode,
                    EntrySearchTerm    = model.EntrySearchTerm,
                    ViaGuidedSelection = model.ViaGuidedSelection,
                    StartParameter     = model.StartParameter
                };

                var question = await _restClient.ExecuteAsync <QuestionWithAnswers>(new JsonRestRequest(_configuration.GetBusinessApiFirstQuestionUrl(identifiedModel.PathwayId, identifiedModel.StateJson), Method.GET));

                CheckResponse(question);

                _mappingEngine.Mapper.Map(question.Data, questionViewModel);

                if (questionViewModel.IsViaGuidedSelection)
                {
                    _auditLogger.LogEvent(model, EventType.GuidedSelection, questionViewModel.PathwayTitle, "/GuidedSelection");
                }


                _userZoomDataBuilder.SetFieldsForQuestion(questionViewModel);
                if (questionViewModel.NodeType == NodeType.Page)
                {
                    // This replicates logic in ViewDeterminer so in future should ideally use that instead.
                    string viewName = "../Question/Page";
                    if (questionViewModel.PathwayNo.Equals("PC111"))
                    {
                        viewName = "../Question/Custom/NHSUKPage";
                    }
                    //replace placeholder for covid specific logic.
                    var covidPathways = await GetCovidPathways(model.UserInfo.Demography.Gender, new AgeCategory(model.UserInfo.Demography.Age));

                    questionViewModel.Content = PageCustomContent.ReplaceCovidPlaceHolderInPageContent(questionViewModel, covidPathways);
                    return(new Tuple <string, QuestionViewModel>(viewName, questionViewModel));
                }

                return(new Tuple <string, QuestionViewModel>("../Question/Question", questionViewModel));
            }
            identifiedModel.Part           = 1;
            identifiedModel.JourneyId      = Guid.NewGuid();
            identifiedModel.Questions      = questionsWithAnswers.Data.ToList();
            identifiedModel.QuestionsJson  = JsonConvert.SerializeObject(questionsWithAnswers.Data);
            identifiedModel.JourneyJson    = string.IsNullOrEmpty(identifiedModel.JourneyJson) ? JsonConvert.SerializeObject(new Journey()) : identifiedModel.JourneyJson;
            identifiedModel.FilterServices = model.FilterServices;
            return(new Tuple <string, QuestionViewModel>("../JustToBeSafe/JustToBeSafe", identifiedModel));
        }
        public async Task <Tuple <string, JourneyViewModel> > JustToBeSafeFirstBuilder(JustToBeSafeViewModel model)
        {
            var questionsJson = await _restfulHelper.GetAsync(string.Format(_configuration.BusinessApiJustToBeSafePartOneUrl, model.PathwayId));

            var questionsWithAnswers = JsonConvert.DeserializeObject <List <QuestionWithAnswers> >(questionsJson);

            if (!questionsWithAnswers.Any())
            {
                var journeyViewModel = new JourneyViewModel
                {
                    PathwayId    = model.PathwayId,
                    PathwayNo    = model.PathwayNo,
                    PathwayTitle = model.PathwayTitle,
                    UserInfo     = model.UserInfo,
                    JourneyJson  = model.JourneyJson,
                    State        = JsonConvert.DeserializeObject <Dictionary <string, string> >(model.StateJson)
                };
                var question = JsonConvert.DeserializeObject <QuestionWithAnswers>(await _restfulHelper.GetAsync(string.Format(_configuration.BusinessApiFirstQuestionUrl, model.PathwayId, model.StateJson)));
                _mappingEngine.Map(question, journeyViewModel);
                return(new Tuple <string, JourneyViewModel>("../Question/Question", journeyViewModel));
            }
            model.Part          = 1;
            model.Questions     = questionsWithAnswers;
            model.QuestionsJson = questionsJson;
            model.JourneyJson   = string.IsNullOrEmpty(model.JourneyJson) ? JsonConvert.SerializeObject(new Journey()) : model.JourneyJson;
            return(new Tuple <string, JourneyViewModel>("../JustToBeSafe/JustToBeSafe", model));
        }
        public async Task <Tuple <string, JourneyViewModel> > JustToBeSafeFirstBuilder(JustToBeSafeViewModel model)
        {
            if (model.PathwayId != null)
            {
                model = await DoWorkPreviouslyDoneInQuestionBuilder(model); //todo refactor away
            }
            var identifiedModel = await BuildIdentifiedModel(model);

            var questionsJson = await _restfulHelper.GetAsync(_configuration.GetBusinessApiJustToBeSafePartOneUrl(identifiedModel.PathwayId));

            var questionsWithAnswers = JsonConvert.DeserializeObject <List <QuestionWithAnswers> >(questionsJson);

            if (!questionsWithAnswers.Any())
            {
                var journeyViewModel = new JourneyViewModel
                {
                    PathwayId         = identifiedModel.PathwayId,
                    PathwayNo         = identifiedModel.PathwayNo,
                    PathwayTitle      = identifiedModel.PathwayTitle,
                    DigitalTitle      = string.IsNullOrEmpty(identifiedModel.DigitalTitle) ? identifiedModel.PathwayTitle : identifiedModel.DigitalTitle,
                    UserInfo          = identifiedModel.UserInfo,
                    JourneyJson       = identifiedModel.JourneyJson,
                    State             = JsonConvert.DeserializeObject <Dictionary <string, string> >(identifiedModel.StateJson),
                    StateJson         = identifiedModel.StateJson,
                    CollectedKeywords = identifiedModel.CollectedKeywords,
                    Journey           = JsonConvert.DeserializeObject <Journey>(identifiedModel.JourneyJson),
                    SessionId         = model.SessionId,
                    JourneyId         = Guid.NewGuid(),
                    FilterServices    = model.FilterServices
                };
                var question = JsonConvert.DeserializeObject <QuestionWithAnswers>(await _restfulHelper.GetAsync(_configuration.GetBusinessApiFirstQuestionUrl(identifiedModel.PathwayId, identifiedModel.StateJson)));
                _mappingEngine.Mapper.Map(question, journeyViewModel);

                _userZoomDataBuilder.SetFieldsForQuestion(journeyViewModel);

                return(new Tuple <string, JourneyViewModel>("../Question/Question", journeyViewModel));
            }
            identifiedModel.Part           = 1;
            identifiedModel.JourneyId      = Guid.NewGuid();
            identifiedModel.Questions      = questionsWithAnswers;
            identifiedModel.QuestionsJson  = questionsJson;
            identifiedModel.JourneyJson    = string.IsNullOrEmpty(identifiedModel.JourneyJson) ? JsonConvert.SerializeObject(new Journey()) : identifiedModel.JourneyJson;
            identifiedModel.FilterServices = model.FilterServices;
            return(new Tuple <string, JourneyViewModel>("../JustToBeSafe/JustToBeSafe", identifiedModel));
        }
 public async Task <ActionResult> FirstQuestionDeeplink(JustToBeSafeViewModel model)
 {
     ModelState.Clear();
     return(await JustToBeSafeFirst(model).ConfigureAwait(false));
 }
        public async Task <Tuple <string, JourneyViewModel> > JustToBeSafeNextBuilder(JustToBeSafeViewModel model)
        {
            model.State = JsonConvert.DeserializeObject <Dictionary <string, string> >(model.StateJson);
            var questionsWithAnswers = JsonConvert.DeserializeObject <List <QuestionWithAnswers> >(model.QuestionsJson);
            var selectedQuestion     = questionsWithAnswers.FirstOrDefault(q => q.Question.Id == model.SelectedQuestionId);

            var selectedAnswer = model.SelectedNoneApply()
                ? new Answer()
                : selectedQuestion.Answers.FirstOrDefault(a => a.Title.ToLower().StartsWith("yes")) ?? new Answer();

            var journey = JsonConvert.DeserializeObject <Journey>(model.JourneyJson).Add(
                new Journey
            {
                Steps = questionsWithAnswers.
                        Select(q => new JourneyStep
                {
                    QuestionType  = q.Question.QuestionType,
                    QuestionId    = q.Question.Id,
                    QuestionNo    = q.Question.QuestionNo,
                    QuestionTitle = q.Question.Title,
                    Answer        = q.Question.Id == model.SelectedQuestionId
                                ? selectedAnswer
                                : q.Answers.First(a => a.Title.ToLower().StartsWith("no")),
                    IsJustToBeSafe = true
                }).ToList()
            });

            var url = _configuration.GetBusinessApiJustToBeSafePartTwoUrl(model.PathwayId,
                                                                          model.SelectedQuestionId ?? "",
                                                                          String.Join(",", questionsWithAnswers.Select(question => question.Question.Id)),
                                                                          selectedQuestion != null && selectedQuestion.Answers.Count > 3);
            var response = await _restClient.ExecuteAsync <IEnumerable <QuestionWithAnswers> >(new JsonRestRequest(url, Method.GET));

            CheckResponse(response);

            var questions = response.Data.ToList();

            journey.Steps = journey.Steps.Where(step => !questions.Exists(question => question.Question.Id == step.QuestionId)).ToList();

            return(await BuildNextAction(questions, journey, model, selectedAnswer, selectedQuestion, JsonConvert.SerializeObject(response.Data)));
        }