/// <summary> /// Method for obtaining object search pagination /// </summary> /// <param name = "lookup"> of the search object </param> /// <param name = "searchModel"> search model </param> /// <returns> </returns> public async Task <IEnumerable <CodeLookupVm> > GetPaginateLookupByEnum(LookupEnum lookup, SearchLookupModel searchModel) { IQueryable <object> query; Expression <Func <IStatisticalUnit, bool> > searchCriteia; Expression <Func <CodeLookupBase, bool> > searchCodeLookupCriteia; Expression <Func <Country, bool> > searchIsoCodeLookupCriteia; var loweredWc = searchModel.Wildcard?.ToLower(); var statIdSearch = false; if (string.IsNullOrEmpty(searchModel.Wildcard)) { searchCriteia = x => !x.IsDeleted; searchCodeLookupCriteia = x => !x.IsDeleted; searchIsoCodeLookupCriteia = x => !x.IsDeleted; } else { searchCriteia = x => !x.IsDeleted && (!statIdSearch && x.Name.ToLower().Contains(loweredWc) || statIdSearch && x.StatId == loweredWc); searchCodeLookupCriteia = x => !x.IsDeleted && x.Name.ToLower().Contains(loweredWc) || x.NameLanguage1.ToLower().Contains(loweredWc) || x.NameLanguage2.ToLower().Contains(loweredWc) || x.Code.ToLower().StartsWith(loweredWc); searchIsoCodeLookupCriteia = x => !x.IsDeleted && x.Name.ToLower().Contains(loweredWc) || x.NameLanguage1.ToLower().Contains(loweredWc) || x.NameLanguage2.ToLower().Contains(loweredWc) || x.IsoCode.ToLower().StartsWith(loweredWc) || x.Code.ToLower().StartsWith(loweredWc); } switch (lookup) { case LookupEnum.LocalUnitLookup: statIdSearch = await StatUnitExistsByStatId <LocalUnit>(loweredWc); query = _dbContext.LocalUnits.Where(searchCriteia); break; case LookupEnum.LegalUnitLookup: statIdSearch = await StatUnitExistsByStatId <LegalUnit>(loweredWc); query = _dbContext.LegalUnits.Where(searchCriteia); break; case LookupEnum.EnterpriseUnitLookup: statIdSearch = await StatUnitExistsByStatId <EnterpriseUnit>(loweredWc); query = _dbContext.EnterpriseUnits.Where(searchCriteia) .Skip(searchModel.Page * searchModel.PageSize).Take(searchModel.PageSize); break; case LookupEnum.EnterpriseGroupLookup: statIdSearch = await StatUnitExistsByStatId <EnterpriseGroup>(loweredWc); query = _dbContext.EnterpriseGroups.Where(searchCriteia); break; case LookupEnum.CountryLookup: return((await _dbContext.Countries .Where(searchIsoCodeLookupCriteia) .OrderBy(x => x.Name) .ToListAsync()) .Select(x => new CodeLookupVm { Id = x.Id, Name = $"({x.IsoCode}) ({x.Code}) {x.Name}", NameLanguage1 = $"({x.IsoCode}) ({x.Code}) {x.NameLanguage1}", NameLanguage2 = $"({x.IsoCode}) ({x.Code}) {x.NameLanguage2}" })); case LookupEnum.LegalFormLookup: query = _dbContext.LegalForms.Where(searchCodeLookupCriteia); break; case LookupEnum.SectorCodeLookup: query = _dbContext.SectorCodes.Where(searchCodeLookupCriteia); break; case LookupEnum.DataSourceClassificationLookup: query = _dbContext.DataSourceClassifications.Where(x => !x.IsDeleted); break; case LookupEnum.ReorgTypeLookup: query = _dbContext.ReorgTypes.Where(x => !x.IsDeleted); break; case LookupEnum.EntGroupTypeLookup: query = _dbContext.EnterpriseGroupTypes.Where(x => !x.IsDeleted) .Select(x => new CodeLookupVm { Id = x.Id, Name = $"{x.Name}", NameLanguage1 = $"{x.NameLanguage1}", NameLanguage2 = $"{x.NameLanguage2}" }); break; case LookupEnum.UnitStatusLookup: query = _dbContext.Statuses.Where(x => !x.IsDeleted); break; case LookupEnum.UnitSizeLookup: query = _dbContext.UnitsSize.Where(x => !x.IsDeleted); break; case LookupEnum.ForeignParticipationLookup: query = _dbContext.ForeignParticipations.Where(x => !x.IsDeleted); break; case LookupEnum.RegistrationReasonLookup: query = _dbContext.RegistrationReasons.Where(x => !x.IsDeleted); break; case LookupEnum.PersonTypeLookup: query = _dbContext.PersonTypes.Where(x => !x.IsDeleted) .Select(x => new CodeLookupVm { Id = x.Id, Name = $"{x.Name}", NameLanguage1 = $"{x.NameLanguage1}", NameLanguage2 = $"{x.NameLanguage2}" }); break; case LookupEnum.RegionLookup: return((await _dbContext.Regions .Where(searchCodeLookupCriteia) .OrderBy(x => x.Code) .Skip(searchModel.Page * searchModel.PageSize) .Take(searchModel.PageSize) .ToListAsync()) .Select(region => new CodeLookupVm { Id = region.Id, Name = $"{region.Code} {(region as Region)?.FullPath ?? region.Name}", NameLanguage1 = $"{region.Code} {(region as Region)?.FullPathLanguage1 ?? region.NameLanguage1}", NameLanguage2 = $"{region.Code} {(region as Region)?.FullPathLanguage2 ?? region.NameLanguage2}" })); case LookupEnum.ActivityCategoryLookup: return((await _dbContext.ActivityCategories .Where(searchCodeLookupCriteia) .OrderBy(x => x.Code) .Skip(searchModel.Page * searchModel.PageSize) .Take(searchModel.PageSize) .ToListAsync()) .Select(act => new CodeLookupVm { Id = act.Id, Name = act.Name, Code = act.Code, NameLanguage1 = act.NameLanguage1, NameLanguage2 = act.NameLanguage2 })); default: throw new ArgumentOutOfRangeException(nameof(lookup), lookup, null); } query = query.Skip(searchModel.Page * searchModel.PageSize).Take(searchModel.PageSize); return(await Execute(query)); }
public async Task <IActionResult> GetPaginateLookup(LookupEnum lookup, [FromQuery] SearchLookupModel searchModel) => Ok(await _lookupService.GetPaginateLookupByEnum(lookup, searchModel));