Esempio n. 1
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);
        }
Esempio n. 2
0
        public List <NumberOfPONeedCheckViewModel> GetNumberOfPONeedToCheckListByFactory(BlokingRateListViewModel blockingRateList)
        {
            List <NumberOfPONeedCheckViewModel> numberOfPONeedToCheckList = new List <NumberOfPONeedCheckViewModel>();
            var importHelper     = new ImportHelper();
            int weekOfYear       = importHelper.GetIso8601WeekOfYear(DateTime.Now);
            int currentYear      = DateTime.Now.Year;
            int finalWeekId      = 0;
            var currentFinalWeek = _appDbContext.FinalWeeks.FirstOrDefault(x => x.Week == weekOfYear && x.Year == currentYear);

            if (currentFinalWeek != null)
            {
                finalWeekId = currentFinalWeek.FinalWeekId;
            }

            foreach (var item in blockingRateList.BlockingRateList)
            {
                NumberOfPONeedCheckViewModel numberOfPONeedToCheck = new NumberOfPONeedCheckViewModel();

                var blockingRate = item.TotalPO == 0 ? 0 : (int)Math.Round((double)(100 * item.RejectPO) / item.TotalPO);

                var numberRate = (blockingRate - 1) / 5;

                var totalPO            = _appDbContext.Inspections.Where(t => t.FinalWeekId == finalWeekId && t.FactoryName == item.FactoryName).Count();
                var listOfImplantation = _appDbContext.Inspections.Where(t => t.FinalWeekId == finalWeekId && t.FactoryName == item.FactoryName && t.OrderType == (int)OrderTypeEnum.Implantation).Count();
                //var listOfImplantation = _appDbContext.Inspections.Where(t => t.DateChecked.Date >= Convert.ToDateTime(blockingRateList.StartDate) && t.DateChecked.Date < Convert.ToDateTime(blockingRateList.EndDate) && t.FactoryName == item.FactoryName && t.OrderType == (int)OrderType.Implantation).Count();

                int numberCheck = 0;
                if (blockingRate <= 5)
                {
                    var rate = Decimal.Divide(1, 16);
                    numberCheck = (int)Math.Round(totalPO * rate);
                    if (numberCheck < listOfImplantation)
                    {
                        numberCheck = listOfImplantation;
                    }
                }
                else if (blockingRate > 5 && blockingRate <= 10)
                {
                    var rate = Decimal.Divide(1, 8);
                    numberCheck = (int)Math.Round(totalPO * rate);
                    if (numberCheck < listOfImplantation)
                    {
                        numberCheck = listOfImplantation;
                    }
                }
                else if (blockingRate > 10 && blockingRate <= 25)
                {
                    var rate = Decimal.Divide(1, 2);
                    numberCheck = (int)Math.Round(totalPO * rate);
                    if (numberCheck < listOfImplantation)
                    {
                        numberCheck = listOfImplantation;
                    }
                }
                else
                {
                    numberCheck = totalPO;
                }

                numberOfPONeedToCheck.FactoryName           = item.FactoryName;
                numberOfPONeedToCheck.BlockingRate          = blockingRate;
                numberOfPONeedToCheck.NumberOfPONeedToCheck = numberCheck;
                numberOfPONeedToCheck.TotalPO = totalPO;

                numberOfPONeedToCheckList.Add(numberOfPONeedToCheck);
            }

            return(numberOfPONeedToCheckList);
        }