private static ClassDistributionStatsViewData CreateGradeAvgViewData(IList <StudentAverageGradeInfo> models, IList <GradingScaleRange> gradingScaleRanges) { var res = new ClassDistributionStatsViewData { ClassAvg = models.Count == 0 ? 0 : models.Average(x => x.AverageGrade), DistributionStats = new List <DistributionItemViewData>() }; gradingScaleRanges = gradingScaleRanges.OrderBy(x => x.LowValue).ToList(); foreach (var gradingScaleRange in gradingScaleRanges) { var lo = (int)decimal.Round(gradingScaleRange.LowValue); var hi = (int)decimal.Round(gradingScaleRange.HighValue); res.DistributionStats.Add(new DistributionItemViewData { Count = models.Count(x => x.AverageGrade <= hi && x.AverageGrade >= lo), StartInterval = lo, EndInterval = hi, Summary = $"{lo}-{hi}", StudentIds = models.Where(x => x.AverageGrade <= hi && x.AverageGrade >= lo) .Select(x => x.StudentId) .ToList() }); } return(res); }
private static ClassDistributionStatsViewData CreateInfractionViewData(IList <ShortStudentInfractionsInfo> models) { var res = new ClassDistributionStatsViewData { DistributionStats = new List <DistributionItemViewData>() }; models = models.OrderBy(x => x.NumberOfInfractions).ToList(); if (models.Count == 0) { return(res); } var maxInfractionCount = models.Max(x => x.NumberOfInfractions); if (maxInfractionCount % 3 != 0) { maxInfractionCount += (3 - maxInfractionCount % 3); } res.DistributionStats.Add(new DistributionItemViewData { Count = models.Count(x => x.NumberOfInfractions == 0), StartInterval = 0, EndInterval = 0, Summary = $"{0}", StudentIds = models.Where(x => x.NumberOfInfractions == 0).Select(x => x.StudentId).ToList() }); for (var i = 1; i <= maxInfractionCount; i += 3) { res.DistributionStats.Add(new DistributionItemViewData { Count = models.Count(x => x.NumberOfInfractions >= i && x.NumberOfInfractions < i + 3), StartInterval = i, EndInterval = i + 2, Summary = $"{i}-{i+2}", StudentIds = models.Where(x => x.NumberOfInfractions >= i && x.NumberOfInfractions < i + 3) .Select(x => x.StudentId) .ToList() }); } res.ClassAvg = res.DistributionStats.Average(x => x.Count); return(res); }
private static ClassDistributionStatsViewData CreateAbsencesViewData(IList <ShortStudentAbsenceInfo> models) { var res = new ClassDistributionStatsViewData { ClassAvg = 0, DistributionStats = new List <DistributionItemViewData>() }; var absencePersents = models.Where(x => x.NumberOfDaysEnrolled != 0) .Select(x => new { Persent = (int)decimal.Round(x.NumberOfAbsences / x.NumberOfDaysEnrolled * 100), x.StudentId }) .OrderBy(x => x.Persent).ToList(); if (absencePersents.Count == 0) { return(res); } var maxPersent = absencePersents.Max(x => x.Persent); res.DistributionStats = new List <DistributionItemViewData>(); for (var currentPersent = 0; currentPersent <= maxPersent; ++currentPersent) { res.DistributionStats.Add(new DistributionItemViewData { StartInterval = currentPersent, EndInterval = currentPersent, Count = absencePersents.Count(x => x.Persent == currentPersent), Summary = $"{currentPersent}%", StudentIds = absencePersents.Where(x => x.Persent == currentPersent) .Select(x => x.StudentId) .ToList() }); } res.ClassAvg = res.DistributionStats.Average(x => x.Count); return(res); }