Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        /// <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));
        }