public QuarterlyHeadcountComparisonRow Calculate(Group group, DateTime startDateTime, DateTime endDateTime, int comparisonYear)
        {
            var quarters       = QuartersHelper.GetQuarterStartEndForYear(startDateTime.Year);
            var quarterResults = QuarterlyHeadcountComparisonRow.GetQuarteredStatistics(@group, startDateTime, endDateTime, quarters);

            var comparisonStartDateTime   = new DateTime(comparisonYear, startDateTime.Month, startDateTime.Day);
            var comparisonEndDateTime     = new DateTime(comparisonYear, endDateTime.Month, endDateTime.Day);
            var comparisonQuarters        = QuartersHelper.GetQuarterStartEndForYear(comparisonYear).FilterQuartersToRange(comparisonStartDateTime, comparisonEndDateTime);
            var comparisonQuartersResults = QuarterlyHeadcountComparisonRow.GetQuarteredStatistics(group, comparisonStartDateTime, comparisonEndDateTime, comparisonQuarters);

            return(new QuarterlyHeadcountComparisonRow(group.Name, quarterResults, comparisonQuartersResults, comparisonYear));
        }
        private void CreateRowsForGroupType(GroupType groupType, List <QuarterlyHeadcountComparisonRow> rows)
        {
            int comparisonYear = ddlComparisonYear.SelectedValue.AsInteger();
            var groups         = new ChildCheckInGroupGenerator().Get(groupType);

            // Add row to mark group type
            var groupTypeTitleRow = new QuarterlyHeadcountComparisonRow(groupType.Name);

            rows.Add(groupTypeTitleRow);

            // Add row for each group in groupType
            var groupRows = new List <QuarterlyHeadcountComparisonRow>();

            groupRows.AddRange(
                groups.Select(
                    g =>
            {
                return(_statisticCalculator.Calculate(g, _startDateTime, _endDateTime,
                                                      comparisonYear));
            }));

            // Generate total row
            var totalQuarter = new QuarterInformation(groupRows.Sum(qi => qi.Quarter.YearTotal),
                                                      groupRows.Sum(qi => qi.Quarter.Q1Total), groupRows.Sum(qi => qi.Quarter.Q2Total),
                                                      groupRows.Sum(qi => qi.Quarter.Q3Total), groupRows.Sum(qi => qi.Quarter.Q4Total), groupRows.Sum(qi => qi.Quarter.Average));

            var comparisonQuarter = new QuarterInformation(groupRows.Sum(qi => qi.ComparisonQuarter.YearTotal),
                                                           groupRows.Sum(qi => qi.ComparisonQuarter.Q1Total), groupRows.Sum(qi => qi.ComparisonQuarter.Q2Total),
                                                           groupRows.Sum(qi => qi.ComparisonQuarter.Q3Total), groupRows.Sum(qi => qi.ComparisonQuarter.Q4Total), groupRows.Sum(qi => qi.ComparisonQuarter.Average));

            var totalRow = new QuarterlyHeadcountComparisonRow(totalQuarter, comparisonQuarter, comparisonYear);

            // Add rows to the list of rows gStatistics will bind
            rows.AddRange(groupRows);
            rows.Add(totalRow);
        }