コード例 #1
0
        public void AddCourseToCourseGroup(string CourseGroupId, Models.Requirements.Entities.Course course)
        {
            if (course == null)
            {
                throw new NullReferenceException();
            }
            var courseGroup = _reqContext.CourseGroups.Find(CourseGroupId);

            if (courseGroup == null)
            {
                throw new NullReferenceException();
            }
            courseGroup.Courses.Add(course);
            _reqContext.SaveChanges();
        }
コード例 #2
0
        public void AddCourseToDegree(string DegreeId, Models.Requirements.Entities.Course course)
        {
            if (course == null)
            {
                throw new NullReferenceException();
            }
            var degree = _reqContext.Degrees.Find(DegreeId);

            if (degree == null)
            {
                throw new NullReferenceException();
            }
            degree.Courses.Add(course);
            _reqContext.SaveChanges();
        }
コード例 #3
0
        public List <Degree> GetRemainingRequirements(string studentId, out string errorMessage)
        {
            var student = _usersContext.Users.Where(u => u.UserId.Equals(studentId)).FirstOrDefault();

            if (student == null)
            {
                errorMessage = "Unable to find a student with that id";
                return(null);
            }
            var completedCourseIds = student.CompletedCourses?.Select(c => c.CourseId);

            if (completedCourseIds == null)
            {
                completedCourseIds = new List <string>();
            }
            if (student.Major == null)
            {
                errorMessage = "You must have an major to use this function";
                return(null);
            }
            string[]      degreeIds       = student.Major.Split(";");
            List <Degree> degreesToReturn = new List <Degree>();
            var           checkedCourses  = new List <Models.Requirements.Entities.Course>();

            foreach (string degreeId in degreeIds)
            {
                Degree unmodified = _reqContext.Degrees.Find(new Object[] { degreeId });
                if (unmodified == null)
                {
                    errorMessage = "Invalid Degree Id: " + degreeId;
                    return(null);
                }
                var uncompletedCourses = unmodified.Courses;
                for (int i = 0; i < uncompletedCourses.Count();)
                {
                    Models.Requirements.Entities.Course c = uncompletedCourses.ElementAt(i);
                    if (unmodified.MaxOverlap != 0 && completedCourseIds.Where(a => a.Equals(c.CourseId)).FirstOrDefault() != null)
                    {
                        uncompletedCourses.Remove(c);
                        checkedCourses.Add(c);
                        if (unmodified.MaxOverlap != -1)
                        {
                            if (checkedCourses.AsQueryable().Where(e => e.CourseId.Equals(c.CourseId)).FirstOrDefault() != null)
                            {
                                unmodified.MaxOverlap--;
                            }
                        }
                    }

                    else
                    {
                        i++;
                    }
                }
                var uncompletedCourseGroups = unmodified.CourseGroups;
                for (int i = 0; i < uncompletedCourseGroups.Count(); i++)
                {
                    CourseGroup group = uncompletedCourseGroups.ElementAt(i);
                    for (int j = 0; j < group.Courses.Count();)
                    {
                        Models.Requirements.Entities.Course c = group.Courses.ElementAt(j);
                        if (unmodified.MaxOverlap != 0 && completedCourseIds.Where(a => a.Equals(c.CourseId)).FirstOrDefault() != null)
                        {
                            group.Courses.Remove(c);
                            checkedCourses.Add(c);
                            if (group.CoursesRequired > 0)
                            {
                                group.CoursesRequired--;
                            }
                            if (group.CreditsRequired > 0)
                            {
                                group.CreditsRequired -= c.Credits;
                            }
                            if (unmodified.MaxOverlap != -1)
                            {
                                if (checkedCourses.AsQueryable().Where(e => e.CourseId.Equals(c.CourseId)).FirstOrDefault() != null)
                                {
                                    unmodified.MaxOverlap--;
                                }
                            }
                        }
                        else
                        {
                            j++;
                        }
                        if (group.CoursesRequired <= 0 & group.CreditsRequired <= 0)
                        {
                            unmodified.CourseGroups.Remove(group);
                            i--;
                            break;
                        }
                    }
                }
                degreesToReturn.Add(unmodified);
            }
            errorMessage = null;
            return(degreesToReturn);
        }
コード例 #4
0
        public List <Degree> AdjustRemainingRequirements(List <Degree> degrees, List <Schedule> schedules)
        {
            if (degrees == null || degrees.Count == 0 || schedules == null || schedules.Count == 0)
            {
                throw new NullReferenceException();
            }
            var scheduleCourseIds = new List <string>();

            foreach (var schedule in schedules)
            {
                scheduleCourseIds.AddRange(schedule.Courses.Select(s => s.CourseId).ToList());
            }
            var checkedCourses = new List <Models.Requirements.Entities.Course>();

            foreach (Degree degree in degrees)
            {
                var uncompletedCourses = degree.Courses;
                for (int i = 0; i < uncompletedCourses.Count();)
                {
                    Models.Requirements.Entities.Course c = uncompletedCourses.ElementAt(i);
                    if (degree.MaxOverlap != 0 && scheduleCourseIds.Where(a => a.Equals(c.CourseId)).FirstOrDefault() != null)
                    {
                        uncompletedCourses.Remove(c);
                        checkedCourses.Add(c);
                        if (degree.MaxOverlap != -1)
                        {
                            if (checkedCourses.AsQueryable().Where(e => e.CourseId.Equals(c.CourseId)).FirstOrDefault() != null)
                            {
                                degree.MaxOverlap--;
                            }
                        }
                    }

                    else
                    {
                        i++;
                    }
                }
                var uncompletedCourseGroups = degree.CourseGroups;
                for (int i = 0; i < uncompletedCourseGroups.Count(); i++)
                {
                    CourseGroup group = uncompletedCourseGroups.ElementAt(i);
                    for (int j = 0; j < group.Courses.Count();)
                    {
                        Models.Requirements.Entities.Course c = group.Courses.ElementAt(j);
                        if (degree.MaxOverlap != 0 && scheduleCourseIds.Where(a => a.Equals(c.CourseId)).FirstOrDefault() != null)
                        {
                            group.Courses.Remove(c);
                            checkedCourses.Add(c);
                            if (group.CoursesRequired > 0)
                            {
                                group.CoursesRequired--;
                            }
                            if (group.CreditsRequired > 0)
                            {
                                group.CreditsRequired -= c.Credits;
                            }
                            if (degree.MaxOverlap != -1)
                            {
                                if (checkedCourses.AsQueryable().Where(e => e.CourseId.Equals(c.CourseId)).FirstOrDefault() != null)
                                {
                                    degree.MaxOverlap--;
                                }
                            }
                        }
                        else
                        {
                            j++;
                        }
                        if (group.CoursesRequired <= 0 & group.CreditsRequired <= 0)
                        {
                            degree.CourseGroups.Remove(group);
                            i--;
                            break;
                        }
                    }
                }
            }
            return(degrees);
        }