Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature/RR-1358-custom-export-wins-admin-search #5330

Merged
merged 8 commits into from
Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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