public ExpandedRosterEvent(RosterEvent item, bool withInit, SPTimeZone timeZone)
        {
            this.m_item      = item;
            this.EventTypeId = this.m_item.EventTypeId;

            if (withInit)
            {
                this.InitNonRecurrenceExpandedRoster(timeZone);
            }
        }
Exemplo n.º 2
0
        public static DateTime GetEndDate(this RosterEvent rEvent)
        {
            string fldKey = FieldNames.END_DATE;
            var    props  = (IDictionary <string, object>)rEvent.RosterEventProperties;

            if (props.ContainsKey(fldKey) && props[fldKey] != null)
            {
                return(Convert.ToDateTime(props[fldKey]));
            }

            throw new ArgumentException(string.Format("There is no '{0}' field!", fldKey));
        }
Exemplo n.º 3
0
        public static bool GetIsAllDayEvent(this RosterEvent rEvent)
        {
            string fldKey = FieldNames.ALL_DAY_EVENT;
            var    props  = (IDictionary <string, object>)rEvent.RosterEventProperties;

            if (props.ContainsKey(fldKey) && props[fldKey] != null)
            {
                return(props[fldKey] != DBNull.Value ? Convert.ToBoolean(props[fldKey]) : false);
            }

            //throw new ArgumentException(string.Format("There is no '{0}' field!", fldKey));
            return(false);
        }
Exemplo n.º 4
0
        public static string GetRecurrence(this RosterEvent rEvent)
        {
            string fldKey = FieldNames.RECURRENCE;
            var    props  = (IDictionary <string, object>)rEvent.RosterEventProperties;

            if (props.ContainsKey(fldKey) && props[fldKey] != null)
            {
                return(Convert.ToString(props[fldKey]));
            }
            else
            {
                return(string.Empty);
            }
        }
        internal static Guid GetMasterId(RosterEvent item)
        {
            int    eventType        = GetEventType(item);
            string stringFieldValue = item.Id.ToString();

            if ((eventType == 1) && !stringFieldValue.Contains <char>('.'))
            {
                return(item.Id);
            }

            if ((eventType != 4) && (eventType != 3))
            {
                return(Guid.Empty);
            }

            return(Guid.Empty); //SafeFieldAccessor.GetIntegerFieldValue(item, "MasterSeriesItemID");
        }
        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);
        }
Exemplo n.º 7
0
        public itemView <bool> SaveRosterEventItem(string version, string listId, int eventTypeId, Entity item)
        {
            DisableCaching();
            var result = new itemView <bool>();

            try
            {
                var service = new RosterDataService();
                var config  = new RosterConfigService();
                var list    = config.GetList(listId.ToGuid());
                var entity  = new RosterEvent
                {
                    Id                    = item.Key.ToGuid(),
                    EventTypeId           = eventTypeId,
                    RosterEventProperties = item.Fields.NamedToExpando()
                };
                if (!entity.RosterEventDictionary.ContainsKey("ContentTypeId"))
                {
                    entity.RosterEventDictionary.Add("ContentTypeId", 1);
                }
                if (!entity.RosterEventDictionary.ContainsKey("CreatedBy"))
                {
                    entity.RosterEventDictionary.Add("CreatedBy",
                                                     DbFieldUser.GetUserRosterId(SPContext.Current.Web.CurrentUser));
                }
                if (!entity.RosterEventDictionary.ContainsKey("Created"))
                {
                    entity.RosterEventDictionary.Add("Created", DateTime.Now);
                }
                if (!entity.RosterEventDictionary.ContainsKey("ModifiedBy"))
                {
                    entity.RosterEventDictionary.Add("ModifiedBy",
                                                     DbFieldUser.GetUserRosterId(SPContext.Current.Web.CurrentUser));
                }
                if (!entity.RosterEventDictionary.ContainsKey("Modified"))
                {
                    entity.RosterEventDictionary.Add("Modified", DateTime.Now);
                }
                if (!entity.RosterEventDictionary.ContainsKey("Id"))
                {
                    entity.RosterEventDictionary.Add("Id", entity.Id);
                }
                if (!entity.RosterEventDictionary.ContainsKey("RosterEventId"))
                {
                    entity.RosterEventDictionary.Add("RosterEventId", entity.Id);
                }
                var fields = list.ListMetadataFields.ToList();
                fields.ForEach(_ =>
                {
                    if (!entity.RosterEventDictionary.ContainsKey(_.InternalName))
                    {
                        if (_.ClrType == typeof(DateTime))
                        {
                            entity.RosterEventDictionary.Add(_.InternalName, null);
                        }
                        else if (_.ClrType == typeof(Guid))
                        {
                            entity.RosterEventDictionary.Add(_.InternalName, null);
                        }
                        else if (_.ClrType == typeof(Int32))
                        {
                            entity.RosterEventDictionary.Add(_.InternalName, null);
                        }
                        else
                        {
                            entity.RosterEventDictionary.Add(_.InternalName, _.ClrType.DefaultValue());
                        }
                    }
                });
                service.SaveRosterEvent(entity, list.Id);
                result.item = true;
            }
            catch (Exception ex)
            {
                //HandleException(ex);
                result.message.message      = ex.Message;
                result.message.messageLevel = messageLevelEnum.critical;
            }
            return(result);
        }
 internal static int GetEventType(RosterEvent item)
 {
     return(item.GetShPEventType());
 }
 private static SPTimeZone GetTimeZone(RosterEvent item, SPTimeZone localTZ)
 {
     return(localTZ);
 }
        private static IList <ExpandedRosterEvent> ExpandSeriesItem(RosterEvent masterItem, string beginFieldName, string endFieldName, DateTime localTimeRangeBegin, DateTime localTimeRangeEnd, SPTimeZone localTZ)
        {
            DateTime       time;
            DateTime       time2;
            RecurrenceRule rule               = new RecurrenceRule(masterItem.GetRecurrence());
            bool           isAllDayEvent      = masterItem.GetIsAllDayEvent();
            SPTimeZone     timeZone           = GetTimeZone(masterItem, localTZ);
            DateTime       dateTimeFieldValue = masterItem.GetStartDate();
            DateTime       rangeEnd           = masterItem.GetEndDate();

            RecurrenceTimeZoneConverter converter = new RecurrenceTimeZoneConverter(timeZone, localTZ, dateTimeFieldValue, rangeEnd);

            if (isAllDayEvent)
            {
                time  = dateTimeFieldValue;
                time2 = rangeEnd;
            }
            else
            {
                time  = converter.ToOriginal(dateTimeFieldValue);
                time2 = converter.ToOriginal(rangeEnd);
            }
            TimeSpan itemLength = CalculateItemLength(time, time2);
            DateTime rangeBegin = converter.ToOriginal(localTimeRangeBegin);
            DateTime time6      = converter.ToOriginal(localTimeRangeEnd);

            if (isAllDayEvent)
            {
                rangeBegin = localTimeRangeBegin;
                time6      = localTimeRangeEnd;
            }
            DateTime time7 = new DateTime(dateTimeFieldValue.Ticks) + itemLength;

            if (time7.Day != dateTimeFieldValue.Day)
            {
                rangeBegin = rangeBegin.AddDays(-1.0);
            }
            rangeBegin = ComputeExpandBegin(rangeBegin, time, rule);
            time6      = ComputeExpandEnd(time6, time, time2, rule, timeZone);

            List <ExpandedRosterEvent> list = new List <ExpandedRosterEvent>();
            DateTime date = rangeBegin.Date;

            while (true)
            {
                DateTime itemBegin = ComputeTargetBegin(date, time, rule);
                DateTime time10    = ComputeTargetEnd(itemBegin, itemLength);
                TimeSpan span2     = (TimeSpan)(time10 - itemBegin);
                bool     flag2     = span2.Ticks == 0L;
                if ((time6 < itemBegin) || ((time6 == itemBegin) && !flag2))
                {
                    return(list);
                }
                if (999 <= list.Count)
                {
                    return(list);
                }
                if (((rule.Type == RecurrenceRule.RecurrenceType.Daily) && rule.IsWeekday) && ((itemBegin.DayOfWeek == DayOfWeek.Saturday) || (itemBegin.DayOfWeek == DayOfWeek.Sunday)))
                {
                    date = IncrementDate(date, rule);
                }
                else if ((rule.Type == RecurrenceRule.RecurrenceType.Weekly) && !rule.DaysOfWeek.Contains(itemBegin.DayOfWeek))
                {
                    date = IncrementDate(date, rule);
                }
                else
                {
                    ExpandedRosterEvent item = null;
                    if ((rangeBegin < time10) || ((rangeBegin == time10) && (itemLength.Ticks == 0L)))
                    {
                        item = new ExpandedRosterEvent(masterItem, false, null);
                        if (isAllDayEvent)
                        {
                            item.StartDate = itemBegin;
                            item.EndDate   = time10;
                        }
                        else
                        {
                            item.StartDate = converter.ToLocal(itemBegin);
                            item.EndDate   = converter.ToLocal(time10);
                        }
                        //item["ID"] = str2;
                        item.InstanceID = GenerateRecurrenceItemId(masterItem.Id, item.StartDate, localTZ, isAllDayEvent);
                        if (999 > list.Count)
                        {
                            list.Add(item);
                        }
                    }
                    date = IncrementDate(date, rule);
                }
            }
        }
Exemplo n.º 11
0
        public static void FillFromRoster(this CreateTimeSheetLines line, RosterEvent roster, IEnumerable <DbField> timesheetFields, List <Roster.Presentation.Layouts.MapElem> mapping)
        {
            var rosterProps = roster.RosterEventDictionary;

            Func <Layouts.MapElem, IEnumerable <DbField>, string> getLookupValueFunc = delegate(Layouts.MapElem map, IEnumerable <DbField> fields) {
                string _val = string.Empty;
                if (map != null)
                {
                    string[] fldNameParts = map.FieldName.Split('$');
                    var      lookupFld    = fields.FirstOrDefault(fld => fld.InternalName == map.FieldName || fld.Id == fldNameParts[0].ToGuid()) as DbFieldLookup;
                    _val = (fldNameParts.Length == 2) ?
                           rosterProps[string.Format("{0}_{1}", lookupFld.ListId, fldNameParts[1])].ToSafeString() :
                           rosterProps[map.FieldName].ToSafeString();
                }
                return(_val);
            };

            // set Description
            var descrMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.Description));

            if (descrMap != null)
            {
                line.Description = rosterProps[descrMap.FieldName].ToSafeString();
            }

            // set Type
            var typeMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.Type));

            if (typeMap != null)
            {
                string rosterType = rosterProps[typeMap.FieldName].ToSafeString().XmlToList().FirstOrDefault();
                line.Type = EnumHelper.GetEnumByDescription <Roster.Presentation.Controls.NAVproxy.Type>(
                    string.IsNullOrEmpty(rosterType) ? "_blank_" : rosterType
                    );
                line.TypeSpecified = (line.Type != Roster.Presentation.Controls.NAVproxy.Type._blank_);
            }

            // set Resource_No
            var resNoMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.Resource_No));

            line.Resource_No = getLookupValueFunc(resNoMap, timesheetFields);

            // set Job_No
            var jobNoMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.Job_No));

            line.Job_No = getLookupValueFunc(jobNoMap, timesheetFields);

            // set Job_Task_No
            var jobTaskNoMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.Job_Task_No));

            line.Job_Task_No = getLookupValueFunc(jobTaskNoMap, timesheetFields);

            // set Cause_of_Absence_Code
            var coaCoMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.Cause_of_Absence_Code));

            line.Cause_of_Absence_Code = getLookupValueFunc(coaCoMap, timesheetFields);

            // set Work_Type_Code
            var workTypeMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.Work_Type_Code));

            line.Work_Type_Code = getLookupValueFunc(workTypeMap, timesheetFields);

            // set Chargeable
            var chargMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.Chargeable));

            if (chargMap != null)
            {
                line.Chargeable          = rosterProps[chargMap.FieldName].ToBoolean();
                line.ChargeableSpecified = true;
            }

            // set Non_Roster_Day
            var nonRosMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.Non_Roster_Day));

            if (nonRosMap != null)
            {
                line.Non_Roster_Day          = rosterProps[nonRosMap.FieldName].ToBoolean();
                line.Non_Roster_DaySpecified = true;
            }

            // set Start_Time
            var startMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.Start_Time));

            if (startMap != null)
            {
                line.Start_Time          = (DateTime)rosterProps[startMap.FieldName];
                line.Start_TimeSpecified = true;
            }

            // set End_Time
            var endMap = mapping.FirstOrDefault(m => m.WebParam == EnumHelper.GetEnumDescription(CreateTimeSheetLines_Fields.End_Time));

            if (endMap != null)
            {
                line.End_Time          = (DateTime)rosterProps[endMap.FieldName];
                line.End_TimeSpecified = true;
            }

            // QTY1-7
            DateTime rosterStartDate = (DateTime)rosterProps[FieldNames.START_DATE];
            DateTime rosterEndDate   = (DateTime)rosterProps[FieldNames.END_DATE];
            double   qty             = Math.Round((rosterEndDate - rosterStartDate).TotalHours, 2, MidpointRounding.AwayFromZero);
            int      qtyIndex        = (rosterStartDate - line.Time_Sheet_Starting_Date).Days + 1;

            switch (qtyIndex)
            {
            case 1:
                line.Qty1 = (decimal)qty; line.Qty1Specified = true; break;

            case 2:
                line.Qty2 = (decimal)qty; line.Qty2Specified = true; break;

            case 3:
                line.Qty3 = (decimal)qty; line.Qty3Specified = true; break;

            case 4:
                line.Qty4 = (decimal)qty; line.Qty4Specified = true; break;

            case 5:
                line.Qty5 = (decimal)qty; line.Qty5Specified = true; break;

            case 6:
                line.Qty6 = (decimal)qty; line.Qty6Specified = true; break;

            case 7:
                line.Qty7 = (decimal)qty; line.Qty7Specified = true; break;

            default:
                break;
            }

            // -------------------------
            // You need to set Specified = true before your initial call to Create.
            // The same goes for all value types – if you don’t set Specified to true, then the value doesn’t get transferred to NAV Web Services,
            // this is a behavior of the proxy classes generated by Visual Studio.
            // When you get the record back from NAV – all value type fields will have their corresponding Specified field set to true and thus you can modify and send it back.
            // -------------------------
        }
Exemplo n.º 12
0
 public static int GetShPEventType(this RosterEvent rEvent)
 {
     return(1);
 }
Exemplo n.º 13
0
 public static bool GetIsRecurrence(this RosterEvent rEvent)
 {
     return(!string.IsNullOrEmpty(rEvent.GetRecurrence()));
 }