/// <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 Jobs or Divisions List by using OrganizationUnitId /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <List <DivisionCacheItem> > GetJobOrDivisionList(AutoSearchInput input) { Func <DivisionCacheItem, bool> expDivisionCache = null; var cacheItem = await _divisionCache.GetDivisionCacheItemAsync( CacheKeyStores.CalculateCacheKey(CacheKeyStores.DivisionKey, Convert.ToInt32(_customAppSession.TenantId))); //apply User have restrictions if (_customAppSession.HasProjectRestriction || _customAppSession.HasDivisionRestriction) { var strEntityClassification = string.Join(",", new string[] { EntityClassification.Division.ToDescription(), EntityClassification.Project.ToDescription() }); expDivisionCache = ExpressionBuilder.GetExpression <DivisionCacheItem>(await GetEntityAccessFilter(strEntityClassification)).Compile(); } return(cacheItem.ToList().WhereIf(!ReferenceEquals(expDivisionCache, null), expDivisionCache) .Where(p => p.TypeOfJobStatusId != ProjectStatus.Closed). WhereIf(!string.IsNullOrEmpty(input.Query), p => p.JobNumber.EmptyIfNull().ToUpper().Contains(input.Query.ToUpper()) || p.Caption.EmptyIfNull().ToUpper().Contains(input.Query.ToUpper())).ToList()); }