Exemplo n.º 1
0
 private static int CompareWorkItemByDate(NtWorkItem x, NtWorkItem y)
 {
     if (x == null)
     {
         if (y == null)
         {
             // If x is null and y is null, they're
             // equal.
             return(0);
         }
         else
         {
             // If x is null and y is not null, y
             // is greater.
             return(-1);
         }
     }
     else
     {
         // If x is not null...
         //
         if (y == null)
         // ...and y is null, x is greater.
         {
             return(1);
         }
         else
         {
             var xDate = DateTime.Parse(x.ClosedDate);
             var yDate = DateTime.Parse(y.ClosedDate);
             return(xDate.CompareTo(yDate));
         }
     }
 }
Exemplo n.º 2
0
        private static List <NtWorkItem> GetNtWorkItems(IEnumerable <WorkItemLink> workItemLinks, WorkItemTrackingHttpClientBase witClient,
                                                        WorkItemQueryResult workItemQueryResult, string teamProjectName, IReadOnlyCollection <TeamSettingsIteration> iterations, DateTime starDate, DateTime endDate)
        {
            var fields        = FIELDS;
            var allIds        = new List <int>();
            var epicIds       = new List <int>();
            var miscParentTag = new Dictionary <int, string>();
            var reverseIdDict = new Dictionary <int, bool>();
            var idDict        = new Dictionary <int, int?>();
            var categoryDict  = new Dictionary <int, string>();

            foreach (var workItemLink in workItemLinks)
            {
                allIds.Add(workItemLink.Target.Id);
                if (!workItemLink.Rel.IsNullOrEmpty())
                {
                    reverseIdDict[workItemLink.Source.Id] = true;
                    idDict[workItemLink.Target.Id]        = workItemLink.Source.Id;
                    continue;
                }
                idDict.Add(workItemLink.Target.Id, null);
                epicIds.Add(workItemLink.Target.Id);
            }
            var epicWorkItems = witClient.GetWorkItemsAsync(epicIds, fields, workItemQueryResult.AsOf).Result;

            foreach (var epicWorkItem in epicWorkItems)
            {
                var id = int.Parse(epicWorkItem.Fields["System.Id"].ToString());

                var title = "MISC";
                var tags  = epicWorkItem.Fields.ContainsKey("System.Tags") ? epicWorkItem.Fields["System.Tags"]?.ToString().Trim() : string.Empty;
                if (epicWorkItem.Fields["System.WorkItemType"].ToString().ToLower().Equals("epic"))
                {
                    title = epicWorkItem.Fields["System.Title"].ToString();
                }
                else if (!string.IsNullOrEmpty(tags))
                {
                    if (tags == NtInsight)
                    {
                        title = NtInsight;
                    }
                    miscParentTag.Add(id, tags);
                }
                categoryDict.Add(id, title);
            }

            var taskIds = new List <int>();

            foreach (var id in allIds)
            {
                if (reverseIdDict.ContainsKey(id))
                {
                    continue;
                }
                taskIds.Add(id);
                var refId = id;
                while (idDict[refId].HasValue)
                {
                    refId = idDict[refId].Value;
                }
                categoryDict[id] = categoryDict[refId];

                if (!miscParentTag.ContainsKey(refId))
                {
                    continue;
                }
                miscParentTag[id] = miscParentTag[refId];
            }

            var       skip = 0;
            const int take = 100;

            var ntWorkItems = new List <NtWorkItem>();

            int[] curTaskIds;
            do
            {
                curTaskIds = taskIds.Skip(skip).Take(take).ToArray();
                if (curTaskIds.Length == 0)
                {
                    break;
                }
                var taskWorkItems = witClient.GetWorkItemsAsync(curTaskIds, fields, workItemQueryResult.AsOf).Result;

                foreach (var taskWorkItem in taskWorkItems)
                {
                    var    id           = int.Parse(taskWorkItem.Fields["System.Id"].ToString());
                    string workItemType = null;
                    if (taskWorkItem.Fields.ContainsKey("System.WorkItemType"))
                    {
                        workItemType = taskWorkItem.Fields["System.WorkItemType"].ToString();
                    }
                    string activity = null;
                    if (taskWorkItem.Fields.ContainsKey("Microsoft.VSTS.Common.Activity"))
                    {
                        activity = taskWorkItem.Fields["Microsoft.VSTS.Common.Activity"].ToString();
                    }
                    var    title      = taskWorkItem.Fields["System.Title"].ToString();
                    string assignedTo = null;
                    if (taskWorkItem.Fields.ContainsKey("System.AssignedTo"))
                    {
                        assignedTo = taskWorkItem.Fields["System.AssignedTo"].ToString();
                    }
                    var      state            = taskWorkItem.Fields["System.State"].ToString();
                    string   closedDateString = null;
                    DateTime?closedDate       = null;
                    if (taskWorkItem.Fields.ContainsKey("Microsoft.VSTS.Common.ClosedDate"))
                    {
                        closedDate       = DateTime.Parse(taskWorkItem.Fields["Microsoft.VSTS.Common.ClosedDate"].ToString());
                        closedDateString = closedDate.Value.ToString("yyyy MMMM dd");
                    }
                    string iterationPath = null;
                    if (taskWorkItem.Fields.ContainsKey("System.IterationPath"))
                    {
                        iterationPath = taskWorkItem.Fields["System.IterationPath"].ToString();
                        var iteration = iterations
                                        .FirstOrDefault(i => i.Path.Trim().Equals(iterationPath.Trim()));

                        if (closedDate.HasValue && iteration?.Attributes.StartDate != null && iteration.Attributes.FinishDate.HasValue)
                        {
                            if (closedDate.Value.CompareTo(iteration.Attributes.StartDate) >= 0 &&
                                closedDate.Value.CompareTo(iteration.Attributes.FinishDate) <= 0)
                            {
                                //correct case
                            }
                            else
                            {
                                closedDate = iteration.Attributes.FinishDate;
                            }

                            closedDateString = closedDate.Value.ToString("yyyy MMMM dd");
                        }
                    }
                    string areaPath = null;
                    if (taskWorkItem.Fields.ContainsKey("System.AreaPath"))
                    {
                        areaPath = taskWorkItem.Fields["System.AreaPath"].ToString();
                    }
                    double?duration = null;
                    if (taskWorkItem.Fields.ContainsKey("Nt.Duration"))
                    {
                        duration = double.Parse(taskWorkItem.Fields["Nt.Duration"].ToString());
                    }
                    var product    = categoryDict[id];
                    var ntWorkItem = new NtWorkItem
                    {
                        Id            = id,
                        WorkItemType  = workItemType,
                        Activity      = activity,
                        Title         = title,
                        AssignedTo    = assignedTo,
                        State         = state,
                        IterationPath = iterationPath,
                        ClosedDate    = closedDateString,
                        AreaPath      = areaPath,
                        Duration      = duration,
                        Product       = product,
                        TeamProject   = teamProjectName,
                        ParentTags    = miscParentTag.ContainsKey(id) ? miscParentTag[id] : string.Empty
                    };
                    ntWorkItems.Add(ntWorkItem);
                }

                skip += take;
            } while (curTaskIds.Count() == take);
            return(ntWorkItems);
        }