private List <ControlChartData> GetPhChartData(List <BatchReport> reports) { List <ControlChartData> output = new List <ControlChartData>(); var BatchesGroupedByRecipeType = BatchHelperMethods.GroupBatchesByRecipeType(reports); List <decimal> values = new List <decimal>(); List <string> xAxisLabels = new List <string>(); foreach (var report in reports.OrderBy(x => x.StartTime.Date).ThenBy(x => x.StartTime.TimeOfDay)) { values.Add(Convert.ToDecimal(report.Ph)); xAxisLabels.Add($"{report.Campaign}-{report.BatchNo}"); } ControlChartData data = new ControlChartData { Target = 2.6M, Max = 2.9M, Min = 2.3M, Values = values, XAxisLabels = xAxisLabels, SeriesName = "Ph", Title = $"pH Of all Batches", YAxisSuffix = "pH", ChartId = "phchart" }; data.ProcessCpkValues(); output.Add(data); _xLCreator.AddToWorkBook <decimal>("PH", values, data.Min, data.Max); return(output); }
private List <ControlChartData> GetStenolDropChartData(List <BatchReport> reports) { List <ControlChartData> output = new List <ControlChartData>(); List <BatchReport> regBatches = reports.Where(x => x.RecipeType == RecipeTypes.Reg).ToList(); List <decimal> values = new List <decimal>(); List <string> xAxisLabels = new List <string>(); string stenolName = _applicationData.ApplicationMode == "demo" ? "Material 21" : "FATTY ALC"; foreach (var report in regBatches) { decimal stenol = Convert.ToDecimal(BatchHelperMethods.GetSingleMaterialFromVessel(report, stenolName).ActualWeight); values.Add(stenol); xAxisLabels.Add(report.Campaign.ToString() + "-" + report.BatchNo.ToString()); } ControlChartData data = new ControlChartData { Target = 58.5M, Max = 58.5M + (0.05M * 58.5M), Min = 58.5M - (0.05M * 58.5M), Values = values, XAxisLabels = xAxisLabels, SeriesName = $"{stenolName} Quantity Kg", Title = $"{stenolName} Quantity Of Reg Batches", YAxisSuffix = "Kg", ChartId = "Reg" }; data.ProcessCpkValues(); output.Add(data); _xLCreator.AddToWorkBook <decimal>($"{stenolName}-Regs", values, data.Min, data.Max); return(output); }
public void ShouldReturnCorrectWeightOfAllMaterialsInVessel() { Vessel vessel = new Vessel(); List <Material> materials = new List <Material>() { new Material { ActualWeight = 11 }, new Material { ActualWeight = 22 }, new Material { ActualWeight = 33 }, new Material { ActualWeight = 44 }, new Material { ActualWeight = 55 }, new Material { ActualWeight = 66 } }; vessel.Materials.AddRange(materials); double totalWeights = BatchHelperMethods.CountActualWeightOfAllMaterialsInVessel(vessel); Assert.AreEqual(231, totalWeights); }
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 void StoppageTimeShouldBe4() { List <BatchIssue> issues = new List <BatchIssue> { new BatchIssue { BatchIssueId = 1, FaultType = BatchIssue.FaultTypes.Quality, TimeLost = 15, MaterialName = "ANTIFOAM" }, new BatchIssue { BatchIssueId = 2, FaultType = BatchIssue.FaultTypes.TemperatureHigh, TimeLost = 15, MaterialName = "ANTIFOAM" }, new BatchIssue { BatchIssueId = 3, FaultType = BatchIssue.FaultTypes.AcquireTime, TimeLost = 15, MaterialName = "ANTIFOAM" }, new BatchIssue { BatchIssueId = 4, FaultType = BatchIssue.FaultTypes.TemperatureLow, TimeLost = 15, MaterialName = "ANTIFOAM" }, new BatchIssue { BatchIssueId = 5, FaultType = BatchIssue.FaultTypes.Quality, TimeLost = 15, MaterialName = "ANTIFOAM" }, }; double issueCount = BatchHelperMethods.GetTotalQualityIssues(issues); Assert.AreEqual(4, issueCount); }
public void StoppageTimeShouldPass() { List <BatchIssue> issues = new List <BatchIssue> { new BatchIssue { BatchIssueId = 1, FaultType = BatchIssue.FaultTypes.WaitTime, TimeLost = 15, MaterialName = "ANTIFOAM" }, new BatchIssue { BatchIssueId = 2, FaultType = BatchIssue.FaultTypes.WeighTime, TimeLost = 15, MaterialName = "ANTIFOAM" }, new BatchIssue { BatchIssueId = 3, FaultType = BatchIssue.FaultTypes.AcquireTime, TimeLost = 15, MaterialName = "ANTIFOAM" }, new BatchIssue { BatchIssueId = 4, FaultType = BatchIssue.FaultTypes.Overweigh, TimeLost = 15, MaterialName = "ANTIFOAM" }, new BatchIssue { BatchIssueId = 5, FaultType = BatchIssue.FaultTypes.Quality, TimeLost = 15, MaterialName = "ANTIFOAM" }, }; double timeLost = BatchHelperMethods.GetTotalStoppageTime(issues); Assert.AreEqual(45, timeLost); }
public void StoppageTimeShouldReturnWhenEmptyListPassedIn() { List <BatchIssue> issues = new List <BatchIssue>(); double timeLost = BatchHelperMethods.GetTotalStoppageTime(issues); Assert.AreEqual(0, timeLost); }
public override void ScanForIssues(BatchReport report) { var tempSensitiveMaterials = _materialDetailsRepository.GetAllMaterialDetails() .Where(x => x.MinRawTemp > 0 || x.MaxRawTemp > 0) .ToList(); foreach (var material in tempSensitiveMaterials) { var materialFromBatch = BatchHelperMethods.GetSingleMaterialFromVessel(report, material.Name); if (materialFromBatch != null) { bool overTemp = materialFromBatch.RawMatTemp > material.MaxRawTemp; bool underTemp = materialFromBatch.RawMatTemp < material.MinRawTemp; if (overTemp || underTemp) { report.BatchIssues.Add(new BatchIssue { FaultType = overTemp ? BatchIssue.FaultTypes.TemperatureHigh : BatchIssue.FaultTypes.TemperatureLow, Message = $"{material.Name} temperature in storage was {UnderOverText(overTemp)} of {GetMaxMinTemp(overTemp, material)}C", MaterialName = material.Name, MaterialShortName = material.ShortName, TimeLost = 0, ActualReading = materialFromBatch.RawMatTemp, IssueCreatedBy = IssueDescriptor }); } } } SetIssueScannedFor(report); }
public IViewComponentResult Invoke(BatchReport report = null) { BatchReport lastBatchMade = _batchRepository.AllBatches.OrderByDescending(x => x.StartTime).FirstOrDefault();; if (lastBatchMade == null) { lastBatchMade = BatchHelperMethods.CreateBlankBatchReport(); } ViewData["QualityIssues"] = BatchHelperMethods.GetTotalQualityIssues(lastBatchMade.BatchIssues); ViewData["StoppagesTime"] = BatchHelperMethods.GetTotalStoppageTime(lastBatchMade.BatchIssues); ViewData["MatVarCost"] = BatchHelperMethods.GetTotalMatVarCost(lastBatchMade.BatchIssues, _materialDetailsRepository); return(View(lastBatchMade)); }
private string AddAdditionalInfoToJson(string batchJson, BatchReport report, bool sync) { batchJson = batchJson.Substring(0, batchJson.Length - 1); StringBuilder sb = new StringBuilder(); var qualityIssues = BatchHelperMethods.GetTotalQualityIssues(report.BatchIssues); var stoppageTime = BatchHelperMethods.GetTotalStoppageTime(report.BatchIssues); var matVarCost = BatchHelperMethods.GetTotalMatVarCost(report.BatchIssues, _materialDetailsRepository); sb.Append(@"," + Convert.ToChar(34) + "QualityIssues" + Convert.ToChar(34) + ":" + Convert.ToChar(34) + qualityIssues + Convert.ToChar(34)); sb.Append(@"," + Convert.ToChar(34) + "Stoppages" + Convert.ToChar(34) + ":" + Convert.ToChar(34) + stoppageTime + Convert.ToChar(34)); sb.Append(@"," + Convert.ToChar(34) + "MatVarCost" + Convert.ToChar(34) + ":" + Convert.ToChar(34) + matVarCost + Convert.ToChar(34)); sb.Append(@"," + Convert.ToChar(34) + "Sync" + Convert.ToChar(34) + ":" + Convert.ToChar(34) + sync + Convert.ToChar(34) + "}"); batchJson += sb.ToString(); return(batchJson); }
private List <ControlChartData> GetSoftquatChartData(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>(); string quatName = _applicationData.ApplicationMode == "demo" ? "Material 51" : "SOFTQUAT"; foreach (var report in BatchesGroupedByRecipeType[recipeType].OrderBy(x => x.StartTime.Date).ThenBy(x => x.StartTime.TimeOfDay)) { double softquatWeight = BatchHelperMethods.GetSingleMaterialFromVessel(report, quatName).ActualWeight; values.Add(Convert.ToDecimal(softquatWeight)); xAxisLabels.Add($"{report.Campaign}-{report.BatchNo}"); } RecipeLimits limits = _recipeLimitRepository.GetLimitInfo(recipeType, LimitType.Softquat); ControlChartData data = new ControlChartData { Target = limits.Target, Max = limits.Target + (0.05M * limits.Target), Min = limits.Target - (0.05M * limits.Target), Values = values, XAxisLabels = xAxisLabels, SeriesName = quatName + " Quantity Kg", Title = $"{quatName} Quantity Of {recipeType} Batches", YAxisSuffix = "Kg", ChartId = recipeType.ToString() }; data.ProcessCpkValues(); output.Add(data); _xLCreator.AddToWorkBook <decimal>($"{quatName}-{recipeType}", values, data.Min, data.Max); } return(output); }
private Material CalculateWaterDetails(string nameOfMaterial, BatchReport report) { Vessel mainMixer = report.AllVessels.Where(x => x.VesselType == Vessel.VesselTypes.MainMixer).FirstOrDefault(); double totalWeightsOfMaterials = BatchHelperMethods.CountActualWeightOfAllMaterialsInVessel(mainMixer); double totalVesselWeight = report.TotalActualWeight * 1000; double weightOfMissingWater = totalVesselWeight - totalWeightsOfMaterials; double rawMatTemp = nameOfMaterial == "Material 63" ? 80.0 : 20; double vesselTemp = nameOfMaterial == "Material 63" ? 77 : 44; DateTime StartTimeOfHCL = BatchHelperMethods.GetSingleMaterialFromVessel(report, "Material 59").StartTime; return(new Material { Name = nameOfMaterial, ActualWeight = weightOfMissingWater, StartTime = StartTimeOfHCL.Subtract(new TimeSpan(0, 0, 6, 0, 0)), AgitatorSpeed = 11, RawMatTemp = rawMatTemp, TargetWeight = weightOfMissingWater, WeighTime = 5, VesselTemp = vesselTemp, WaitTime = 0.1 }); }
private List <ControlChartData> GetActiveDropChartData(List <BatchReport> reports) { List <ControlChartData> output = new List <ControlChartData>(); List <BatchReport> reportsToCheck = new List <BatchReport>(); var batchesGroupedByRecipeType = BatchHelperMethods.GroupBatchesByRecipeType(reports); foreach (var recipeType in batchesGroupedByRecipeType.Keys) { List <decimal> values = new List <decimal>(); List <string> xAxisLabels = new List <string>(); PcsTempTargets limits = new PcsTempTargets(); string nameOfRecipe = ""; foreach (var report in batchesGroupedByRecipeType[recipeType].OrderBy(x => x.StartTime.Date).ThenBy(x => x.StartTime.TimeOfDay)) { if (recipeType == RecipeTypes.Conc) { if (report.Recipe == "WHTCON" || report.Recipe == "Recipe 38") { limits = _pcsActiveTempParameters.GetTargetsFor(report.Recipe); limits.UpperLimit = limits.Target + 1.5M; limits.LowerLimit = limits.Target - 1.5M; decimal tempValue = Convert.ToDecimal(_helperMethods.GetTemperatureOfActiveDrop(report.AllVessels.Where(x => x.VesselType == Vessel.VesselTypes.MainMixer).First())); values.Add(CheckTemperatureForAdjustments(tempValue, limits.UpperLimit, limits.LowerLimit)); xAxisLabels.Add($"{report.Campaign}-{report.BatchNo}"); nameOfRecipe = report.Recipe; } } if (recipeType == RecipeTypes.Reg) { if (report.Recipe == "WHTREG" || report.Recipe == "RE-Recipe 39") { limits = _pcsActiveTempParameters.GetTargetsFor(report.Recipe); limits.UpperLimit = limits.Target + 1M; limits.LowerLimit = limits.Target - 1M; decimal tempValue = Convert.ToDecimal(_helperMethods.GetTemperatureOfActiveDrop(report.AllVessels.Where(x => x.VesselType == Vessel.VesselTypes.MainMixer).First())); values.Add(CheckTemperatureForAdjustments(tempValue, limits.UpperLimit, limits.LowerLimit)); xAxisLabels.Add($"{report.Campaign}-{report.BatchNo}"); nameOfRecipe = report.Recipe; } } if (recipeType == RecipeTypes.BigBang) { if (report.Recipe == "BB-SKY" || report.Recipe == "BB-Recipe 15") { limits = _pcsActiveTempParameters.GetTargetsFor(report.Recipe); limits.UpperLimit = limits.Target + 1.5M; limits.LowerLimit = limits.Target - 1.5M; decimal tempValue = Convert.ToDecimal(_helperMethods.GetTemperatureOfActiveDrop(report.AllVessels.Where(x => x.VesselType == Vessel.VesselTypes.MainMixer).First())); values.Add(CheckTemperatureForAdjustments(tempValue, limits.UpperLimit, limits.LowerLimit)); xAxisLabels.Add($"{report.Campaign}-{report.BatchNo}"); nameOfRecipe = report.Recipe; } } } ControlChartData data = new ControlChartData { Target = limits.Target, Max = limits.UpperLimit, Min = limits.LowerLimit, Values = values, XAxisLabels = xAxisLabels, SeriesName = "Active Drop Temp", Title = $"Active Drop Temps Of {nameOfRecipe} Batches", YAxisSuffix = " C", ChartId = recipeType.ToString() }; data.ProcessCpkValues(); output.Add(data); _xLCreator.AddToWorkBook <decimal>($"Active-temp-{nameOfRecipe}", values, data.Min, data.Max); } return(output); }
public void CountShouldReturn0WhenNullPassedIn() { double issueCount = BatchHelperMethods.GetTotalQualityIssues(null); Assert.AreEqual(0, issueCount); }
public void StoppageTimeShouldReturn0WhenNullPassedIn() { double timeLost = BatchHelperMethods.GetTotalStoppageTime(null); Assert.AreEqual(0, timeLost); }