public IActionResult MaterialUsage()
        {
            MaterialUsageViewModel materials = new MaterialUsageViewModel(_materialDetailsRepository, _BatchRepository)
            {
                //DateSelectorModal = _dateSelector.GetDateSelectorDetails()
            };

            materials.DateSelectorModal.TimeFrame = "year";
            materials.DateSelectorModal.Week      = 35;
            materials.DateSelectorModal.Year      = 2020;
            return(View(materials));
        }
        public IActionResult MaterialUsageSingle(string name, DateSelectorModal dateSelectorModal)
        {
            List <BatchReport>     reports = new List <BatchReport>();
            MaterialDetails        details = _materialDetailsRepository.GetSingleMaterial(name);
            MaterialUsageViewModel materialUsageViewModel = new MaterialUsageViewModel();

            materialUsageViewModel.Name              = details.Name;
            materialUsageViewModel.ProductCode       = details.ProductCode;
            materialUsageViewModel.ShortName         = details.ShortName;
            materialUsageViewModel.CostPerTon        = details.CostPerTon;
            materialUsageViewModel.DateSelectorModal = dateSelectorModal;
            reports = helper.GetBatchReportsForDateSelector(materialUsageViewModel.DateSelectorModal);
            materialUsageViewModel.streamInfo = GetStreamMatVarBreakdown(reports, details.Name);
            CalculateWeeklyUsageForSetTimePeriod(materialUsageViewModel, reports, details);
            materialUsageViewModel.WeeklyUsage = materialUsageViewModel.WeeklyUsage.OrderBy(x => x.Year).ThenBy(x => x.WeekNo).ToList();

            return(View("MaterialUsageSingle", materialUsageViewModel));
        }
        private void CalculateWeeklyUsageForSetTimePeriod(MaterialUsageViewModel materialUsageViewModel, List <BatchReport> reports, MaterialDetails details)
        {
            foreach (var report in reports)
            {
                foreach (var vessel in report.AllVessels)
                {
                    foreach (var material in vessel.Materials)
                    {
                        if (material.Name == details.Name)
                        {
                            double target = material.TargetWeight;
                            double actual = material.ActualWeight;

                            if (material.Name.Contains("DYE"))
                            {
                                target = helper.CalculateDyeAmountInSolution(material.Name, material.TargetWeight);
                                actual = helper.CalculateDyeAmountInSolution(material.Name, material.ActualWeight);
                            }

                            if (materialUsageViewModel.WeeklyUsage.Any(x => x.WeekNo == report.WeekNo && x.Year == report.StartTime.Year))
                            {
                                materialUsageViewModel.WeeklyUsage.Find(x => x.WeekNo == report.WeekNo && x.Year == report.StartTime.Year).Target += target;
                                materialUsageViewModel.WeeklyUsage.Find(x => x.WeekNo == report.WeekNo && x.Year == report.StartTime.Year).Actual += actual;
                            }
                            else
                            {
                                materialUsageViewModel.WeeklyUsage.Add(
                                    new SingleMaterialWeeklyUsage(report.WeekNo,
                                                                  report.StartTime.Year,
                                                                  target,
                                                                  actual,
                                                                  materialUsageViewModel.CostPerTon));
                            }
                            materialUsageViewModel.TotalBatchesMadeWithMaterial++;
                        }
                    }
                }
            }
            materialUsageViewModel.CalculateTotals();
        }