public UserGridViewModel(IEnumerable <User> UserList, IEnumerable <Department> DepartmentList, IEnumerable <Position> PositionList, int TotalCount) { rows = new List <UserGridRowModel>(); Page = 1; Total = TotalCount; foreach (User _user in UserList) { string _dept = DepartmentList.Where(d => d.DepartmentID == _user.DepartmentID).Select(d => d.Name).FirstOrDefault(); string _pos = PositionList.Where(p => p.PositionID == _user.PositionID).Select(p => p.Name).FirstOrDefault(); UserGridRowModel _userModel = new UserGridRowModel(_user, _dept, _pos); rows.Add(_userModel); } Records = 20; }
public async Task <UserGridModel> GetJournalUsers(string tenantId, UserGridSearchModel userGridSearchModel) { string[] roles = null; if (userGridSearchModel.Roles != null) { roles = userGridSearchModel.Roles.Split(",").Select(x => x.Trim()).ToArray(); if (roles.Any()) { roles = roles.Select(x => ((Role)int.Parse(x)).ToString()).ToArray(); } } var users = _context.Users.Where(x => x.Tenant.JournalPath == tenantId && (x.FirstName.ToLower() + " " + x.LastName.ToLower()).Contains(userGridSearchModel.Name) && x.Email.Contains(userGridSearchModel.Email)); if (userGridSearchModel.Status.HasValue) { users = userGridSearchModel.Status.Value ? users.Where(x => x.IsDisabled != true) : users.Where(x => x.IsDisabled == true); } var accpetedRoles = _context.Roles.Where(x => x.Name != Role.Author.ToString() && x.Name != Role.JournalAdmin.ToString() && x.Name != Role.SystemAdmin.ToString()); IQueryable <IdentityRole <long> > dbRoles = roles != null && roles.Any() ? accpetedRoles.Where(x => roles.Contains(x.Name)) : accpetedRoles; var filteredUsers = (from userRole in _context.UserRoles join user in users on userRole.UserId equals user.Id join role in dbRoles on userRole.RoleId equals role.Id select new { UserId = user.Id, user.FirstName, user.LastName, user.Email, user.ProfileImage } into g group g by g.UserId into g select new { UserId = g.Key, FirstName = g.Max(x => x.FirstName), LastName = g.Max(x => x.LastName), Email = g.Max(x => x.Email), ProfileImage = g.Max(x => x.ProfileImage) }); if (userGridSearchModel.sortField == "Name" && userGridSearchModel.sortOrder == "asc") { filteredUsers = filteredUsers.OrderBy(x => x.FirstName).ThenBy(x => x.LastName); } else if (userGridSearchModel.sortField == "Name" && userGridSearchModel.sortOrder == "desc") { filteredUsers = filteredUsers.OrderByDescending(x => x.FirstName).ThenByDescending(x => x.LastName); } if (userGridSearchModel.sortField == "Email" && userGridSearchModel.sortOrder == "asc") { filteredUsers = filteredUsers.OrderBy(x => x.Email); } else if (userGridSearchModel.sortField == "Email" && userGridSearchModel.sortOrder == "desc") { filteredUsers = filteredUsers.OrderByDescending(x => x.Email); } var extractedUsers = await filteredUsers.Skip((userGridSearchModel.pageIndex - 1) *userGridSearchModel.pageSize).Take(userGridSearchModel.pageSize).Select(x => new { x.UserId, x.FirstName, x.LastName, x.Email, x.ProfileImage }).ToArrayAsync(); var userIds = extractedUsers.Select(x => x.UserId); var userRoles = await(from userRole in _context.UserRoles join role in accpetedRoles on userRole.RoleId equals role.Id join user in _context.Users on userRole.UserId equals user.Id where userIds.Contains(userRole.UserId) select new { UserId = userRole.UserId, Role = role.Name, user.IsDisabled } ).ToArrayAsync(); var groupedUsers = userRoles.GroupBy(x => x.UserId); var data = new UserGridRowModel[extractedUsers.Length]; for (int i = 0; i < extractedUsers.Length; i++) { var currentUser = extractedUsers[i]; var groupedUser = groupedUsers.First(z => z.Key == currentUser.UserId); data[i] = new UserGridRowModel { ProfileImage = string.IsNullOrEmpty(currentUser.ProfileImage) ? _configuration[JMSSetting.DefaultAvtar] : _fileService.GetFile(currentUser.ProfileImage), FirstName = currentUser.FirstName, LastName = currentUser.LastName, IsDisabled = groupedUser.First().IsDisabled, UserId = currentUser.UserId, UserName = currentUser.Email, Roles = groupedUser.Select(x => x.Role).ToArray() }; } return(new UserGridModel { Data = data, ItemsCount = await filteredUsers.CountAsync() }); }