/// <summary>
        /// Generate Data
        /// </summary>
        /// <returns></returns>
        private SPCalendarItemCollection DataSource()
        {
            SPCalendarItemCollection items = new SPCalendarItemCollection();

            foreach (SPSCalendarItem item in Items)
            {
                SPCalendarItem calItem = new SPCalendarItem
                {
                    CalendarType   = item.CalendarType,
                    StartDate      = item.StartDate,
                    EndDate        = item.EndDate,
                    IsAllDayEvent  = item.IsAllDayEvent,
                    Title          = item.Title,
                    Description    = item.Description,
                    Location       = item.Location,
                    IsRecurrence   = item.IsRecurrence,
                    DisplayFormUrl = item.DisplayFormUrl,
                    ItemID         = item.ItemID
                };

                if (item.BackgroundColorClassName != null)
                {
                    calItem.BackgroundColorClassName = item.BackgroundColorClassName;
                }

                items.Add(calItem);
            }

            return(items);
        }
Example #2
0
        /// <summary>
        /// Generate Data
        /// </summary>
        /// <returns></returns>
        private SPCalendarItemCollection DataSource()
        {
            SPCalendarItemCollection items = new SPCalendarItemCollection();

            Array.Sort(Items);

            foreach (SPSCalendarItem item in Items)
            {
                SPCalendarItem calItem = new SPCalendarItem
                {
                    CalendarType   = item.CalendarType,
                    StartDate      = item.StartDate,
                    EndDate        = item.EndDate,
                    IsAllDayEvent  = item.IsAllDayEvent,
                    Title          = item.Title,
                    Description    = item.Description,
                    Location       = item.Location,
                    IsRecurrence   = item.IsRecurrence,
                    DisplayFormUrl = item.DisplayFormUrl,
                    ItemID         = item.ItemID,
                };

                if (item.BackgroundColorClassName != null)
                {
                    calItem.BackgroundColorClassName = item.BackgroundColorClassName;
                }

#if (DEBUG)
                XmlSerializer s  = new XmlSerializer(typeof(SPSCalendarItem));
                StringWriter  sw = new StringWriter();
                s.Serialize(sw, item);
                Debug.WriteLine("*" + sw);
                sw.Close();
#endif
                items.Add(calItem);
            }

#if (DEBUG)
            foreach (SPCalendarItem item in items)
            {
                SPSDebug.DumpObject(item);
            }

            //SPCalendarItem calItem1 = new SPCalendarItem
            //                          {
            //                                  StartDate = new DateTime(2009, 1, 14, 11, 00, 00),
            //                                  EndDate = new DateTime(2009, 1, 21, 11, 00, 00),
            //                                  Title = "TEST"
            //                          };

            //items.Add(calItem1);
#endif

            return(items);
        }
Example #3
0
        /// <summary>
        /// Adds a <see cref="CPCalendarItem"/> object to a <see cref="SPCalendarItemCollection"/> collection.
        /// </summary>
        /// <typeparam name="T">The type of item to add.</typeparam>
        /// <param name="calItems">The collection to add to.</param>
        /// <param name="item">The item to add.</param>
        public static void AddItem <T>(this SPCalendarItemCollection calItems, T item) where T : CPCalendarItem
        {
            if (item == null)
            {
                return;
            }
            SPCalendarItem calItem = item.ToSPCalendarItem();

            if (calItem != null)
            {
                calItems.Add(calItem);
            }
        }
        //</Snippet3>
        //<Snippet4>
        protected void Button1_Click(object sender, EventArgs e)
        {
            SPCalendarItemCollection items = new SPCalendarItemCollection();
            SPWeb thisWeb = SPControl.GetContextWeb(Context);

            foreach (ListItem item in CheckBoxList1.Items)
            {
                if (item.Selected == true)
                {
                    SPList   calendarList = thisWeb.Lists[item.Text];
                    DateTime dtStart      = DateTime.Now.AddDays(-7);
                    DateTime dtEnd        = dtStart.AddMonths(1).AddDays(7);
                    SPQuery  query        = new SPQuery();
                    query.Query = String.Format(
                        "<Query>" +
                        "<Where><And>" +
                        "<Geq><FieldRef Name=\"{0}\" />" +
                        "<Value Type=\"DateTime\">{1}</Value></Geq>" +
                        "<Leq><FieldRef Name=\"{0}\" />" +
                        "<Value Type=\"DateTime\">{2}</Value></Leq>" +
                        "</And></Where><OrderBy><FieldRef Name=\"{0}\" /></OrderBy>" +
                        "</Query>",
                        "Start Time",
                        dtStart.ToShortDateString(),
                        dtEnd.ToShortDateString());

                    foreach (SPListItem listItem in calendarList.GetItems(query))
                    {
                        SPCalendarItem calItem = new SPCalendarItem();
                        calItem.ItemID        = listItem["ID"].ToString();
                        calItem.Title         = listItem["Title"].ToString();
                        calItem.CalendarType  = Convert.ToInt32(SPCalendarType.Gregorian);
                        calItem.StartDate     = (DateTime)listItem["Start Time"];
                        calItem.ItemID        = listItem.ID.ToString();
                        calItem.WorkSpaceLink = String.Format(
                            "/Lists/{0}/DispForm.aspx", calendarList.Title);
                        calItem.DisplayFormUrl = String.Format(
                            "/Lists/{0}/DispForm.aspx", calendarList.Title);
                        calItem.EndDate     = (DateTime)listItem["End Time"];
                        calItem.Description = listItem["Description"].ToString();
                        if (listItem["Location"] != null)
                        {
                            calItem.Location = listItem["Location"].ToString();
                        }
                        items.Add(calItem);
                    }
                    MonthlyCalendarView1.DataSource = items;
                }
            }
        }
Example #5
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="item"></param>
        /// <returns></returns>
        public static SPCalendarItem ToSPCalendarItem <T>(this T item) where T : CPCalendarItem
        {
            // set start date to end date for statement reviews and doing business reviews
            DateTime startDate;

            switch (item.CalendarItemType)
            {
            case CPCalendarItemType.StatementReview:
            case CPCalendarItemType.DoingBusinessReview:
                startDate = item.EndDate;
                break;

            default:
                startDate = item.StartDate;
                break;
            }
            if (item.StartDate == DateTime.MinValue || item.EndDate == DateTime.MinValue)
            {
                return(null);                // invalid dates will throw an ArgumentOutOfRangeException later
            }
            SPCalendarItem calItem = new SPCalendarItem()
            {
                StartDate     = startDate,
                CalendarType  = (int)SPCalendarType.Gregorian,
                Description   = item.Description,
                EndDate       = item.EndDate,
                hasEndDate    = item.HasEndDate,
                IsAllDayEvent = item.IsAllDayEvent,
                IsRecurrence  = item.IsRecurrence,
                ItemID        = PageUrlManager.GetCalendarItemID(item),
                Title         = item.Title
            };
            // set calendar item link destinations
            string url = PageUrlManager.GetCalendarItemDisplayUrl(item);

            if (!string.IsNullOrEmpty(url))
            {
                calItem.DisplayFormUrl = url;
            }
            calItem.BackgroundColorClassName = string.Format("{0} {1}", calItem.BackgroundColorClassName, item.CalendarItemType).Trim();
            return(calItem);
        }
        public static List <SPCalendarItem> GetInstanceEventsOfRecurrenceEvent(this SPCalendarItem calendarItem, string recurrenceData, Pair calendarPeriod, DateOptions dateOptions)
        {
            List <SPCalendarItem> instanceEvents = new List <SPCalendarItem>();

            if (string.IsNullOrEmpty(recurrenceData))
            {
                instanceEvents.Add(calendarItem);
                return(instanceEvents);
            }

            // init Event period inside Calendar view scope
            DateTime fromDate = (DateTime)calendarPeriod.First > calendarItem.StartDate ? ((DateTime)calendarPeriod.First).Date : calendarItem.StartDate.Date; // get MAX date
            DateTime toDate   = (DateTime)calendarPeriod.Second < calendarItem.EndDate ? ((DateTime)calendarPeriod.Second).Date : calendarItem.EndDate.Date;   // get MIN date

            if (fromDate > toDate)
            {
                return(instanceEvents);
            }

            XDocument recDoc   = XDocument.Parse(recurrenceData);
            XElement  repeatEl = recDoc.Descendants("repeat").FirstOrDefault();

            IEnumerable <DateTime> instanceDates = null;

            if (repeatEl.Element("daily") != null)
            {
                XAttribute attrDailyFrequency = repeatEl.Element("daily").Attribute("dayFrequency");
                if (attrDailyFrequency != null)
                {
                    // Daily-Frequency
                    // update from date
                    int _dayFrequency = Int32.Parse(attrDailyFrequency.Value);
                    int daysBetweenEventStartAndCalendarPeriod = fromDate.Subtract(calendarItem.StartDate.Date).Days;
                    if (daysBetweenEventStartAndCalendarPeriod > 0)
                    {
                        fromDate = calendarItem.StartDate.Date.AddDays((daysBetweenEventStartAndCalendarPeriod / _dayFrequency) * _dayFrequency); // move fromDate to the beginning of Calendar interval
                    }
                    // get dates
                    instanceDates = Enumerable.Range(0, 1 + toDate.Subtract(fromDate).Days).Select(c => fromDate.AddDays(c * _dayFrequency)).Where(x => (x >= fromDate && x <= toDate));
                }
                else
                {
                    // Daily-weekly
                    instanceDates = Enumerable.Range(0, 1 + toDate.Subtract(fromDate).Days).Select(c => fromDate.AddDays(c)).Where(x => (dateOptions.IsWorkDay((int)x.DayOfWeek) && x >= fromDate && x <= toDate));
                }
            }
            else if (repeatEl.Element("weekly") != null)
            {
                XElement weeklyEl = repeatEl.Element("weekly");
                int      weekFreq = Convert.ToInt32(weeklyEl.Attribute("weekFrequency").Value);
                var      days     = weeklyEl.Attributes().Where(x => x.Name.ToString().Length == 2).Select(x => Utils.GetDayOfWeekByDayShortName(x.Name.ToString()));
                // get real date of first event
                DateTime stRealDt = calendarItem.StartDate.Date;
                while (!days.Any(x => x == stRealDt.DayOfWeek))
                {
                    stRealDt = stRealDt.AddDays(1);
                }
                int weeksBetweenEventStartAndCalendarPeriod = fromDate.Subtract(stRealDt).Days / 7;
                if (weeksBetweenEventStartAndCalendarPeriod > 0)
                {
                    fromDate = stRealDt.AddDays((weeksBetweenEventStartAndCalendarPeriod / weekFreq) * weekFreq * 7); // move fromDate to the beginning of Calendar interval
                }
                //instanceDates = Enumerable.Range(0, 1 + (toDate.Subtract(fromDate).Days / 7)).Select(c => fromDate.AddDays(c)).Where(x => (dateOptions.IsWorkDay((int)x.DayOfWeek) && x >= fromDate && x <= toDate));
            }
            else if (repeatEl.Element("monthlyByDay") != null)
            {
            }
            else if (repeatEl.Element("monthly") != null)
            {
                XElement monthlyByDayEl = repeatEl.Element("monthly");
                int      monthFreq      = Convert.ToInt32(monthlyByDayEl.Attribute("monthFrequency").Value);
                int      day            = Convert.ToInt32(monthlyByDayEl.Attribute("day").Value);
                DateTime nextMonth      = calendarItem.StartDate.Date.AddMonths(1);
                fromDate = calendarItem.StartDate.Day <= day ? new DateTime(calendarItem.StartDate.Year, calendarItem.StartDate.Month, day) : new DateTime(nextMonth.Year, nextMonth.Month, day);
                if (toDate >= fromDate)
                {
                    instanceDates = Enumerable.Range(0, 1 + toDate.Subtract(fromDate).Days / 28).Select(c => fromDate.AddMonths(c * monthFreq)).Where(x => (x >= fromDate && x <= toDate));
                }
            }
            else if (repeatEl.Element("yearly") != null)
            {
                XElement yearlyEl = repeatEl.Element("yearly");
                int      month    = Convert.ToInt32(yearlyEl.Attribute("month").Value);
                int      day      = Convert.ToInt32(yearlyEl.Attribute("day").Value);
                DateTime yDt      = new DateTime(month == 1 ? toDate.Year : fromDate.Year, month, day);
                if (fromDate <= yDt && yDt <= toDate)
                {
                    instanceDates = new[] { yDt }
                }
                ;
            }
            else if (repeatEl.Element("yearlyByDay") != null)
            {
                XElement yearlyDbEl     = repeatEl.Element("yearlyByDay");
                int      month          = Convert.ToInt32(yearlyDbEl.Attribute("month").Value);
                string   weekdayOfMonth = yearlyDbEl.Attribute("weekdayOfMonth").Value;
                string   dayShortName   = yearlyDbEl.Attributes().Where(x => x.Name.ToString().Length == 2).Select(x => x.Name.ToString()).FirstOrDefault();
                DateTime yDt            = new DateTime(month == 1 ? toDate.Year : fromDate.Year, month, 1).GetDayOfMonth(dayShortName, weekdayOfMonth);
                if (fromDate <= yDt && yDt <= toDate)
                {
                    instanceDates = new[] { yDt }
                }
                ;
            }

            // COPY pattern to instances
            if (instanceDates != null)
            {
                int startHour   = calendarItem.StartDate.Hour;
                int startMinute = calendarItem.StartDate.Minute;
                int endHour     = calendarItem.EndDate.Hour;
                int endMinute   = calendarItem.EndDate.Minute;
                instanceEvents.AddRange(instanceDates.Select(x => new SPCalendarItem()
                {
                    CalendarType   = calendarItem.CalendarType,
                    DisplayFormUrl = calendarItem.DisplayFormUrl,
                    ItemID         = calendarItem.ItemID,
                    StartDate      = new DateTime(x.Year, x.Month, x.Day, startHour, startMinute, 0),
                    EndDate        = new DateTime(x.Year, x.Month, x.Day, endHour, endMinute, 0),
                    hasEndDate     = true,
                    Title          = calendarItem.Title,
                    Location       = calendarItem.Location,
                    Description    = calendarItem.Description,
                    IsAllDayEvent  = calendarItem.IsAllDayEvent,
                    IsRecurrence   = true
                }));
            }

            return(instanceEvents);
        }