Exemple #1
0
        public IActionResult Index(string sortOrder, string searchString, string SelectedRank, string SelectedGrade, int page = 1)
        {
            // init the VM class
            JobDescriptionListViewModel vm = new JobDescriptionListViewModel
            {
                // set the VM properties to the parameters
                CurrentFilter = searchString,
                CurrentSort   = sortOrder,
                SelectedGrade = SelectedGrade,
                SelectedRank  = SelectedRank,
                // set the sorts to the opposite of the current sortOrder to facilitate building sorting hyperlinks
                GradeSort = String.IsNullOrEmpty(sortOrder) ? "grade_desc" : "",
                NameSort  = sortOrder == "JobName" ? "jobName_desc" : "JobName",
                RankSort  = sortOrder == "Rank" ? "rank_desc" : "Rank"
            };
            // lower any search string text to facilitate comparison.
            string lowerSearchString = "";

            if (!String.IsNullOrEmpty(searchString))
            {
                char[] arr = searchString.ToCharArray();
                arr = Array.FindAll <char>(arr, (c => (char.IsLetterOrDigit(c) ||
                                                       char.IsWhiteSpace(c) ||
                                                       c == '-')));
                lowerSearchString = new string(arr);
                lowerSearchString = lowerSearchString.ToLower();
            }
            // Query for documents that match the provided parameters, if any, and convert them to List Items
            vm.Jobs = _repository.Jobs.Where(x => (String.IsNullOrEmpty(SelectedRank) || x.JobDataXml.Element("Rank").Value == SelectedRank) &&
                                             (String.IsNullOrEmpty(SelectedGrade) || x.JobDataXml.Element("Grade").Value == SelectedGrade) &&
                                             (String.IsNullOrEmpty(searchString) || x.JobName.ToLower().Contains(lowerSearchString)))
                      .Skip((page - 1) * PageSize)
                      .Take(PageSize)
                      .ToList().ConvertAll(x => new JobDescriptionListViewModeltem(x));
            // Separate Query to determine total number of matching documents, as the list above is Skip().Take()
            int totalItems = _repository.Jobs.Where(x => (String.IsNullOrEmpty(SelectedRank) || x.JobDataXml.Element("Rank").Value == SelectedRank) &&
                                                    (String.IsNullOrEmpty(SelectedGrade) || x.JobDataXml.Element("Grade").Value == SelectedGrade) &&
                                                    (String.IsNullOrEmpty(searchString) || x.JobName.ToLower().Contains(lowerSearchString)))
                             .Count();

            // Sort the list according to the provided sorting parameter, if any. Defaults to order by ascending Grade if no sorting parameter is present.
            switch (sortOrder)
            {
            case "grade_desc":
                vm.Jobs = vm.Jobs.OrderByDescending(x => x.Grade).ToList();
                break;

            case "jobName_desc":
                vm.Jobs = vm.Jobs.OrderByDescending(x => x.JobName).ToList();
                break;

            case "JobName":
                vm.Jobs = vm.Jobs.OrderBy(x => x.JobName).ToList();
                break;

            case "rank_desc":
                vm.Jobs = vm.Jobs.OrderByDescending(x => x.Rank).ToList();
                break;

            case "Rank":
                vm.Jobs = vm.Jobs.OrderBy(x => x.Rank).ToList();
                break;

            default:
                vm.Jobs = vm.Jobs.OrderBy(x => x.Grade).ToList();
                break;
            }
            // Set the PagingInfo to facilitate page control
            vm.PagingInfo = new PagingInfo
            {
                CurrentPage  = page,
                TotalItems   = totalItems,
                ItemsPerPage = PageSize
            };
            // Populate the VM's lists to populate the search form drop downs
            vm.HydrateLists(_repository.Jobs.Select(x => x.JobDataXml.Element("Rank").Value).Distinct().ToList(), _repository.Jobs.Select(x => x.JobDataXml.Element("Grade").Value).Distinct().ToList());
            ViewData["Title"] = "Job Descriptions List";
            ViewData["ActiveNavBarMenuLink"] = "Job Descriptions";
            return(View(vm));
        }
Exemple #2
0
        public IActionResult UserIndex(string sortOrder, string searchString, string SelectedRank, string SelectedGrade, int page = 1)
        {
            JobDescriptionListViewModel vm = new JobDescriptionListViewModel();

            vm.CurrentFilter = searchString;
            vm.CurrentSort   = sortOrder;
            vm.SelectedGrade = SelectedGrade;
            vm.SelectedRank  = SelectedRank;
            vm.GradeSort     = String.IsNullOrEmpty(sortOrder) ? "grade_desc" : "";
            vm.NameSort      = sortOrder == "JobName" ? "jobName_desc" : "JobName";
            vm.RankSort      = sortOrder == "Rank" ? "rank_desc" : "Rank";
            string lowerSearchString = "";

            if (!String.IsNullOrEmpty(searchString))
            {
                char[] arr = searchString.ToCharArray();
                arr = Array.FindAll <char>(arr, (c => (char.IsLetterOrDigit(c) ||
                                                       char.IsWhiteSpace(c) ||
                                                       c == '-')));
                lowerSearchString = new string(arr);
                lowerSearchString = lowerSearchString.ToLower();
            }
            vm.Jobs = _repository.Jobs.Where(x => (String.IsNullOrEmpty(SelectedRank) || x.JobDataXml.Element("Rank").Value == SelectedRank) &&
                                             (String.IsNullOrEmpty(SelectedGrade) || x.JobDataXml.Element("Grade").Value == SelectedGrade) &&
                                             (String.IsNullOrEmpty(searchString) || x.JobName.ToLower().Contains(lowerSearchString)))
                      .Skip((page - 1) * PageSize)
                      .Take(PageSize)
                      .ToList().ConvertAll(x => new JobDescriptionListViewModeltem(x));
            int totalItems = _repository.Jobs.Where(x => (String.IsNullOrEmpty(SelectedRank) || x.JobDataXml.Element("Rank").Value == SelectedRank) &&
                                                    (String.IsNullOrEmpty(SelectedGrade) || x.JobDataXml.Element("Grade").Value == SelectedGrade) &&
                                                    (String.IsNullOrEmpty(searchString) || x.JobName.ToLower().Contains(lowerSearchString)))
                             .Count();

            switch (sortOrder)
            {
            case "grade_desc":
                vm.Jobs = vm.Jobs.OrderByDescending(x => x.Grade).ToList();
                break;

            case "jobName_desc":
                vm.Jobs = vm.Jobs.OrderByDescending(x => x.JobName).ToList();
                break;

            case "JobName":
                vm.Jobs = vm.Jobs.OrderBy(x => x.JobName).ToList();
                break;

            case "rank_desc":
                vm.Jobs = vm.Jobs.OrderByDescending(x => x.Rank).ToList();
                break;

            case "Rank":
                vm.Jobs = vm.Jobs.OrderBy(x => x.Rank).ToList();
                break;

            default:
                vm.Jobs = vm.Jobs.OrderBy(x => x.Grade).ToList();
                break;
            }
            vm.PagingInfo = new PagingInfo
            {
                CurrentPage  = page,
                TotalItems   = totalItems,
                ItemsPerPage = PageSize
            };
            vm.HydrateLists(_repository.Jobs.Select(x => x.JobDataXml.Element("Rank").Value).Distinct().ToList(), _repository.Jobs.Select(x => x.JobDataXml.Element("Grade").Value).Distinct().ToList());
            ViewData["Title"] = "Job Descriptions List";
            ViewData["ActiveNavBarMenuLink"] = "Job Descriptions";
            return(View(vm));
        }