示例#1
0
        public async Task <QueryResult <UsersRolesViewModel> > GetUsersWithRoles(UsersRolesQuery queryObj)
        {
            var result = new QueryResult <UsersRolesViewModel>();
            var user   = await GetUser(GetLoggedInUserId());

            var query = (from us in _context.Users
                         join ud in _context.UserDeployment
                         on us.Id equals ud.UserId
                         into UserDeploy
                         //do left-join
                         from usd in UserDeploy.DefaultIfEmpty()
                         //join o in _context.Organizations
                         //    on usd.OrganizationId equals o.Id
                         //    into UserDeptOrg
                         ////do left-join
                         //from udo in UserDeptOrg.DefaultIfEmpty()
                         select new
            {
                Id = us.Id,
                UserName = us.UserName,
                FirstName = us.FirstName,
                MiddleName = us.MiddleName,
                LastName = us.LastName,
                JobTitle = us.JobTitle,
                StaffNo = us.StaffNo,
                UserDepartment = usd.UserDepartment,
                UserOrganization = us.UserOrganization,
                OrganizationId = us.OrganizationId,
                Deleted = us.Deleted,
                Roles = (from userRole in us.UserRoles
                         join role in _context.Roles
                         on userRole.RoleId equals role.Id
                         select role.Name).ToList(),
                AvailableRoles = (from allRoles in _context.Roles
                                  select allRoles.Name).ToList()
            })
                        .Where(x => user.UserName != "Admin" ? x.OrganizationId == user.OrganizationId && x.UserName != "Admin" && x.Deleted != true : x.Deleted != true)
                        .ToList().Select((s, index) => new UsersRolesViewModel()
            {
                SerialNumber         = index + 1,
                Id                   = s.Id,
                UserName             = s.UserName,
                FirstName            = s.FirstName,
                MiddleName           = s.MiddleName,
                LastName             = s.LastName,
                JobTitle             = s.JobTitle,
                StaffNo              = s.StaffNo,
                UserDepartment       = s.UserDepartment,
                UserOrganization     = s.UserOrganization,
                OrganizationId       = s.OrganizationId,
                RolesForUser         = s.Roles,
                UserRoleString       = string.Join(", ", s.Roles.ToArray()),
                AvailableRoles       = s.AvailableRoles,
                AvailableRolesString = string.Join(", ", s.AvailableRoles.ToArray()),
            })
                        .AsQueryable();

            if (!string.IsNullOrEmpty(queryObj.Name))
            {
                query = query.Where(v => v.FirstName.Contains(queryObj.Name, StringComparison.OrdinalIgnoreCase) | v.MiddleName.Contains(queryObj.Name, StringComparison.OrdinalIgnoreCase)
                                    | v.LastName.Contains(queryObj.Name, StringComparison.OrdinalIgnoreCase) | v.StaffNo.Contains(queryObj.Name, StringComparison.OrdinalIgnoreCase)
                                    | v.RolesForUser.Any(x => x.Contains(queryObj.Name, StringComparison.OrdinalIgnoreCase)));
            }

            //string key of the dictionary must be equal the column title in the ui. Value of the dictionary must be a valid column in db/query
            var columnsMap = new Dictionary <string, Expression <Func <UsersRolesViewModel, object> > >()
            {
                ["firstName"] = v => v.FirstName,
                ["alias"]     = v => v.KnownAs,
                ["username"]  = v => v.UserName,
                ["gender"]    = v => v.Gender,
                ["email1"]    = v => v.Email1,
                ["Roles"]     = v => v.RolesForUser,
            };

            query = query.ApplyOrdering(queryObj, columnsMap);

            result.TotalItems = query.Count();
            query             = query.ApplyPaging(queryObj);

            result.Items = query.ToList();

            return(result);
        }
示例#2
0
        public async Task <UserDetailsViewModel> GetUserFullData(Guid id)
        {
            var userDetails = (from us in _context.Users
                               join ud in _context.UserDeployment
                               on us.Id equals ud.UserId
                               into UserDeploy
                               //do left-join
                               from usd in UserDeploy.DefaultIfEmpty()
                               join od in _context.OrganizationDepartments
                               on usd.DepartmentId equals od.Id
                               into UserDeploymentAndDept
                               //do left-join
                               from udd in UserDeploymentAndDept.DefaultIfEmpty()
                               join o in _context.Organizations
                               on udd.OrganizationId equals o.Id
                               into UserDeploymentOrgDept
                               //do left-join
                               from uod in UserDeploymentOrgDept.DefaultIfEmpty()
                               join g in _context.Gallery
                               on us.Id equals g.UserId
                               into UserGalleryAndDeploymentOrgDept
                               //do left-join
                               from ug in UserGalleryAndDeploymentOrgDept.DefaultIfEmpty()
                               where us.Id == id
                               select new UserDetailsViewModel
            {
                Id = us.Id,
                Username = us.UserName,
                FirstName = us.FirstName,
                MiddleName = us.MiddleName,
                LastName = us.LastName,
                JobTitle = us.JobTitle,
                Email1 = us.Email1,
                Email2 = us.Email2,
                Phone1 = us.Phone1,
                Phone2 = us.Phone2,
                StaffNo = us.StaffNo,
                DateOfBirth = us.DateOfBirth,
                KnownAs = us.KnownAs,
                LastActive = us.LastActive,
                Introduction = us.Introduction,
                AreaOfOriginId = us.AreaOfOriginId,
                CityOfOriginId = us.CityOfOriginId,
                StateOfOriginId = us.StateOfOriginId,
                CountryOfOriginId = us.CountryOfOriginId,
                DepartmentId = usd.DepartmentId,
                OrganizationId = udd.OrganizationId,
                UserDepartment = usd.UserDepartment,
                UserOrganization = udd.Organization,
                Gender = us.Gender,
                PreferredContactMethod = us.PreferredContactMethod,
                ProfilePhotoName = ug.FileName,
                AreaOfDeploymentId = usd.AreaOfDeploymentId,
                CityOfDeploymentId = usd.CityOfDeploymentId,
                StateOfDeploymentId = usd.StateOfDeploymentId,
                CountryOfDeploymentId = usd.CountryOfDeploymentId,
                AreaOfDeployment = usd.AreaOfDeployment,
                CityOfDeployment = usd.CityOfDeployment,
                StateOfDeployment = usd.StateOfDeployment,
                CountryOfDeployment = usd.CountryOfDeployment,
                DateOfDeployment = usd.DateOfDeployment,
                DateOfSignOff = usd.DateOfSignOff,
                IsActive = us.IsActive,
                MobileAppLoginPattern = us.MobileAppLoginPattern
            }).FirstOrDefaultAsync();

            return(await userDetails);
        }
示例#3
0
        public async Task <QueryResult <UserDetailsViewModel> > GetUserList(UsersQuery queryObj)
        {
            var user = await GetUser(GetLoggedInUserId());

            var query = (from us in _context.Users
                         join ud in _context.UserDeployment
                         on us.Id equals ud.UserId
                         into UserDeploy
                         //do left-join
                         from usd in UserDeploy.DefaultIfEmpty()
                         join g in _context.Gallery
                         on us.Id equals g.UserId
                         into UserGalleryDeploy
                         //do left-join
                         from ug in UserGalleryDeploy.DefaultIfEmpty()
                         select new
            {
                Id = us.Id,
                Username = us.UserName,
                FirstName = us.FirstName,
                MiddleName = us.MiddleName,
                LastName = us.LastName,
                JobTitle = us.JobTitle,
                Email1 = us.Email1,
                Email2 = us.Email2,
                Phone1 = us.Phone1,
                Phone2 = us.Phone2,
                StaffNo = us.StaffNo,
                DateOfBirth = us.DateOfBirth,
                KnownAs = us.KnownAs,
                LastActive = us.LastActive,
                Introduction = us.Introduction,
                AreaOfOriginId = us.AreaOfOriginId,
                CityOfOriginId = us.CityOfOriginId,
                StateOfOriginId = us.StateOfOriginId,
                CountryOfOriginId = us.CountryOfOriginId,
                DepartmentId = usd.DepartmentId,
                OrganizationId = us.OrganizationId,
                UserDepartment = usd.UserDepartment,
                UserOrganization = us.UserOrganization,
                Gender = us.Gender,
                PreferredContactMethod = us.PreferredContactMethod,
                ProfilePhotoName = ug.FileName,
                AreaOfDeploymentId = usd.AreaOfDeploymentId,
                CityOfDeploymentId = usd.CityOfDeploymentId,
                StateOfDeploymentId = usd.StateOfDeploymentId,
                CountryOfDeploymentId = usd.CountryOfDeploymentId,
                AreaOfDeployment = usd.AreaOfDeployment,
                CityOfDeployment = usd.CityOfDeployment,
                StateOfDeployment = usd.StateOfDeployment,
                CountryOfDeployment = usd.CountryOfDeployment,
                DateOfDeployment = usd.DateOfDeployment,
                DateOfSignOff = usd.DateOfSignOff,
                Deleted = us.Deleted
            }).Where(x => user.UserName != "Admin" ? x.OrganizationId == user.OrganizationId && x.Username != "Admin" && x.Deleted != true : x.Deleted != true)
                        .ToList().Select((s, index) => new UserDetailsViewModel()
            {
                SerialNumber           = index + 1,
                Id                     = s.Id,
                Username               = s.Username,
                FirstName              = s.FirstName,
                MiddleName             = s.MiddleName,
                LastName               = s.LastName,
                JobTitle               = s.JobTitle,
                Email1                 = s.Email1,
                Email2                 = s.Email2,
                Phone1                 = s.Phone1,
                Phone2                 = s.Phone2,
                StaffNo                = s.StaffNo,
                DateOfBirth            = s.DateOfBirth,
                KnownAs                = s.KnownAs,
                LastActive             = s.LastActive,
                Introduction           = s.Introduction,
                AreaOfOriginId         = s.AreaOfOriginId,
                CityOfOriginId         = s.CityOfOriginId,
                StateOfOriginId        = s.StateOfOriginId,
                CountryOfOriginId      = s.CountryOfOriginId,
                DepartmentId           = s.DepartmentId,
                OrganizationId         = s.OrganizationId,
                UserDepartment         = s.UserDepartment,
                UserOrganization       = s.UserOrganization,
                Gender                 = s.Gender,
                PreferredContactMethod = s.PreferredContactMethod,
                ProfilePhotoName       = s.ProfilePhotoName,
                AreaOfDeploymentId     = s.AreaOfDeploymentId,
                CityOfDeploymentId     = s.CityOfDeploymentId,
                StateOfDeploymentId    = s.StateOfDeploymentId,
                CountryOfDeploymentId  = s.CountryOfDeploymentId,
                AreaOfDeployment       = s.AreaOfDeployment,
                CityOfDeployment       = s.CityOfDeployment,
                StateOfDeployment      = s.StateOfDeployment,
                CountryOfDeployment    = s.CountryOfDeployment,
                DateOfDeployment       = s.DateOfDeployment,
                DateOfSignOff          = s.DateOfSignOff
            })
                        .AsQueryable();

            var result = new QueryResult <UserDetailsViewModel>();

            if (!string.IsNullOrEmpty(queryObj.FullName))
            {
                query = query.Where(v => v.FirstName.Contains(queryObj.FullName) | v.MiddleName.Contains(queryObj.FullName) | v.LastName.Contains(queryObj.FullName));
            }

            //string key of the dictionary must be equal the column title in the ui. Value of the dictionary must be a valid column in db/query
            var columnsMap = new Dictionary <string, Expression <Func <UserDetailsViewModel, object> > >()
            {
                ["firstName"] = v => v.FirstName,
                ["alias"]     = v => v.KnownAs,
                ["username"]  = v => v.Username,
                ["gender"]    = v => v.Gender,
                ["email1"]    = v => v.Email1
            };

            query = query.ApplyOrdering(queryObj, columnsMap);

            result.TotalItems = query.Count();
            //query = query.ApplyPaging(queryObj);

            result.Items = query.ToList();

            return(result);
        }