Example #1
0
        public async Task <WorkItemListApiResponse> GetWorkItemList(
            DateTime?asOf = null,
            IEnumerable <string> fields = null,
            params long[] workItemIds)
        {
            if (!workItemIds.Any())
            {
                return new WorkItemListApiResponse
                       {
                           Value = new List <WorkItemApiResponse>(0)
                       }
            }
            ;

            var fieldsList = fields?.ToList() ?? new List <string>(0);

            var pagedWorkItemIds = GetPagedWorkItemIds(workItemIds).ToList();

            var tasks =
                pagedWorkItemIds.Select(async x => await GetWorkItemListInternal(asOf, fieldsList, x)).ToList();

            await Task.WhenAll(tasks);

            var results = tasks.Select(x => x.Result).ToList();

            var model = new WorkItemListApiResponse();

            var values = results.SelectMany(x => x.Value).ToList();

            model.Value = new ReadOnlyCollection <WorkItemApiResponse>(values);

            return(model);
        }
Example #2
0
        public Iteration(
            WorkItemListApiResponse workItems,
            IReadOnlyCollection <TeamMemberApiResponse> teamMembers,
            IterationApiResponse iteration,
            IterationCapacityListApiResponse capacities,
            bool isBacklog)
        {
            if (workItems == null)
            {
                throw new ArgumentNullException(nameof(workItems));
            }
            if (teamMembers == null)
            {
                throw new ArgumentNullException(nameof(teamMembers));
            }
            if (iteration == null)
            {
                throw new ArgumentNullException(nameof(iteration));
            }

            IsBacklog = isBacklog;

            IterationId         = iteration.Id;
            IterationName       = iteration.Name;
            IterationPath       = iteration.Path;
            IterationStartDate  = iteration.Attributes?.StartDate;
            IterationFinishDate = iteration.Attributes?.FinishDate;

            IterationDayCount = IterationStartDate != null && IterationFinishDate != null
                ? (IterationFinishDate.Value - IterationStartDate.Value)
                                .TotalDays + 1
                : 0;

            var items =
                workItems.Value.Select(x => new WorkItem(x, teamMembers))
                .OrderBy(x => x.BacklogPriority)
                .ToList();

            foreach (var item in items)
            {
                var parent = item.ParentId > 0 ? items.FirstOrDefault(x => x.Id == item.ParentId) : null;

                if (parent != null)
                {
                    parent.ChildItems.Add(item);
                }
                else
                {
                    Items.Add(item);
                }
            }

            //this.Items = this.Items.Where(x => x.IsTypeProductBacklogItem || x.IsTypeBug || x.IsTypeTask).ToList();

            Items =
                Items.OrderByDescending(x => x.BacklogPriority > 0).ThenBy(x => x.BacklogPriority).ToList();

            Items.ToList().ForEach(x => x.IsTopLevel = true);

            if (capacities != null)
            {
                var groupedCapacities = from capacity in capacities.Value
                                        //from activity in capacity.Activities
                                        //from daysOff in capacity.DaysOff
                                        group capacity by capacity.TeamMember.Id
                                        into g
                                        select new
                {
                    TeamMember = g.Select(x => x.TeamMember).First(),
                    Activities = g.SelectMany(x => x.Activities),
                    DaysOff    = g.SelectMany(x => x.DaysOff)
                };

                Capacities =
                    groupedCapacities.Select(x => new Capacity(x.TeamMember, x.Activities, x.DaysOff))
                    .ToList();
            }
        }