public ExpandedRosterEvent(RosterEvent item, bool withInit, SPTimeZone timeZone) { this.m_item = item; this.EventTypeId = this.m_item.EventTypeId; if (withInit) { this.InitNonRecurrenceExpandedRoster(timeZone); } }
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)); }
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); }
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); }
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); } } }
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. // ------------------------- }
public static int GetShPEventType(this RosterEvent rEvent) { return(1); }
public static bool GetIsRecurrence(this RosterEvent rEvent) { return(!string.IsNullOrEmpty(rEvent.GetRecurrence())); }