Example #1
0
        private List <VersionDetails> _getDataSource()
        {
            var versions    = new List <VersionDetails>();
            var dataService = new RosterDataService();
            var rosterEvent = dataService.GetRosterEvent(this.ItemId.Value);
            var listId      = ListId.HasValue ? ListId.Value :
                              (rosterEvent.EventTypeId == 0) ? TableIDs.PLANNED_ROSTERS : TableIDs.WORKING_ROSTERS;
            var allListFields = new RosterConfigService().GetList(listId).ListMetadataFields.Select(fld => fld.GetDbField());
            // get history items
            var historyInfo = dataService.ListTrackData(this.ItemId.Value);

            string[] excludeFields = new string[] { FieldNames.ID, FieldNames.ROSTER_EVENT_ID,
                                                    FieldNames.CONTENT_TYPE_ID, FieldNames.MODIFIED, FieldNames.MODIFIED_BY };
            for (int k = 0; k < historyInfo.Count; k++)
            {
                var currentVersionTrackData = historyInfo[k].TrackDataDictionary;
                var fldModifiedByText       = string.Empty;
                var fldModifiedBy           = allListFields.FirstOrDefault(f => f.InternalName.Equals(FieldNames.MODIFIED_BY));
                if (fldModifiedBy != null)
                {
                    if (currentVersionTrackData.ContainsKey(FieldNames.MODIFIED_BY))
                    {
                        fldModifiedByText = fldModifiedBy.GetFieldValueAsText(currentVersionTrackData[FieldNames.MODIFIED_BY]);
                    }
                }
                var vd = new VersionDetails(historyInfo[k], fldModifiedByText);
                if (k == historyInfo.Count - 1)
                {
                    foreach (string fldName in currentVersionTrackData.Keys.Where(ke => !excludeFields.Contains(ke)))
                    {
                        var fld = allListFields.FirstOrDefault(f => f.InternalName.Equals(fldName));
                        if (fld == null)
                        {
                            continue;
                        }
                        vd.Changes.Add(new ChangeInfo
                        {
                            FieldName  = fld.DisplayName,
                            FieldValue = fld.GetFieldValueAsText(currentVersionTrackData[fldName])
                        });
                    }
                }
                else
                {
                    var prevVersionTrackData = historyInfo[k + 1].TrackDataDictionary;
                    foreach (string fldName in currentVersionTrackData.Keys.Where(ke => !excludeFields.Contains(ke)))
                    {
                        if (!prevVersionTrackData.ContainsKey(fldName) || (prevVersionTrackData.ContainsKey(fldName) &&
                                                                           prevVersionTrackData.GetValue(fldName).ToSafeString() != currentVersionTrackData[fldName].ToSafeString()))
                        {
                            var fld = allListFields.FirstOrDefault(f => f.InternalName.Equals(fldName));
                            if (fld == null)
                            {
                                continue;
                            }
                            vd.Changes.Add(new ChangeInfo
                            {
                                FieldName  = fld.DisplayName,
                                FieldValue = fld.GetFieldValueAsText(currentVersionTrackData[fldName])
                            });
                        }
                    }
                }
                if (vd.Changes.Count() == 0)
                {
                    vd.Changes.Add(new ChangeInfo {
                        FieldName = "No changes", FieldValue = string.Empty
                    });
                }
                versions.Add(vd);
            }
            return(versions);
        }