From b4c3c1108c6a7a9eb82321a67058cb8c66db9733 Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Mon, 21 Jan 2019 00:04:00 +0000 Subject: [PATCH] Add the rounds API for workflow --- opentech/apply/funds/api_views.py | 21 +++++++++++++++++++-- opentech/apply/funds/serializers.py | 21 ++++++++++++++++++++- opentech/apply/funds/urls.py | 23 +++++++++++++++-------- 3 files changed, 54 insertions(+), 11 deletions(-) diff --git a/opentech/apply/funds/api_views.py b/opentech/apply/funds/api_views.py index 4e294f673..3ad5333a3 100644 --- a/opentech/apply/funds/api_views.py +++ b/opentech/apply/funds/api_views.py @@ -7,7 +7,12 @@ from wagtail.core.models import Page from opentech.api.pagination import StandardResultsSetPagination from .models import ApplicationSubmission -from .serializers import SubmissionListSerializer, SubmissionDetailSerializer +from .models.applications import SubmittableStreamForm +from .serializers import ( + RoundLabSerializer, + SubmissionListSerializer, + SubmissionDetailSerializer, +) from .permissions import IsApplyStaffUser @@ -21,7 +26,7 @@ class RoundLabFilter(filters.ModelChoiceFilter): class SubmissionsFilter(filters.FilterSet): # TODO replace with better call to Round and Lab base class - round = RoundLabFilter(queryset=Page.objects.all()) + round = RoundLabFilter(queryset=Page.objects.type(SubmittableStreamForm)) class Meta: model = ApplicationSubmission @@ -45,3 +50,15 @@ class SubmissionDetail(generics.RetrieveAPIView): permission_classes = ( permissions.IsAuthenticated, IsApplyStaffUser, ) + + +class RoundLabDetail(generics.RetrieveAPIView): + # TODO replace with better call to Round and Lab base class + queryset = Page.objects.type(SubmittableStreamForm) + serializer_class = RoundLabSerializer + permission_classes = ( + permissions.IsAuthenticated, IsApplyStaffUser, + ) + + def get_object(self): + return super().get_object().specific diff --git a/opentech/apply/funds/serializers.py b/opentech/apply/funds/serializers.py index 3203a7ecc..4fe34f39f 100644 --- a/opentech/apply/funds/serializers.py +++ b/opentech/apply/funds/serializers.py @@ -1,10 +1,12 @@ from rest_framework import serializers +from wagtail.core.models import Page from .models import ApplicationSubmission + class SubmissionListSerializer(serializers.ModelSerializer): - url = serializers.HyperlinkedIdentityField(view_name='funds:submissions-api:detail') + url = serializers.HyperlinkedIdentityField(view_name='funds:api:submissions:detail') class Meta: model = ApplicationSubmission @@ -45,3 +47,20 @@ class SubmissionDetailSerializer(serializers.ModelSerializer): def get_questions(self, obj): return self.serialize_questions(obj, obj.normal_blocks) + + +class RoundLabSerializer(serializers.ModelSerializer): + workflow = serializers.SerializerMethodField() + + class Meta: + model = Page + fields = ('id', 'title', 'workflow') + + def get_workflow(self, obj): + return [ + { + 'value': phase.name, + 'display': phase.display_name + } + for phase in obj.workflow.values() + ] diff --git a/opentech/apply/funds/urls.py b/opentech/apply/funds/urls.py index c38bc53d5..91aa1753f 100644 --- a/opentech/apply/funds/urls.py +++ b/opentech/apply/funds/urls.py @@ -10,7 +10,11 @@ from .views import ( SubmissionListView, SubmissionSealedView, ) -from .api_views import SubmissionList, SubmissionDetail +from .api_views import ( + RoundLabDetail, + SubmissionList, + SubmissionDetail, +) revision_urls = ([ @@ -35,12 +39,15 @@ submission_urls = ([ ])), ], 'submissions') - -submission_api_urls = ([ - path('', SubmissionList.as_view(), name='list'), - path('<int:pk>/', SubmissionDetail.as_view(), name='detail'), -], 'submissions-api') - +api_urls = ([ + path('submissions/', include(([ + path('', SubmissionList.as_view(), name='list'), + path('<int:pk>/', SubmissionDetail.as_view(), name='detail'), + ], 'submissions'))), + path('rounds/', include(([ + path('<int:pk>/', RoundLabDetail.as_view(), name='detail'), + ], 'rounds'))) +], 'api') rounds_urls = ([ path('', RoundListView.as_view(), name="list"), @@ -51,5 +58,5 @@ rounds_urls = ([ urlpatterns = [ path('submissions/', include(submission_urls)), path('rounds/', include(rounds_urls)), - path('api/submissions/', include(submission_api_urls)), + path('api/', include(api_urls)), ] -- GitLab