Example #1
0
        public static List <SubjectStats> GetSubjectsStats(int semester, int class_id, bool isZip)
        {
            List <SubjectVM> subjects = new List <SubjectVM>();

            if (semester == 23)
            {
                List <SubjectVM>[] sb = new List <SubjectVM> [2];
                sb[0] = DB.GetClassSubjects(class_id).Where(s => s.IsZip == isZip && s.Semester == 1).ToList();
                sb[1] = DB.GetClassSubjects(class_id).Where(s => s.IsZip == isZip && s.Semester == 2).ToList();

                List <int> ids = new List <int>();

                for (int i = 0; i <= 1; i++)
                {
                    foreach (var s in sb[i])
                    {
                        if (!ids.Contains(s.Id))
                        {
                            ids.Add(s.Id);
                            subjects.Add(s);
                        }
                    }
                }
            }
            else
            {
                subjects = DB.GetClassSubjects(class_id).Where(s => s.IsZip == isZip && s.Semester == semester % 20).ToList();
            }


            var studentsCount = StatsRepository.GetAllStudentsCount(class_id);
            var grades        = StatsRepository.GetAllGrades(class_id, semester);

            List <SubjectStats> stats           = new List <SubjectStats>();
            List <int>          checkedSubjects = new List <int>();

            foreach (var s in subjects)
            {
                if (checkedSubjects.Contains(s.Id))
                {
                    continue;
                }
                else
                {
                    checkedSubjects.Add(s.Id);
                }

                var subjectGrades = grades.Where(g => g.Subject_id == s.Id).ToList();

                SubjectStats ss = new SubjectStats()
                {
                    Subject = new SubjectVM()
                    {
                        Id    = s.Id,
                        Title = s.Title
                    },
                    AllStudents        = studentsCount,
                    Grades             = subjectGrades,
                    StudentsWithGrades = subjectGrades.Count,
                    Average            = CalculateAverage(subjectGrades)
                };
                stats.Add(ss);
            }
            return(stats);
        }