Skip to content

Commit e9bd253

Browse files
[DEV-14235] update first tier
1 parent 0dcc638 commit e9bd253

File tree

1 file changed

+41
-5
lines changed

1 file changed

+41
-5
lines changed

usaspending_api/references/v2/views/filter_tree/psc_filter_tree.py

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,14 +253,50 @@ def _path_is_valid(self, path: list) -> bool:
253253

254254
def get_count(self, tiered_keys: list, id) -> int:
255255
if len(tiered_keys) == 0:
256-
filters = [Q(code__iregex=PSC_GROUPS.get(id, {}).get("count_pattern") or "(?!)")]
257-
return PSC.objects.filter(*filters).count()
256+
if id == "Research and Development":
257+
return (
258+
PSC.objects.filter(Q(code__startswith="A"))
259+
.annotate(code_prefix=Substr("code", 1, 2))
260+
.values("code_prefix")
261+
.distinct()
262+
.count()
263+
)
264+
elif id == "Service":
265+
return (
266+
PSC.objects.filter(Q(code__regex=r"^[B-Z]$"))
267+
.annotate(code_prefix=Substr("code", 1, 1))
268+
.values("code_prefix")
269+
.distinct()
270+
.count()
271+
)
272+
elif id == "Product":
273+
return (
274+
PSC.objects.filter(Q(code__regex=r"^\d\d$"))
275+
.annotate(code_prefix=Substr("code", 1, 2))
276+
.values("code_prefix")
277+
.distinct()
278+
.count()
279+
)
258280
else:
259-
new_length = len(id) + 1
260-
filters = [Q(code__startswith=id), ~Q(code__endswith=0)]
281+
if id.startswith("A"):
282+
return self.get_research_and_dev_count(id)
283+
elif len(id) == 1:
284+
new_length = 2
285+
else:
286+
new_length = 4
261287
all_codes = (
262-
PSC.objects.filter(*filters)
288+
PSC.objects.filter(code__startswith=id)
263289
.annotate(code_prefix=Substr("code", 1, new_length), code_len=Length("code"))
264290
.filter(code_len__gte=new_length)
265291
)
266292
return all_codes.values("code_prefix").distinct().count()
293+
294+
def get_research_and_dev_count(self, id):
295+
new_length = len(id) + 1
296+
filters = [Q(code__startswith=id), ~Q(code__endswith=0)]
297+
all_codes = (
298+
PSC.objects.filter(*filters)
299+
.annotate(code_prefix=Substr("code", 1, new_length), code_len=Length("code"))
300+
.filter(code_len__gte=new_length)
301+
)
302+
return all_codes.values("code_prefix").distinct().count()

0 commit comments

Comments
 (0)