Skip to content

Commit a5598bf

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 4981e11 commit a5598bf

File tree

7 files changed

+116
-35
lines changed

7 files changed

+116
-35
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: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
from django.conf import settings
33
from django.utils.translation import ugettext_lazy as _
44

5-
from main.enums import TextChoices
5+
from main.enums import TextChoices, IntegerChoices
66
from deployments.models import Sectors
7-
from main.enums import IntegerChoices
87
from api.models import (
98
Country,
109
District,
@@ -51,10 +50,7 @@ class Sector(IntegerChoices):
5150
sector = models.IntegerField(choices=Sector.choices, verbose_name=_('sector'))
5251
budget_per_sector = models.IntegerField(verbose_name=_('Budget per sector (CHF)'), null=True, blank=True)
5352
indicators = models.ManyToManyField(EarlyActionIndicator, verbose_name=_('Indicators'), blank=True)
54-
55-
prioritized_risk = models.TextField(verbose_name=_('Prioritized risk'), null=True, blank=True)
5653
targeted_people = models.IntegerField(verbose_name=_('Targeted people'), null=True, blank=True,)
57-
5854
readiness_activities = models.TextField(verbose_name=_('Readiness Activities'), null=True, blank=True)
5955
prepositioning_activities = models.TextField(verbose_name=_('Pre-positioning Activities'), null=True, blank=True)
6056

@@ -109,7 +105,7 @@ class Status(TextChoices):
109105
DisasterType, on_delete=models.SET_NULL, verbose_name=_('Disaster Type'),
110106
related_name='eap_disaster_type', null=True
111107
)
112-
eap_number = models.CharField(max_length=50, editable=False, verbose_name=_('EAP Number'))
108+
eap_number = models.CharField(max_length=50, verbose_name=_('EAP Number'))
113109
approval_date = models.DateField(verbose_name=_('Date of EAP Approval'))
114110
status = models.CharField(
115111
max_length=255, choices=Status.choices, default=Status.APPROVED,
@@ -197,3 +193,20 @@ class Meta:
197193

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