Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
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);
        }