private Availability FindExisting(int week, Classroom room, ScraperCourse course) { var found = room.Courses.FirstOrDefault(c => c.StartBlock == course.PeriodStart && c.EndBlock == course.PeriodEnd && c.WeekDay == course.DayNumber && c.CourseCode == course.Subject); if (found != null) { return(Availability.Duplicate); } var bookings = BookingRepository.GetBookingsByRoomAndWeek(room.RoomId, week); var existing = bookings.Where(l => l.WeekDay == course.DayNumber //Starts inside another booking && (course.PeriodStart >= l.StartBlock && course.PeriodStart <= l.EndBlock //Ends inside another booking || course.PeriodEnd >= l.StartBlock && course.PeriodEnd <= l.EndBlock //Overlaps entire booking || course.PeriodStart <= l.StartBlock && course.PeriodEnd >= l.EndBlock)); return(existing.Any() ? Availability.Booked : Availability.Free); }
private Classroom MapCourse(ScraperCourse course, Classroom classroom, int week) { if (course.Teacher == "KROOJ" && course.Subject == "INFLAB02") { //lol } try { var existingCourse = ScraperRepository.GetExistingCourseByRoomAndClassCode(course.Subject, course.Text, week, course.DayNumber, course.PeriodStart, course.PeriodEnd); if (existingCourse != null) { existingCourse.Rooms.Add(classroom); ScraperRepository.AddOrUpdateCourse(existingCourse); return(classroom); } var lesson = new Course { Description = course.Text, CourseCode = course.Subject, WeekDay = course.DayNumber, Week = week, Teacher = course.Teacher, StartBlock = course.PeriodStart, EndBlock = course.PeriodEnd, Rooms = new List <Classroom>(), Classes = new List <Class>() }; if (course.Class != null) { var classes = course.Class.Replace(" ", "").Split(',').ToList(); foreach (var @class in classes) { var existingClass = ScraperRepository.GetClassByName(@class); lesson.Classes.Add(existingClass); } } lesson.Rooms.Add(classroom); classroom.Courses.Add(lesson); return(classroom); } catch (Exception e) { // ignored return(null); } }