Example #1
0
        /// <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));
        }
Example #2
0
 public async Task <IActionResult> GetPaginateLookup(LookupEnum lookup, [FromQuery] SearchLookupModel searchModel) =>
 Ok(await _lookupService.GetPaginateLookupByEnum(lookup, searchModel));