public ResultsModel GetDeliveryPerformanceDetail(string citCode, int priority) { var dates = this.GetDefaultDateRange(); var stats = this.ptlStatRepository.FilterBy(s => s.CitCode == citCode && s.PtlPriority == priority && s.DateCompleted >= dates.fromDate && s.DateCompleted <= dates.toDate).ToList(); var model = new ResultsModel(); model.ReportTitle = new NameModel($"Production Delivery Performance {dates.fromDate.ToString("dd-MMM-yy")} - {dates.toDate.ToString("dd-MMM-yy")} Priority {priority} Cit {citCode}"); model.AddColumn("workingDays", "Working Days"); model.AddColumn("partNumber", "Part Number"); model.AddColumn("triggerDate", "Trigger Date"); model.AddColumn("dateCompleted", "dateCompleted"); model.AddColumn("triggerId", "Trigger Id"); foreach (var stat in stats.OrderByDescending(s => s.WorkingDays)) { var row = model.AddRow(stat.TriggerId.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("workingDays"), stat.WorkingDays.ToString("##0.0")); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("partNumber"), stat.PartNumber); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("triggerDate"), stat.TriggerDate?.ToString("dd-MMM-yy")); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("dateCompleted"), stat.DateCompleted?.ToString("dd-MMM-yy")); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("triggerId"), stat.TriggerId.ToString()); } var priorities = stats.Select(s => s.PtlPriority).Distinct().OrderBy(s => s); return(model); }
public ResultsModel WhoBuiltWhatDetails(string fromDate, string toDate, int userNumber) { var from = DateTime.Parse(fromDate); var to = DateTime.Parse(toDate); var results = this.repository .FilterBy(a => a.CreatedBy == userNumber && a.SernosDate >= from && a.SernosDate <= to).ToList(); var model = new ResultsModel(); model.AddColumn("articleNumber", "Article Number"); model.AddColumn("sernosNumber", "Serial Number"); model.AddColumn("sernosDate", "Date Built"); model.ReportTitle = new NameModel( $"Products built by {results.First().UserName} between {from.ToString("dd-MMM-yyyy")} and {to.ToString("dd-MMM-yyyy")}"); model.RowHeader = "Part Number Built"; foreach (var wbw in results.OrderBy(a => a.ArticleNumber).ThenBy(b => b.SernosNumber)) { var row = model.AddRow(wbw.SernosNumber.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("articleNumber"), wbw.ArticleNumber); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("sernosNumber"), wbw.SernosNumber.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("sernosDate"), wbw.SernosDate?.ToString("dd-MMM-yyyy")); } return(model); }
public ResultsModel GetBuiltThisWeekReport(string citCode) { var results = this.builtThisWeekStatisticRepository.FilterBy(c => c.CitCode == citCode).ToList(); var model = new ResultsModel { ReportTitle = new NameModel("Built this Week Detail") }; model.AddColumn("partNumber", "Part Number"); model.AddColumn("description", "Description"); model.AddColumn("builtThisWeek", "Built This Week"); model.AddColumn("value", "Value"); model.AddColumn("days", "Days"); model.RowHeader = results.FirstOrDefault()?.CitName; foreach (var statistic in results) { var row = model.AddRow(statistic.PartNumber); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("partNumber"), statistic.PartNumber); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("description"), statistic.Description); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("builtThisWeek"), statistic.BuiltThisWeek.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("value"), statistic.Value.ToString()); model.SetGridTextValue(row.RowIndex, model.ColumnIndex("days"), statistic.Days.ToString()); } return(model); }
public ResultsModel GetSalesProductByRangeReport(int productRangeId, bool includePhasedOut = false) { var salesProducts = this.salesProductRepository.GetSalesProducts(); salesProducts = salesProducts.Where(s => s.ProductRange?.Id == productRangeId); if (!includePhasedOut) { salesProducts = salesProducts.Where(p => p.PhasedOutOn == null); } var results = new ResultsModel(new[] { "Name", "Description" }) { RowHeader = "Id", ReportTitle = new NameModel("Sales Products") }; results.SetColumnType(0, GridDisplayType.TextValue); results.SetColumnType(1, GridDisplayType.TextValue); if (includePhasedOut) { results.AddColumn("Phased Out On"); results.SetColumnType(2, GridDisplayType.TextValue); } foreach (var salesProduct in salesProducts.OrderBy(a => a.Name)) { var row = results.AddRow(salesProduct.Id.ToString()); results.SetGridTextValue(row.RowIndex, 0, salesProduct.Name); results.SetGridTextValue(row.RowIndex, 1, salesProduct.Description); if (includePhasedOut) { results.SetGridTextValue(row.RowIndex, 2, salesProduct.PhasedOutOn?.ToShortDateString()); } } results.ValueDrillDownTemplates.Add( new DrillDownModel( "details", $"/products/sales-products/{{rowId}}", null, 0)); return(results); }
public ResultsModel GetProductRangeReport(bool includePhasedOut = false) { var productRanges = this.productRangeRepository.GetProductRanges(); if (!includePhasedOut) { productRanges = productRanges.Where(p => p.PhasedOutOn == null); } var results = new ResultsModel(new[] { "Name", "Description" }) { RowHeader = "Id", ReportTitle = new NameModel("Product Ranges") }; results.SetColumnType(0, GridDisplayType.TextValue); results.SetColumnType(1, GridDisplayType.TextValue); if (includePhasedOut) { results.AddColumn("Phased Out On"); results.SetColumnType(2, GridDisplayType.TextValue); } foreach (var productRange in productRanges.OrderBy(a => a.Name)) { var row = results.AddRow(productRange.Id.ToString()); results.SetGridTextValue(row.RowIndex, 0, productRange.Name); results.SetGridTextValue(row.RowIndex, 1, productRange.Description); if (includePhasedOut) { results.SetGridTextValue(row.RowIndex, 2, productRange.PhasedOutOn?.ToShortDateString()); } } results.ValueDrillDownTemplates.Add( new DrillDownModel( "sales-products", $"/products/reports/sales-products-by-product-range?productRangeId={{rowId}}&productRangeName={{textValue}}&includePhasedOut={includePhasedOut.ToString().ToLowerInvariant()}", null, 0)); return(results); }
public IEnumerable <ResultsModel> WhoBuiltWhat(string fromDate, string toDate, string citCode) { var from = DateTime.Parse(fromDate); var to = DateTime.Parse(toDate); var results = this.repository .FilterBy(a => a.CitCode == citCode && a.SernosDate >= from && a.SernosDate <= to).ToList(); var returnResults = new List <ResultsModel>(); var displaySequence = 0; foreach (var user in results.GroupBy(a => new { a.CreatedBy, a.UserName }).OrderBy(b => b.Key.UserName)) { var model = new ResultsModel(); model.AddColumn("qty", "Qty Built"); model.ReportTitle = new NameModel(user.Key.UserName) { DrillDownList = new List <DrillDownModel> { new DrillDownModel( "Details", $"/production/reports/who-built-what-details?userNumber={user.Key.CreatedBy}&fromDate={fromDate}&toDate={toDate}&citCode={citCode}") } }; model.RowHeader = "Part Number Built"; model.DisplaySequence = displaySequence++; var values = results .Where(a => a.CreatedBy == user.Key.CreatedBy) .Select(whoBuiltWhat => new CalculationValueModel { Quantity = whoBuiltWhat.QtyBuilt, RowId = whoBuiltWhat.ArticleNumber, ColumnId = "qty" }).ToList(); this.helper.AddResultsToModel(model, values, CalculationValueModelType.Quantity, true); returnResults.Add(model); } return(returnResults); }
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); }