Exemple #1
0
class SearchInteractionQuerySerializer(EntitySearchQuerySerializer):
    """Serialiser used to validate interaction search POST bodies."""

    kind = SingleOrListField(child=serializers.CharField(), required=False)
    company = SingleOrListField(child=StringUUIDField(), required=False)
    company_name = serializers.CharField(required=False)
    company_one_list_group_tier = SingleOrListField(child=StringUUIDField(), required=False)
    date_after = RelaxedDateTimeField(required=False)
    date_before = RelaxedDateTimeField(required=False)
    created_on_exists = serializers.BooleanField(required=False)
    dit_participants__adviser = SingleOrListField(child=StringUUIDField(), required=False)
    dit_participants__team = SingleOrListField(child=StringUUIDField(), required=False)
    communication_channel = SingleOrListField(child=StringUUIDField(), required=False)
    investment_project = SingleOrListField(child=StringUUIDField(), required=False)
    policy_areas = SingleOrListField(child=StringUUIDField(), required=False)
    policy_issue_types = SingleOrListField(child=StringUUIDField(), required=False)
    service = SingleOrListField(child=StringUUIDField(), required=False)
    sector_descends = SingleOrListField(child=StringUUIDField(), required=False)
    was_policy_feedback_provided = serializers.BooleanField(required=False)

    DEFAULT_ORDERING = SearchOrdering('date', SortDirection.desc)

    SORT_BY_FIELDS = (
        'company.name',
        'date',
        'subject',
    )
Exemple #2
0
class SearchOrderQuerySerializer(EntitySearchQuerySerializer):
    """Serialiser used to validate OMIS search POST bodies."""

    primary_market = SingleOrListField(child=StringUUIDField(), required=False)
    sector_descends = SingleOrListField(child=StringUUIDField(), required=False)
    uk_region = SingleOrListField(child=StringUUIDField(), required=False)
    # Note that completed_on is a DateTime field, but we only allow filtering using whole dates
    # for simplicity
    # OpenSearch sets the time component for completed_on_before to 23:59:59.999 automatically
    completed_on_before = RelaxedDateField(required=False)
    completed_on_after = RelaxedDateField(required=False)
    created_on_before = RelaxedDateTimeField(required=False)
    created_on_after = RelaxedDateTimeField(required=False)
    delivery_date_before = RelaxedDateField(required=False)
    delivery_date_after = RelaxedDateField(required=False)
    assigned_to_adviser = SingleOrListField(child=StringUUIDField(), required=False)
    assigned_to_team = SingleOrListField(child=StringUUIDField(), required=False)
    status = SingleOrListField(child=serializers.CharField(), required=False)
    reference = SingleOrListField(child=serializers.CharField(), required=False)
    total_cost = serializers.IntegerField(required=False)
    subtotal_cost = serializers.IntegerField(required=False)
    contact_name = serializers.CharField(required=False)
    company = SingleOrListField(child=StringUUIDField(), required=False)
    company_name = serializers.CharField(required=False)

    DEFAULT_ORDERING = SearchOrdering('created_on', SortDirection.desc)

    SORT_BY_FIELDS = (
        'created_on',
        'modified_on',
        'delivery_date',
        'payment_due_date',
    )
Exemple #3
0
class SearchExportCountryHistorySerializer(EntitySearchQuerySerializer):
    """Serializer used to validate ExportCountryHistory search POST bodies."""

    default_error_messages = {
        'no_empty_field': gettext_lazy(
            'Request must include either country or company parameters',
        ),
    }

    DEFAULT_ORDERING = SearchOrdering('date', SortDirection.desc)

    SORT_BY_FIELDS = (
        'date',
    )

    country = SingleOrListField(child=StringUUIDField(), required=False)
    company = SingleOrListField(child=StringUUIDField(), required=False)

    def validate(self, data):
        """Serializer should have at least one parameter"""
        if not data.keys() & {'company', 'country'}:
            raise serializers.ValidationError(
                self.error_messages['no_empty_field'],
            )

        return data
    def to_internal_value(self, data):
        """Converts an ordering string to an SearchOrdering."""
        field, _, direction = data.partition(':')

        if field not in self.choices:
            self.fail('invalid_field', input=field)

        if direction:
            try:
                direction = SortDirection(direction)
            except ValueError:
                self.fail('invalid_direction', input=direction)
        else:
            direction = self.default_direction

        return SearchOrdering(field, direction)
Exemple #5
0
def _map_es_ordering(ordering, mapping):
    if not ordering:
        return None

    remapped_field = mapping.get(ordering.field, ordering.field)
    return SearchOrdering(remapped_field, ordering.direction)
Exemple #6
0
 'search term',
 {
     'name': ['test'],
 },
 {
     'name': [
         'name.trigram',
     ],
 },
 [
     (
         'created_by.dit_team.id',
         UUID('00000000-0000-0000-0000-000000000000'),
     ),
 ],
 SearchOrdering('id', SortDirection.desc),
 ['id'],
 ['name'],
 {
     'query': {
         'bool': {
             'must': [
                 {
                     'bool': {
                         'should': [
                             {
                                 'match': {
                                     'name.keyword': {
                                         'query': 'search term',
                                         'boost': 2,
                                     },