/// <summary> /// Adds recurring appointments. /// </summary> /// <param name="item">The recurring appointment definition.</param> /// <param name="dateLimit">A date limit at which the recurring appointments end.</param> /// <remarks> The date limit may be dateTime.MaxValue which indicates no limit.</remarks> public void AddNewRecurringAppointments(IRecurringScheduleAppointment item, DateTime dateLimit) { string[] rulesArray = item.RecurrenceRule.Split(new char[] { RecurrenceSupport.RuleDelimiter }); DateTime baseDate = DateTime.Parse(rulesArray[0]); DateTime date = rulesArray[1].Length > 0 ? DateTime.Parse(rulesArray[1]) : dateLimit; if (item.DateList == null) { //if null, then need to create it. CreateDateListFromItem(item); //conditionally set terminal date if present in rule. if (rulesArray[1].Length > 0) { item.DateList.TerminalDate = date; } } item.DateList.IsValidRecurrence(date); //this populates DateList up through date bool needToSort = false; foreach (DateTime dt in item.DateList) { //now go through and add appointments that match the datelist entries if (dt >= item.DateList.BaseDate && dt <= item.DateList.TerminalDate) { AddAppointmentFromItem(item, dt); needToSort = true; } } if (needToSort) { ResetBaseDate(item); MasterList.SortStartTime(); } }
/// <summary> /// Used after the inital load to add additional recurring appointments to the dataprovider. /// </summary> /// <param name="date">The recurring appointment definition.</param> /// <returns>True if dates were added.</returns> /// <remarks>Dynamically provide appointments on demand as new dates are exposed.</remarks> public bool CheckAndAddIfNeededRecurringAppointments(DateTime date) { bool ret = false; foreach (IRecurringScheduleAppointment item in RecurringList) { if (item.DateList == null && item.RecurrenceRule != null && item.RecurrenceRule.Length > 0) { //create initial DateList and add any appointments CreateDateListFromItem(item); AddNewRecurringAppointments(item, item.DateList.BaseDate); } RecurrenceList list = item.DateList; if (list != null) { //now loop thru and add appointments if needed DateTime date1 = date.CompareTo(list.TerminalDate) > 0 ? list.TerminalDate : date; if (date1.CompareTo(list[list.Count - 1]) > 0) { //need to add int start = list.Count; list.IsValidRecurrence(date1); bool needToSort = false; while (start < list.Count) { date1 = list[start]; if (date1 >= item.DateList.BaseDate && date1 <= item.DateList.TerminalDate) { AddAppointmentFromItem(item, date1); needToSort = true; } start++; } if (needToSort) { ResetBaseDate(item); MasterList.SortStartTime(); ret = true; } } } } return(ret); }