class CompaniesHouseCompany(BaseESModel):
    """Elasticsearch representation of CompaniesHouseCompany model."""

    id = Keyword()
    company_category = fields.NormalizedKeyword()
    company_number = fields.NormalizedKeyword()
    company_status = fields.NormalizedKeyword()
    incorporation_date = Date()
    name = Text(fields={
        'keyword': fields.NormalizedKeyword(),
        'trigram': fields.TrigramText(),
    }, )
    registered_address = fields.address_field(index_country=False)

    # TODO: delete once the migration to nested registered address is complete
    registered_address_1 = Text()
    registered_address_2 = Text()
    registered_address_town = fields.NormalizedKeyword()
    registered_address_county = Text()
    registered_address_postcode = Text(
        copy_to='registered_address_postcode_trigram')
    registered_address_postcode_trigram = fields.TrigramText()
    registered_address_country = fields.id_name_field()

    sic_code_1 = Text()
    sic_code_2 = Text()
    sic_code_3 = Text()
    sic_code_4 = Text()
    uri = Text()

    COMPUTED_MAPPINGS = {
        'registered_address':
        partial(dict_utils.address_dict, prefix='registered_address'),
    }

    MAPPINGS = {
        'id': str,

        # TODO: delete once the migration to nested registered address is complete
        'registered_address_country': dict_utils.id_name_dict,
    }

    SEARCH_FIELDS = (
        'name',  # to find 2-letter words
        'name.trigram',
        'company_number',
        'registered_address.postcode.trigram',
    )

    class Meta:
        """Default document meta data."""

        doc_type = DOC_TYPE

    class Index:
        doc_type = DOC_TYPE
Example #2
0
def test_address_field(index_country, expected_mapping):
    """Test for address_field."""
    field_mapping = address_field(index_country=index_country)
    assert field_mapping.to_dict() == expected_mapping
Example #3
0
class Company(BaseESModel):
    """Elasticsearch representation of Company model."""

    id = Keyword()
    archived = Boolean()
    archived_by = fields.contact_or_adviser_field()
    archived_on = Date()
    archived_reason = Text()
    business_type = fields.id_name_field()
    companies_house_data = fields.ch_company_field()
    company_number = fields.NormalizedKeyword()
    created_on = Date()
    description = fields.EnglishText()
    employee_range = fields.id_name_field()
    export_experience_category = fields.id_name_field()
    export_to_countries = fields.id_name_field()
    future_interest_countries = fields.id_name_field()
    global_headquarters = fields.id_name_field()
    headquarter_type = fields.id_name_field()
    modified_on = Date()
    name = Text(fields={
        'keyword': fields.NormalizedKeyword(),
        'trigram': fields.TrigramText(),
    }, )
    reference_code = fields.NormalizedKeyword()
    sector = fields.sector_field()
    address = fields.address_field()
    registered_address = fields.address_field()

    # TODO: delete once the migration to address and registered address is complete
    registered_address_1 = Text()
    registered_address_2 = Text()
    registered_address_town = fields.NormalizedKeyword()
    registered_address_county = Text()
    registered_address_country = fields.id_name_partial_field()
    registered_address_postcode = Text(copy_to=[
        'registered_address_postcode_trigram',
    ], )
    registered_address_postcode_trigram = fields.TrigramText()
    trading_address_1 = Text()
    trading_address_2 = Text()
    trading_address_town = fields.NormalizedKeyword()
    trading_address_county = Text()
    trading_address_postcode = Text(
        copy_to=['trading_address_postcode_trigram'], )
    trading_address_postcode_trigram = fields.TrigramText()
    trading_address_country = fields.id_name_partial_field()

    trading_names = Text(copy_to=['trading_names_trigram'], )
    trading_names_trigram = fields.TrigramText()
    turnover_range = fields.id_name_field()
    uk_region = fields.id_name_field()
    uk_based = Boolean()
    vat_number = Keyword(index=False)
    duns_number = Keyword()
    website = Text()
    suggest = Completion()

    COMPUTED_MAPPINGS = {
        'suggest':
        get_suggestions,
        'address':
        partial(dict_utils.address_dict, prefix='address'),
        'registered_address':
        partial(dict_utils.address_dict, prefix='registered_address'),
    }

    MAPPINGS = {
        'archived_by':
        dict_utils.contact_or_adviser_dict,
        'business_type':
        dict_utils.id_name_dict,
        'companies_house_data':
        dict_utils.ch_company_dict,
        'employee_range':
        dict_utils.id_name_dict,
        'export_experience_category':
        dict_utils.id_name_dict,
        'export_to_countries':
        lambda col: [dict_utils.id_name_dict(c) for c in col.all()],
        'future_interest_countries':
        lambda col: [dict_utils.id_name_dict(c) for c in col.all()],
        'global_headquarters':
        dict_utils.id_name_dict,
        'headquarter_type':
        dict_utils.id_name_dict,
        'sector':
        dict_utils.sector_dict,

        # TODO: delete once the migration to address and registered address is complete
        'registered_address_country':
        dict_utils.id_name_dict,
        'trading_address_country':
        dict_utils.id_name_dict,
        'turnover_range':
        dict_utils.id_name_dict,
        'uk_based':
        bool,
        'uk_region':
        dict_utils.id_name_dict,
    }

    SEARCH_FIELDS = (
        'id',
        'name',  # to find 2-letter words
        'name.trigram',
        'company_number',
        'trading_names',  # to find 2-letter words
        'trading_names_trigram',
        'reference_code',
        'address.country.name.trigram',
        'address.postcode.trigram',
        'registered_address.country.name.trigram',
        'registered_address.postcode.trigram',
    )

    class Meta:
        """Default document meta data."""

        doc_type = DOC_TYPE

    class Index:
        doc_type = DOC_TYPE
Example #4
0
class Company(BaseESModel):
    """Elasticsearch representation of Company model."""

    id = Keyword()
    archived = Boolean()
    archived_by = fields.contact_or_adviser_field()
    archived_on = Date()
    archived_reason = Text()
    business_type = fields.id_name_field()
    company_number = fields.NormalizedKeyword()
    created_on = Date()
    description = fields.EnglishText()
    employee_range = fields.id_name_field()
    export_experience_category = fields.id_name_field()
    export_to_countries = fields.id_name_field()
    future_interest_countries = fields.id_name_field()
    global_headquarters = fields.id_name_field()
    headquarter_type = fields.id_name_field()
    modified_on = Date()
    name = Text(fields={
        'keyword': fields.NormalizedKeyword(),
        'trigram': fields.TrigramText(),
    }, )
    reference_code = fields.NormalizedKeyword()
    sector = fields.sector_field()
    address = fields.address_field()
    registered_address = fields.address_field()
    one_list_group_global_account_manager = _adviser_field_with_indexed_id()
    trading_names = fields.TextWithTrigram()
    turnover_range = fields.id_name_field()
    uk_region = fields.id_name_field()
    uk_based = Boolean()
    uk_address_postcode = fields.PostcodeKeyword()
    uk_registered_address_postcode = fields.PostcodeKeyword()
    vat_number = Keyword(index=False)
    duns_number = Keyword()
    website = Text()
    suggest = Completion(contexts=[
        {
            'name': 'country',
            'type': 'category',
        },
    ], )
    latest_interaction_date = Date()

    COMPUTED_MAPPINGS = {
        'suggest':
        get_suggestions,
        'address':
        partial(dict_utils.address_dict, prefix='address'),
        'registered_address':
        partial(dict_utils.address_dict, prefix='registered_address'),
        'one_list_group_global_account_manager':
        dict_utils.computed_field_function(
            'get_one_list_group_global_account_manager',
            dict_utils.contact_or_adviser_dict,
        ),
        'latest_interaction_date':
        lambda obj: obj.latest_interaction_date,
        'uk_address_postcode':
        lambda obj: obj.address_postcode if obj.uk_based else '',
        'uk_registered_address_postcode':
        lambda obj: obj.registered_address_postcode if obj.uk_based else '',
    }

    MAPPINGS = {
        'archived_by':
        dict_utils.contact_or_adviser_dict,
        'business_type':
        dict_utils.id_name_dict,
        'employee_range':
        dict_utils.id_name_dict,
        'export_experience_category':
        dict_utils.id_name_dict,
        'export_to_countries':
        lambda col: [dict_utils.id_name_dict(c) for c in col.all()],
        'future_interest_countries':
        lambda col: [dict_utils.id_name_dict(c) for c in col.all()],
        'global_headquarters':
        dict_utils.id_name_dict,
        'headquarter_type':
        dict_utils.id_name_dict,
        'sector':
        dict_utils.sector_dict,
        'turnover_range':
        dict_utils.id_name_dict,
        'uk_based':
        bool,
        'uk_region':
        dict_utils.id_name_dict,
    }

    SEARCH_FIELDS = (
        'id',
        'name',  # to find 2-letter words
        'name.trigram',
        'company_number',
        'trading_names',  # to find 2-letter words
        'trading_names.trigram',
        'reference_code',
        'address.country.name.trigram',
        'address.postcode.trigram',
        'registered_address.country.name.trigram',
        'registered_address.postcode.trigram',
    )

    class Meta:
        """Default document meta data."""

        doc_type = DOC_TYPE

    class Index:
        doc_type = DOC_TYPE
Example #5
0
def test_address_field():
    """Test for address_field."""
    field_mapping = address_field()
    assert field_mapping.to_dict() == {
        'type': 'object',
        'properties': {
            'line_1': {
                'type': 'text',
                'fields': {
                    'trigram': {
                        'type': 'text',
                        'analyzer': 'trigram_analyzer',
                    },
                },
            },
            'line_2': {
                'type': 'text',
                'fields': {
                    'trigram': {
                        'type': 'text',
                        'analyzer': 'trigram_analyzer',
                    },
                },
            },
            'town': {
                'type': 'text',
                'fields': {
                    'trigram': {
                        'type': 'text',
                        'analyzer': 'trigram_analyzer',
                    },
                },
            },
            'county': {
                'type': 'text',
                'fields': {
                    'trigram': {
                        'type': 'text',
                        'analyzer': 'trigram_analyzer',
                    },
                },
            },
            'area': {
                'type': 'object',
                'properties': {
                    'id': {
                        'type': 'keyword'
                    },
                    'name': {
                        'type': 'text',
                        'fields': {
                            'trigram': {
                                'type': 'text',
                                'analyzer': 'trigram_analyzer',
                            },
                        },
                    },
                },
            },
            'postcode': {
                'type': 'text',
                'fields': {
                    'trigram': {
                        'type': 'text',
                        'analyzer': 'trigram_analyzer',
                    },
                },
            },
            'country': {
                'type': 'object',
                'properties': {
                    'id': {
                        'type': 'keyword'
                    },
                    'name': {
                        'type': 'text',
                        'fields': {
                            'trigram': {
                                'type': 'text',
                                'analyzer': 'trigram_analyzer',
                            },
                        },
                    },
                },
            },
        },
    }
Example #6
0
class Company(BaseSearchModel):
    """
    OpenSearch representation of Company model.
    """

    id = Keyword()
    archived = Boolean()
    archived_by = fields.contact_or_adviser_field()
    archived_on = Date()
    archived_reason = Text()
    business_type = fields.id_name_field()
    company_number = fields.NormalizedKeyword()
    created_on = Date()
    description = fields.EnglishText()
    employee_range = fields.id_name_field()
    export_experience_category = fields.id_name_field()
    export_to_countries = fields.id_name_field()
    future_interest_countries = fields.id_name_field()
    global_headquarters = fields.id_name_field()
    headquarter_type = fields.id_name_field()
    modified_on = Date()
    name = Text(
        fields={
            'keyword': fields.NormalizedKeyword(),
            'trigram': fields.TrigramText(),
        },
    )
    reference_code = fields.NormalizedKeyword()
    sector = fields.sector_field()
    address = fields.address_field()
    registered_address = fields.address_field()
    one_list_group_global_account_manager = _adviser_field_with_indexed_id()
    trading_names = fields.TextWithTrigram()
    turnover_range = fields.id_name_field()
    uk_region = fields.id_name_field()
    uk_based = Boolean()
    uk_address_postcode = fields.PostcodeKeyword()
    uk_registered_address_postcode = fields.PostcodeKeyword()
    vat_number = Keyword(index=False)
    duns_number = Keyword()
    website = Text()
    latest_interaction_date = Date()
    export_segment = Text()
    export_sub_segment = Text()

    COMPUTED_MAPPINGS = {
        'address': partial(dict_utils.address_dict, prefix='address'),
        'registered_address': partial(dict_utils.address_dict, prefix='registered_address'),
        'one_list_group_global_account_manager': dict_utils.computed_field_function(
            'get_one_list_group_global_account_manager',
            dict_utils.contact_or_adviser_dict,
        ),
        'export_to_countries': lambda obj: [
            dict_utils.id_name_dict(o.country) for o in obj.export_countries.all()
            if o.status == CompanyExportCountry.Status.CURRENTLY_EXPORTING
        ],
        'future_interest_countries': lambda obj: [
            dict_utils.id_name_dict(o.country) for o in obj.export_countries.all()
            if o.status == CompanyExportCountry.Status.FUTURE_INTEREST
        ],
        'latest_interaction_date': lambda obj: obj.latest_interaction_date,
        'uk_address_postcode': lambda obj: obj.address_postcode if obj.uk_based else '',
        'uk_registered_address_postcode':
            lambda obj: obj.registered_address_postcode if obj.uk_based else '',
    }

    MAPPINGS = {
        'archived_by': dict_utils.contact_or_adviser_dict,
        'business_type': dict_utils.id_name_dict,
        'employee_range': dict_utils.id_name_dict,
        'export_experience_category': dict_utils.id_name_dict,
        'global_headquarters': dict_utils.id_name_dict,
        'headquarter_type': dict_utils.id_name_dict,
        'sector': dict_utils.sector_dict,

        'turnover_range': dict_utils.id_name_dict,
        'uk_based': bool,
        'uk_region': dict_utils.id_name_dict,
    }

    SEARCH_FIELDS = (
        'id',
        'name',  # to find 2-letter words
        'name.trigram',
        'company_number',
        'trading_names',  # to find 2-letter words
        'trading_names.trigram',
        'reference_code',
        'sector.name',
        'address.line_1.trigram',
        'address.line_2.trigram',
        'address.town.trigram',
        'address.county.trigram',
        'address.area.name.trigram',
        'address.postcode',
        'address.country.name.trigram',
        'registered_address.line_1.trigram',
        'registered_address.line_2.trigram',
        'registered_address.town.trigram',
        'registered_address.county.trigram',
        'registered_address.area.name.trigram',
        'registered_address.postcode',
        'registered_address.country.name.trigram',
    )