public IEnumerable<ClientUserPipelineViewModel> GetClientUsers(ClientUserPipelineFilter filter) { var clientFilter = BuildFilter(filter); return _clientUserManager.GetClienUsers(clientFilter.ToFuncWithPagging(filter)).ToArray().Select(e => new ClientUserPipelineViewModel(e)); }
private ElementFilter<ClientCompanyColumnName, ClientUser, ClientUserPipelineFilter> BuildFilter(ClientUserPipelineFilter filter) { #region filter by statuses prepair var clientActiveStatus = ClientUserStatus.Active.ToString(); var clientInactiveStatus = ClientUserStatus.Inactive.ToString(); var clientTerminatedStatus = ClientUserStatus.Terminated.ToString(); IEnumerable<string> filterStatuses = new[] { clientActiveStatus, clientInactiveStatus, clientTerminatedStatus }; if (filter.IsActive || filter.IsInactive || filter.IsTerminated) { if (!filter.IsActive) { filterStatuses = filterStatuses.Where(e => e != clientActiveStatus); } if (!filter.IsInactive) { filterStatuses = filterStatuses.Where(e => e != clientInactiveStatus); } if (!filter.IsTerminated) { filterStatuses = filterStatuses.Where(e => e != clientTerminatedStatus); } } #endregion filter by statuses prepair #region filter role prepair IEnumerable<RoleFilterMapper> roleFilterMappers = new List<RoleFilterMapper> { new RoleFilterMapper{RoleType = RoleType.ClientAdmin, Value = filter.IsClientAdmin}, new RoleFilterMapper{RoleType = RoleType.SuperUser, Value = filter.IsSuperUser}, new RoleFilterMapper{RoleType = RoleType.Underwriter, Value = filter.IsUnderwriter}, new RoleFilterMapper{RoleType = RoleType.Processor, Value = filter.IsProcessor}, new RoleFilterMapper{RoleType = RoleType.LoanOfficer, Value = filter.IsLoanOfficer}, new RoleFilterMapper{RoleType = RoleType.CSR, Value = filter.IsCSR}, new RoleFilterMapper{RoleType = RoleType.JuniorUW, Value = filter.IsJuniorUW}, new RoleFilterMapper{RoleType = RoleType.CloserFunder, Value = filter.IsCloserFunder}, new RoleFilterMapper{RoleType = RoleType.OperationsManager, Value = filter.IsOperationsManager}, new RoleFilterMapper{RoleType = RoleType.OrderAdmin, Value = filter.IsOrderAdmin}, new RoleFilterMapper{RoleType = RoleType.UserAdministrator, Value = filter.IsUserAdministrator}, }; var rolesForCurrentCriteries = new List<RoleType>(); if (_securityContext.CurrentUser.Roles.Select(r => r.RoleType).All(r => r == RoleType.DvsSuperAdmin || r == RoleType.DvsAdmin)) { rolesForCurrentCriteries.AddRange(roleFilterMappers.Select(m => m.RoleType)); } else if (_securityContext.CurrentUser.Roles.Select(r => r.RoleType).Any(r => r == RoleType.UserAdministrator || r == RoleType.SuperUser || r == RoleType.ClientAdmin)) { var currentCompany = _securityContext.CurrentClientUser.Company; if (currentCompany.Profile.IsLender || currentCompany.Profile.IsOtherBusinessType) { rolesForCurrentCriteries.AddRange(roleFilterMappers.Select(m => m.RoleType)); } else if (currentCompany.Profile.IsBroker) { var exceptRoles = new[] { RoleType.OperationsManager, RoleType.JuniorUW }; rolesForCurrentCriteries.AddRange(roleFilterMappers.Select(m => m.RoleType).Where(r => !exceptRoles.Contains(r))); } else if (currentCompany.Profile.IsAppraiserManagementCompany) { rolesForCurrentCriteries.Add(RoleType.SuperUser); rolesForCurrentCriteries.Add(RoleType.OrderAdmin); rolesForCurrentCriteries.Add(RoleType.ClientAdmin); rolesForCurrentCriteries.Add(RoleType.UserAdministrator); } } roleFilterMappers = roleFilterMappers.Where(m => rolesForCurrentCriteries.Contains(m.RoleType)); var rolesTypeContainer = roleFilterMappers.Select(e => (int)e.RoleType); if (roleFilterMappers.Any(r => r.Value)) { foreach (var roleFilterMapper in roleFilterMappers) { RoleFilterMapper mapper = roleFilterMapper; if (!mapper.Value) rolesTypeContainer = rolesTypeContainer.Where(e => e != (int)mapper.RoleType); } } #endregion filter role prepair #region Client company users var clientCompaniesUsers = roleFilterMappers.Select(m => m.RoleType); #endregion Client company users return ShorFilter.AddFilter<ClientCompanyColumnName, ClientUser, ClientUserPipelineFilter>(f => !string.IsNullOrWhiteSpace(f.CompanyName), c => c.Company.CompanyName.ToUpper().Contains(filter.CompanyName.ToUpper())). AddFilter(f => !string.IsNullOrWhiteSpace(f.BranchNamePart), c => c.Branch.Name.ToUpper().Contains(filter.BranchNamePart.ToUpper())). AddFilter(f => !string.IsNullOrWhiteSpace(f.LastName), c => c.User.LastName.ToUpper().Contains(filter.LastName.ToUpper())). AddFilter(f => true, c => filterStatuses.Contains(c.StatusId)). AddQueryFilter(f => true, q => q.Where(c => c.User.Roles.Any(r => rolesTypeContainer.Contains(r.Id)))). AddFilter(f => _securityContext.CurrentUser.Roles.Select(r => r.RoleType).Any(clientCompaniesUsers.Contains), c => c.Company.Id == _securityContext.CurrentClientUser.Company.Id). AddOrders(ClientCompanyColumnName.LastNameOrder, c => c.User.LastName). AddOrders(ClientCompanyColumnName.FirstNameOrder, c => c.User.FirstName). AddOrders(ClientCompanyColumnName.Company, c => c.Company.CompanyName). AddOrders(ClientCompanyColumnName.Branch, c => c.Branch.Name). AddOrders(ClientCompanyColumnName.RoleOrder, c => c.User.Roles.FirstOrDefault().DisplayName). AddOrders(ClientCompanyColumnName.StatusOrder, c => c.StatusId); }
public int GetUserCount(ClientUserPipelineFilter filter) { var clientFilter = BuildFilter(filter); return _clientUserManager.GetClienUsersCount(clientFilter.ToFunc(filter)); }