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);
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        public void StoppageTimeShouldReturnWhenEmptyListPassedIn()
        {
            List <BatchIssue> issues   = new List <BatchIssue>();
            double            timeLost = BatchHelperMethods.GetTotalStoppageTime(issues);

            Assert.AreEqual(0, timeLost);
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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));
        }
Exemple #10
0
        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);
        }
Exemple #14
0
        public void CountShouldReturn0WhenNullPassedIn()
        {
            double issueCount = BatchHelperMethods.GetTotalQualityIssues(null);

            Assert.AreEqual(0, issueCount);
        }
Exemple #15
0
        public void StoppageTimeShouldReturn0WhenNullPassedIn()
        {
            double timeLost = BatchHelperMethods.GetTotalStoppageTime(null);

            Assert.AreEqual(0, timeLost);
        }