コード例 #1
0
            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);
            }
コード例 #2
0
            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));
            }
コード例 #3
0
            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));
            }