public AdminMemberIndexListViewModel GetAdminMemberIndexListViewModel() { AdminMemberIndexListViewModel vm = new AdminMemberIndexListViewModel(); vm.Members = ApplicationDbContext.Members .Include(x => x.AppStatus) .Include(x => x.Position) .ThenInclude(x => x.ParentComponent) .Include(x => x.CurrentRoles) .ToList() .ConvertAll(x => new AdminMemberIndexViewModelListItem(x)); return(vm); }
/// <summary> /// Returns the Admin/MemberIndex view /// </summary> /// <remarks> /// This view lists Members in the database with additional administrative fields. /// </remarks> /// <param name="sortOrder"> /// <para> /// Sort by: (ascend/descend) /// Last Name: [(nothing; LastName ascend is default/lastName_desc)] /// First Name: [(FirstName/firstName_desc)] /// Id Number: [(IDNumber/idNumber_desc)] /// Position Name: [(PositionName/positionName_desc)] /// By User Role: (filter: on/off) [(IsUserRoleOnly/IsUserRoleAny)] /// By Component Admin Role: (filter: on/off) [(IsComponentAdminOnly/IsComponentAdminAny)] /// By Global Admin Role: (filter: on/off) [(IsGlobalAdminOnly/IsGlobalAdminAny)] /// </para> /// </param> /// <param name="searchString">The search string.</param> /// <para> /// As of v1.0, the searchString parameter will search Members by Last Name, First Name, Position Name, and Id Number. /// The passed string will be converted to lowercase, and all non-alphanumeric characters will be removed. /// </para> /// <param name="page"> /// <para> /// This controls pagination. The default value is 1. /// </para> /// </param> /// <returns>The Admin/MemberIndex <see cref="ViewResult"/></returns> public IActionResult MemberIndex(string sortOrder, string searchString, int page = 1) { AdminMemberIndexListViewModel vm = unitOfWork.Members.GetAdminMemberIndexListViewModel(); vm.CurrentSort = sortOrder; vm.MemberLastNameSort = String.IsNullOrEmpty(sortOrder) ? "lastName_desc" : ""; vm.MemberFirstNameSort = sortOrder == "FirstName" ? "firstName_desc" : "FirstName"; vm.IdNumberSort = sortOrder == "IDNumber" ? "idNumber_desc" : "IDNumber"; vm.PositionNameSort = sortOrder == "PositionName" ? "positionName_desc" : "PositionName"; vm.IsUserRoleFilter = sortOrder == "IsUserRoleOnly" ? "IsUserRoleAny" : "IsUserRoleOnly"; vm.IsComponentAdminRoleFilter = sortOrder == "IsComponentAdminOnly" ? "IsComponentAdminAny" : "IsComponentAdminOnly"; vm.IsGlobalAdminRoleFilter = sortOrder == "IsGlobalAdminOnly" ? "IsGlobalAdminAny" : "IsGlobalAdminOnly"; vm.CurrentFilter = searchString; if (!string.IsNullOrEmpty(searchString)) { char[] arr = searchString.ToCharArray(); arr = Array.FindAll <char>(arr, (c => (char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-'))); string lowerString = new string(arr); lowerString = lowerString.ToLower(); vm.Members = vm.Members .Where(x => x.LastName.ToLower().Contains(lowerString) || x.FirstName.ToLower().Contains(lowerString) || x.PositionName.ToLower().Contains(lowerString) || x.IdNumber.Contains(lowerString)); } switch (sortOrder) { case "lastName_desc": vm.Members = vm.Members.OrderByDescending(x => x.LastName); break; case "firstName_desc": vm.Members = vm.Members.OrderByDescending(x => x.FirstName); break; case "FirstName": vm.Members = vm.Members.OrderBy(x => x.FirstName); break; case "idNumber_desc": vm.Members = vm.Members.OrderByDescending(x => x.IdNumber); break; case "IDNumber": vm.Members = vm.Members.OrderBy(x => x.IdNumber); break; case "PositionName": vm.Members = vm.Members.OrderBy(x => x.PositionName); break; case "positionName_desc": vm.Members = vm.Members.OrderByDescending(x => x.PositionName); break; case "IsUserRoleOnly": vm.Members = vm.Members.Where(x => x.IsUser); break; case "IsComponentAdminOnly": vm.Members = vm.Members.Where(x => x.IsComponentAdmin); break; case "IsGlobalAdminOnly": vm.Members = vm.Members.Where(x => x.IsGlobalAdmin); break; default: vm.Members = vm.Members.OrderBy(x => x.AccountStateId).ThenBy(x => x.LastName); break; } vm.PagingInfo = new PagingInfo { CurrentPage = page, ItemsPerPage = PageSize, TotalItems = searchString == null?unitOfWork.Members.GetAll().Count() : vm.Members.Count() }; ViewBag.Title = "BlueDeck Admin - Members Index"; ViewBag.Status = TempData["Status"]?.ToString() ?? ""; ViewBag.Message = TempData["Message"]?.ToString() ?? ""; vm.Members = vm.Members.Skip((page - 1) * PageSize).Take(PageSize); return(View(vm)); }