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