Skip to content

Commit 7ce5a39

Browse files
Add api for eap options
- removed api for indicator, status - created a model for prioritized_risk for early actions - modified test cases to accept many prioritized risks
1 parent b80680d commit 7ce5a39

File tree

7 files changed

+132
-36
lines changed

7 files changed

+132
-36
lines changed

eap/admin.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66

77
@admin.register(EAP)
88
class EAPAdmin(admin.ModelAdmin):
9-
pass
9+
list_display = ('eap_number', 'country', 'status', 'operational_timeframe', 'total_budget')
10+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Generated by Django 2.2.28 on 2022-07-15 06:28
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('eap', '0003_auto_20220713_1229'),
11+
]
12+
13+
operations = [
14+
migrations.RemoveField(
15+
model_name='earlyaction',
16+
name='prioritized_risk',
17+
),
18+
migrations.AlterField(
19+
model_name='eap',
20+
name='eap_number',
21+
field=models.CharField(max_length=50, verbose_name='EAP Number'),
22+
),
23+
migrations.AlterField(
24+
model_name='earlyaction',
25+
name='sector',
26+
field=models.CharField(choices=[('shelter_housing_and_settlements', 'Shelter, Housing And Settlements'), ('livelihoods', 'Livelihoods'), ('multi-purpose_cash', 'Multi-purpose Cash'), ('health_and_care', 'Health And Care'), ('water_sanitation_and_hygiene', 'Water, Sanitation And Hygiene'), ('protection_gender_and_inclusion', 'Protection, Gender And Inclusion'), ('education', 'Education'), ('migration', 'Migration'), ('risk_reduction_climate_adaptation_and_recovery', 'Risk Reduction, Climate Adaptation And Recovery'), ('community_engagement_and _accountability', 'Community Engagement And Accountability'), ('environment_sustainability ', 'Environment Sustainability'), ('shelter_cluster_coordination', 'Shelter Cluster Coordination')], max_length=255, verbose_name='sector'),
27+
),
28+
migrations.CreateModel(
29+
name='PrioritizedRisk',
30+
fields=[
31+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
32+
('risks', models.TextField(blank=True, null=True)),
33+
('early_action', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='early_actions_prioritized_risk', to='eap.EarlyAction', verbose_name='early action')),
34+
],
35+
options={
36+
'verbose_name': 'Prioritized risk',
37+
'verbose_name_plural': 'Prioritized risks',
38+
},
39+
),
40+
]

eap/models.py

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
from django.utils.translation import ugettext_lazy as _
44

55
from main.enums import TextChoices
6-
from deployments.models import Sectors
7-
from enumfields import EnumIntegerField
86
from api.models import (
97
Country,
108
District,
@@ -32,13 +30,26 @@ def __str__(self):
3230

3331

3432
class EarlyAction(models.Model):
35-
sector = EnumIntegerField(Sectors, verbose_name=_('sector'))
33+
class Sector(TextChoices):
34+
SHELTER_HOUSING_AND_SETTLEMENTS = 'shelter_housing_and_settlements', _('Shelter, Housing And Settlements')
35+
LIVELIHOODS = 'livelihoods', _('Livelihoods')
36+
MULTI_PURPOSE_CASH = 'multi-purpose_cash', _('Multi-purpose Cash')
37+
HEALTH_AND_CARE = 'health_and_care', _('Health And Care')
38+
WATER_SANITATION_AND_HYGIENE = 'water_sanitation_and_hygiene', _('Water, Sanitation And Hygiene')
39+
PROTECTION_GENDER_AND_INCLUSION = 'protection_gender_and_inclusion', _('Protection, Gender And Inclusion')
40+
EDUCATION = 'education', _('Education')
41+
MIGRATION = 'migration', _('Migration')
42+
RISK_REDUCTION_CLIMATE_ADAPTATION_AND_RECOVERY = \
43+
'risk_reduction_climate_adaptation_and_recovery', _('Risk Reduction, Climate Adaptation And Recovery')
44+
COMMUNITY_ENGAGEMENT_AND_ACCOUNTABILITY = \
45+
'community_engagement_and _accountability', _('Community Engagement And Accountability')
46+
ENVIRONMENT_SUSTAINABILITY = 'environment_sustainability ', _('Environment Sustainability')
47+
SHELTER_CLUSTER_COORDINATION = 'shelter_cluster_coordination', _('Shelter Cluster Coordination')
48+
49+
sector = models.CharField(max_length=255, verbose_name=_('sector'), choices=Sector.choices)
3650
budget_per_sector = models.IntegerField(verbose_name=_('Budget per sector (CHF)'), null=True, blank=True)
3751
indicators = models.ManyToManyField(EarlyActionIndicator, verbose_name=_('Indicators'), blank=True)
38-
39-
prioritized_risk = models.TextField(verbose_name=_('Prioritized risk'), null=True, blank=True)
4052
targeted_people = models.IntegerField(verbose_name=_('Targeted people'), null=True, blank=True,)
41-
4253
readiness_activities = models.TextField(verbose_name=_('Readiness Activities'), null=True, blank=True)
4354
prepositioning_activities = models.TextField(verbose_name=_('Pre-positioning Activities'), null=True, blank=True)
4455

@@ -93,7 +104,7 @@ class Status(TextChoices):
93104
DisasterType, on_delete=models.SET_NULL, verbose_name=_('Disaster Type'),
94105
related_name='eap_disaster_type', null=True
95106
)
96-
eap_number = models.CharField(max_length=50, editable=False, verbose_name=_('EAP Number'))
107+
eap_number = models.CharField(max_length=50, verbose_name=_('EAP Number'))
97108
approval_date = models.DateField(verbose_name=_('Date of EAP Approval'))
98109
status = models.CharField(
99110
max_length=255, choices=Status.choices, default=Status.APPROVED,
@@ -181,3 +192,20 @@ class Meta:
181192

182193
def __str__(self):
183194
return f'{self.id}'
195+
196+
197+
class PrioritizedRisk(models.Model):
198+
early_action = models.ForeignKey(
199+
EarlyAction,
200+
on_delete=models.CASCADE,
201+
related_name='early_actions_prioritized_risk',
202+
verbose_name=_('early action')
203+
)
204+
risks = models.TextField(null=True, blank=True)
205+
206+
class Meta:
207+
verbose_name = _('Prioritized risk')
208+
verbose_name_plural = _('Prioritized risks')
209+
210+
def __str__(self):
211+
return f'{self.id}'

eap/serializers.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
EarlyAction,
2020
EarlyActionIndicator,
2121
EAPDocument,
22+
PrioritizedRisk,
2223
)
2324

2425
from main.writable_nested_serializers import (
@@ -54,13 +55,21 @@ class Meta:
5455
read_only_fields = ('early_action',)
5556

5657

58+
class PrioritizedRiskSerializer(serializers.ModelSerializer):
59+
class Meta:
60+
model = PrioritizedRisk
61+
fields = ('__all__')
62+
read_only_fields = ('early_action',)
63+
64+
5765
class EarlyActionSerializer(
5866
NestedUpdateMixin,
5967
NestedCreateMixin,
6068
serializers.ModelSerializer
6169
):
6270
indicators = EarlyActionIndicatorSerializer(many=True, required=False)
6371
actions = ActionSerializer(source='action', many=True, required=False)
72+
prioritized_risks = PrioritizedRiskSerializer(source='early_actions_prioritized_risk', many=True, required=False)
6473
sector_display = serializers.CharField(source='get_sector_display', read_only=True)
6574

6675
class Meta:

eap/test_views.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from django.contrib.auth.models import User
55

66
from main.test_case import APITestCase
7-
from eap.models import EAP
7+
from eap.models import EAP, EarlyAction
88

99
from api.factories.country import CountryFactory
1010
from api.factories.district import DistrictFactory
@@ -81,9 +81,16 @@ def setUp(self):
8181
"disaster_type": self.disaster_type.id,
8282
"early_actions": [
8383
{
84-
"sector": "Health",
84+
"sector": EarlyAction.Sector.LIVELIHOODS,
8585
"budget_per_sector": 1000,
86-
"prioritized_risk": "test",
86+
"prioritized_risks": [
87+
{
88+
"risks": "test1"
89+
},
90+
{
91+
"risks": "test2"
92+
}
93+
],
8794
"targeted_people": 100,
8895
"readiness_activities": "test",
8996
"prepositioning_activities": "test",
@@ -108,9 +115,16 @@ def setUp(self):
108115

109116
},
110117
{
111-
"sector": "Health",
118+
"sector": EarlyAction.Sector.MIGRATION,
112119
"budget_per_sector": 1000,
113-
"prioritized_risk": "prioritized_risk",
120+
"prioritized_risks": [
121+
{
122+
"risks": "test1"
123+
},
124+
{
125+
"risks": "test2"
126+
}
127+
],
114128
"targeted_people": 200,
115129
"readiness_activities": "test",
116130
"prepositioning_activities": "test",

eap/views.py

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
# Create your views here.
22

3-
from rest_framework.response import Response
43
from rest_framework import (
54
views,
65
viewsets,
6+
response,
77
permissions,
88
mixins,
99
)
1010
from .models import (
1111
EarlyActionIndicator,
1212
EAP,
1313
EAPDocument,
14+
EarlyAction,
1415
)
1516
from .serializers import (
1617
EAPSerializer,
@@ -38,27 +39,31 @@ def get_queryset(self):
3839
return EAP.objects.all().order_by('-created_at')
3940

4041

41-
class EAPStatusOptions(views.APIView):
42-
def get(self, request, format=None):
43-
options = {
44-
'eap_status': [
45-
{
46-
'value': value,
47-
'label': label,
48-
} for value, label in EAP.Status.choices
49-
]
50-
}
51-
return Response(options)
52-
42+
class EAPOptionsView(views.APIView):
43+
"""
44+
Options for various attribute related to eap
45+
"""
46+
permission_classes = [permissions.IsAuthenticated]
5347

54-
class EarlyActionIndicatorOptions(views.APIView):
55-
def get(self, request, format=None):
48+
def get(self, request, version=None):
5649
options = {
57-
'eap_status': [
50+
"status": [
51+
{
52+
"key": status.value,
53+
"value": status.label
54+
} for status in EAP.Status
55+
],
56+
"early_actions_indicators": [
57+
{
58+
"key": indicator.value,
59+
"value": indicator.label
60+
} for indicator in EarlyActionIndicator.IndicatorChoices
61+
],
62+
"sectors": [
5863
{
59-
'value': value,
60-
'label': label,
61-
} for value, label in EarlyActionIndicator.IndicatorChoices.choices
62-
]
64+
"key": sector.value,
65+
"value": sector.label
66+
} for sector in EarlyAction.Sector
67+
],
6368
}
64-
return Response(options)
69+
return response.Response(options)

main/urls.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,7 @@
181181
url(r'^api/v2/add_cronjob_log/', AddCronJobLog.as_view()),
182182
url(r'^api/v2/flash-update-options/', flash_views.FlashUpdateOptions.as_view()),
183183
url(r'^api/v2/export-flash-update/(?P<pk>\d+)/', flash_views.ExportFlashUpdateView.as_view()),
184-
url(r'^api/v2/eap-status/', eap_views.EAPStatusOptions.as_view()),
185-
url(r'^api/v2/eap-indicators/', eap_views.EarlyActionIndicatorOptions.as_view()),
184+
url(r'^api/v2/eap-options/', eap_views.EAPOptionsView.as_view()),
186185
url(r'^register', NewRegistration.as_view()),
187186
# url(r'^createperform', CreatePerForm.as_view()),
188187
url(r'^updateperform', UpdatePerForm.as_view()),

0 commit comments

Comments
 (0)