Skip to content

Commit 2ddc7b8

Browse files
Merge pull request #1733 from IFRCGo/feature/loan-dref-validation
Feature/loan dref validation
2 parents 9918d55 + 5376d01 commit 2ddc7b8

File tree

6 files changed

+63
-10
lines changed

6 files changed

+63
-10
lines changed

api/drf_views.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@
126126

127127
CountryOfFieldReportToReviewSerializer,
128128
)
129+
from api.filter_set import UserFilterSet
130+
129131
from .logger import logger
130132

131133

@@ -1106,3 +1108,15 @@ class CountryOfFieldReportToReviewViewset(viewsets.ReadOnlyModelViewSet):
11061108
class Meta:
11071109
model = CountryOfFieldReportToReview
11081110
fields = ('country_id')
1111+
1112+
1113+
class UsersViewset(viewsets.ReadOnlyModelViewSet):
1114+
"""
1115+
List all active users
1116+
"""
1117+
serializer_class = UserSerializer
1118+
permission_classes = [IsAuthenticated]
1119+
filterset_class = UserFilterSet
1120+
1121+
def get_queryset(self):
1122+
return User.objects.filter(is_active=True)

api/filter_set.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import django_filters as filters
2+
3+
from django.contrib.auth.models import User
4+
5+
6+
class UserFilterSet(filters.FilterSet):
7+
name = filters.CharFilter(field_name='username', lookup_expr='icontains')
8+
9+
class Meta:
10+
model = User
11+
fields = ()

dref/serializers.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,11 @@ def create(self, validated_data):
870870
validated_data["people_in_need"] = dref_operational_update.people_in_need
871871
validated_data["ns_respond_date"] = dref_operational_update.ns_respond_date
872872
validated_data["assessment_report"] = dref_operational_update.assessment_report
873+
874+
if validated_data["type_of_dref"] == Dref.DrefType.LOAN:
875+
raise serializers.ValidationError(
876+
gettext("Can\'t create final report for dref type %s" % Dref.DrefType.LOAN)
877+
)
873878
dref_final_report = super().create(validated_data)
874879
# XXX: Copy files from DREF (Only nested serialized fields)
875880
nested_serialized_file_fields = [
@@ -957,6 +962,11 @@ def create(self, validated_data):
957962
validated_data["people_in_need"] = dref.people_in_need
958963
validated_data["event_text"] = dref.event_text
959964
validated_data["ns_respond_date"] = dref.ns_respond_date
965+
966+
if validated_data["type_of_dref"] == Dref.DrefType.LOAN:
967+
raise serializers.ValidationError(
968+
gettext("Can\'t create final report for dref type %s" % Dref.DrefType.LOAN)
969+
)
960970
dref_final_report = super().create(validated_data)
961971
# XXX: Copy files from DREF (Only nested serialized fields)
962972
nested_serialized_file_fields = [

dref/test_views.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,3 +1083,30 @@ def test_concurrent_dref_operational_update(self):
10831083
self.authenticate(user1)
10841084
response = self.client.get(dref_url)
10851085
self.assert_200(response)
1086+
1087+
def test_dref_type_loan(self):
1088+
user1, _ = UserFactory.create_batch(2)
1089+
dref = DrefFactory.create(
1090+
title="Test Title",
1091+
created_by=self.user,
1092+
is_published=True,
1093+
type_of_dref=Dref.DrefType.LOAN
1094+
)
1095+
dref.users.add(user1)
1096+
old_count = DrefFinalReport.objects.count()
1097+
url = "/api/v2/dref-final-report/"
1098+
data = {
1099+
"dref": dref.id,
1100+
}
1101+
self.authenticate(self.user)
1102+
response = self.client.post(url, data=data)
1103+
self.assert_400(response)
1104+
1105+
# update the dref type to other
1106+
dref.type_of_dref = Dref.DrefType.ASSESSMENT
1107+
dref.save(update_fields=['type_of_dref'])
1108+
1109+
self.authenticate(self.user)
1110+
response = self.client.post(url, data=data)
1111+
self.assert_201(response)
1112+
self.assertEqual(DrefFinalReport.objects.count(), old_count + 1)

dref/views.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -174,16 +174,6 @@ def get(self, request, version=None):
174174
"national_society_actions": [
175175
{"key": action[0], "value": action[1]} for action in NationalSocietyAction.Title.choices
176176
],
177-
"users": [
178-
{
179-
"id": user.id,
180-
"email": user.email,
181-
"username": user.username,
182-
"first_name": user.first_name,
183-
"last_name": user.last_name,
184-
}
185-
for user in User.objects.filter(is_active=True)
186-
],
187177
"type_of_dref": [{"key": dref_type.value, "value": dref_type.label} for dref_type in Dref.DrefType]
188178
}
189179
return response.Response(options)

main/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@
159159
router.register(r'donor-group', flash_views.DonorGroupViewSet, basename='donor_group')
160160
router.register(r'donor', flash_views.DonorsViewSet, basename='donor')
161161
router.register(r'share-flash-update', flash_views.ShareFlashUpdateViewSet, basename='share_flash_update')
162+
router.register(r'users', api_views.UsersViewset, basename='users')
162163

163164
# Dref apis
164165
router.register(r'dref', dref_views.DrefViewSet, basename='dref')

0 commit comments

Comments
 (0)