private List <IItem> GetGroups(AssessmentDefinitionDto assessmentDefinitionDto, ItemDefinition itemDefinition, string search, string assessmentName) { var groups = new List <IItem> (); var questions = new List <IItem> (); if (itemDefinition.ItemType != ItemType.Group || itemDefinition.ItemDefinitions == null) { return(groups); } var q = GetQuestions(assessmentDefinitionDto, itemDefinition.ItemDefinitions, search, assessmentName); questions.AddRange(q); if (!q.Any()) { return(groups); } var group = GetGroup(assessmentDefinitionDto, itemDefinition, q, assessmentName); groups.Add(group); foreach (var question in q) { ((Question)question).ParentName = group.Name; } return(groups); }
private List <IItem> GetQuestions(AssessmentDefinitionDto assessmentDefinitionDto, IEnumerable <ItemDefinition> itemDefinitions, string search, string assessmentName) { var definitions = itemDefinitions as ItemDefinition[] ?? itemDefinitions.ToArray(); var questions = definitions.Where(a => a.ItemType == ItemType.Question).ToList(); var subGroupQuestions = definitions .Where(a => a.ItemType == ItemType.Group) .SelectMany(b => b.ItemDefinitions) .Where(c => c.ItemType == ItemType.Question); var subGroupInGroupQuestions = definitions .Where(a => a.ItemType == ItemType.Group) .Where(g => g.ItemType == ItemType.Group) .SelectMany(b => b.ItemDefinitions) .Where(c => c.ItemType == ItemType.Question); questions.AddRange(subGroupQuestions); questions.AddRange(subGroupInGroupQuestions); questions = questions.GroupBy(a => a.CodedConcept.Code).Select(a => a.First()).ToList(); return((from q in questions let questionName = _resourcesManager.GetResourceManagerByName(assessmentDefinitionDto.AssessmentName) .GetString(SharedStringNames.ResourceKeyPrefix + q.CodedConcept.Code) where IsMatch(search, questionName) select new Question { ItemType = ItemType.Question.DisplayName, Code = q.CodedConcept.Code, Name = questionName, TemplateName = GetTemplateName(q), AssessmentName = assessmentName, AssessmentCode = assessmentDefinitionDto.AssessmentCode }) .Cast <IItem>().OrderBy(a => a.Name).ToList()); }
private IItem GetGroup(AssessmentDefinitionDto assessmentDefinitionDto, ItemDefinition itemDefinition, List <IItem> questions, string assessmentName) { var groupCode = itemDefinition.CodedConcept.Code; var assessmentResourceManager = _resourcesManager.GetResourceManagerByName(assessmentDefinitionDto.AssessmentName); if (itemDefinition.ItemDefinitions != null) { var parentGroup = itemDefinition; foreach (var id1 in itemDefinition.ItemDefinitions .Where(id1 => id1.ItemDefinitions != null) .Where(id1 => id1.ItemDefinitions.Any(id2 => id2.CodedConcept.Code == questions.ElementAt(0).Code))) { parentGroup = id1; } if (parentGroup != null) { groupCode = parentGroup.CodedConcept.Code; } } var groupName = assessmentResourceManager .GetString(SharedStringNames.ResourceKeyPrefix + groupCode + SharedStringNames.ResourceKeyPrefix + SharedStringNames.Instructions) ?? assessmentResourceManager.GetString(SharedStringNames.ResourceKeyPrefix + groupCode); var group = new Group { ItemType = ItemType.Group.DisplayName, Code = itemDefinition.CodedConcept.Code, Name = groupName, Items = questions, AssessmentName = assessmentName, AssessmentCode = assessmentDefinitionDto.AssessmentCode }; return(group); }