public PaginationResult SearchUsers(UserSearchCriteriaDto searchCriteria) { if (searchCriteria.PageIndex == 0) { searchCriteria.PageIndex = 1; } var searchResult = FilterUsers(searchCriteria); var users = searchResult.OrderBy(u => u.LocalName).Skip((searchCriteria.PageIndex - 1) * searchCriteria.PageSize).Take(searchCriteria.PageSize) .ToList().Select(user => { var userDto = Mapper.Map <User, UserDto>(user); var extention = _DBContext.Set <UserExtention>().Include(u => u.Roles).Include(u => u.Hospital).Include(u => u.Department).FirstOrDefault(u => u.UniqueID == user.UniqueID); if (extention != null) { extention.Roles = extention.Roles.Where(r => !r.IsDeleted && r.Status).ToList(); Mapper.Map(extention, userDto); } if (searchCriteria.IncludeMobile) { userDto.Mobile = GetUserMobile(userDto.UniqueID); } return(userDto); }); return(new PaginationResult { Data = users, Total = searchResult.Count() }); }
public IQueryable <User> FilterUsers(UserSearchCriteriaDto searchCriteria) { var users = _RisProContext.Set <User>().Where(u => u.DeleteMark != 1); if (!_LoginUserService.IsSystemAdmin && !searchCriteria.ShowAllUser) { var excludeUserIds = _DBContext.Set <UserExtention>() .Where(u => !String.IsNullOrEmpty(u.HospitalID) && u.HospitalID != _LoginUserService.DefaultSiteID) .Select(u => u.UniqueID).ToList(); users = users.Where(u => !excludeUserIds.Contains(u.UniqueID)); } if (!String.IsNullOrEmpty(searchCriteria.Name)) { users = users.Where(u => u.LoginName.Contains(searchCriteria.Name) || u.LocalName.Contains(searchCriteria.Name)); } var hasDep = !String.IsNullOrEmpty(searchCriteria.DepartmentID); var hasHospital = !String.IsNullOrEmpty(searchCriteria.HospitalID); var hasRole = !String.IsNullOrEmpty(searchCriteria.RoleID); var hasArea = !String.IsNullOrEmpty(searchCriteria.ProvinceName); var hasInCenter = searchCriteria.IsInCenter != null && searchCriteria.IsInCenter == 1; if (hasDep || hasHospital || hasRole || hasArea || hasInCenter) { var query = _DBContext.Set <UserExtention>().AsQueryable(); if (hasDep) { query = query.Where(u => u.DepartmentID == searchCriteria.DepartmentID); } if (hasHospital) { query = query.Where(u => u.HospitalID == searchCriteria.HospitalID); } if (hasRole) { query = query.Where(u => u.Roles.Any(r => r.UniqueID == searchCriteria.RoleID)); } if (hasArea) { //get hospital ids var queryHospital = _DBContext.Set <HospitalProfile>().Where(u => u.Province == searchCriteria.ProvinceName); if (!String.IsNullOrEmpty(searchCriteria.CityName)) { queryHospital = queryHospital.Where(u => u.City == searchCriteria.CityName); } var hospitalIds = queryHospital.Select(u => u.UniqueID).ToList(); query = query.Where(u => hospitalIds.Contains(u.HospitalID)); } if (hasInCenter) { var queryHospital = _DBContext.Set <HospitalProfile>().Where(u => u.IsConsultation == true); var hospitalIds = queryHospital.Select(u => u.UniqueID).ToList(); query = query.Where(u => hospitalIds.Contains(u.HospitalID)); } var userIds = query.Select(u => u.UniqueID).ToList(); users = users.Where(u => userIds.Contains(u.UniqueID)); } return(users); }