private IEnumerable <BurndownNode> GetMetricNodes(Sprint latestSprint, IReadOnlyCollection <Card> sprintCards) { var today = Calendar.GetCurrentUtcDateTime(); var iterationDay = latestSprint.BeginsAt; while (latestSprint.ContainsDate(iterationDay) && iterationDay <= today) { yield return(new BurndownNode( iterationDay, sprintCards.Count(card => !card.ClosedAt.HasValue || card.ClosedAt > iterationDay))); iterationDay = iterationDay.AddDays(1); } }
public IEnumerable <Sprint> GetProjectSprints(int projectId) { var project = GetProject(projectId); var iterationSprntBeginingDay = project.BeginSprintsAt; var today = Calendar.GetCurrentUtcDateTime(); while (iterationSprntBeginingDay <= today) { yield return(new Sprint( id: iterationSprntBeginingDay.DayOfYear, beginAt: iterationSprntBeginingDay, length: project.SprintLength)); iterationSprntBeginingDay = iterationSprntBeginingDay.AddDays(project.SprintLength); } }
private IEnumerable <VelocityNode> GetMetricNodes( Sprint latestSprint, IReadOnlyCollection <Swimlane> swimlanes, IReadOnlyCollection <Card> sprintCards) { var today = Calendar.GetCurrentUtcDateTime(); var iterationDay = latestSprint.BeginsAt; while (latestSprint.ContainsDate(iterationDay) && iterationDay <= today) { yield return(new VelocityNode( iterationDay, swimlanes.ToDictionary( keySelector: swimlane => swimlane, elementSelector: swimlane => sprintCards .Where(card => card.ClosedAt <= iterationDay) .Count(card => card.Labels.Contains(swimlane.MappedAlias))))); iterationDay = iterationDay.AddDays(1); } }