Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }