private List <ControlChartData> GetViscoChartData(List <BatchReport> reports)
        {
            List <ControlChartData> output = new List <ControlChartData>();
            var BatchesGroupedByRecipeType = BatchHelperMethods.GroupBatchesByRecipeType(reports);

            foreach (var recipeType in BatchesGroupedByRecipeType.Keys)
            {
                List <decimal> values      = new List <decimal>();
                List <string>  xAxisLabels = new List <string>();

                foreach (var report in BatchesGroupedByRecipeType[recipeType].OrderBy(x => x.StartTime.Date).ThenBy(x => x.StartTime.TimeOfDay))
                {
                    values.Add(Convert.ToDecimal(report.Visco));
                    xAxisLabels.Add($"{report.Campaign}-{report.BatchNo}");
                }
                RecipeLimits limits = _recipeLimitRepository.GetLimitInfo(recipeType, LimitType.Visco);

                ControlChartData data = new ControlChartData
                {
                    Target      = limits.Target,
                    Max         = limits.Max,
                    Min         = limits.Min,
                    Values      = values,
                    XAxisLabels = xAxisLabels,
                    SeriesName  = "Visco cP",
                    Title       = $"Viscos Of {ChangeRecipeTypeNameForDemo(recipeType)} batches",
                    YAxisSuffix = "cP",
                    ChartId     = recipeType.ToString()
                };
                data.ProcessCpkValues();
                output.Add(data);
                _xLCreator.AddToWorkBook <decimal>($"Visco-{recipeType}", values, data.Min, data.Max);
            }
            return(output);
        }
        public IViewComponentResult Invoke(RecipeTypes recipeType, string title, double value, LimitType limitType, int height, int width)
        {
            CreateGuageViewModel guageViewModel = new CreateGuageViewModel()
            {
                ActualValue = value,
                Title       = title,
                RecipeLimit = _RecipeLimitRepository.GetLimitInfo(recipeType, limitType),
                Height      = height,
                Width       = width
            };

            return(View(guageViewModel));
        }
        public IActionResult ViewSingleBatch(int batchId)
        {
            BatchReport report = _BatchRepository.GetBatchById(batchId);

            SingleBatchViewModel singleBatchViewModel = new SingleBatchViewModel
            {
                Report = report
            };

            singleBatchViewModel.RecipeViscoLimits = _recipeLimitRepository.GetLimitInfo(report.RecipeType, LimitType.Visco);
            singleBatchViewModel.BatchTimeLimits   = _recipeLimitRepository.GetLimitInfo(report.RecipeType, LimitType.MakeTime);
            GetIssuesForViewModel(singleBatchViewModel);
            singleBatchViewModel.TotalTimeLost      = singleBatchViewModel.TimeIssues.Select(x => x.TimeLost).Sum();
            singleBatchViewModel.TotalMatvarIssues  = singleBatchViewModel.MatVarIssues.Count();
            singleBatchViewModel.TotalQualityIssues = singleBatchViewModel.QualityIssues.Count();

            foreach (var vessel in singleBatchViewModel.Report.AllVessels)
            {
                vessel.Materials = vessel.Materials.OrderBy(m => m.StartTime.Date).ThenBy(x => x.StartTime.TimeOfDay).ToList();
            }
            return(View(singleBatchViewModel));
        }