Skip to content

Commit ce55aa3

Browse files
authored
Merge pull request #281 from American-Institutes-for-Research/HEA-1069/broken_wealthgroup_api
Hea 1069/broken wealthgroup api
2 parents bd4574b + efc8b48 commit ce55aa3

4 files changed

Lines changed: 40 additions & 9 deletions

File tree

apps/baseline/autocomplete.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
from dal import autocomplete
22
from django.contrib.auth.mixins import LoginRequiredMixin
33

4-
from .models import Community, LivelihoodStrategy, LivelihoodZoneBaseline, WealthGroup
4+
from .models import (
5+
Community,
6+
LivelihoodStrategy,
7+
LivelihoodZone,
8+
LivelihoodZoneBaseline,
9+
WealthGroup,
10+
)
511

612

713
class WealthGroupAutocomplete(LoginRequiredMixin, autocomplete.Select2QuerySetView):
@@ -38,6 +44,20 @@ def get_queryset(self):
3844
return qs
3945

4046

47+
class LivelihoodZoneAutocomplete(LoginRequiredMixin, autocomplete.Select2QuerySetView):
48+
# autocomplete endpoint for LivelihoodZone FK fields
49+
50+
def get_queryset(self):
51+
qs = LivelihoodZone.objects.select_related("country")
52+
if self.q:
53+
qs = (
54+
LivelihoodZone.objects.filter(code__icontains=self.q)
55+
| LivelihoodZone.objects.filter(name_en__icontains=self.q)
56+
| LivelihoodZone.objects.filter(alternate_code__icontains=self.q)
57+
)
58+
return qs
59+
60+
4161
class LivelihoodZoneBaselineAutocomplete(LoginRequiredMixin, autocomplete.Select2QuerySetView):
4262
# autocomplete endpoint for LivelihoodZoneBaseline FK fields
4363

apps/baseline/models.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,9 @@ def _get_livelihoods_protection_threshold_as_percentage_kcals(self):
870870
)
871871

872872
df = pd.DataFrame.from_records(livelihood_protection_qs)
873+
if not df.empty:
874+
for col in ["expenditure", "percentage_allocation_to_basket", "household_size", "percentage_kcals"]:
875+
df[col] = pd.to_numeric(df[col], errors="coerce")
873876
if df.empty:
874877
livelihoods_protection_expenditure = 0
875878
livelihoods_protection_percentage_kcals = 0
@@ -922,8 +925,10 @@ def _get_livelihoods_protection_threshold_as_percentage_kcals(self):
922925
# the current Wealth Group
923926
for column in poor_df.columns:
924927
if column != "livelihood_strategy_id":
925-
merged[f"effective_{column}"] = merged[f"{column}_wealth_group"].combine_first(
926-
merged[f"{column}_poor"]
928+
wealth_group_values = merged[f"{column}_wealth_group"]
929+
poor_values = merged[f"{column}_poor"]
930+
merged[f"effective_{column}"] = wealth_group_values.where(
931+
wealth_group_values.notna(), poor_values
927932
)
928933

929934
# Calculate the expenditure for the Basket by applying the
@@ -932,10 +937,14 @@ def _get_livelihoods_protection_threshold_as_percentage_kcals(self):
932937
# was for the Poor Wealth Group the expenditure reflects the
933938
# different household sizes.
934939
merged["basket_expenditure"] = (
935-
merged["effective_expenditure"]
936-
* merged["effective_percentage_allocation_to_basket"]
937-
/ merged["effective_household_size"]
938-
* self.average_household_size
940+
(
941+
merged["effective_expenditure"]
942+
* merged["effective_percentage_allocation_to_basket"]
943+
/ merged["effective_household_size"]
944+
* self.average_household_size
945+
)
946+
if self.average_household_size
947+
else None
939948
)
940949

941950
# For the percentage_kcals we can apply the effective_percentage_allocation_to_basket

apps/baseline/viewsets.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ class LivelihoodProductCategoryFilterSet(filters.FilterSet):
328328
)
329329
livelihood_zone = django_filters.ModelChoiceFilter(
330330
field_name="baseline_livelihood_activity__livelihood_zone_baseline__livelihood_zone",
331-
queryset=LivelihoodZone.objects.select_related("livelihood_zone"),
331+
queryset=LivelihoodZone.objects.select_related("country"),
332332
widget=autocomplete.ModelSelect2(url="livelihoodzone-autocomplete"),
333333
label="Livelihood Zone",
334334
)
@@ -447,7 +447,7 @@ class WealthGroupFilterSet(filters.FilterSet):
447447
)
448448
livelihood_zone = django_filters.ModelChoiceFilter(
449449
field_name="livelihood_zone_baseline__livelihood_zone",
450-
queryset=LivelihoodZone.objects.select_related("livelihood_zone"),
450+
queryset=LivelihoodZone.objects.select_related("country"),
451451
widget=autocomplete.ModelSelect2(url="livelihoodzone-autocomplete"),
452452
label="Livelihood Zone",
453453
)

hea/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from baseline.autocomplete import (
1313
CommunityAutocomplete,
1414
LivelihoodStrategyAutocomplete,
15+
LivelihoodZoneAutocomplete,
1516
LivelihoodZoneBaselineAutocomplete,
1617
WealthGroupAutocomplete,
1718
)
@@ -146,6 +147,7 @@
146147
########## LOCALE INDEPENDENT PATHS go here. ##########
147148
path("autocomplete/wealthgroup/", WealthGroupAutocomplete.as_view(), name="wealthgroup-autocomplete"),
148149
path("autocomplete/community/", CommunityAutocomplete.as_view(), name="community-autocomplete"),
150+
path("autocomplete/livelihoodzone/", LivelihoodZoneAutocomplete.as_view(), name="livelihoodzone-autocomplete"),
149151
path(
150152
"autocomplete/livelihoodzonebaseline/",
151153
LivelihoodZoneBaselineAutocomplete.as_view(),

0 commit comments

Comments
 (0)