private static void AssignAreaTypeData(IndicatorGridModel model, Profile profile) { var builder = new AreaTypeSelectListBuilder(profile.AreaTypes, profile.SelectedAreaType); model.SelectedAreaTypeId = builder.SelectedAreaTypeId; model.AreaTypeList = builder.SelectListItems; }
public Profile Build(string urlKey, int selectedDomainNumber = 0, int selectedAreaType = 0) { var profile = new Profile(); ProfileDetails profileDetails = GetProfileDetails(urlKey); profile.Name = profileDetails.Name; profile.Id = profileDetails.Id; profile.ContactUserId = profileDetails.ContactUserId; profile.IsProfileViewable = profileDetails.IsProfileViewable; profileDetails.GroupIds = _reader.GetGroupingIds(profile.Id).ToList(); profile.GroupingMetadatas = _reader.GetGroupingMetadataList(profileDetails.GroupIds); profile.AreIndicatorsToBeListed = profile.GroupingMetadatas.Count == 1 || (selectedDomainNumber > 0); // Select default domain if none profile.SelectedDomain = selectedDomainNumber <= 0 ? 1 : selectedDomainNumber; var orderedGroupIds = profile.GroupingMetadatas.Select(x => x.GroupId).ToList(); // Groupings var allGroupings = new List<Grouping>(); List<Grouping> domainGroupings = null; int? selectedDomainId = null; for (int i = 0; i < orderedGroupIds.Count; i++) { int groupId = orderedGroupIds[i]; IList<Grouping> groupings = _reader.GetGroupings(groupId); if (i + 1 == profile.SelectedDomain) { selectedDomainId = groupId; domainGroupings = groupings.ToList(); } allGroupings.AddRange(groupings); } if (allGroupings.Count > 0) { // There are groupings so get the available Area types var areaTypeIds = allGroupings.Select(x => x.AreaTypeId).Distinct().ToList(); profile.AreaTypes = _reader.GetSpecificAreaTypes(areaTypeIds); if (selectedAreaType != 0) { selectedAreaType = selectedAreaType != -1 ? selectedAreaType : areaTypeIds.First(); profile.SelectedAreaType = selectedAreaType; } } // Indicators if (profile.AreIndicatorsToBeListed) { if (profile.SelectedDomain != 0 && domainGroupings != null) { // Only include indicators from the selected domain and area type IEnumerable<int> indicatorIds; if (selectedAreaType==0) { indicatorIds = domainGroupings .OrderBy(v => v.Sequence) .Select(x => x.IndicatorId) .Distinct(); profile.IndicatorNames = GetIndicatorsForGrid(indicatorIds, selectedDomainId, selectedAreaType, profile.Id); } else { indicatorIds = domainGroupings.Where(x => x.AreaTypeId == selectedAreaType).OrderBy(v => v.Sequence).Select(x => x.IndicatorId).Distinct(); profile.IndicatorNames = GetIndicatorsForGrid(indicatorIds, selectedDomainId, selectedAreaType, profile.Id); } } else if (profile.GroupingMetadatas.Count == 0) { // No domains for this profile so use all groupings var indicatorIds = allGroupings.Where(x => x.AreaTypeId == selectedAreaType).Select(x => x.IndicatorId).Distinct(); profile.IndicatorNames = GetIndicatorsForGrid(indicatorIds, selectedDomainId, selectedAreaType, profile.Id); } } return profile; }