Inheritance: CalendarVisitorFilter, ICalendarPeriodCollectionFilter
コード例 #1
0
        public void CollectDaysTest()
        {
            var filter = new CalendarPeriodCollectorFilter();

            //! 1월의 금요일만 추출
            filter.Months.Add(January);
            filter.WeekDays.Add(DayOfWeek.Friday);

            var testPeriod = new CalendarTimeRange(new DateTime(2010, 1, 1), new DateTime(2011, 12, 31));

            var collector = new CalendarPeriodCollector(filter, testPeriod);

            collector.CollectDays();

            if (IsDebugEnabled)
            {
                foreach (var period in collector.Periods)
                {
                    log.Debug("CollectDays... Period=" + period);
                }
            }

            collector.Periods.Count.Should().Be(9);

            collector.Periods[0].IsSamePeriod(new DayRange(new DateTime(2010, 1, 1))).Should().Be.True();
            collector.Periods[1].IsSamePeriod(new DayRange(new DateTime(2010, 1, 8))).Should().Be.True();
            collector.Periods[2].IsSamePeriod(new DayRange(new DateTime(2010, 1, 15))).Should().Be.True();
            collector.Periods[3].IsSamePeriod(new DayRange(new DateTime(2010, 1, 22))).Should().Be.True();
            collector.Periods[4].IsSamePeriod(new DayRange(new DateTime(2010, 1, 29))).Should().Be.True();

            collector.Periods[5].IsSamePeriod(new DayRange(new DateTime(2011, 1, 7))).Should().Be.True();
            collector.Periods[6].IsSamePeriod(new DayRange(new DateTime(2011, 1, 14))).Should().Be.True();
            collector.Periods[7].IsSamePeriod(new DayRange(new DateTime(2011, 1, 21))).Should().Be.True();
            collector.Periods[8].IsSamePeriod(new DayRange(new DateTime(2011, 1, 28))).Should().Be.True();
        }
コード例 #2
0
        public void CollectDaysTest() {
            var filter = new CalendarPeriodCollectorFilter();

            //! 1월의 금요일만 추출
            filter.Months.Add(January);
            filter.WeekDays.Add(DayOfWeek.Friday);

            var testPeriod = new CalendarTimeRange(new DateTime(2010, 1, 1), new DateTime(2011, 12, 31));

            var collector = new CalendarPeriodCollector(filter, testPeriod);
            collector.CollectDays();

            if(IsDebugEnabled) {
                foreach(var period in collector.Periods)
                    log.Debug("CollectDays... Period=" + period);
            }

            collector.Periods.Count.Should().Be(9);

            collector.Periods[0].IsSamePeriod(new DayRange(new DateTime(2010, 1, 1))).Should().Be.True();
            collector.Periods[1].IsSamePeriod(new DayRange(new DateTime(2010, 1, 8))).Should().Be.True();
            collector.Periods[2].IsSamePeriod(new DayRange(new DateTime(2010, 1, 15))).Should().Be.True();
            collector.Periods[3].IsSamePeriod(new DayRange(new DateTime(2010, 1, 22))).Should().Be.True();
            collector.Periods[4].IsSamePeriod(new DayRange(new DateTime(2010, 1, 29))).Should().Be.True();

            collector.Periods[5].IsSamePeriod(new DayRange(new DateTime(2011, 1, 7))).Should().Be.True();
            collector.Periods[6].IsSamePeriod(new DayRange(new DateTime(2011, 1, 14))).Should().Be.True();
            collector.Periods[7].IsSamePeriod(new DayRange(new DateTime(2011, 1, 21))).Should().Be.True();
            collector.Periods[8].IsSamePeriod(new DayRange(new DateTime(2011, 1, 28))).Should().Be.True();
        }
コード例 #3
0
        public void CollectYearsTest()
        {
            var filter = new CalendarPeriodCollectorFilter();

            filter.Years.Add(2006);
            filter.Years.Add(2007);
            filter.Years.Add(2012);

            var testPeriod = new CalendarTimeRange(new DateTime(2001, 1, 1), new DateTime(2019, 12, 31));

            var collector = new CalendarPeriodCollector(filter, testPeriod);

            collector.CollectYears();

            if (IsDebugEnabled)
            {
                log.Debug("CollectYears... Period=" + collector.Periods.CollectionToString());
            }

            collector.Periods.Count.Should().Be(filter.Years.Count);

            for (var i = 0; i < collector.Periods.Count; i++)
            {
                collector.Periods[i].IsSamePeriod(new YearRange(filter.Years.ElementAt(i)));
            }
        }
コード例 #4
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);
        }
    }
コード例 #5
0
        public void CollectHoursTest()
        {
            //! 1월의 금요일의 8:00~18:00 까지 기간만을 계산한다.
            var filter = new CalendarPeriodCollectorFilter();

            filter.Months.Add(January);
            filter.WeekDays.Add(DayOfWeek.Friday);
            filter.CollectingHours.Add(new HourRangeInDay(8, 18));

            var testPeriod = new CalendarTimeRange(new DateTime(2010, 1, 1), new DateTime(2011, 12, 31));

            var collector = new CalendarPeriodCollector(filter, testPeriod);

            collector.CollectHours();

            Assert.AreEqual(collector.Periods.Count, 9);
            Assert.IsTrue(
                collector.Periods[0].IsSamePeriod(new CalendarTimeRange(new DateTime(2010, 1, 01, 8, 0, 0),
                                                                        new DateTime(2010, 1, 01, 18, 0, 0))),
                collector.Periods[0].ToString());
            Assert.IsTrue(
                collector.Periods[1].IsSamePeriod(new CalendarTimeRange(new DateTime(2010, 1, 08, 8, 0, 0),
                                                                        new DateTime(2010, 1, 08, 18, 0, 0))),
                collector.Periods[1].ToString());
            Assert.IsTrue(
                collector.Periods[2].IsSamePeriod(new CalendarTimeRange(new DateTime(2010, 1, 15, 8, 0, 0),
                                                                        new DateTime(2010, 1, 15, 18, 0, 0))),
                collector.Periods[2].ToString());
            Assert.IsTrue(
                collector.Periods[3].IsSamePeriod(new CalendarTimeRange(new DateTime(2010, 1, 22, 8, 0, 0),
                                                                        new DateTime(2010, 1, 22, 18, 0, 0))),
                collector.Periods[3].ToString());
            Assert.IsTrue(
                collector.Periods[4].IsSamePeriod(new CalendarTimeRange(new DateTime(2010, 1, 29, 8, 0, 0),
                                                                        new DateTime(2010, 1, 29, 18, 0, 0))),
                collector.Periods[4].ToString());
            Assert.IsTrue(
                collector.Periods[5].IsSamePeriod(new CalendarTimeRange(new DateTime(2011, 1, 07, 8, 0, 0),
                                                                        new DateTime(2011, 1, 07, 18, 0, 0))),
                collector.Periods[5].ToString());
            Assert.IsTrue(
                collector.Periods[6].IsSamePeriod(new CalendarTimeRange(new DateTime(2011, 1, 14, 8, 0, 0),
                                                                        new DateTime(2011, 1, 14, 18, 0, 0))),
                collector.Periods[6].ToString());
            Assert.IsTrue(
                collector.Periods[7].IsSamePeriod(new CalendarTimeRange(new DateTime(2011, 1, 21, 8, 0, 0),
                                                                        new DateTime(2011, 1, 21, 18, 0, 0))),
                collector.Periods[7].ToString());
            Assert.IsTrue(
                collector.Periods[8].IsSamePeriod(new CalendarTimeRange(new DateTime(2011, 1, 28, 8, 0, 0),
                                                                        new DateTime(2011, 1, 28, 18, 0, 0))),
                collector.Periods[8].ToString());
        }
コード例 #6
0
        public void CollectHoursTest() {
            //! 1월의 금요일의 8:00~18:00 까지 기간만을 계산한다.
            var filter = new CalendarPeriodCollectorFilter();

            filter.Months.Add(January);
            filter.WeekDays.Add(DayOfWeek.Friday);
            filter.CollectingHours.Add(new HourRangeInDay(8, 18));

            var testPeriod = new CalendarTimeRange(new DateTime(2010, 1, 1), new DateTime(2011, 12, 31));

            var collector = new CalendarPeriodCollector(filter, testPeriod);
            collector.CollectHours();

            Assert.AreEqual(collector.Periods.Count, 9);
            Assert.IsTrue(
                collector.Periods[0].IsSamePeriod(new CalendarTimeRange(new DateTime(2010, 1, 01, 8, 0, 0),
                                                                        new DateTime(2010, 1, 01, 18, 0, 0))),
                collector.Periods[0].ToString());
            Assert.IsTrue(
                collector.Periods[1].IsSamePeriod(new CalendarTimeRange(new DateTime(2010, 1, 08, 8, 0, 0),
                                                                        new DateTime(2010, 1, 08, 18, 0, 0))),
                collector.Periods[1].ToString());
            Assert.IsTrue(
                collector.Periods[2].IsSamePeriod(new CalendarTimeRange(new DateTime(2010, 1, 15, 8, 0, 0),
                                                                        new DateTime(2010, 1, 15, 18, 0, 0))),
                collector.Periods[2].ToString());
            Assert.IsTrue(
                collector.Periods[3].IsSamePeriod(new CalendarTimeRange(new DateTime(2010, 1, 22, 8, 0, 0),
                                                                        new DateTime(2010, 1, 22, 18, 0, 0))),
                collector.Periods[3].ToString());
            Assert.IsTrue(
                collector.Periods[4].IsSamePeriod(new CalendarTimeRange(new DateTime(2010, 1, 29, 8, 0, 0),
                                                                        new DateTime(2010, 1, 29, 18, 0, 0))),
                collector.Periods[4].ToString());
            Assert.IsTrue(
                collector.Periods[5].IsSamePeriod(new CalendarTimeRange(new DateTime(2011, 1, 07, 8, 0, 0),
                                                                        new DateTime(2011, 1, 07, 18, 0, 0))),
                collector.Periods[5].ToString());
            Assert.IsTrue(
                collector.Periods[6].IsSamePeriod(new CalendarTimeRange(new DateTime(2011, 1, 14, 8, 0, 0),
                                                                        new DateTime(2011, 1, 14, 18, 0, 0))),
                collector.Periods[6].ToString());
            Assert.IsTrue(
                collector.Periods[7].IsSamePeriod(new CalendarTimeRange(new DateTime(2011, 1, 21, 8, 0, 0),
                                                                        new DateTime(2011, 1, 21, 18, 0, 0))),
                collector.Periods[7].ToString());
            Assert.IsTrue(
                collector.Periods[8].IsSamePeriod(new CalendarTimeRange(new DateTime(2011, 1, 28, 8, 0, 0),
                                                                        new DateTime(2011, 1, 28, 18, 0, 0))),
                collector.Periods[8].ToString());
        }
コード例 #7
0
        public void CollectMonthsTest() {
            var filter = new CalendarPeriodCollectorFilter();
            filter.Months.Add(January);

            var testPeriod = new CalendarTimeRange(new DateTime(2010, 1, 1), new DateTime(2011, 12, 31));

            var collector = new CalendarPeriodCollector(filter, testPeriod);
            collector.CollectMonths();

            if(IsDebugEnabled)
                log.Debug("CollectMonths... Period=" + collector.Periods.CollectionToString());

            collector.Periods.Count.Should().Be(2);
            collector.Periods[0].IsSamePeriod(new MonthRange(2010, January)).Should().Be.True();
            collector.Periods[1].IsSamePeriod(new MonthRange(2011, January)).Should().Be.True();
        }
コード例 #8
0
        public void CollectYearsTest() {
            var filter = new CalendarPeriodCollectorFilter();

            filter.Years.Add(2006);
            filter.Years.Add(2007);
            filter.Years.Add(2012);

            var testPeriod = new CalendarTimeRange(new DateTime(2001, 1, 1), new DateTime(2019, 12, 31));

            var collector = new CalendarPeriodCollector(filter, testPeriod);
            collector.CollectYears();

            if(IsDebugEnabled)
                log.Debug("CollectYears... Period=" + collector.Periods.CollectionToString());

            collector.Periods.Count.Should().Be(filter.Years.Count);

            for(var i = 0; i < collector.Periods.Count; i++)
                collector.Periods[i].IsSamePeriod(new YearRange(filter.Years.ElementAt(i)));
        }
コード例 #9
0
        public void CollectExcludePeriodTest()
        {
            const int workingDays2011      = 365 - 2 - (51 * 2) - 1;
            const int workingDaysMarch2011 = 31 - 8; // total days - weekend days

            var year2011 = new YearRange(2011);

            var filter1 = new CalendarPeriodCollectorFilter();

            filter1.AddWorkingWeekDays();

            var collector1 = new CalendarPeriodCollector(filter1, year2011);

            collector1.CollectDays();
            collector1.Periods.Count.Should().Be(workingDays2011);

            // 3월 제외
            var filter2 = new CalendarPeriodCollectorFilter();

            filter2.AddWorkingWeekDays();
            filter2.ExcludePeriods.Add(new MonthRange(2011, March));

            var collector2 = new CalendarPeriodCollector(filter2, year2011);

            collector2.CollectDays();
            collector2.Periods.Count.Should().Be(workingDays2011 - workingDaysMarch2011);


            // 2011년 26주차~27주차 (여름휴가가 2주야!!!)
            //
            var filter3 = new CalendarPeriodCollectorFilter();

            filter3.AddWorkingWeekDays();
            filter3.ExcludePeriods.Add(new MonthRange(2011, March));
            filter3.ExcludePeriods.Add(new WeekRangeCollection(2011, 26, 2));

            var collector3 = new CalendarPeriodCollector(filter3, year2011);

            collector3.CollectDays();
            collector3.Periods.Count.Should().Be(workingDays2011 - workingDaysMarch2011 - 2 * TimeSpec.WeekDaysPerWeek);
        }
コード例 #10
0
        public void CollectMonthsTest()
        {
            var filter = new CalendarPeriodCollectorFilter();

            filter.Months.Add(January);

            var testPeriod = new CalendarTimeRange(new DateTime(2010, 1, 1), new DateTime(2011, 12, 31));

            var collector = new CalendarPeriodCollector(filter, testPeriod);

            collector.CollectMonths();

            if (IsDebugEnabled)
            {
                log.Debug("CollectMonths... Period=" + collector.Periods.CollectionToString());
            }

            collector.Periods.Count.Should().Be(2);
            collector.Periods[0].IsSamePeriod(new MonthRange(2010, January)).Should().Be.True();
            collector.Periods[1].IsSamePeriod(new MonthRange(2011, January)).Should().Be.True();
        }
コード例 #11
0
        public void CollectExcludePeriodTest() {
            const int workingDays2011 = 365 - 2 - (51 * 2) - 1;
            const int workingDaysMarch2011 = 31 - 8; // total days - weekend days

            var year2011 = new YearRange(2011);

            var filter1 = new CalendarPeriodCollectorFilter();
            filter1.AddWorkingWeekDays();

            var collector1 = new CalendarPeriodCollector(filter1, year2011);
            collector1.CollectDays();
            collector1.Periods.Count.Should().Be(workingDays2011);

            // 3월 제외
            var filter2 = new CalendarPeriodCollectorFilter();
            filter2.AddWorkingWeekDays();
            filter2.ExcludePeriods.Add(new MonthRange(2011, March));

            var collector2 = new CalendarPeriodCollector(filter2, year2011);
            collector2.CollectDays();
            collector2.Periods.Count.Should().Be(workingDays2011 - workingDaysMarch2011);


            // 2011년 26주차~27주차 (여름휴가가 2주야!!!)
            //
            var filter3 = new CalendarPeriodCollectorFilter();
            filter3.AddWorkingWeekDays();
            filter3.ExcludePeriods.Add(new MonthRange(2011, March));
            filter3.ExcludePeriods.Add(new WeekRangeCollection(2011, 26, 2));

            var collector3 = new CalendarPeriodCollector(filter3, year2011);
            collector3.CollectDays();
            collector3.Periods.Count.Should().Be(workingDays2011 - workingDaysMarch2011 - 2 * TimeSpec.WeekDaysPerWeek);
        }
コード例 #12
0
ファイル: CalendarDateAdd.cs プロジェクト: debop/NFramework
        /// <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;
        }