/// <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); }
/// <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); }
/// <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; } } }
/// <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); }