From f1cd3846ef0ba38b2f6a81b07b71a0f5aa01e11e Mon Sep 17 00:00:00 2001
From: Fabio Roberto Vitello <fabio.vitello@inaf.it>
Date: Sun, 3 Jan 2021 12:23:17 +0100
Subject: [PATCH] TMSS-557: API to get the list of active tasks

---
 SAS/TMSS/src/tmss/urls.py                     |  1 +
 .../serializers/schedulingunitflow.py         |  8 +++++-
 .../viewsets/schedulingunitflow.py            | 28 ++++++++++++++++++-
 3 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/SAS/TMSS/src/tmss/urls.py b/SAS/TMSS/src/tmss/urls.py
index a680cf607e0..6a88477b934 100644
--- a/SAS/TMSS/src/tmss/urls.py
+++ b/SAS/TMSS/src/tmss/urls.py
@@ -243,6 +243,7 @@ if os.environ.get('TMSS_ENABLE_VIEWFLOW', "False").lower() == "true":
     viewflow_router.register('scheduling_unit_flow/qa_scheduling_unit_task', workflow_viewsets.SchedulingUnitTaskViewSet, basename='qa_scheduling_unit_task')
     viewflow_router.register(r'scheduling_unit_flow/qa_scheduling_unit_task/(?P<qa_scheduling_unit_task_id>\d+)/assign', workflow_viewsets.SchedulingUnitTaskAssignViewSet)
     viewflow_router.register(r'scheduling_unit_flow/qa_scheduling_unit_task/(?P<qa_scheduling_unit_task_id>\d+)/unassign', workflow_viewsets.SchedulingUnitTaskUnassignViewSet)
+    viewflow_router.register(r'scheduling_unit_flow/qa_scheduling_unit_process/(?P<qa_scheduling_unit_process_id>\d+)/current_task', workflow_viewsets.SchedulingUnitGetActiveTasksViewSet)
 
     viewflow_urlpatterns.extend(viewflow_router.urls)
 
diff --git a/SAS/TMSS/src/tmss/workflowapp/serializers/schedulingunitflow.py b/SAS/TMSS/src/tmss/workflowapp/serializers/schedulingunitflow.py
index da1f129d0a4..193197c438e 100644
--- a/SAS/TMSS/src/tmss/workflowapp/serializers/schedulingunitflow.py
+++ b/SAS/TMSS/src/tmss/workflowapp/serializers/schedulingunitflow.py
@@ -49,4 +49,10 @@ class SchedulingUnitAssignTaskSerializer(ModelSerializer):
 class SchedulingUnitUnassignTaskSerializer(ModelSerializer):
   class Meta:
       model = Task
-      fields = ['id']
\ No newline at end of file
+      fields = ['id']
+
+class SchedulingUnitGetActiveTasksSerializer(ModelSerializer):
+  class Meta:
+      model = models.SchedulingUnitProcess
+      fields = ['id']
+      
\ No newline at end of file
diff --git a/SAS/TMSS/src/tmss/workflowapp/viewsets/schedulingunitflow.py b/SAS/TMSS/src/tmss/workflowapp/viewsets/schedulingunitflow.py
index 9ff8653485d..04cf4562edd 100644
--- a/SAS/TMSS/src/tmss/workflowapp/viewsets/schedulingunitflow.py
+++ b/SAS/TMSS/src/tmss/workflowapp/viewsets/schedulingunitflow.py
@@ -17,8 +17,11 @@ from drf_yasg import openapi
 from drf_yasg.utils import swagger_auto_schema
 from drf_yasg.inspectors import SwaggerAutoSchema
 from drf_yasg.openapi import Parameter
+from django.core.serializers import serialize
+from django.http import HttpResponse
 
-from .. import forms, models, serializers
+
+from .. import forms, models, serializers, flows
 import logging
 logger = logging.getLogger(__name__)
 
@@ -169,5 +172,28 @@ class SchedulingUnitTaskUnassignViewSet(mixins.CreateModelMixin,
         content = {'Unassign': 'No Scheduling Unit Task with the specified id'}
         return Response(content, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
 
+
+class SchedulingUnitGetActiveTasksViewSet(mixins.CreateModelMixin,
+                                #mixins.ListModelMixin,
+                                #mixins.RetrieveModelMixin,
+                                viewsets.GenericViewSet):
+  
+  queryset = models.SchedulingUnitProcess.objects.all()
+  serializer_class = serializers.SchedulingUnitGetActiveTasksSerializer
+  
+  @swagger_auto_schema(responses={200: 'List of non finished tasks.',
+                                    403: 'forbidden',
+                                    422: 'error'},
+                         operation_description="Get the list of active tasks.")
+  def create(self, request, *args, **kwargs):
+    if 'qa_scheduling_unit_process_id' in kwargs:
+      try:
+        print(models.SchedulingUnitProcess.objects.filter(id=self.kwargs['qa_scheduling_unit_process_id'])[0].active_tasks())
+        data = serialize('json', models.SchedulingUnitProcess.objects.filter(id=self.kwargs['qa_scheduling_unit_process_id'])[0].active_tasks())
+        return HttpResponse(data, content_type='application/json')
+      except IndexError:
+        content = {'Get Active Task(s)': 'No Process with the specified id'}
+        return Response(content, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
+
  
         
\ No newline at end of file
-- 
GitLab