Skip to content

Commit 140a18d

Browse files
committed
Merge branch 'main' into HEA-984/Livelihood_activity_valid_instances_errors_for_income_not_rounding_error
2 parents 4569a87 + 7c6045a commit 140a18d

8 files changed

Lines changed: 631 additions & 62 deletions

File tree

apps/baseline/admin.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@
99
from metadata.models import LivelihoodStrategyType
1010

1111
from .forms import (
12+
CommunityForm,
1213
FoodPurchaseForm,
1314
LivelihoodActivityForm,
15+
LivelihoodStrategyForm,
1416
MilkProductionForm,
1517
OtherPurchaseForm,
1618
ReliefGiftOtherForm,
19+
WealthGroupCharacteristicValueForm,
20+
WealthGroupForm,
1721
)
1822
from .models import (
1923
ButterProduction,
@@ -218,6 +222,7 @@ def get_fieldsets(self, request, obj=None):
218222

219223

220224
class CommunityAdmin(GISModelAdminReadOnly):
225+
form = CommunityForm
221226
fields = (
222227
"name",
223228
"full_name",
@@ -275,6 +280,7 @@ def get_fields(self, request, obj=None):
275280

276281

277282
class LivelihoodStrategyAdmin(admin.ModelAdmin):
283+
form = LivelihoodStrategyForm
278284
fields = (
279285
"livelihood_zone_baseline",
280286
"strategy_type",
@@ -430,6 +436,7 @@ def get_country_name(self, obj):
430436

431437

432438
class WealthGroupCharacteristicValueAdmin(admin.ModelAdmin):
439+
form = WealthGroupCharacteristicValueForm
433440
list_display = [
434441
"wealth_group",
435442
"get_wealth_characteristic_common_name",
@@ -441,6 +448,7 @@ class WealthGroupCharacteristicValueAdmin(admin.ModelAdmin):
441448
model = WealthGroupCharacteristicValue
442449

443450
list_filter = (
451+
("wealth_group__livelihood_zone_baseline", admin.RelatedOnlyFieldListFilter),
444452
"wealth_group__wealth_group_category",
445453
("wealth_group__livelihood_zone_baseline__livelihood_zone__country", admin.RelatedOnlyFieldListFilter),
446454
"wealth_characteristic__has_product",
@@ -760,6 +768,7 @@ def get_queryset(self, request):
760768

761769

762770
class WealthGroupAdmin(admin.ModelAdmin):
771+
form = WealthGroupForm
763772
list_display = (
764773
"community",
765774
"wealth_group_category",
@@ -771,6 +780,7 @@ class WealthGroupAdmin(admin.ModelAdmin):
771780
*translation_fields("wealth_group_category__name"),
772781
)
773782
list_filter = (
783+
("livelihood_zone_baseline", admin.RelatedOnlyFieldListFilter),
774784
"livelihood_zone_baseline__source_organization",
775785
("livelihood_zone_baseline__livelihood_zone__country", admin.RelatedOnlyFieldListFilter),
776786
*translation_fields("livelihood_zone_baseline__livelihood_zone__name"),

apps/baseline/autocomplete.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
from dal import autocomplete
2+
from django.contrib.auth.mixins import LoginRequiredMixin
3+
4+
from .models import Community, LivelihoodStrategy, LivelihoodZoneBaseline, WealthGroup
5+
6+
7+
class WealthGroupAutocomplete(LoginRequiredMixin, autocomplete.Select2QuerySetView):
8+
# autocomplete endpoint for WealthGroup FK fields.
9+
10+
def get_queryset(self):
11+
qs = WealthGroup.objects.select_related(
12+
"community",
13+
"livelihood_zone_baseline__livelihood_zone",
14+
"wealth_group_category",
15+
)
16+
if self.q:
17+
qs = (
18+
WealthGroup.objects.filter(community__name__icontains=self.q)
19+
| WealthGroup.objects.filter(livelihood_zone_baseline__livelihood_zone__code__icontains=self.q)
20+
| WealthGroup.objects.filter(wealth_group_category__code__icontains=self.q)
21+
)
22+
return qs
23+
24+
25+
class CommunityAutocomplete(LoginRequiredMixin, autocomplete.Select2QuerySetView):
26+
# autocomplete endpoint for Community FK fields.
27+
28+
def get_queryset(self):
29+
qs = Community.objects.select_related(
30+
"livelihood_zone_baseline__livelihood_zone",
31+
)
32+
if self.q:
33+
qs = (
34+
Community.objects.filter(name__icontains=self.q)
35+
| Community.objects.filter(full_name__icontains=self.q)
36+
| Community.objects.filter(livelihood_zone_baseline__livelihood_zone__code__icontains=self.q)
37+
)
38+
return qs
39+
40+
41+
class LivelihoodZoneBaselineAutocomplete(LoginRequiredMixin, autocomplete.Select2QuerySetView):
42+
# autocomplete endpoint for LivelihoodZoneBaseline FK fields
43+
44+
def get_queryset(self):
45+
qs = LivelihoodZoneBaseline.objects.select_related(
46+
"livelihood_zone",
47+
"source_organization",
48+
)
49+
if self.q:
50+
qs = (
51+
LivelihoodZoneBaseline.objects.filter(livelihood_zone__code__icontains=self.q)
52+
| LivelihoodZoneBaseline.objects.filter(livelihood_zone__name_en__icontains=self.q)
53+
| LivelihoodZoneBaseline.objects.filter(livelihood_zone__alternate_code__icontains=self.q)
54+
)
55+
return qs
56+
57+
58+
class LivelihoodStrategyAutocomplete(LoginRequiredMixin, autocomplete.Select2QuerySetView):
59+
# autocomplete endpoint for LivelihoodStrategy FK fields
60+
61+
def get_queryset(self):
62+
qs = LivelihoodStrategy.objects.select_related(
63+
"livelihood_zone_baseline__livelihood_zone",
64+
"product",
65+
)
66+
if self.q:
67+
qs = (
68+
LivelihoodStrategy.objects.filter(strategy_type__icontains=self.q)
69+
| LivelihoodStrategy.objects.filter(additional_identifier__icontains=self.q)
70+
| LivelihoodStrategy.objects.filter(livelihood_zone_baseline__livelihood_zone__code__icontains=self.q)
71+
)
72+
return qs

apps/baseline/forms.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1+
from dal import autocomplete
12
from django import forms
23
from django.utils.translation import gettext_lazy as _
34

45
from baseline.models import (
6+
Community,
57
FoodPurchase,
68
LivelihoodActivity,
9+
LivelihoodStrategy,
710
MilkProduction,
811
OtherPurchase,
912
ReliefGiftOther,
13+
WealthGroup,
14+
WealthGroupCharacteristicValue,
1015
)
1116

1217

@@ -18,6 +23,10 @@ class Meta:
1823
"livelihood_zone_baseline",
1924
"strategy_type",
2025
]
26+
widgets = {
27+
"livelihood_strategy": autocomplete.ModelSelect2(url="livelihoodstrategy-autocomplete"),
28+
"wealth_group": autocomplete.ModelSelect2(url="wealthgroup-autocomplete"),
29+
}
2130

2231
def __init__(self, *args, **kwargs):
2332
super().__init__(*args, **kwargs)
@@ -43,6 +52,10 @@ class Meta:
4352
"livelihood_zone_baseline",
4453
"strategy_type",
4554
]
55+
widgets = {
56+
"livelihood_strategy": autocomplete.ModelSelect2(url="livelihoodstrategy-autocomplete"),
57+
"wealth_group": autocomplete.ModelSelect2(url="wealthgroup-autocomplete"),
58+
}
4659

4760
def __init__(self, *args, **kwargs):
4861
super().__init__(*args, **kwargs)
@@ -57,6 +70,10 @@ class Meta:
5770
"livelihood_zone_baseline",
5871
"strategy_type",
5972
]
73+
widgets = {
74+
"livelihood_strategy": autocomplete.ModelSelect2(url="livelihoodstrategy-autocomplete"),
75+
"wealth_group": autocomplete.ModelSelect2(url="wealthgroup-autocomplete"),
76+
}
6077

6178
def __init__(self, *args, **kwargs):
6279
super().__init__(*args, **kwargs)
@@ -71,6 +88,10 @@ class Meta:
7188
"livelihood_zone_baseline",
7289
"strategy_type",
7390
]
91+
widgets = {
92+
"livelihood_strategy": autocomplete.ModelSelect2(url="livelihoodstrategy-autocomplete"),
93+
"wealth_group": autocomplete.ModelSelect2(url="wealthgroup-autocomplete"),
94+
}
7495

7596
def __init__(self, *args, **kwargs):
7697
super().__init__(*args, **kwargs)
@@ -85,7 +106,48 @@ class Meta:
85106
"livelihood_zone_baseline",
86107
"strategy_type",
87108
]
109+
widgets = {
110+
"livelihood_strategy": autocomplete.ModelSelect2(url="livelihoodstrategy-autocomplete"),
111+
"wealth_group": autocomplete.ModelSelect2(url="wealthgroup-autocomplete"),
112+
}
88113

89114
def __init__(self, *args, **kwargs):
90115
super().__init__(*args, **kwargs)
91116
self.fields["unit_multiple"].label = _("Purchase size")
117+
118+
119+
class WealthGroupCharacteristicValueForm(forms.ModelForm):
120+
class Meta:
121+
model = WealthGroupCharacteristicValue
122+
fields = "__all__"
123+
widgets = {
124+
"wealth_group": autocomplete.ModelSelect2(url="wealthgroup-autocomplete"),
125+
}
126+
127+
128+
class WealthGroupForm(forms.ModelForm):
129+
class Meta:
130+
model = WealthGroup
131+
fields = "__all__"
132+
widgets = {
133+
"livelihood_zone_baseline": autocomplete.ModelSelect2(url="livelihoodzonebaseline-autocomplete"),
134+
"community": autocomplete.ModelSelect2(url="community-autocomplete"),
135+
}
136+
137+
138+
class LivelihoodStrategyForm(forms.ModelForm):
139+
class Meta:
140+
model = LivelihoodStrategy
141+
fields = "__all__"
142+
widgets = {
143+
"livelihood_zone_baseline": autocomplete.ModelSelect2(url="livelihoodzonebaseline-autocomplete"),
144+
}
145+
146+
147+
class CommunityForm(forms.ModelForm):
148+
class Meta:
149+
model = Community
150+
fields = "__all__"
151+
widgets = {
152+
"livelihood_zone_baseline": autocomplete.ModelSelect2(url="livelihoodzonebaseline-autocomplete"),
153+
}

0 commit comments

Comments
 (0)