public List <MaterialReportViewModel> GetDailyMaterialReport(DateTime date) { List <ProductsMaterial> globalMat = new List <ProductsMaterial>(); var dayPlan = _context.DayPlans.Where(d => d.Date.Equals(date)).FirstOrDefault(); if (dayPlan == null) { _context.DayPlans.Add(new DayPlan { Date = date }); _context.SaveChanges(); dayPlan = _context.DayPlans.Where(d => d.Date.Equals(date)).FirstOrDefault(); } var productsPlans = _context.ProductsPlans.Where(d => d.DayPlanId == dayPlan.DayPlanId).ToList(); foreach (ProductsPlan pp in productsPlans) { IEnumerable <ProductsMaterial> productsMaterials = _context.ProductsMaterials.Where(p => p.ProductId == pp.ProductId).ToList(); foreach (ProductsMaterial pm in productsMaterials) { pm.Quantity *= pp.Count; if (globalMat.Contains(pm)) { globalMat.Where(g => g.MaterialId == pm.MaterialId).FirstOrDefault().Quantity += pm.Quantity; } else { globalMat.Add(pm); } } } var newGlobalMat = globalMat.GroupBy(m => m.MaterialId).Select(m => new { Id = m.Key, Sum = m.Sum(q => q.Quantity) }).ToDictionary(m => m.Id, m => m.Sum); List <MaterialReportViewModel> dailyMaterialPlanViewModels = new List <MaterialReportViewModel>(); foreach (KeyValuePair <int?, double?> keyValue in newGlobalMat) { MaterialReportViewModel d = new MaterialReportViewModel { MaterialName = _context.Materials.Where(m => m.MaterialId == keyValue.Key).FirstOrDefault().MaterialName, MaterialQuantity = (double)keyValue.Value }; dailyMaterialPlanViewModels.Add(d); } return(dailyMaterialPlanViewModels); }
public List <MaterialReportViewModel> GetPeriodMatreialReport(DateTime beginDate = default, DateTime endTime = default) { List <ProductsMaterial> globalMaterial = new List <ProductsMaterial>(); List <MaterialReportViewModel> periodMaterialPlanViewModels = new List <MaterialReportViewModel>(); IEnumerable <DayPlan> dayPlans; if (beginDate != default && endTime != default) { dayPlans = _context.DayPlans.Where(d => d.Date >= beginDate && d.Date <= endTime); } else { dayPlans = _context.DayPlans; } foreach (DayPlan dayPlan in dayPlans) { var productsPlans = _context.ProductsPlans.Where(d => d.DayPlanId == dayPlan.DayPlanId).ToList(); foreach (ProductsPlan pp in productsPlans) { var materials = _context.ProductsMaterials.Where(n => n.ProductId == pp.ProductId); foreach (ProductsMaterial pm in materials) { double quantity = (double)pm.Quantity; quantity *= (double)pp.Count; if (globalMaterial.Contains(pm)) { globalMaterial.Where(g => g.MaterialId == pm.MaterialId).FirstOrDefault().Quantity += quantity; } else { ProductsMaterial material = new ProductsMaterial { MaterialId = pm.MaterialId, Quantity = quantity }; globalMaterial.Add(material); } } } } var newGlobalNorm = globalMaterial.GroupBy(n => n.MaterialId).Select(n => new { Id = n.Key, Sum = n.Sum(q => q.Quantity) }).ToDictionary(n => n.Id, n => n.Sum); foreach (KeyValuePair <int?, double?> keyValue in newGlobalNorm) { MaterialReportViewModel d = new MaterialReportViewModel { MaterialName = _context.Materials.Where(m => m.MaterialId == keyValue.Key).FirstOrDefault().MaterialName, MaterialQuantity = (double)keyValue.Value }; bool flag = true; foreach (MaterialReportViewModel mr in periodMaterialPlanViewModels) { if (mr.MaterialName.Equals(d.MaterialName)) { mr.MaterialQuantity += d.MaterialQuantity; flag = false; } } if (flag) { periodMaterialPlanViewModels.Add(d); } } return(periodMaterialPlanViewModels); }