Ejemplo n.º 1
0
        public AdresMatchScorableItem Map(AddressDetailItem source)
        {
            var streetName        = _latestQueries.GetAllLatestStreetNames().Single(x => x.StreetNameId == source.StreetNameId);
            var municipality      = _latestQueries.GetAllLatestMunicipalities().Single(x => x.NisCode == streetName.NisCode);
            var defaultStreetName = AddressMapper.GetDefaultStreetNameName(streetName, municipality.PrimaryLanguage);
            var homonym           = AddressMapper.GetDefaultHomonymAddition(streetName, municipality.PrimaryLanguage);

            return(new AdresMatchScorableItem
            {
                AddressId = source.AddressId,
                Identificator = new AdresIdentificator(_responseOptions.Naamruimte, source.PersistentLocalId.ToString(), source.VersionTimestamp.ToBelgianDateTimeOffset()),
                Detail = string.Format(_responseOptions.DetailUrl, source.PersistentLocalId.Value.ToString()),
                Gemeente = new AdresMatchItemGemeente
                {
                    ObjectId = municipality.NisCode,
                    Detail = string.Format(_responseOptions.GemeenteDetailUrl, municipality.NisCode),
                    Gemeentenaam = new Gemeentenaam(new GeografischeNaam(municipality.DefaultName.Value, municipality.DefaultName.Key))
                },
                Straatnaam = new AdresMatchItemStraatnaam
                {
                    ObjectId = streetName.PersistentLocalId,
                    Detail = string.Format(_responseOptions.StraatnaamDetailUrl, streetName.PersistentLocalId),
                    Straatnaam = new Straatnaam(new GeografischeNaam(defaultStreetName.Value, defaultStreetName.Key)),
                },
                HomoniemToevoeging = homonym == null ? null : new HomoniemToevoeging(new GeografischeNaam(homonym.Value.Value, homonym.Value.Key)),
                Postinfo = new AdresMatchItemPostinfo
                {
                    ObjectId = source.PostalCode,
                    Detail = string.Format(_responseOptions.PostInfoDetailUrl, source.PostalCode),
                },
                Huisnummer = source.HouseNumber,
                Busnummer = source.BoxNumber,
                VolledigAdres = AddressMapper.GetVolledigAdres(source.HouseNumber, source.BoxNumber, source.PostalCode, streetName, municipality),
                AdresPositie = AddressMapper.GetAddressPoint(source.Position),
                PositieSpecificatie = AddressMapper.ConvertFromGeometrySpecification(source.PositionSpecification),
                PositieGeometrieMethode = AddressMapper.ConvertFromGeometryMethod(source.PositionMethod),
                AdresStatus = AddressMapper.ConvertFromAddressStatus(source.Status),
                OfficieelToegekend = source.OfficiallyAssigned,
            });
        }
Ejemplo n.º 2
0
        public async Task <AddressBosaResponse> Filter(BosaAddressRequest filter)
        {
            var addressesQuery      = _context.AddressDetail.AsNoTracking().OrderBy(x => x.PersistentLocalId).Where(x => x.Complete && !x.Removed);
            var streetNamesQuery    = _context.StreetNameBosaItems.AsNoTracking().Where(x => x.IsComplete);
            var municipalitiesQuery = _context.MunicipalityBosaItems.AsNoTracking();

            if (filter?.IsOnlyAdresIdRequested == true && int.TryParse(filter.AdresCode?.ObjectId, out var adresId))
            {
                addressesQuery = addressesQuery
                                 .Where(a => a.PersistentLocalId == adresId)
                                 .ToList()
                                 .AsQueryable();

                var address = addressesQuery.FirstOrDefault();
                if (address == null)
                {
                    return new AddressBosaResponse {
                               Adressen = new List <AddressBosaResponseItem>()
                    }
                }
                ;

                streetNamesQuery = (await streetNamesQuery
                                    .Where(x => x.StreetNameId == address.StreetNameId)
                                    .ToListAsync())
                                   .AsQueryable();

                var streetName = streetNamesQuery.FirstOrDefault();

                municipalitiesQuery = (await municipalitiesQuery
                                       .Where(x => x.NisCode == streetName.NisCode)
                                       .ToListAsync())
                                      .AsQueryable();
            }

            var gemeenteCodeVersieId = filter?.GemeenteCode?.VersieId == null ? null : new Rfc3339SerializableDateTimeOffset(filter.GemeenteCode.VersieId.Value).ToString();

            var filteredMunicipalities = FilterMunicipalities(
                filter?.GemeenteCode?.ObjectId,
                gemeenteCodeVersieId,
                filter?.Gemeentenaam?.Spelling,
                filter?.Gemeentenaam?.Taal,
                filter?.Gemeentenaam?.SearchType ?? BosaSearchType.Bevat,
                municipalitiesQuery);

            var straatnaamCodeVersieId = filter?.StraatnaamCode?.VersieId == null ? null : new Rfc3339SerializableDateTimeOffset(filter.StraatnaamCode.VersieId.Value).ToString();
            var filteredStreetNames    = FilterStreetNames(
                filter?.StraatnaamCode?.ObjectId,
                straatnaamCodeVersieId,
                filter?.Straatnaam?.Spelling,
                filter?.Straatnaam?.Taal,
                filter?.Straatnaam?.SearchType ?? BosaSearchType.Bevat,
                streetNamesQuery,
                filteredMunicipalities);

            var filteredAddresses =
                FilterAddresses(
                    filter?.AdresCode?.ObjectId,
                    filter?.AdresCode?.VersieId,
                    filter?.Huisnummer,
                    filter?.Busnummer,
                    filter?.AdresStatus,
                    filter?.PostCode?.ObjectId,
                    addressesQuery,
                    filteredStreetNames)
                .OrderBy(x => x.PersistentLocalId);

            var municipalities = filteredMunicipalities.Select(x => new { x.NisCode, x.Version }).ToList();
            var streetNames    = filteredStreetNames.Select(x => new { x.StreetNameId, x.PersistentLocalId, x.Version, x.NisCode }).ToList();

            var addresses = filteredAddresses
                            .Take(1001)
                            .ToList()
                            .Select(x =>
            {
                var streetName = streetNames.First(y => y.StreetNameId == x.StreetNameId);

                var municipality = municipalities.First(y => y.NisCode == streetName.NisCode);
                var postalCode   = _context
                                   .PostalInfoLatestItems
                                   .AsNoTracking()
                                   .First(y => y.PostalCode == x.PostalCode);

                return(new AddressBosaResponseItem(
                           _responseOptions.PostInfoNaamruimte,
                           _responseOptions.GemeenteNaamruimte,
                           _responseOptions.StraatNaamNaamruimte,
                           _responseOptions.Naamruimte,
                           x.PersistentLocalId.Value,
                           AddressMapper.ConvertFromAddressStatus(x.Status),
                           x.HouseNumber,
                           x.BoxNumber,
                           x.OfficiallyAssigned,
                           AddressMapper.GetAddressPoint(x.Position),
                           AddressMapper.ConvertFromGeometryMethod(x.PositionMethod),
                           AddressMapper.ConvertFromGeometrySpecification(x.PositionSpecification),
                           x.VersionTimestamp.ToBelgianDateTimeOffset(),
                           streetName.PersistentLocalId,
                           streetName.Version,
                           municipality.NisCode,
                           municipality.Version,
                           x.PostalCode,
                           postalCode.Version));
            })
                            .ToList();

            return(new AddressBosaResponse
            {
                Adressen = addresses
            });
        }