public TemplateCriteriaEditModel GetTemplateCriteriaEditModel(long templateId)
        {
            var groups  = _healthAssessmentRepository.GetQuestionWithGroupForTemplatId(templateId);
            var testids = groups.Where(x => x.TestId.HasValue).Select(x => x.TestId.Value).Distinct();

            var criteriaCollection = _clinicalTestQualificationCriteriaRepository.GetbyTemplateId(templateId);

            var criterias = new List <ClinicalTestQualificationCriteriaEditModel>();

            if (criteriaCollection != null && criteriaCollection.Any())
            {
                criterias = Mapper.Map <IEnumerable <ClinicalTestQualificationCriteria>, IEnumerable <ClinicalTestQualificationCriteriaEditModel> >(criteriaCollection).ToList();
            }

            var testIds = criterias.Select(x => x.TestId);

            testids = testids.Where(t => !testIds.Contains(t));

            criterias.AddRange(testids.Select(t => new ClinicalTestQualificationCriteriaEditModel
            {
                TestId     = t,
                TemplateId = templateId
            }));

            return(new TemplateCriteriaEditModel
            {
                Criteria = SetTotalNumberOfQuestionAndGroupName(criterias, templateId, groups),
                TemplateId = templateId
            });
        }
示例#2
0
        private List <long> GetTestIdsToRecommend(string guid, long customerId, Gender gender, DateTime?dob, List <long> disqualifiedTest)
        {
            var tests = new List <long>();

            var answers = _clinicalQuestionAnswerRepository.GetCustomerClinicalQuestionAnswers(guid, customerId);

            if (!answers.IsNullOrEmpty())
            {
                var clinicalQuestionTemplateId = answers.First().ClinicalQuestionTemplateId;
                var template = _healthAssessmentTemplateRepository.GetById(clinicalQuestionTemplateId);
                var criteria = _clinicalTestQualificationCriteriaRepository.GetbyTemplateId(clinicalQuestionTemplateId);
                if (criteria.IsNullOrEmpty())
                {
                    return(tests);
                }

                var groups          = _healthAssessmentRepository.GetQuestionWithGroupForTemplatId(clinicalQuestionTemplateId);
                var templateTestIds = criteria.Select(x => x.TestId);
                foreach (var templateTestId in templateTestIds)
                {
                    var selectedGroup = groups.Where(x => x.TestId.HasValue && x.TestId.Value == templateTestId).Select(x => x).First();
                    var questionsintheGroupForTemplate = selectedGroup.Questions.Where(x => template.QuestionIds.Contains(x.Id));

                    var selectedCriteria = criteria.Single(x => x.TestId == templateTestId);

                    var isTestSelected = true;

                    /*answer for the disqualifier question must be given other wise user can qualify. Case: if disqualifier question is child question and parent question is said no then
                     * disqualifier question will be disable*/

                    if (selectedCriteria.DisqualifierQuestionId.HasValue)
                    {
                        questionsintheGroupForTemplate = questionsintheGroupForTemplate.Where(x => x.Id != selectedCriteria.DisqualifierQuestionId.Value);

                        var answerForTheQuestion = answers.SingleOrDefault(q => q.ClinicalHealthQuestionId == selectedCriteria.DisqualifierQuestionId.Value);

                        if (answerForTheQuestion != null && answerForTheQuestion.HealthQuestionAnswer == selectedCriteria.DisqualifierQuestionAnswer)
                        {
                            isTestSelected = false;
                            disqualifiedTest.Add(templateTestId);
                        }
                    }


                    if (isTestSelected && selectedCriteria.AgeCondition.HasValue && dob.HasValue)
                    {
                        var age = dob.Value.GetAge();
                        if (selectedCriteria.AgeCondition == (long)ComparisonOperators.LessThan)
                        {
                            isTestSelected = age < selectedCriteria.AgeMax;
                        }

                        else if (selectedCriteria.AgeCondition == (long)ComparisonOperators.LessThanEqualTo)
                        {
                            isTestSelected = dob.Value.IsAgeLessThanEqualTo(selectedCriteria.AgeMax ?? 0);
                        }

                        else if (selectedCriteria.AgeCondition == (long)ComparisonOperators.GreaterThan)
                        {
                            isTestSelected = dob.Value.IsAgeGreaterThan(selectedCriteria.AgeMin ?? 0);
                        }

                        else if (selectedCriteria.AgeCondition == (long)ComparisonOperators.GreaterThanEqualTo)
                        {
                            isTestSelected = age >= selectedCriteria.AgeMin;
                        }

                        else if (selectedCriteria.AgeCondition == (long)ComparisonOperators.Between)
                        {
                            isTestSelected = age >= selectedCriteria.AgeMin && dob.Value.IsAgeLessThanEqualTo(selectedCriteria.AgeMax ?? 0);
                        }
                    }

                    if (isTestSelected && selectedCriteria.Gender != Gender.Unspecified)
                    {
                        isTestSelected = selectedCriteria.Gender == gender;
                    }

                    bool medicationCriteriaPassed = false;

                    if (isTestSelected && selectedCriteria.MedicationQuestionId.HasValue)
                    {
                        var answerForTheQuestion = answers.SingleOrDefault(q => q.ClinicalHealthQuestionId == selectedCriteria.MedicationQuestionId.Value);

                        isTestSelected = answerForTheQuestion == null || answerForTheQuestion.HealthQuestionAnswer == "No";

                        medicationCriteriaPassed = isTestSelected;
                    }

                    if (isTestSelected && !String.IsNullOrEmpty(selectedCriteria.Answer) && !questionsintheGroupForTemplate.IsNullOrEmpty())
                    {
                        var questionWithParent = questionsintheGroupForTemplate.Where(x => x.ParentQuestionId != null);
                        var parentQuestions    = new List <HealthAssessmentQuestion>();
                        if (!questionWithParent.IsNullOrEmpty())
                        {
                            var parentQuestionIds = questionWithParent.Select(s => s.ParentQuestionId).Distinct();
                            parentQuestions = questionsintheGroupForTemplate.Where(x => parentQuestionIds.Contains(x.Id)).ToList();
                        }

                        if (parentQuestions.IsNullOrEmpty())
                        {
                            isTestSelected = IsUserPassNumberOfTestCriteria(selectedCriteria, medicationCriteriaPassed, questionsintheGroupForTemplate, answers);
                        }
                        else
                        {
                            foreach (var parentQuestion in parentQuestions)
                            {
                                var questionsInSection = questionsintheGroupForTemplate.Where(x => x.ParentQuestionId == parentQuestion.Id);
                                var parentAnswer       = answers.Single(q => q.ClinicalHealthQuestionId == parentQuestion.Id);
                                if (isTestSelected && parentAnswer.HealthQuestionAnswer == "Yes")
                                {
                                    isTestSelected = IsUserPassNumberOfTestCriteria(selectedCriteria, medicationCriteriaPassed, questionsInSection, answers);
                                }
                                else
                                {
                                    isTestSelected = false;
                                }
                            }
                        }
                    }

                    if (isTestSelected)
                    {
                        tests.Add(templateTestId);
                    }
                }
            }
            return(tests);
        }