public void SetUp() { var stats = new List <PtlStat> { new PtlStat { PtlPriority = 1, WorkingDays = 0m, BuildGroup = "CP" }, new PtlStat { PtlPriority = 1, WorkingDays = 1m, BuildGroup = "CP" }, new PtlStat { PtlPriority = 1, WorkingDays = 2m, BuildGroup = "CP" }, new PtlStat { PtlPriority = 1, WorkingDays = 4m, BuildGroup = "CP" }, new PtlStat { PtlPriority = 1, WorkingDays = 8m, BuildGroup = "CP" } }; this.Sut = new PtlStatPrioritySummary(1); foreach (var stat in stats) { this.Sut.AddStatToSummary(stat); } }
public ResultsModel GetDeliveryPerformanceByPriority(string citCode) { var dates = this.GetDefaultDateRange(); var stats = this.ptlStatRepository.FilterBy(s => s.CitCode == citCode && s.DateCompleted >= dates.fromDate && s.DateCompleted <= dates.toDate).ToList(); var targetDays = stats.FirstOrDefault()?.TargetDays(); var model = new ResultsModel(); model.ReportTitle = new NameModel($"Production Delivery Performance {dates.fromDate.ToString("dd-MMM-yy")} - {dates.toDate.ToString("dd-MMM-yy")}"); model.AddColumn("priority", "Priority"); model.AddColumn("triggers", "Triggers"); model.AddColumn("avgTurnaround", "Avg Turnaround"); model.AddColumn("95Percentile", "95% Percentile"); model.AddColumn("1day", "1 Day"); model.AddColumn("2day", "2 Day"); model.AddColumn("3day", "3 Day"); model.AddColumn("4day", "4 Day"); model.AddColumn("5day", "5 Day"); model.AddColumn("percByTargetDays", $"% by {targetDays} days"); model.AddColumn("gt5day", "> 5 Day"); var priorities = stats.Select(s => s.PtlPriority).Distinct().OrderBy(s => s); foreach (var priority in priorities) { var summary = new PtlStatPrioritySummary(priority); var priorityStats = stats.Where(s => s.PtlPriority == priority).OrderBy(s => s.WorkingDays); var perc95count = priorityStats.Count() * 0.95; foreach (var statistic in priorityStats) { summary.AddStatToSummary(statistic); // TODO discover better way of doing 95% percentile as not too many internet answers if (summary.Triggers <= perc95count) { summary.Percentile95 = statistic.WorkingDays; } } var row = model.AddRow(summary.Priority.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("priority"), summary.Priority.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("triggers"), summary.Triggers.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("avgTurnaround"), summary.AvgTurnaround().ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("95Percentile"), summary.Percentile95.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("1day"), summary.OneDay.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("2day"), summary.TwoDay.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("3day"), summary.ThreeDay.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("4day"), summary.FourDay.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("5day"), summary.FiveDay.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("percByTargetDays"), summary.PercByTargetDays().ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("gt5day"), summary.Gt5Day.ToString()); } model.ValueDrillDownTemplates.Add( new DrillDownModel( "Triggers", "/production/reports/delperf/details?citCode=" + citCode + "&priority={rowId}", null, model.ColumnIndex("triggers"))); return(model); }