/// <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);
        }
        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            try
            {
                SPWeb web = SPContext.Current.Web;

                spCalendarHolidayView = new SPCalendarView();
                spCalendarHolidayView.EnableViewState    = true;
                spCalendarHolidayView.EnableV4Rendering  = web.UIVersion >= 4;
                spCalendarHolidayView.NewItemFormUrl     = web.ServerRelativeUrl.TrimEnd('/') + Constants.Pages.HOLIDAY_FORM_PAGE_URL + "?Mode=3";
                spCalendarHolidayView.EditItemFormUrl    = web.ServerRelativeUrl.TrimEnd('/') + Constants.Pages.HOLIDAY_FORM_PAGE_URL + "?Mode=2";
                spCalendarHolidayView.DisplayItemFormUrl = web.ServerRelativeUrl.TrimEnd('/') + Constants.Pages.HOLIDAY_FORM_PAGE_URL + "?Mode=1";

                string viewType     = this.CalendarPeriod;
                string selectedDate = SPUtility.GetSelectedDate(Request, web);

                Tuple <DateTime, DateTime> calendarPeriod = Utils.GetCalendarViewPeriod(SPContext.Current.Web.GetDateOptions(Request), viewType);
                spCalendarHolidayView.ViewType     = viewType;
                spCalendarHolidayView.SelectedDate = selectedDate;

                // Bind the datasource to the SPCalendarView
                var   ds           = new SPCalendarItemCollection();
                short calendarType = web.RegionalSettings.CalendarType;
                var   holidays     = new RosterDataService().ListHolidayEvents().OrderBy(item => item.HolidayDate).ToList();
                ds.AddRange(holidays.Select(item => new SPCalendarItem()
                {
                    DisplayFormUrl = web.ServerRelativeUrl.TrimEnd('/') + Constants.Pages.HOLIDAY_FORM_PAGE_URL + "?Mode=1",
                    CalendarType   = calendarType,
                    ItemID         = item.Id.ToString(),
                    StartDate      = item.HolidayDate.Date,
                    EndDate        = item.HolidayDate.Date.AddSeconds(86400),
                    hasEndDate     = true,
                    Title          = item.Holiday.Name,
                    Location       = item.Holiday.HolidayType.Name,
                    IsAllDayEvent  = true,
                    IsRecurrence   = false
                }).ToList());

                // data bind
                spCalendarHolidayView.DataSource = ds;
                spCalendarHolidayView.DataBind();

                // add Calendar to page
                this.Controls.Add(spCalendarHolidayView);
            }
            catch (Exception ex)
            {
                Controls.Add(new Label()
                {
                    Text = ex.Message, ForeColor = System.Drawing.Color.Red
                });
                Controls.Add(new Label()
                {
                    Text = " StackTrace: " + ex.StackTrace, ForeColor = System.Drawing.Color.Red
                });
            }
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Adds a collection of <see cref="CPCalendarItem"/> objects 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="items">The collection of items to add.</param>
 public static void AddItems <T>(this SPCalendarItemCollection calItems, IEnumerable <T> items) where T : CPCalendarItem
 {
     if (items == null)
     {
         return;
     }
     foreach (var item in items)
     {
         calItems.AddItem(item);
     }
 }
Exemplo n.º 5
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;
                }
            }
        }
        //</Snippet2>
        //<Snippet3>
        protected void Page_Load(object sender, EventArgs e)
        {
            MonthlyCalendarView1 = new MonthlyCalendarView();
            this.Controls.Add(MonthlyCalendarView1);
            SPCalendarItemCollection items = new SPCalendarItemCollection();
            SPWeb thisWeb = SPControl.GetContextWeb(Context);

            if (CheckBoxList1.Items.Count == 0)
            {
                foreach (SPList listItem in thisWeb.Lists)
                {
                    if (listItem.BaseTemplate == SPListTemplateType.Events)
                    {
                        CheckBoxList1.Items.Add(new ListItem(listItem.Title));
                    }
                }
            }
            MonthlyCalendarView1.ItemTemplateName =
                "CalendarViewMonthItemTemplate";
            MonthlyCalendarView1.ItemAllDayTemplateName =
                "CalendarViewMonthItemAllDayTemplate";
            MonthlyCalendarView1.ItemMultiDayTemplateName =
                "CalendarViewMonthItemMultiDayTemplate";
        }
        public SPCalendarItemCollection SelectDataForCalendar(short calendarType, Tuple <DateTime, DateTime> calendarPeriod, string calendarScope, out object rostersForColoring)
        {
            var query        = new QueryParams();
            var listFields   = this.m_view.ListMetadata.ListMetadataFields;
            var startDateFld = listFields.FirstOrDefault(item => item.InternalName == FieldNames.START_DATE);
            var endDateFld   = listFields.FirstOrDefault(item => item.InternalName == FieldNames.END_DATE);

            // set filter according period displayed by Calendar
            query.WhereCriteria.Add(new Tuple <ListMetadataField, CompareType, ConcateOperator, object, string>(startDateFld, CompareType.LessOrEqual, ConcateOperator.And, calendarPeriod.Item2, null));
            query.WhereCriteria.Add(new Tuple <ListMetadataField, CompareType, ConcateOperator, object, string>(endDateFld, CompareType.MoreOrEqual, ConcateOperator.And, calendarPeriod.Item1, null));

            // add filter
            if (this.m_GridFilterExpression != null && this.m_GridFilterExpression.WhereCriteria.Any())
            {
                query.WhereCriteria.AddRange(this.m_GridFilterExpression.WhereCriteria);
            }

            // extract Roster data
            RosterDataService _dataSrv = new RosterDataService();
            //List<RosterEvent> rosters = (this.m_view.ListMetadataId == Roster.Common.TableIDs.TIMESHEET_ROSTERS && this.displayPrepopulatedRosters) ?
            //    _dataSrv.ViewTimesheetEvents(this.m_view.Id, query, calendarPeriod) : _dataSrv.ViewRosterEvents(this.m_view.Id, query);
            List <RosterEvent> rosters = _dataSrv.ViewRosterEvents(this.m_view.Id, query);

            // expant recurrent events
            var tZone = SPContext.Current.Web.RegionalSettings.TimeZone;
            List <ExpandedRosterEvent> expandedEvents = RecurrenceItemExpander.Expand(rosters, null, calendarPeriod.Item1, calendarPeriod.Item2,
                                                                                      FieldNames.START_DATE, FieldNames.END_DATE, tZone).ToList();

            // send Object to output for coloring
            if (!this.m_view.GetDerializedDynamicColourSettings().IsEmpty)
            {
                if (this.dynColoring_OriginalRosterId != Guid.Empty && !rosters.Any(r => r.Id == this.dynColoring_OriginalRosterId))
                {
                    List <RosterEvent> rosters_dynColor = rosters;
                    RosterEvent        origRoster       = _dataSrv.GetRosterEvent(this.dynColoring_OriginalRosterId); // !! don't return all properties

                    // get events around Orig.Roster
                    var queryDyn = new QueryParams();
                    queryDyn.WhereCriteria.Add(new Tuple <ListMetadataField, CompareType, ConcateOperator, object, string>(startDateFld, CompareType.LessOrEqual, ConcateOperator.And, origRoster.GetEndDate(), null));
                    queryDyn.WhereCriteria.Add(new Tuple <ListMetadataField, CompareType, ConcateOperator, object, string>(endDateFld, CompareType.MoreOrEqual, ConcateOperator.And, origRoster.GetStartDate(), null));
                    rosters_dynColor.AddRange(_dataSrv.ViewRosterEvents(this.m_view.Id, queryDyn));

                    rosters_dynColor   = rosters_dynColor.GroupBy(r => r.Id).Select(g => g.First()).ToList();              // remove duplicates
                    rostersForColoring = RecurrenceItemExpander.Expand(rosters_dynColor, null, calendarPeriod.Item1, calendarPeriod.Item2,
                                                                       FieldNames.START_DATE, FieldNames.END_DATE, tZone); // for dynamic coloring

                    // add original Roster (only for Dynamic colour-coding)
                    expandedEvents.Add(new ExpandedRosterEvent(rosters_dynColor.First(r => r.Id == this.dynColoring_OriginalRosterId), true, tZone));
                }
                else
                {
                    rostersForColoring = expandedEvents; // for dynamic coloring
                }
            }
            else
            {
                rostersForColoring = rosters;        // for static coloring
            }

            // get default DispForm url and default EventTypeId for rosters
            string defaultDispFormUrl = string.Format("{0}/{1}&ListId={2}", SPContext.Current.Web.ServerRelativeUrl.TrimEnd('/'),
                                                      this.m_view.ListMetadata.DispItemUrl.TrimStart('/'), SPEncode.UrlEncode(this.m_view.ListMetadataId.ToString("B").ToUpper()));
            var    matchEventType         = Regex.Match(defaultDispFormUrl, @"EventType=(?<eType>\d+)");
            int    defaultEventType       = matchEventType.Success ? matchEventType.Groups["eType"].Value.ToInt() : -1;
            string eventTitleFieldName    = this.m_view.GetEventTitleFieldName(calendarScope);
            string eventLocationFieldName = this.m_view.GetEventLocationFieldName(calendarScope);

            // init some variables for Working Rosters which are displayed on TIMESHEET view
            string workingRoster_DispFormUrl           = string.Empty;
            string workingRosterEventTitleFieldName    = string.Empty;
            string workingRosterEventLocationFieldName = string.Empty;

            if (this.m_view.ListMetadataId == Roster.Common.TableIDs.TIMESHEET_ROSTERS)
            {
                var workingRosterList = new RosterConfigService().GetList(Roster.Common.TableIDs.WORKING_ROSTERS);
                workingRoster_DispFormUrl = string.Format("{0}/{1}&ListId={2}", SPContext.Current.Web.ServerRelativeUrl.TrimEnd('/'),
                                                          workingRosterList.DispItemUrl.TrimStart('/'), SPEncode.UrlEncode(workingRosterList.Id.ToString("B").ToUpper()));

                var workingRosterView = workingRosterList.ViewMetadatas.FirstOrDefault(x => x.Name == ViewNames.WORKING_ROSTERS_FOR_TIMESHEETS);
                workingRosterEventTitleFieldName    = (workingRosterView != null) ? workingRosterView.GetEventTitleFieldName(calendarScope) : FieldNames.START_DATE;
                workingRosterEventLocationFieldName = (workingRosterView != null) ? workingRosterView.GetEventLocationFieldName(calendarScope) : FieldNames.END_DATE;
            }

            // init Calendar Items
            var items = new SPCalendarItemCollection();

            items.AddRange(expandedEvents.Select(x => new SPCalendarItem()
            {
                DisplayFormUrl = (defaultEventType == x.EventTypeId) ? defaultDispFormUrl : workingRoster_DispFormUrl,
                CalendarType   = calendarType,
                ItemID         = x.InstanceID,
                StartDate      = x.StartDate,
                EndDate        = x.EndDate,
                hasEndDate     = true,
                Title          = ((IDictionary <string, object>)x.OriginalItem.RosterEventProperties)[(defaultEventType == x.EventTypeId) ? eventTitleFieldName : workingRosterEventTitleFieldName].ToString(),
                Location       = ((IDictionary <string, object>)x.OriginalItem.RosterEventProperties)[(defaultEventType == x.EventTypeId) ? eventLocationFieldName : workingRosterEventLocationFieldName].ToString(),
                IsAllDayEvent  = x.OriginalItem.GetIsAllDayEvent(),
                IsRecurrence   = x.OriginalItem.GetIsRecurrence()
            }).ToList());

            return(items);
        }