/// <summary> /// Creates a Recurrence Rule in RadScheduler-friendly format from the RRule of the specified Recurring component. /// </summary> /// <param name="startDate">The Start Date of the Recurring component.</param> /// <param name="endDate">The End Date of the Recurring component.</param> /// <param name="recurringComponent">The Recurring component.</param> /// <returns>A <see cref="string"/> representation of the RRule in RadScheduler-friendly format.</returns> private static string GetSchedulerRecurrenceRule(DateTime startDate, DateTime endDate, RecurringComponent recurringComponent) { string recurrenceRuleString = String.Empty; if ((recurringComponent.RecurrenceRules != null) && (recurringComponent.RecurrenceRules[0] != null)) { RecurrenceRange schedulerRange = new RecurrenceRange(); schedulerRange.Start = startDate; schedulerRange.EventDuration = endDate - startDate; DDay.iCal.RecurrencePattern iCalPattern = (DDay.iCal.RecurrencePattern)recurringComponent.RecurrenceRules[0]; if (iCalPattern.Count > 0) { schedulerRange.MaxOccurrences = iCalPattern.Count; } else if ((iCalPattern.Until != null))//&& (iCalPattern.IsValidDate(iCalPattern.Until)) { schedulerRange.RecursUntil = iCalPattern.Until.ToLocalTime(); } RecurrenceRule schedulerRRule = null; int iCallPatternInterval = iCalPattern.Interval; RecurrenceDay schedulerRecurrenceDay = GetSchedulerRecurrenceDay(iCalPattern.ByDay); switch (iCalPattern.Frequency) { case FrequencyType.Hourly: schedulerRRule = new HourlyRecurrenceRule(iCallPatternInterval, schedulerRange); break; case FrequencyType.Daily: if (schedulerRecurrenceDay == RecurrenceDay.None) { schedulerRRule = new DailyRecurrenceRule(iCallPatternInterval, schedulerRange); } else { schedulerRRule = new DailyRecurrenceRule(schedulerRecurrenceDay, schedulerRange); } break; case FrequencyType.Weekly: if (schedulerRecurrenceDay == RecurrenceDay.None) { schedulerRRule = new WeeklyRecurrenceRule( iCallPatternInterval, (RecurrenceDay)startDate.DayOfWeek, schedulerRange, iCalPattern.FirstDayOfWeek); } else { schedulerRRule = new WeeklyRecurrenceRule( iCallPatternInterval, schedulerRecurrenceDay, schedulerRange, iCalPattern.FirstDayOfWeek); } break; case FrequencyType.Monthly: if (iCalPattern.ByMonthDay.Count > 0) { schedulerRRule = new MonthlyRecurrenceRule( iCalPattern.ByMonthDay[0], iCallPatternInterval, schedulerRange); } else if (iCalPattern.BySetPosition.Count > 0) { schedulerRRule = new MonthlyRecurrenceRule( iCalPattern.BySetPosition[0], schedulerRecurrenceDay, iCallPatternInterval, schedulerRange); } else { schedulerRRule = new MonthlyRecurrenceRule( startDate.Day, iCallPatternInterval, schedulerRange); } break; case FrequencyType.Yearly: if (iCalPattern.ByMonth.Count > 0) { if (iCalPattern.ByMonthDay.Count > 0) { schedulerRRule = new YearlyRecurrenceRule( (RecurrenceMonth)iCalPattern.ByMonth[0], iCalPattern.ByMonthDay[0], schedulerRange); } else if (iCalPattern.BySetPosition.Count > 0) { schedulerRRule = new YearlyRecurrenceRule( iCalPattern.BySetPosition[0], (RecurrenceMonth)iCalPattern.ByMonth[0], schedulerRecurrenceDay, schedulerRange); } else { schedulerRRule = new YearlyRecurrenceRule( (RecurrenceMonth)iCalPattern.ByMonth[0], startDate.Day, schedulerRange); } } else { schedulerRRule = new YearlyRecurrenceRule( (RecurrenceMonth)startDate.Month, startDate.Day, schedulerRange); } break; default: break; } if (schedulerRRule != null) { AddRecurrenceExceptions(schedulerRRule, recurringComponent); recurrenceRuleString = schedulerRRule.ToString(); } } return recurrenceRuleString; }
/// <summary> /// Creates a Recurrence Rule in RadScheduler-friendly format from the RRule of the specified Recurring component. /// </summary> /// <param name="startDate">The Start Date of the Recurring component.</param> /// <param name="endDate">The End Date of the Recurring component.</param> /// <param name="recurringComponent">The Recurring component.</param> /// <returns>A <see cref="string"/> representation of the RRule in RadScheduler-friendly format.</returns> private static string GetSchedulerRecurrenceRule(DateTime startDate, DateTime endDate, RecurringComponent recurringComponent) { string recurrenceRuleString = String.Empty; if ((recurringComponent.RecurrenceRules != null) && (recurringComponent.RecurrenceRules[0] != null)) { RecurrenceRange schedulerRange = new RecurrenceRange(); schedulerRange.Start = startDate; schedulerRange.EventDuration = endDate - startDate; DDay.iCal.RecurrencePattern iCalPattern = (DDay.iCal.RecurrencePattern)recurringComponent.RecurrenceRules[0]; if (iCalPattern.Count > 0) { schedulerRange.MaxOccurrences = iCalPattern.Count; } else if ((iCalPattern.Until != null))//&& (iCalPattern.IsValidDate(iCalPattern.Until)) { schedulerRange.RecursUntil = iCalPattern.Until.ToLocalTime(); } RecurrenceRule schedulerRRule = null; int iCallPatternInterval = iCalPattern.Interval; RecurrenceDay schedulerRecurrenceDay = GetSchedulerRecurrenceDay(iCalPattern.ByDay); switch (iCalPattern.Frequency) { case FrequencyType.Hourly: schedulerRRule = new HourlyRecurrenceRule(iCallPatternInterval, schedulerRange); break; case FrequencyType.Daily: if (schedulerRecurrenceDay == RecurrenceDay.None) { schedulerRRule = new DailyRecurrenceRule(iCallPatternInterval, schedulerRange); } else { schedulerRRule = new DailyRecurrenceRule(schedulerRecurrenceDay, schedulerRange); } break; case FrequencyType.Weekly: if (schedulerRecurrenceDay == RecurrenceDay.None) { schedulerRRule = new WeeklyRecurrenceRule( iCallPatternInterval, (RecurrenceDay)startDate.DayOfWeek, schedulerRange, iCalPattern.FirstDayOfWeek); } else { schedulerRRule = new WeeklyRecurrenceRule( iCallPatternInterval, schedulerRecurrenceDay, schedulerRange, iCalPattern.FirstDayOfWeek); } break; case FrequencyType.Monthly: if (iCalPattern.ByMonthDay.Count > 0) { schedulerRRule = new MonthlyRecurrenceRule( iCalPattern.ByMonthDay[0], iCallPatternInterval, schedulerRange); } else if (iCalPattern.BySetPosition.Count > 0) { schedulerRRule = new MonthlyRecurrenceRule( iCalPattern.BySetPosition[0], schedulerRecurrenceDay, iCallPatternInterval, schedulerRange); } else { schedulerRRule = new MonthlyRecurrenceRule( startDate.Day, iCallPatternInterval, schedulerRange); } break; case FrequencyType.Yearly: if (iCalPattern.ByMonth.Count > 0) { if (iCalPattern.ByMonthDay.Count > 0) { schedulerRRule = new YearlyRecurrenceRule( (RecurrenceMonth)iCalPattern.ByMonth[0], iCalPattern.ByMonthDay[0], schedulerRange); } else if (iCalPattern.BySetPosition.Count > 0) { schedulerRRule = new YearlyRecurrenceRule( iCalPattern.BySetPosition[0], (RecurrenceMonth)iCalPattern.ByMonth[0], schedulerRecurrenceDay, schedulerRange); } else { schedulerRRule = new YearlyRecurrenceRule( (RecurrenceMonth)iCalPattern.ByMonth[0], startDate.Day, schedulerRange); } } else { schedulerRRule = new YearlyRecurrenceRule( (RecurrenceMonth)startDate.Month, startDate.Day, schedulerRange); } break; default: break; } if (schedulerRRule != null) { AddRecurrenceExceptions(schedulerRRule, recurringComponent); recurrenceRuleString = schedulerRRule.ToString(); } } return(recurrenceRuleString); }