Skip to content

Commit 0ef2b8d

Browse files
committed
add name sorting for provider query in practitioner view set
Signed-off-by: Isaac Milarsky <imilarsky@gmail.com>
1 parent 504484a commit 0ef2b8d

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

backend/npdfhir/views.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from rest_framework.renderers import BrowsableAPIRenderer
88
from django.core.cache import cache
99
from django.db.models import OuterRef, Subquery
10-
from .models import Provider, EndpointInstance, ClinicalOrganization, OrganizationToName
10+
from .models import Provider, EndpointInstance, ClinicalOrganization, OrganizationToName, Individual, IndividualToName
1111
from .serializers import PractitionerSerializer, ClinicalOrganizationSerializer, BundleSerializer, EndpointSerializer
1212
from .mappings import genderMapping, addressUseMapping
1313
from .renderers import FHIRRenderer
@@ -168,8 +168,38 @@ def list(self, request):
168168

169169
all_params = request.query_params
170170

171+
# Subqueries for last_name and first_name of the individual
172+
primary_last_name_subquery = (
173+
IndividualToName.objects
174+
.filter(individual=OuterRef('individual'))
175+
.order_by('last_name')
176+
.values('last_name')[:1]
177+
)
178+
179+
primary_first_name_subquery = (
180+
IndividualToName.objects
181+
.filter(individual=OuterRef('individual'))
182+
.order_by('first_name')
183+
.values('first_name')[:1]
184+
)
185+
186+
171187
providers = Provider.objects.all().prefetch_related(
172-
'npi', 'individual', 'individual__individualtoname_set', 'individual__individualtoaddress_set', 'individual__individualtoaddress_set__address__address_us', 'individual__individualtoaddress_set__address__address_us__state_code', 'individual__individualtoaddress_set__address_use', 'individual__individualtophone_set', 'individual__individualtoemail_set', 'providertootherid_set', 'providertotaxonomy_set')
188+
'npi',
189+
'individual',
190+
'individual__individualtoname_set',
191+
'individual__individualtoaddress_set',
192+
'individual__individualtoaddress_set__address__address_us',
193+
'individual__individualtoaddress_set__address__address_us__state_code',
194+
'individual__individualtoaddress_set__address_use',
195+
'individual__individualtophone_set',
196+
'individual__individualtoemail_set',
197+
'providertootherid_set',
198+
'providertotaxonomy_set'
199+
).annotate(
200+
primary_last_name=Subquery(primary_last_name_subquery),
201+
primary_first_name=Subquery(primary_first_name_subquery)
202+
).order_by('primary_last_name','primary_first_name')
173203

174204
for param, value in all_params.items():
175205
match param:

0 commit comments

Comments
 (0)