示例#1
0
        /// <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();
            }
        }
示例#2
0
        /// <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);
        }