Пример #1
0
        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()
            });
        }
Пример #2
0
        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);
        }