diff --git a/opentech/apply/funds/api_views.py b/opentech/apply/funds/api_views.py index 4e294f673bb74547106e2521eff91bb93be5fc8a..3ad5333a382e59f39ab8ef54a05419a78d801acd 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 3203a7ecca0cefc53594d594c9b39964655dbf3e..4fe34f39f475d58442669416e72800e68f5e032c 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 c38bc53d54c94d0904aff1c57559062e5c3d5eb3..91aa1753fd9c55705248cf5c49978d45a90dc7f9 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)), ]