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); }
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); }