Ejemplo n.º 1
0
        private IEnumerable <Course> GetUnlockedCourses(int studentId)
        {
            var           completedCourses         = studentCourseAssociationService.FindBy(x => x.StudentId == studentId).Select(x => x.Course).ToList();
            var           studentProgram           = studentService.Get(studentId).Program;
            var           studentAllowedCourses    = programCourseAssociationService.FindBy(x => x.ProgramId == studentProgram.Id).Select(x => x.Course).ToList();
            var           studentNewAllowedCourses = studentAllowedCourses.Where(x => !completedCourses.Select(y => y.Id).ToList().Contains(x.Id));
            List <Course> unlockedCourses          = new List <Course>();

            foreach (var course in studentNewAllowedCourses)
            {
                var prerequisites = prerequisiteService.FindBy(x => x.CourseId == course.Id).ToList();
                if (prerequisites == null || prerequisites.Count() == 0)
                {
                    unlockedCourses.Add(course);
                }
                else
                {
                    int prerequisiteCount = prerequisites.Count();
                    int counter           = 0;
                    foreach (var prerequisite in prerequisites)
                    {
                        if (completedCourses.Select(x => x.Id).ToList().Contains(prerequisite.CoursePrerequisiteId.Value))
                        {
                            counter++;
                        }
                    }
                    if (counter == prerequisiteCount)
                    {
                        unlockedCourses.Add(course);
                    }
                }
            }
            return(unlockedCourses);
        }