public async Task <PieChartModel <int> > Get(AssessmentFilterModel model)
        {
            var results = await _assessmentFactService.BaseQuery(model)
                          .GroupBy(x => x.Performance.PerformanceLevel)
                          .Select(x => new
            {
                PerformanceLevel = x.Key,
                Total            = x.Sum(y => y.AssessmentStudentCount)
            }).OrderBy(x => x.PerformanceLevel)
                          .ToListAsync();

            var total = results.Sum(x => x.Total);

            return(new PieChartModel <int>
            {
                Title = "Performance Level",
                TotalRowTitle = "Assessment Peformance Total",
                Headers = new List <string> {
                    "", "Performance Level", "Performance Count"
                },
                PercentageHeaders = new List <string> {
                    "", "Performance Level", "Performance Percentage"
                },
                Labels = results.Select(x => x.PerformanceLevel).ToList(),
                Data = results.Select(x => x.Total).ToList(),
                Percentages = results.Select(x => GetPercentage(x.Total, total)).ToList(),
                ShowChart = true,
                Total = total
            });
        }
        public async Task <PercentageTotalBarChartModel> Get(AssessmentFilterModel model)
        {
            var query = _assessmentFactService.BaseQuery(model);

            var results = query.GroupBy(x => new { x.SchoolYearKey, x.SchoolYearDimension.SchoolYearDescription, x.Performance.PerformanceLevel, x.PerformanceKey })
                          .Select(x => new
            {
                PerformanceLevel      = x.Key.PerformanceLevel,
                PerformanceKey        = x.Key.PerformanceKey,
                SchoolYear            = x.Key.SchoolYearKey,
                SchoolYearDescription = x.Key.SchoolYearDescription,
                Total = x.Sum(y => y.AssessmentStudentCount)
            }).OrderBy(x => x.SchoolYear)
                          .ToList();

            var headers = new List <string> {
                "", "Performance Levels"
            };

            headers.AddRange(results.Select(x => x.SchoolYearDescription).Distinct());

            var schoolYears = results.Select(x => x.SchoolYear).Distinct().ToList();

            var performanceLevels = (model.PerformanceKey.HasValue ? results.Where(x => x.PerformanceKey == model.PerformanceKey) : results)
                                    .Select(x => x.PerformanceLevel).Distinct().OrderBy(x => x).ToList();

            var total  = results.Sum(x => x.Total);
            var totals = results.GroupBy(x => x.SchoolYear)
                         .OrderBy(x => x.Key)
                         .Select(x => new PercentageTotalDataModel
            {
                Percentage = GetPercentage(x.Sum(y => y.Total), total),
                Total      = x.Sum(y => y.Total)
            }).ToList();

            var data = new List <List <PercentageTotalDataModel> >();

            foreach (var performanceLevel in performanceLevels)
            {
                var values = new List <PercentageTotalDataModel>();

                foreach (var schoolYear in schoolYears)
                {
                    var row             = results.FirstOrDefault(x => x.PerformanceLevel == performanceLevel && x.SchoolYear == schoolYear);
                    var rowTotal        = row == null ? 0 : row.Total;
                    var schoolYearTotal = results.Where(x => x.SchoolYear == schoolYear).Sum(x => x.Total);
                    values.Add(new PercentageTotalDataModel
                    {
                        Percentage = rowTotal == 0 ? 0 : GetPercentage(rowTotal, schoolYearTotal),
                        Total      = rowTotal
                    });
                }
                data.Add(values);
            }

            string title = null;

            if (model.PerformanceKey.HasValue)
            {
                var performance = _performanceRepository.GetAll().FirstOrDefault(x => x.PerformanceKey == model.PerformanceKey.Value);

                if (performance == null)
                {
                    title = "Performance Trend";
                }
                else
                {
                    title = performance.PerformanceLevel + " Trend";
                }
            }
            else
            {
                title = "Performance Trend";
            }

            return(new PercentageTotalBarChartModel
            {
                Title = title,
                Headers = headers,
                HideTotal = model.PerformanceKey.HasValue,
                HidePercentageTotal = true,
                Labels = results.Select(x => x.SchoolYearDescription).Distinct().ToList(),
                Series = performanceLevels.Select(x => x.ToString()).ToList(),
                Data = data,
                ShowChart = true,
                ShowPercentage = true,
                TotalRowTitle = "Participation ",
                Totals = totals
            });
        }