コード例 #1
0
        public BlokingRateViewModel GetBlockingRate()
        {
            DayOfWeek weekStart    = DayOfWeek.Monday; // or Sunday, or whenever
            DateTime  startingDate = DateTime.Today;

            while (startingDate.DayOfWeek != weekStart)
            {
                startingDate = startingDate.AddDays(-1);
            }

            DateTime previousFiveWeekStart = startingDate.AddDays(-35);

            var list = _appDbContext.Inspections.Where(t => t.InspectDate.Date >= previousFiveWeekStart.Date && t.InspectDate.Date < startingDate.Date && t.InspectStatus == true);

            var rejectPO     = list.Where(x => x.Result == (int)InspectionResultEnum.Reject).Count();
            var totalPO      = list.Count();
            var blockingRate = totalPO == 0 ? 0 : (int)Math.Round((double)(100 * rejectPO) / totalPO);

            BlokingRateViewModel result = new BlokingRateViewModel()
            {
                RejectPO     = rejectPO,
                TotalPO      = totalPO,
                BlockingRate = blockingRate
            };

            return(result);
        }
コード例 #2
0
        public BlokingRateListViewModel GetBlockingRateByFactory()
        {
            DayOfWeek weekStart    = DayOfWeek.Sunday; // or Sunday, or whenever
            DateTime  startingDate = DateTime.Today;

            while (startingDate.DayOfWeek != weekStart)
            {
                startingDate = startingDate.AddDays(-1);
            }

            //lấy ngày thứ 2 cách đó 5 tuần
            DateTime previousFiveWeekStart = startingDate.AddDays(-35);

            //tổng số PO được inspect rồi
            var list = _appDbContext.Inspections.Where(t => t.InspectDate.Date >= previousFiveWeekStart.Date && t.InspectDate.Date < startingDate.Date && t.InspectStatus == true).ToList();

            var manufacturerList = (from so in list//_appDbContext.Inspections : avoid retrieving all inspections to improve performance; btw maybe not list all manufacturer unless list does not collect all
                                    group so by so.FactoryName into TotaledFactories
                                    select new
            {
                FactoryName = TotaledFactories.Key,
            });
            List <BlokingRateViewModel> brList = new List <BlokingRateViewModel>();

            foreach (var item in manufacturerList)
            {
                var rejectPO = list.Where(x => x.Result == (int)InspectionResultEnum.Reject && x.FactoryName == item.FactoryName).Count();
                var totalPO  = list.Where(x => x.FactoryName == item.FactoryName).Count();

                //var factoryId = list.FirstOrDefault(x => x.FactoryName == item.FactoryName).FactoryId;
                var blockingRate        = totalPO == 0 ? 0 : (int)Math.Round((double)(100 * rejectPO) / totalPO);
                BlokingRateViewModel br = new BlokingRateViewModel()
                {
                    RejectPO     = rejectPO,
                    TotalPO      = totalPO,
                    FactoryName  = item.FactoryName,
                    BlockingRate = blockingRate
                                   //FactoryId = factoryId
                };

                brList.Add(br);
            }

            BlokingRateListViewModel result = new BlokingRateListViewModel()
            {
                BlockingRateList = brList,
                StartDate        = previousFiveWeekStart.AddDays(1).ToString("d"),
                EndDate          = startingDate.AddDays(-1).ToString("d")
            };

            return(result);
        }