public SortEventViewModel(SortStateEvent sortOrder) { FailCountSort = sortOrder == SortStateEvent.FailCountAsc ? SortStateEvent.FailCountDesc : SortStateEvent.FailCountAsc; CheckSubunitSort = sortOrder == SortStateEvent.CheckSubunitAsc ? SortStateEvent.CheckSubunitDesc : SortStateEvent.CheckSubunitAsc; CheckSectorSort = sortOrder == SortStateEvent.CheckSectorAsc ? SortStateEvent.CheckSectorDesc : SortStateEvent.CheckSectorAsc; FailDescriptionSort = sortOrder == SortStateEvent.FailDescriptionAsc ? SortStateEvent.FailDescriptionDesc : SortStateEvent.FailDescriptionAsc; EventDescriptionSort = sortOrder == SortStateEvent.EventDescriptionAsc ? SortStateEvent.EventDescriptionDesc : SortStateEvent.EventDescriptionAsc; ResponseWorkerSort = sortOrder == SortStateEvent.ResponseWorkerAsc ? SortStateEvent.ResponseWorkerDesc : SortStateEvent.ResponseWorkerAsc; DueDateSort = sortOrder == SortStateEvent.DueDateAsc ? SortStateEvent.DueDateDesc : SortStateEvent.DueDateAsc; DeveloperSubunitSort = sortOrder == SortStateEvent.DeveloperSubunitAsc ? SortStateEvent.DeveloperSubunitDesc : SortStateEvent.DeveloperSubunitAsc; DeveloperSort = sortOrder == SortStateEvent.DeveloperAsc ? SortStateEvent.DeveloperDesc : SortStateEvent.DeveloperAsc; ReportSort = sortOrder == SortStateEvent.ReportAsc ? SortStateEvent.ReportDesc : SortStateEvent.ReportAsc; Current = sortOrder; }
public async Task <IActionResult> Index(int?subunit, int?sector, string query, int page = 1, SortStateEvent sortOrder = SortStateEvent.FailCountAsc) { int pageSize = 10; IQueryable <Event> events = db.Events .Include(e => e.Check) .Include(e => e.DeveloperNavigation) .Include(e => e.Check.Sector) .Include(e => e.Check.Sector.Subunit) .Include(e => e.DeveloperNavigation.Sector) .Include(e => e.DeveloperNavigation.Sector.Subunit); events = events.Where(e => e.IsActive && e.IsCorrect); if (User.IsInRole("DEVEL") && !User.IsInRole("EVENT_DETAIL") && !User.IsInRole("CONTROL")) { Worker worker = await _userManager.FindByNameAsync(User.Identity.Name); if (worker != null) { events = events.Where(e => e.Developer == worker.Id); } } else if (User.IsInRole("EVENT_DETAIL") && !User.IsInRole("CONTROL")) { Worker worker = await _userManager.FindByNameAsync(User.Identity.Name); db.Entry(worker).Reference(w => w.Sector).Load(); if (worker != null) { events = events.Where(e => e.Check.Sector.SubunitId == worker.Sector.SubunitId); } } if (subunit != null && subunit != 0) { events = events.Where(e => e.Check.Sector.SubunitId == subunit); if (sector != null && sector != 0) { events = events.Where(e => e.Check.SectorId == sector); } } if (!String.IsNullOrEmpty(query)) { events = events.Where(e => e.Check.FailCount.ToUpper().Contains(query.ToUpper()) || e.Check.FailDescription.ToUpper().Contains(query.ToUpper()) || e.Description.ToUpper().Contains(query.ToUpper()) || e.ResponsWorker.ToUpper().Contains(query.ToUpper()) || e.DeveloperNavigation.Sector.Subunit.Name.ToUpper().Contains(query.ToUpper()) || e.DeveloperNavigation.Family.ToUpper().Contains(query.ToUpper()) || e.Report.ToUpper().Contains(query.ToUpper())); } switch (sortOrder) { case SortStateEvent.FailCountDesc: events = events.OrderByDescending(e => e.Check.FailCount); break; case SortStateEvent.CheckSubunitAsc: events = events.OrderBy(e => e.Check.Sector.Subunit.Name); break; case SortStateEvent.CheckSubunitDesc: events = events.OrderByDescending(e => e.Check.Sector.Subunit.Name); break; case SortStateEvent.CheckSectorAsc: events = events.OrderBy(e => e.Check.Sector.SectorName); break; case SortStateEvent.CheckSectorDesc: events = events.OrderByDescending(e => e.Check.Sector.SectorName); break; case SortStateEvent.FailDescriptionAsc: events = events.OrderBy(e => e.Check.FailDescription); break; case SortStateEvent.FailDescriptionDesc: events = events.OrderByDescending(e => e.Check.FailDescription); break; case SortStateEvent.EventDescriptionAsc: events = events.OrderBy(e => e.Description); break; case SortStateEvent.EventDescriptionDesc: events = events.OrderByDescending(e => e.Description); break; case SortStateEvent.ResponseWorkerAsc: events = events.OrderBy(e => e.ResponsWorker); break; case SortStateEvent.ResponseWorkerDesc: events = events.OrderByDescending(e => e.ResponsWorker); break; case SortStateEvent.DueDateAsc: events = events.OrderBy(e => e.DueDate); break; case SortStateEvent.DueDateDesc: events = events.OrderByDescending(e => e.DueDate); break; case SortStateEvent.DeveloperSubunitAsc: events = events.OrderBy(e => e.DeveloperNavigation.Sector.Subunit.Name); break; case SortStateEvent.DeveloperSubunitDesc: events = events.OrderByDescending(e => e.DeveloperNavigation.Sector.Subunit.Name); break; case SortStateEvent.DeveloperAsc: events = events.OrderBy(e => e.DeveloperNavigation.Family); break; case SortStateEvent.DeveloperDesc: events = events.OrderByDescending(e => e.DeveloperNavigation.Family); break; case SortStateEvent.ReportAsc: events = events.OrderBy(e => e.Report); break; case SortStateEvent.ReportDesc: events = events.OrderByDescending(e => e.Report); break; default: events = events.OrderBy(e => e.Check.FailCount); break; } var count = await events.CountAsync(); var items = await events.Skip((page - 1) *pageSize).Take(pageSize).ToListAsync(); EventListViewModel model = new EventListViewModel { FilterViewModel = new FilterEventViewModel(db.Subunits.ToList(), db.Sectors.ToList(), subunit, sector, query), SortViewModel = new SortEventViewModel(sortOrder), PageViewModel = new PageViewModel(count, page, pageSize), Events = items }; return(View(model)); }