示例#1
0
        public static TeamMemberCapacity Default(Guid memberId, TeamCapacity teamCapacity)
        {
            if (teamCapacity == null)
            {
                throw new ArgumentNullException(nameof(teamCapacity));
            }

            return(new TeamMemberCapacity(
                       memberId,
                       Enumerable.Empty <double>(),
                       Enumerable.Empty <DateTime>(),
                       teamCapacity.IterationWorkDays,
                       teamCapacity.TeamDaysOff));
        }
        private static IEnumerable <KeyValuePair <DateTime, double?> > GetWorkIterationDoneEffortsPerDayInternal(
            TeamCapacity teamCapacity,
            ICollection <WorkItem> workIterationItems)
        {
            foreach (var workDay in teamCapacity.IterationWorkDays)
            {
                var isWorkDay     = !teamCapacity.TeamDaysOff.Contains(workDay);
                var isPastWorkDay = isWorkDay && workDay <= DateTime.UtcNow.Date;

                var doneWorkIterationItems = workIterationItems
                                             .Where(x =>
                                                    x.IsStateDone && x.Effort > 0 &&
                                                    (x.ClosedDate ?? x.ChangedDate ?? DateTime.MaxValue).Date <= workDay.Date)
                                             .ToList();

                var doneEffortSum = isPastWorkDay
                    ? (doneWorkIterationItems.Any() ? doneWorkIterationItems.Sum(x => x.Effort) : 0)
                    : (double?)null;
                yield return(new KeyValuePair <DateTime, double?>(workDay, doneEffortSum));
            }
        }
        public async Task <IReadOnlyDictionary <DateTime, double?> > GetWorkIterationDoneEffortsPerDay(
            string projectId,
            string teamId,
            string iterationId)
        {
            var workIterationItemsTask = GetWorkIteration(projectId, teamId, iterationId);
            var iterationTask          = _iterationsApi.Get(projectId, teamId, iterationId);
            var teamDaysOffTask        = _iterationsApi.GetTeamDaysOff(projectId, teamId, iterationId);

            await Task.WhenAll(workIterationItemsTask, iterationTask);

            var iteration          = iterationTask.Result;
            var teamDaysOff        = teamDaysOffTask.Result;
            var workIterationItems = workIterationItemsTask.Result.Items;

            var teamCapacity = new TeamCapacity(iteration, teamDaysOff);

            var doneEffortsPerDay = GetWorkIterationDoneEffortsPerDayInternal(teamCapacity, workIterationItems)
                                    .ToDictionary(x => x.Key, x => x.Value);

            return(new ReadOnlyDictionary <DateTime, double?>(doneEffortsPerDay));
        }