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)); }