Esempio n. 1
0
 /// <summary>
 /// Creates the specified pattern.
 /// </summary>
 /// <param name="pattern">The pattern.</param>
 /// <param name="windowStart">The window start.</param>
 /// <returns></returns>
 /// <exception cref="System.ArgumentException">pattern.Frequency</exception>
 public static IRecurrence Create(IRecurrencePattern pattern, DateTime windowStart)
 {
     AsyncServiceException.ThrowIfNull(pattern, "pattern");
     switch (pattern.Frequency)
     {
         case RecurrenceFrequency.Minutely:
             return new ConstantPeriodRecurrence(TimeSpan.FromMinutes(1.0), pattern.Interval,
                                                 pattern.PatternStart, windowStart);
         case RecurrenceFrequency.Hourly:
             return new ConstantPeriodRecurrence(TimeSpan.FromHours(1.0), pattern.Interval, pattern.PatternStart,
                                                 windowStart);
         case RecurrenceFrequency.Daily:
             return new ConstantPeriodRecurrence(TimeSpan.FromDays(1.0), pattern.Interval, pattern.PatternStart,
                                                 windowStart);
         case RecurrenceFrequency.Weekly:
             if (pattern.ByDay.Length == 0)
             {
                 return new ConstantPeriodRecurrence(TimeSpan.FromDays(7.0), pattern.Interval,
                                                     pattern.PatternStart, windowStart);
             }
             IModifier modifier = new ByDayWeeklyModifier(pattern.ByDay, pattern.WeekStartDay);
             IRecurrence recurrence = new WeeklyRecurrence(pattern.Interval, pattern.PatternStart,
                                                           pattern.WeekStartDay, windowStart);
             return new ModifiedRecurrence(recurrence, modifier, windowStart);
         case RecurrenceFrequency.Yearly:
             return new YearlyRecurrence(pattern.Interval, pattern.ByMonth, pattern.ByMonthDay, pattern.PatternStart, windowStart);
         case RecurrenceFrequency.Secondly:
             return new ConstantPeriodRecurrence(TimeSpan.FromSeconds(1.0), pattern.Interval,
                                                 pattern.PatternStart, windowStart);
         default:
             throw new ArgumentException(string.Format("不合法的重复频率{0}。", pattern.Frequency), "pattern.Frequency");
     }
 }
Esempio n. 2
0
        public void GetOccurrences_Weekends_Until()
        {
            var recurrence  = new WeeklyRecurrence(DaysOfWeek.Weekends, 1, new DateTime(2017, 2, 25));
            var occurrences = recurrence.GetOccurrences(from).ToList();

            CollectionAssert.AreEqual(new[]
            {
                from.AddDays(3),
                from.AddDays(4),
                from.AddDays(10),
            }, occurrences);
        }
Esempio n. 3
0
        public void GetOccurrences_NoneDaysOfWeek()
        {
            var recurrence  = new WeeklyRecurrence(DaysOfWeek.None, 2, null);
            var occurrences = recurrence.GetOccurrences(from).Take(4).ToList();

            CollectionAssert.AreEqual(new[]
            {
                from.AddDays(0),
                from.AddDays(14),
                from.AddDays(28),
                from.AddDays(42),
            }, occurrences);
        }
Esempio n. 4
0
        public void GetOccurrences_Weekends_EverySecond()
        {
            var recurrence  = new WeeklyRecurrence(DaysOfWeek.Weekends, 2, null);
            var occurrences = recurrence.GetOccurrences(from).Take(5).ToList();

            CollectionAssert.AreEqual(new[]
            {
                from.AddDays(3),
                from.AddDays(4),
                from.AddDays(17),
                from.AddDays(18),
                from.AddDays(31),
            }, occurrences);
        }
Esempio n. 5
0
        public void GetOccurrences_EveryDay_EverySecond()
        {
            var recurrence  = new WeeklyRecurrence(DaysOfWeek.EveryDay, 2, null);
            var occurrences = recurrence.GetOccurrences(from).Take(9).ToList();

            CollectionAssert.AreEqual(new[]
            {
                from.AddDays(0),
                from.AddDays(1),
                from.AddDays(2),
                from.AddDays(3),
                from.AddDays(4),
                from.AddDays(5),
                from.AddDays(6),
                from.AddDays(14),
                from.AddDays(15),
            }, occurrences);
        }
            public void CanCalculateRecurrenceSet()
            {
                #region Arrange

                var validStartDateTime = new DateTime(2014, 2, 17);
                const int validWeeksBetweenOccurrences = 1;
                var validIncludedWeekDays = new List<DayOfWeek>
                {
                    DayOfWeek.Monday,
                    DayOfWeek.Wednesday,
                    DayOfWeek.Saturday
                };
                // end on Saturday two weeks from the start date
                DateTime validEndDateTime =
                    validStartDateTime.AddDays((DayOfWeek.Saturday - DayOfWeek.Monday)).AddDays(7*2);
                var validWeeklyRecurrence = new WeeklyRecurrence(validStartDateTime, validWeeksBetweenOccurrences,
                    validIncludedWeekDays, validEndDateTime);

                var expectedRecurrenceSet = new List<DateTime>
                {
                    // DateTimes from first occurrence
                    validStartDateTime,
                    validStartDateTime.AddDays(DayOfWeek.Wednesday - DayOfWeek.Monday),
                    validStartDateTime.AddDays(DayOfWeek.Saturday - DayOfWeek.Monday),
                    // DateTimes from second occurrence
                    validStartDateTime.AddDays(7*2),
                    validStartDateTime.AddDays(DayOfWeek.Wednesday - DayOfWeek.Monday).AddDays(7*2),
                    validStartDateTime.AddDays(DayOfWeek.Saturday - DayOfWeek.Monday).AddDays(7*2)
                };

                #endregion

                #region Act

                IEnumerable<DateTime> recurrenceSet = validWeeklyRecurrence.CalculateRecurrenceSet();

                #endregion

                #region Assert

                Assert.IsTrue(expectedRecurrenceSet.SequenceEqual(recurrenceSet));

                #endregion
            }
Esempio n. 7
0
        /// Function: Convert PWRecurrenceInfo... to WeeklyRecurrence
        /// Author  : Jerry Xu
        /// Date    : 2008-12-6
        /// </summary>
        /// <param name="recurrence">PWRecurrenceInfo</param>
        /// <returns>WeeklyRecurrence</returns>
        private WeeklyRecurrence ConvertWeeklyPattern(PWRecurrenceInfo recurrence)
        {
            WeeklyRecurrence item = new WeeklyRecurrence();
            //if(recurrence.w

            int target = 0;

            if ((recurrence.WeekDays & PWWeekDays.Monday) == PWWeekDays.Monday)
            {
                target = (int)WeeklyChoiceType.M;
            }
            if ((recurrence.WeekDays & PWWeekDays.Tuesday) == PWWeekDays.Tuesday)
            {
                target = target | (int)WeeklyChoiceType.T;
            }
            if ((recurrence.WeekDays & PWWeekDays.Wednesday) == PWWeekDays.Wednesday)
            {
                target = target | (int)WeeklyChoiceType.W;
            }
            if ((recurrence.WeekDays & PWWeekDays.Thursday) == PWWeekDays.Thursday)
            {
                target = target | (int)WeeklyChoiceType.TH;
            }
            if ((recurrence.WeekDays & PWWeekDays.Friday) == PWWeekDays.Friday)
            {
                target = target | (int)WeeklyChoiceType.F;
            }
            if ((recurrence.WeekDays & PWWeekDays.Saturday) == PWWeekDays.Saturday)
            {
                target = target | (int)WeeklyChoiceType.S;
            }
            if ((recurrence.WeekDays & PWWeekDays.Sunday) == PWWeekDays.Sunday)
            {
                target = target | (int)WeeklyChoiceType.SU;
            }
            if (target != 0)
            {
                item.DaysChoice = (WeeklyChoiceType)target;
            }
            //item.DaysChoice = (WeeklyChoiceType)Enum.Parse(typeof(WeeklyChoiceType), ((int)recurrence.WeekDays).ToString());
            item.RecurCycle = recurrence.Periodicity;
            return(item);
        }
Esempio n. 8
0
        public void GetOccurrences_EveryDay_Until()
        {
            var recurrence  = new WeeklyRecurrence(DaysOfWeek.EveryDay, 1, new DateTime(2017, 2, 25));
            var occurrences = recurrence.GetOccurrences(from).ToList();

            CollectionAssert.AreEqual(new[]
            {
                from.AddDays(0),
                from.AddDays(1),
                from.AddDays(2),
                from.AddDays(3),
                from.AddDays(4),
                from.AddDays(5),
                from.AddDays(6),
                from.AddDays(7),
                from.AddDays(8),
                from.AddDays(9),
                from.AddDays(10),
            }, occurrences);
        }
Esempio n. 9
0
        private static ScheduleDefinition ScheduleDefinitionFromReportSchedulerModel(ReportSchedulerModel model)
        {
            var startDate = DateTime.Parse(model.StartDate, CultureInfo.CurrentCulture);
            var runtTime = DateTime.Parse(model.ScheduledTime, CultureInfo.CurrentCulture);
            var startDateTime = new DateTime(startDate.Year, startDate.Month, startDate.Day,
                                             runtTime.Hour, runtTime.Minute, runtTime.Second, DateTimeKind.Local);

            var recurrencePattern = new WeeklyRecurrence
            {
                WeeksIntervalSpecified = true,
                WeeksInterval = 1,
                DaysOfWeek =
                    model.ReportFrequency == ReportFrequency.Daily
                        ? DailyDaysOfWeek
                        : WeeklyDayOfWeek(model.Weekday)
            };

            var scheduleDefinition = new ScheduleDefinition
            {
                StartDateTime = startDateTime,
                EndDateSpecified = model.EndDateSpecified,
                Item = recurrencePattern
            };

            if (model.EndDateSpecified)
            {
                scheduleDefinition.EndDate = DateTime.Parse(model.EndDate, CultureInfo.CurrentCulture);
            }

            return scheduleDefinition;
        }
Esempio n. 10
0
        /// <summary>
        /// Create the recurrence pattern according to the schedule Type
        /// </summary>
        /// <param name="scheduleTypeParam"></param>
        /// <returns></returns>
        private RecurrencePattern GetPattern(string scheduleTypeParam, int scheduleDay)
        {
            SchedulePeriod scheduleType = (SchedulePeriod)Enum.Parse(typeof(SchedulePeriod), scheduleTypeParam, true);

            switch (scheduleType)
            {
            case SchedulePeriod.Daily:
                DailyRecurrence dailyPattern = new DailyRecurrence();
                dailyPattern.DaysInterval = 1;
                return(dailyPattern);

            case SchedulePeriod.Monthly:
                MonthlyDOWRecurrence monthlyPattern = new MonthlyDOWRecurrence();
                monthlyPattern.WhichWeekSpecified = true;
                monthlyPattern.WhichWeek          = WeekNumberEnum.LastWeek;

                MonthsOfYearSelector months = new MonthsOfYearSelector();
                months.January              = true;
                months.February             = true;
                months.March                = true;
                months.April                = true;
                months.May                  = true;
                months.June                 = true;
                months.July                 = true;
                months.August               = true;
                months.September            = true;
                months.October              = true;
                months.November             = true;
                months.December             = true;
                monthlyPattern.MonthsOfYear = months;

                DaysOfWeekSelector days = GetExecutionDay(scheduleDay);
                monthlyPattern.DaysOfWeek = days;

                return(monthlyPattern);

            case SchedulePeriod.Weekdays:
                WeeklyRecurrence weekdaysRecurrence = new WeeklyRecurrence();

                DaysOfWeekSelector Weekdays = new DaysOfWeekSelector();
                Weekdays.Monday    = true;
                Weekdays.Tuesday   = true;
                Weekdays.Wednesday = true;
                Weekdays.Thursday  = true;
                Weekdays.Friday    = true;

                weekdaysRecurrence.DaysOfWeek = Weekdays;

                weekdaysRecurrence.WeeksIntervalSpecified = true;
                weekdaysRecurrence.WeeksInterval          = 1;

                return(weekdaysRecurrence);

            case SchedulePeriod.Weekly:
                WeeklyRecurrence weeklyRecurrence = new WeeklyRecurrence();

                DaysOfWeekSelector weeklydays = GetExecutionDay(scheduleDay);
                weeklyRecurrence.DaysOfWeek = weeklydays;

                weeklyRecurrence.WeeksIntervalSpecified = true;
                weeklyRecurrence.WeeksInterval          = 1;

                return(weeklyRecurrence);

            default:
                return(null);
            }
        }