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 }); }
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); }