Exemplo n.º 1
0
        public SortWorkerViewModel(SortStateWorker sortOrder)
        {
            LoginSort   = sortOrder == SortStateWorker.LoginAsc ? SortStateWorker.LoginDesc : SortStateWorker.LoginAsc;
            FamilySort  = sortOrder == SortStateWorker.FamilyAsc ? SortStateWorker.FamilyDesc : SortStateWorker.FamilyAsc;
            NameSort    = sortOrder == SortStateWorker.NameAsc ? SortStateWorker.NameDesc : SortStateWorker.NameAsc;
            OtchSort    = sortOrder == SortStateWorker.OtchAsc ? SortStateWorker.OtchDesc : SortStateWorker.OtchAsc;
            PostSort    = sortOrder == SortStateWorker.PostAsc ? SortStateWorker.PostDesc : SortStateWorker.PostAsc;
            SubunitSort = sortOrder == SortStateWorker.SubunitAsc ? SortStateWorker.SubunitDesc : SortStateWorker.SubunitAsc;
            SectorSort  = sortOrder == SortStateWorker.SectorAsc ? SortStateWorker.SectorDesc : SortStateWorker.SectorAsc;

            Current = sortOrder;
        }
        public IActionResult Index(string query, int page = 1, SortStateWorker sortOrder = SortStateWorker.LoginAsc)
        {
            int pageSize = 10;
            IQueryable <Worker> workers = db.Workers.Include(x => x.Sector).Include(x => x.Sector.Subunit);

            if (!String.IsNullOrEmpty(query))
            {
                workers = workers.Where(p => p.UserName.ToUpper().Contains(query.ToUpper()) ||
                                        p.Family.ToUpper().Contains(query.ToUpper()) ||
                                        p.Name.ToUpper().Contains(query.ToUpper()) ||
                                        p.Otch.ToUpper().Contains(query.ToUpper()) ||
                                        p.Post.ToUpper().Contains(query.ToUpper()) ||
                                        p.Sector.Subunit.Name.ToUpper().Contains(query.ToUpper()) ||
                                        p.Sector.SectorName.ToUpper().Contains(query.ToUpper())
                                        );
            }

            workers = sortOrder switch
            {
                SortStateWorker.LoginDesc => workers.OrderByDescending(p => p.UserName),
                SortStateWorker.FamilyAsc => workers.OrderBy(p => p.Family),
                SortStateWorker.FamilyDesc => workers.OrderByDescending(p => p.Family),
                SortStateWorker.NameAsc => workers.OrderBy(p => p.Name),
                SortStateWorker.NameDesc => workers.OrderByDescending(p => p.Name),
                SortStateWorker.OtchAsc => workers.OrderBy(p => p.Otch),
                SortStateWorker.OtchDesc => workers.OrderByDescending(p => p.Otch),
                SortStateWorker.PostAsc => workers.OrderBy(p => p.Post),
                SortStateWorker.PostDesc => workers.OrderByDescending(p => p.Post),
                SortStateWorker.SubunitAsc => workers.OrderBy(p => p.Sector.Subunit.Name),
                SortStateWorker.SubunitDesc => workers.OrderByDescending(p => p.Sector.Subunit.Name),
                SortStateWorker.SectorAsc => workers.OrderBy(p => p.UserName),
                SortStateWorker.SectorDesc => workers.OrderByDescending(p => p.UserName),
                _ => workers.OrderBy(p => p.UserName),
            };
            var count = workers.Count();
            var items = workers.Skip((page - 1) * pageSize).Take(pageSize).ToList();

            WorkerListViewModel model = new WorkerListViewModel
            {
                PageViewModel   = new PageViewModel(count, page, pageSize),
                SortViewModel   = new SortWorkerViewModel(sortOrder),
                FilterViewModel = new FilterWorkerViewModel(query),
                Workers         = items
            };

            return(View(model));
        }