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 }); }