/// <summary> /// <paramref name="period"/> 기간 내에서 예외 기간등을 제외한 기간들을 HourRange 컬렉션으로 단위로 반환합니다. /// </summary> /// <param name="period"></param> /// <returns></returns> private IEnumerable <ITimePeriod> GetAvailableWeekPeriods(ITimePeriod period) { period.ShouldNotBeNull("period"); if (WeekDays.Count == 0 && WorkingHours.Count == 0 && WorkingDayHours.Count == 0) { return new TimePeriodCollection { period } } ; // 필터에 필터링할 정보를 추가합니다. // var filter = new CalendarPeriodCollectorFilter(); WeekDays.RunEach(weekDay => filter.WeekDays.Add(weekDay)); WorkingHours.RunEach(workingHour => filter.CollectingHours.Add(workingHour)); WorkingDayHours.RunEach(workingDayHour => filter.CollectingDayHours.Add(workingDayHour)); var weekCollector = new CalendarPeriodCollector(filter, period, SeekDirection.Forward, TimeCalendar); weekCollector.CollectHours(); return(weekCollector.Periods); } }