예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
        }