public void TestGetGroupDataProcessed_ForCategoryArea()
        {
            var areaCode = CategoryArea.New(CategoryTypeIds.DeprivationDecileCountyAndUA2010, 1).Code;

            var groupData = new GroupDataAtDataPointRepository().GetGroupDataProcessed(areaCode,
                AreaTypeIds.CountyAndUnitaryAuthority, ProfileIds.Phof,GroupIds.Phof_WiderDeterminantsOfHealth);
            Assert.IsNotNull(groupData.GroupRoots);
        }
        public void TestGetGroupDataProcessed_ForNearestNeighbour()
        {
            var areaCode = NearestNeighbourArea.CreateAreaCode(
                NearestNeighbourTypeIds.Cipfa, AreaCodes.CountyUa_Cambridgeshire);

            var groupData = new GroupDataAtDataPointRepository().GetGroupDataProcessed(areaCode,
                AreaTypeIds.CountyAndUnitaryAuthority, ProfileIds.Phof, GroupIds.Phof_WiderDeterminantsOfHealth);

            // Check group roots are defined
            var groupRoots = groupData.GroupRoots;
            Assert.IsNotNull(groupRoots);

            // Check expected number of data points
            var count = groupRoots[0].Data.Count;
            Assert.IsTrue(count > 10 && count < 20);
        }
        public IList<TrendRoot> GetTrendData()
        {
            var parentArea = new ParentArea(_parameters.ParentAreaCode, _parameters.AreaTypeId);

            bool isParentCodeNearestNeighbour = Area.IsNearestNeighbour(_parameters.ParentAreaCode);

            var groupData = new GroupDataAtDataPointRepository().GetGroupData(_parameters.ParentAreaCode,
                _parameters.AreaTypeId, _parameters.ProfileId, _parameters.GroupId);

            IList<TrendRoot> trendRoots = new TrendRootBuilder().Build(
               groupData.GroupRoots,
                new ComparatorMapBuilder(parentArea).ComparatorMap,
                _parameters.AreaTypeId,
                _parameters.ProfileId,
                groupData.IndicatorMetadata, isParentCodeNearestNeighbour);

            return trendRoots;
        }
        protected List<DomainData> BuildDomainDataForProfile(int profileId, int childAreaTypeId,
            IList<string> benchmarkAreaCodes)
        {
            var dataList = new List<DomainData>();

            var groupIds = new GroupIdProvider(profileReader).GetGroupIds(profileId);
            var groupMetadataList = groupDataReader.GetGroupMetadataList(groupIds);
            var groupDataRepository = new GroupDataAtDataPointRepository
            {
                AssignAreas = false,
                AssignChildAreaData = false
            };

            var benchmarkAreas = ReaderFactory.GetAreasReader().GetAreasFromCodes(benchmarkAreaCodes);

            foreach (var groupMetadata in groupMetadataList)
            {
                var tableData = NewDomainData();
                var groupId = groupMetadata.Id;
                tableData.DomainTitle = groupMetadata.Name;
                tableData.GroupId = groupId;

                var groupData = groupDataRepository.GetGroupData(AreaCodes.England,
                    childAreaTypeId, profileId, groupId);
                var groupRoots = groupData.GroupRoots;

                foreach (var groupRoot in groupRoots)
                {
                    var metadata = groupData.GetIndicatorMetadataById(groupRoot.IndicatorId);
                    AddIndicatorData(groupRoot, metadata, benchmarkAreas);
                }

                dataList.Add(tableData);
            }

            return dataList;
        }
        public List<CoreDataSet> GetGroupDataAtDataPointOfSpecificAreas(string area_code,
            int area_type_id, int profile_id, int group_id)
        {
            IAreasReader areasReader = ReaderFactory.GetAreasReader();

            try
            {
                IArea parentArea = (area_code == AreaCodes.England)
                    ? AreaFactory.NewArea(areasReader, area_code)
                    : areasReader.GetParentAreas(area_code).First();

                GroupData data = new GroupDataAtDataPointRepository().GetGroupDataProcessed(parentArea.Code,
                    area_type_id,
                    profile_id, group_id);
                IList<GroupRoot> roots = data.GroupRoots;
                var dataForArea = new List<CoreDataSet>();

                foreach (GroupRoot groupRoot in roots)
                {
                    CoreDataSet coreData;

                    if (parentArea.IsCountry)
                    {
                        coreData = groupRoot.GetNationalGrouping().ComparatorData;
                    }
                    else
                    {
                        IList<CoreDataSet> dataList = groupRoot.Data;
                        coreData = dataList.FirstOrDefault(x => x.AreaCode == area_code);
                    }

                    dataForArea.Add(coreData);
                }
                return dataForArea;
            }
            catch (Exception ex)
            {
                Log(ex);
                throw;
            }
        }
 private void InitSupportingGroupData(int areaTypeId)
 {
     // Supporting data
     const int profileId = ProfileIds.HealthProfilesSupportingIndicators;
     int supportingGroupId = new GroupIdProvider(profileReader).GetGroupIds(profileId)[0];
     GroupData groupData = new GroupDataAtDataPointRepository
     {
         AssignChildAreaData = false,
         AssignAreas = false
     }.GetGroupData(benchmarkAreaCode,areaTypeId, profileId, supportingGroupId);
     groupRootSelector.SupportingGroupRoots = groupData.GroupRoots;
     indicatorMetadataCollection.AddIndicatorMetadata(groupData.IndicatorMetadata);
 }
        private void InitMainGroupData(int areaTypeId)
        {
            const int profileId = ProfileIds.HealthProfiles;

            GroupData groupDataForSpineChart = new GroupDataAtDataPointRepository
            {
                AssignChildAreaData = false,
                AssignAreas = false
            }.GetGroupData(benchmarkAreaCode, areaTypeId, profileId, GroupIds.HealthProfiles_AllSpineChartIndicators);

            indicatorMetadataCollection.AddIndicatorMetadata(groupDataForSpineChart.IndicatorMetadata);

            groupRootSelector.MainGroupRoots = groupDataForSpineChart.GroupRoots;
        }
        public LongerLivesAreaDetails GetAreaDetails(int profileId, int groupId, 
            int childAreaTypeId, string areaCode)
        {
            area = AreaFactory.NewArea(areasReader, areaCode);
            indicatorComparerFactory = new IndicatorComparerFactory
            {
                PholioReader = ReaderFactory.GetPholioReader()
            };

            var parentCodeToRanks = new Dictionary<string, List<AreaRankGrouping>>();
            var parentCodeToSignificances = new Dictionary<string, List<int?>>();
            var parentCodeToBenchmarks = new Dictionary<string, object>();

            InitIgnoredAreaCodes(profileId);

            // Set up parent areas
            Area country = areasReader.GetAreaFromCode(AreaCodes.England);
            var parentAreas = new List<IArea> { country };
            AddOnsClusterToParentAreas(childAreaTypeId, area, parentAreas);
            Decile decile = GetDecile(parentAreas, childAreaTypeId, areaCode);

            var isParentArea = IsParentArea(area);

            foreach (IArea parentArea in parentAreas)
            {
                string parentAreaCode = parentArea.Code;

                GroupData groupData = new GroupDataAtDataPointRepository().GetGroupDataProcessed(
                    parentAreaCode, childAreaTypeId, profileId, groupId);

                var rankBuilder = new AreaRankBuilder
                {
                    GroupDataReader = groupDataReader,
                    AreasReader = areasReader,
                    Area = area
                };

                var ranks = new List<AreaRankGrouping>();
                var significances = new List<int?>();
                var benchmarks = new List<CoreDataSet>();

                parentCodeToRanks.Add(parentAreaCode, ranks);
                foreach (GroupRoot groupRoot in groupData.GroupRoots)
                {
                    Grouping grouping = GetGrouping(parentArea, groupRoot);

                    // Get data list
                    IndicatorMetadata metadata = groupData.GetIndicatorMetadataById(grouping.IndicatorId);
                    TimePeriod timePeriod = TimePeriod.GetDataPoint(grouping);
                    IList<CoreDataSet> childAreaDataList =
                        GetChildAreaDataList(parentArea, groupRoot, grouping, timePeriod);
                    var areaRankGrouping = rankBuilder.BuildRank(grouping, metadata, timePeriod, childAreaDataList);
                    ranks.Add(areaRankGrouping);

                    // Area significance
                    if (areaRankGrouping != null && isParentArea == false)
                    {
                        var significance = GetSignificance(areaCode, groupRoot, grouping, childAreaDataList);
                        significances.Add(significance);
                    }
                    else
                    {
                        significances.Add(null);
                    }

                    benchmarks.Add(grouping.ComparatorData);
                }
                parentCodeToSignificances.Add(parentAreaCode, significances);
                parentCodeToBenchmarks.Add(parentAreaCode, benchmarks);
            }

            string url = null;
            if (isParentArea)
            {
                // Significances not relevant for parent areas
                parentCodeToSignificances = null;
                parentCodeToBenchmarks = null;
            }
            else
            {
                // Only need area web site link for child areas
                url = areasReader.GetAreaUrl(area.Code);
            }

            // Bespoke response object
            return new LongerLivesAreaDetails
            {
                Area = area,
                Decile = decile,
                Url = url,
                Ranks = parentCodeToRanks,
                Significances = parentCodeToSignificances,
                Benchmarks = parentCodeToBenchmarks
            };
        }