Ejemplo n.º 1
0
        private IList<QuestionViewModel> LoadQuestionsFromCategory(Category category)
        {
            var questionViewModels = new List<QuestionViewModel>();
            var questions = category.Questions.Where(x => x.Status == QuestionStatus.Active).OrderBy(x => x.DisplayOrder).ToArray();

            for (int i = 0; i < questions.Count(); i++)
            {
                var question = questions[i];

                var qvm = new QuestionViewModel
                    {
                        Id = question.QuestionId,
                        Question = question.DisplayText,
                        QuestionCode = question.QuestionCode,
                        QuestionType = question.InputType
                    };

                if (question.InputType.ToUpper() == "DATE" || question.InputType.ToUpper() == "NUMBER" || question.InputType.ToUpper() == "TEXT")
                {
                    qvm.Value = LoadSingleResponseValue(question);
                }

                qvm.DisplayLogic = question.DisplayLogic;
                qvm.IsRequired = question.IsRequired;
                qvm.IsKey = question.IsKeyQuestion;
                qvm.Choices = LoadQuestionChoices(question);
                qvm.Status = DetermineQuestionStatus(question);//question.Status;

                questionViewModels.Add(qvm);

                if (qvm.Status != QuestionStatus.Disabled && qvm.IsRequired)
                {
                    RequiredQuestionIds.Add(qvm.Id.ToString(CultureInfo.InvariantCulture));
                }

                if (qvm.DisplayLogic.IsNotNullOrEmpty() && qvm.DisplayLogic.Contains("!="))
                {
                    qvm.Status = QuestionStatus.Disabled;
                    continue;
                }

                var responses =
                    question.Responses.Where(
                        response =>
                        response.QuestionnaireId == Questionnaire.QuestionnaireId && response.QuestionId == question.QuestionId);

                foreach (var response in responses)
                {
                    if (response.IsSelected == "_NA_")
                    {
                        qvm.Status = QuestionStatus.Disabled;
                        if (RequiredQuestionIds.Contains(qvm.Id.ToString(CultureInfo.InvariantCulture)))
                        {
                            RequiredQuestionIds.Remove(qvm.Id.ToString(CultureInfo.InvariantCulture));
                        }
                    }

                    if (!string.IsNullOrEmpty(response.Value))
                    {
                        if (response.Value.Contains("Other") && response.IsSelected == "True")
                        {
                            RequiredQuestionIds.Add(response.QuestionId.ToString(CultureInfo.InvariantCulture) + "_Comment");
                        }
                    }
                }
                AddToAnsnweredIds(question);
            }

            return questionViewModels;
        }