public string GetProjectionsSummaryText(BoardProjections projections) { var template = "Team Velocity is <strong>[[velocity]]</strong> points per week. Incomplete estimated points are <strong>[[remaining_points]]</strong>. Expected completion window is <strong>[[expected_completion_min]] - [[expected_completion_max]]</strong>."; template = template.Replace("[[velocity]]", projections.historicalPointsPerWeek.ToString("##")) .Replace("[[remaining_points]]", projections.EstimatePoints.ToString()) .Replace("[[expected_completion_min]]", projections.ProjectedMinimumCompletionDate.ToLongDateString()) .Replace("[[expected_completion_max]]", projections.ProjectedMaximumCompletionDate.ToLongDateString()); return template; }
private BoardProjections BuildBoardProjection(BoardStatsAnalysis boardStatsAnalysis, double estimatedPoints) { var totalDonePoints = boardStatsAnalysis.TotalPoints; var elapsedWeeks = boardStatsAnalysis.CompletedWeeksElapsed - _configuration.WeeksToSkipForVelocityCalculation; var historicalPointsPerWeek = totalDonePoints / elapsedWeeks; var projectedWeeksToComplete = estimatedPoints / historicalPointsPerWeek; var projectedWeeksMin = projectedWeeksToComplete * _configuration.TrelloProjectionsEstimateWindowLowerBoundFactor; var projectedWeeksMax = projectedWeeksToComplete * _configuration.TrelloProjectionsEstimateWindowUpperBoundFactor; var projection = new BoardProjections() { EstimatePoints = estimatedPoints, TotalPointsCompleted = totalDonePoints, elapsedWeeks = elapsedWeeks, historicalPointsPerWeek = historicalPointsPerWeek, ProjectedWeeksToCompletion = projectedWeeksToComplete, ProjectionCompletionDate = GetCompletionDate(projectedWeeksToComplete), ProjectedMinimumCompletionDate = GetCompletionDate(projectedWeeksMin), ProjectedMaximumCompletionDate = GetCompletionDate(projectedWeeksMax) }; return projection; }
private void AddProjectionsSeries(BoardProjections projections, dynamic burndownSeries) { burndownSeries.projectionSeriesBestCase = GetCompletionProjectionSeries("Best Case", projections.EstimatePoints, projections.ProjectedMinimumCompletionDate); burndownSeries.projectionSeriesWorstCase = GetCompletionProjectionSeries("Worst Case", projections.EstimatePoints, projections.ProjectedMaximumCompletionDate); burndownSeries.projectionSeriesIdeal = GetCompletionProjectionSeries("Ideal", projections.EstimatePoints, projections.ProjectionCompletionDate); }