Module?DetermineModule(Schedule.Daily dailySchedule, DateTime date) { (bool Currently, bool NotStarted)firstModuleCounter = (false, false), secondModuleCounter = (false, false); foreach (var lesson in dailySchedule) { if (lesson.Module == Module.None) { continue; } if (date >= lesson.DateFrom && date <= lesson.DateTo) { if (lesson.Module == Module.First) { firstModuleCounter.Currently = true; } else { secondModuleCounter.Currently = true; } } else if (date < lesson.DateFrom) { if (lesson.Module == Module.First) { firstModuleCounter.NotStarted = true; } else { secondModuleCounter.NotStarted = true; } } } if (firstModuleCounter.Currently && secondModuleCounter.Currently) { return(null); } if (firstModuleCounter.Currently) { return(Module.First); } if (secondModuleCounter.Currently) { return(Module.Second); } if (firstModuleCounter.NotStarted && secondModuleCounter.NotStarted) { return(null); } if (firstModuleCounter.NotStarted) { return(Module.First); } if (secondModuleCounter.NotStarted) { return(Module.Second); } return(Module.None); }
public Schedule.Daily GetFilteredSchedule(Schedule.Daily dailySchedule, DateTime date) { if (dailySchedule == null) { return(null); } var lessonList = new List <Lesson>(dailySchedule.Count); //var currModule = DetermineModule(dailySchedule, date); var currWeek = DetermineWeekType(date); foreach (var lesson in dailySchedule) { if (this.DateFilter == DateFilter.Hide) { if (date > lesson.DateTo) { continue; } if (date < lesson.DateFrom && !lesson.IsImportant()) { continue; } } //if (this.ModuleFilter != ModuleFilter.Off) //{ // if (lesson.Module != Module.None && // ((this.ModuleFilter == ModuleFilter.First && lesson.Module != Module.First) || // (this.ModuleFilter == ModuleFilter.Second && lesson.Module != Module.Second) || // (this.ModuleFilter == ModuleFilter.Auto && currModule != null && lesson.Module != currModule))) // { // continue; // } //} if (this.SessionFilter) { if ((date < lesson.DateFrom || date > lesson.DateTo) && lesson.IsImportant()) { continue; } } if (this.WeekFilter != WeekFilter.Off) { if (lesson.Week != WeekType.None && ((this.WeekFilter == WeekFilter.Odd && lesson.Week != WeekType.Odd) || (this.WeekFilter == WeekFilter.Even && lesson.Week != WeekType.Even) || (this.WeekFilter == WeekFilter.Auto && currWeek == WeekType.None && lesson.Week != currWeek))) { continue; } } lessonList.Add(lesson); } return(new Schedule.Daily(lessonList.ToArray(), dailySchedule.Day)); }
public Schedule Filter(IList <Schedule> schedules, IList <string> subjectTitles, IList <string> subjectTypes, IList <string> auditoriums, IList <string> teachers) { var dayList = new List <Lesson>[7] { new List <Lesson>(), new List <Lesson>(), new List <Lesson>(), new List <Lesson>(), new List <Lesson>(), new List <Lesson>(), new List <Lesson>() }; var from = DateTime.MaxValue; var to = DateTime.MinValue; foreach (var schedule in schedules) { if (schedule.From < from) { from = schedule.From; } if (schedule.To > to) { to = schedule.To; } foreach (var dailySchedule in schedule) { foreach (var lesson in dailySchedule) { if ((subjectTitles.Count != 0 && !subjectTitles.Contains(lesson.Title)) || (subjectTypes.Count != 0 && !subjectTypes.Contains(lesson.Type))) { continue; } bool auditoriumFlag = true; if (lesson.Auditoriums != null) { foreach (var auditorium in lesson.Auditoriums) { if (auditoriums.Count == 0 || auditoriums.Contains(auditorium.Name)) { auditoriumFlag = false; break; } } } if (auditoriumFlag) { continue; } bool teacherFlag = true; foreach (var teacher in lesson.Teachers) { #error Doesn't work for teacher names with " -" || "- " || " - " if (teachers.Count == 0 || teachers.Contains(teacher.GetFullName())) { teacherFlag = false; break; } } if (teacherFlag) { continue; } dayList[dailySchedule.Day].Add(lesson); } } } var dailySchedules = new Schedule.Daily[7]; for (int i = 0; i < 7; i++) { dayList[i].Sort(); dailySchedules[i] = new Schedule.Daily(dayList[i].ToArray(), i); } return(new Schedule(dailySchedules, null, false, DateTime.Now, Schedule.RequiredVersion, from, to)); }