/// <summary> /// Get Project/Division AccessList By UserId /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <List <ProjectAccessListUnitDto> > GetProjectAccessList(GetUserSecuritySettingsInputUnit input) { List <DivisionCacheItem> divisionCacheItems = new List <DivisionCacheItem>(); AutoSearchInput cacheInput = new AutoSearchInput() { OrganizationUnitId = input.OrganizationUnitId }; var divisionCache = await _divisionCache.GetDivisionCacheItemAsync( CacheKeyStores.CalculateCacheKey(CacheKeyStores.DivisionKey, Convert.ToInt32(_customAppSession.TenantId))); var user = await _userManager.GetUserByIdAsync(input.UserId); var organizationUnits = await _organizationExtendedUnitManager.GetExtendedOrganizationUnitsAsync(user, input.EntityClassificationId); var organizationUnitIds = organizationUnits.Select(ou => ou.Id); var strOrgIds = string.Join(",", organizationUnitIds.ToArray()); if (!string.IsNullOrEmpty(strOrgIds)) { if (ReferenceEquals(input.Filters, null)) { input.Filters = new List <Filters>(); } var orgfilter = new Filters() { Property = "OrganizationUnitId", Comparator = 6,//In Operator SearchTerm = strOrgIds, DataType = DataTypes.Text }; input.Filters.Add(orgfilter); } if (!ReferenceEquals(input.Filters, null)) { Func <DivisionCacheItem, bool> multiRangeExp = null; var multiRangeFilters = input.Filters.Where(u => u.IsMultiRange == true).ToList(); if (multiRangeFilters.Count != 0) { multiRangeExp = ExpressionBuilder.GetExpression <DivisionCacheItem>(Helper.GetMultiRangeFilters(multiRangeFilters), SearchPattern.Or).Compile(); input.Filters.RemoveAll(u => u.IsMultiRange == true); } var filterCondition = ExpressionBuilder.GetExpression <DivisionCacheItem>(input.Filters).Compile(); divisionCacheItems = divisionCache.ToList() .WhereIf(multiRangeFilters.Count != 0, multiRangeExp) .Where(filterCondition).ToList(); } return(divisionCacheItems.Select(item => { var dto = new ProjectAccessListUnitDto(); dto.JobNumber = item.JobNumber; dto.Caption = item.Caption; dto.OrganizationUnitId = item.OrganizationUnitId; dto.JobId = item.JobId; return dto; }).ToList()); }
/// <summary> /// Get Project/Division List which is not in ProjectAccessList /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <List <ProjectAccessListUnitDto> > GetProjectList(GetUserSecuritySettingsInputUnit input) { List <DivisionCacheItem> divisionCacheItems = new List <DivisionCacheItem>(); var user = await _userManager.GetUserByIdAsync(input.UserId); var organizationUnits = await _organizationExtendedUnitManager.GetExtendedOrganizationUnitsAsync(user, input.EntityClassificationId); var divisionCache = await _divisionCache.GetDivisionCacheItemAsync( CacheKeyStores.CalculateCacheKey(CacheKeyStores.DivisionKey, Convert.ToInt32(_customAppSession.TenantId))); if (!ReferenceEquals(input.Filters, null)) { Func <DivisionCacheItem, bool> multiRangeExp = null; Func <DivisionCacheItem, bool> filterCondition = null; var multiRangeFilters = input.Filters.Where(u => u.IsMultiRange == true).ToList(); if (multiRangeFilters.Count != 0) { multiRangeExp = ExpressionBuilder.GetExpression <DivisionCacheItem>(Helper.GetMultiRangeFilters(multiRangeFilters), SearchPattern.Or).Compile(); input.Filters.RemoveAll(u => u.IsMultiRange == true); } var otherFilters = input.Filters.Where(u => u.IsMultiRange == false).ToList(); if (otherFilters.Count != 0) { filterCondition = ExpressionBuilder.GetExpression <DivisionCacheItem>(otherFilters).Compile(); } divisionCacheItems = divisionCache.ToList() .WhereIf(multiRangeFilters.Count != 0, multiRangeExp) .WhereIf(otherFilters.Count != 0, filterCondition). Where(p => !organizationUnits.Any(p2 => p2.Id == p.OrganizationUnitId)).ToList(); } else { divisionCacheItems = divisionCache.ToList() .Where(p => !organizationUnits.Any(p2 => p2.Id == p.OrganizationUnitId)).ToList(); } return(divisionCacheItems.Select(item => { var dto = new ProjectAccessListUnitDto(); dto.JobId = item.JobId; dto.JobNumber = item.JobNumber; dto.Caption = item.Caption; dto.OrganizationUnitId = item.OrganizationUnitId; return dto; }).ToList()); }