예제 #1
0
        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));
        }