Skip to content

Commit

Permalink
feature/RR-1358-custom-export-wins-admin-search (#5330)
Browse files Browse the repository at this point in the history
* added properties to admin search

* added tests for admin form

* remove contacts from search

* flake8

* remove contact name from search fields

* flake8

* added searching on contact name

* flake8
  • Loading branch information
chopkinsmade committed Apr 4, 2024
1 parent d2a0aa9 commit decf865
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 2 deletions.
29 changes: 27 additions & 2 deletions datahub/export_win/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

from django.contrib import admin
from django.contrib.admin import DateFieldListFilter
from django.db.models import Value
from django.db.models.functions import Concat
from django.forms import ModelForm
from reversion.admin import VersionAdmin

Expand Down Expand Up @@ -171,10 +173,13 @@ class WinAdmin(BaseModelAdminMixin, VersionAdmin):
'modified_on',
)
search_fields = (
'id',
'company__pk',
'=id',
'adviser_name',
'=company__pk',
'lead_officer_adviser_name',
'company__name',
'country__name',
'contact_name',
'sector__segment',
'customer_response__responded_on',
'created_on',
Expand Down Expand Up @@ -270,6 +275,26 @@ def has_add_permission(self, request, obj=None):
def has_delete_permission(self, request, obj=None):
return False

def get_search_results(self, request, queryset, search_term):
if search_term:
queryset = queryset.annotate(
adviser_name=Concat(
'adviser__first_name', Value(' '), 'adviser__last_name',
),
lead_officer_adviser_name=Concat(
'lead_officer__first_name', Value(' '), 'lead_officer__last_name',
),
contact_name=Concat(
'company_contacts__first_name', Value(' '), 'company_contacts__last_name',
),
)

return super().get_search_results(
request,
queryset,
search_term,
)


class WinSoftDeletedAdminForm(ModelForm):
"""Win soft deleted admin form"""
Expand Down
51 changes: 51 additions & 0 deletions datahub/export_win/test/test_admin.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from unittest.mock import Mock

import pytest

from django.contrib.admin.sites import AdminSite
Expand Down Expand Up @@ -253,3 +255,52 @@ def test_init_method(self):
if instance_mock and instance_mock.pk:
assert form.fields['name'].required is False
assert form.fields['id'].widget.attrs['readonly'] is True


@pytest.mark.django_db
class TestWinAdminSearchResults:

def test_admin_search_no_filters(self):
win1 = WinFactory()
contacts = ContactFactory.create_batch(4)
win1.company_contacts.set(contacts)
WinFactory()

admin = WinAdmin(Win, None)
results = admin.get_search_results(Mock(), Win.objects.all(), '')[0]

assert len(results) == 2

def test_admin_search_on_adviser_name(self):
adviser = AdviserFactory(first_name='FIRST', last_name='LAST')
win1 = WinFactory(adviser=adviser)
WinFactory.create_batch(3)
admin = WinAdmin(Win, None)
results = admin.get_search_results(Mock(), Win.objects.all(), 'FIRST LAST')[0]

assert len(results) == 1
assert results[0].id == win1.id

def test_admin_search_on_lead_officer_name(self):
lead_officer = AdviserFactory(first_name='LEAD', last_name='OFFICER')
win1 = WinFactory(lead_officer=lead_officer)
WinFactory.create_batch(3)
admin = WinAdmin(Win, None)
results = admin.get_search_results(Mock(), Win.objects.all(), 'LEAD OFFICER')[0]

assert len(results) == 1
assert results[0].id == win1.id

def test_admin_search_on_contact_name(self):
contact1 = ContactFactory(first_name='John', last_name='Doe')
contact2 = ContactFactory(first_name='Jane', last_name='Smith')

win1 = WinFactory()
win1.company_contacts.add(contact1, contact2)

WinFactory.create_batch(3)
admin = WinAdmin(Win, None)
results = admin.get_search_results(Mock(), Win.objects.all(), 'John Doe')[0]

assert len(results) == 1
assert results[0].id == win1.id
35 changes: 35 additions & 0 deletions fixtures/test_data.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2262,6 +2262,41 @@
created_on: "2024-03-27T11:00:00Z"
modified_on: "2024-03-27T11:00:00Z"

- model: export_win.Win
pk: 2343d010-1436-4cb3-851a-4c87276d4953
fields:
adviser: 95a99736-5402-11eb-ae93-0242ac130002
lead_officer: e83a608e-84a4-11e6-ae22-56b6b6499611
hq_team: b9afc253-5aa1-498f-b5d7-d43dad1ced82
team_type: 1f6eccf9-289a-450b-a4af-b75600ea521b
business_potential: 0e6f1d69-e9c3-4460-a74b-3881930fe3e9
company: a73efeba-8499-11e6-ae22-56b6b6499611
company_contacts: [9b1138ab-ec7b-497f-b8c3-27fed21694ef]
customer_location: 256a5a92-44a6-473e-adcb-6f9ec4d17c62
business_type: "The best type"
description: "Description"
name_of_export: "Sand"
date: "2024-05-05"
country: 81756b9a-5d95-e211-a939-e4115bead28a
total_expected_export_value: 158778
total_expected_non_export_value: 525478
total_expected_odi_value: 88987
goods_vs_services: 8711e3dd-3a2c-4b47-aea7-9a53c135efb6
sector: b422c9d2-5f95-e211-a939-e4115bead28a
type_of_support: [1ed7f465-1461-4d66-b4a2-8d704ea239a8]
associated_programme: [b6f5c31a-aa45-4ae0-89bd-2eb3ab943f76]
is_personally_confirmed: False
is_line_manager_confirmed: False
name_of_customer: "Overseas Customer"
name_of_customer_confidential: True
export_experience: 587928e3-cab1-45cb-ba49-0656b6d2f867
lead_officer_name: "Dave"
line_manager_name: "Dave"
company_name: "Test company name"
cdms_reference: "1234"
created_on: "2024-03-27T11:00:00Z"
modified_on: "2024-03-27T11:00:00Z"

- model: export_win.Breakdown
pk: ab38d245-331e-49e9-96a1-904a984bf477
fields:
Expand Down

0 comments on commit decf865

Please sign in to comment.