示例#1
0
        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);
        }
示例#2
0
        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);
        }