示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }