private PracticeAxis GetPracticeAxis(int indicatorId, TimePeriod period, int sexId, IndicatorMetadata metadata)
 {
     PracticeAxis axis = new PracticeAxis();
     axis.IndicatorData = new PracticeDataAccess().GetPracticeCodeToValidValueMap(indicatorId, period, sexId);
     if (axis.IndicatorData.Count > 0)
     {
         axis.Limits = GetLimits(axis.IndicatorData);
         axis.Title = GetTitle(metadata);
     }
     return axis;
 }
        public PracticeValueCollection Build(PracticeAxis axis1, PracticeAxis axis2)
        {
            bool isAreacode = !string.IsNullOrEmpty(AreaCode);

            // Indicator 1
            IndicatorMetadata indicatorMetadata1 = indicatorMetadataRepository.GetIndicatorMetadata(IndicatorId1);
            Grouping grouping1 = reader.GetGroupings(GroupId1, IndicatorId1, AreaTypeIds.GpPractice, SexId1, AgeId1).FirstOrDefault();
            TimePeriod period1 = new DataPointOffsetCalculator(grouping1, DataPointOffset, indicatorMetadata1.YearType).TimePeriod;

            if (axis1 == null)
            {
                axis1 = GetPracticeAxis(IndicatorId1, period1, SexId1, indicatorMetadata1);
                if (axis1 == null)
                {
                    return collection;
                }
            }
            collection.PracticeAxis1 = axis1;

            if (isAreacode)
            {
                CoreDataSet practiceData = reader.GetCoreData(grouping1, period1, AreaCode).FirstOrDefault();
                if (practiceData != null && practiceData.IsValueValid)
                {
                    collection.PracticeValue1 = practiceData.Value;
                }
            }

            // Indicator 2
            IndicatorMetadata indicatorMetadata2 = indicatorMetadataRepository.GetIndicatorMetadata(IndicatorId2);
            Grouping grouping2 = reader.GetGroupings(GroupId2, IndicatorId2, AreaTypeIds.GpPractice, SexId2, AgeId2).FirstOrDefault();
            TimePeriod period2 = new DataPointOffsetCalculator(grouping2, DataPointOffset, indicatorMetadata2.YearType).TimePeriod;

            if (axis2 == null)
            {
                axis2 = GetPracticeAxis(IndicatorId2, period2, SexId2, indicatorMetadata2);
                if (axis2 == null)
                {
                    return collection;
                }
            }
            collection.PracticeAxis2 = axis2;

            if (isAreacode)
            {
                CoreDataSet practiceData = reader.GetCoreData(grouping2, period2, AreaCode).FirstOrDefault();
                if (practiceData != null && practiceData.IsValueValid)
                {
                    collection.PracticeValue2 = practiceData.Value;
                }
            }

            AssignChildAreas(grouping1);

            return collection;
        }
 private static void SetLimitsAndTitle(Axis axis, PracticeAxis practiceAxis)
 {
     axis.Minimum = practiceAxis.Limits.Min;
     axis.Maximum = practiceAxis.Limits.Max;
     axis.Title = practiceAxis.Title;
 }