Example #1
0
        /// <summary>
        /// Update `BeginningTime` accroding to `RecurringFrequency`.
        /// </summary>
        /// <returns>Boolean value indicating whether `BeginningTime` is up to date or not.</returns>
        public virtual bool UpdateBeginningTime()
        {
            if (RecurringFrequency == RecurringFrequencies.None)
            {
                return(false);
            }
            if (BeginningTime > DateTime.Now)
            {
                return(true);    // BeginningTime is up-to-date.
            }
            // assume that `dt` is today, check whether it has been expired or not. (if it is expired: starts from next day)
            DateTime beginningDateTime = BeginningTime.AddDays((DateTime.Today.Date - BeginningTime.Date).Days);
            // Compare time part of the day only
            DayOfWeek targetWeekday = (BeginningTime.TimeOfDay <= DateTime.Now.TimeOfDay) ? DateTime.Now.DayOfWeek + 1 : DateTime.Now.DayOfWeek;

            Weekday nextRecurringWeekday = Utils.GetNextRecurringWeekday(targetWeekday, RecurringFrequency);

            if (nextRecurringWeekday.ToSystemWeekday() == DateTime.Today.DayOfWeek)
            {
                BeginningTime = DateTime.Today.Date.Add(BeginningTime.TimeOfDay);
            }
            else
            {
                BeginningTime = Utils.DateTimeOfNextWeekday(beginningDateTime, nextRecurringWeekday.ToSystemWeekday());
            }

            return(true);
        }