From af997bd5f5e256ede51761640be2c299e5cee0b9 Mon Sep 17 00:00:00 2001
From: Vermaas <vermaas@astron.nl>
Date: Fri, 7 Jul 2023 13:52:46 +0200
Subject: [PATCH] add joined_status (property) field

---
 atdb/taskdatabase/models.py      | 18 ++++++++++++++++++
 atdb/taskdatabase/serializers.py |  5 +++--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py
index 1be1e5a9..35ac5ff9 100644
--- a/atdb/taskdatabase/models.py
+++ b/atdb/taskdatabase/models.py
@@ -292,6 +292,24 @@ class Task(models.Model):
                return False
         return True
 
+    @property
+    def joined_status(self):
+        # if a task has joined_input_tasks, then check their status
+        try:
+            joined_input_tasks = self.joined_input_tasks.all()
+            status = None
+            for task in joined_input_tasks:
+                if status and task.status != status:
+                    return None
+                status = task.status
+
+            # all statusses are the same, return it
+            return status
+        except Exception as e:
+            print(e)
+
+        return "unknown"
+
     # NV: this shows the latest status change, but because it is a derived property it cannot be sorted.
     # This functionality was not requested, and to avoid additional requests about 'sort' functionalty
     # it is currently commented out. Could be of use later though, so I leave it in for now.
diff --git a/atdb/taskdatabase/serializers.py b/atdb/taskdatabase/serializers.py
index 37341fda..a233c916 100644
--- a/atdb/taskdatabase/serializers.py
+++ b/atdb/taskdatabase/serializers.py
@@ -91,7 +91,8 @@ class TaskReadSerializer(serializers.ModelSerializer):
     class Meta:
         model = Task
         fields = ['id','task_type','creationTime','filter',
-                  'predecessor','predecessor_status','successors', 'joined_input_tasks','joined_output_task',
+                  'predecessor','predecessor_status','successors',
+                  'joined_input_tasks','joined_output_task','joined_status',
                   'project','sas_id','priority','purge_policy','cleanup_policy','resume',
                   'workflow',
                   'stage_request_id',
@@ -123,7 +124,7 @@ class TaskReadSerializerFast(serializers.ModelSerializer):
     class Meta:
         model = Task
         fields = ['id','task_type','creationTime','filter','predecessor','predecessor_status',
-                  'joined_input_tasks', 'joined_output_task',
+                  'joined_input_tasks', 'joined_output_task', 'joined_status'
                   'project','sas_id','priority','purge_policy','cleanup_policy','resume',
                   'workflow',
                   'stage_request_id',
-- 
GitLab