Esempio n. 1
0
        /// <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);
        }
    }