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(); }
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(); }
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); }
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); }