private bool ContainsTimeConflict(CourseSection first, CourseSection second) { if (first.StartTime == second.StartTime || first.EndTime == second.EndTime) { return(true); } if (first.StartTime < second.StartTime) { if (first.EndTime > second.StartTime && first.EndTime < second.EndTime) { return(true); } if (first.EndTime > second.EndTime) { return(true); } } else { if (second.EndTime > first.StartTime && second.EndTime < first.EndTime) { return(true); } if (second.EndTime > first.EndTime) { return(true); } } return(false); }
public RegistrationResults CanRegisterForCourseSection(CourseSection section) { if (section.EnrolledStudents.Where(s => s.Id == this.Id).Any()) { return(RegistrationResults.AlreadyEnrolled); } if (Transcript.Where(t => (int)t.GradeEarned <= (int)GradeTypes.C && t.CourseSection.CatalogCourse.Id == section.CatalogCourse.Id).Any()) { return(RegistrationResults.AlreadyCompleted); } foreach (var pre in section.CatalogCourse.Prerequisites) { if (!Transcript.Where(t => (int)t.GradeEarned <= (int)GradeTypes.C && t.CourseSection.CatalogCourse.Id == pre.Id).Any()) { return(RegistrationResults.PrerequisiteNotMet); } } foreach (var en in EnrolledCourses) { if ((en.MeetingDays & section.MeetingDays) != DaysOfWeek.None) { if ((en.StartTime <= section.EndTime && section.StartTime <= en.EndTime) || (section.StartTime <= en.EndTime && en.StartTime <= section.EndTime)) { return(RegistrationResults.TimeConflict); } } } return(RegistrationResults.Success); }
//public virtual ICollection<CourseSection> CompletedCourses { get; set; } = new List<CourseSection>(); public RegistrationResults CanRegisterForCourseSection(CourseSection section) { if (EnrolledCourses.Select(c => c.CatalogCourse).Contains(section.CatalogCourse) && Transcript.Where(c => c.Grade >= GradeTypes.C && c.Course.CatalogCourse == section.CatalogCourse).Count() == 0 && Transcript.Where(c => c.Grade < GradeTypes.C && c.Course.CatalogCourse == section.CatalogCourse).Count() == 0) { return(RegistrationResults.AlreadyEnrolled); } if (Transcript.Where(c => c.Course.CatalogCourse == section.CatalogCourse && c.Grade >= GradeTypes.C).Count() != 0) { return(RegistrationResults.AlreadyCompleted); } if (!section.CatalogCourse.Prerequisites.All(c => Transcript.Where(tC => tC.Grade >= GradeTypes.C).Select(cC => cC.Course.CatalogCourse).Contains(c))) { return(RegistrationResults.PrerequisitesNotMet); } if (EnrolledCourses.Where(c => (c.MeetingDays & section.MeetingDays) > 0 && ContainsTimeConflict(c, section)).Count() != 0) { return(RegistrationResults.TimeConflict); } return(RegistrationResults.Success); }