From e0fe138672e60aaee4fc9b18e7fe39194385f229 Mon Sep 17 00:00:00 2001
From: Mario Raciti <mario.raciti@inaf.it>
Date: Fri, 23 Jul 2021 17:09:57 +0200
Subject: [PATCH] TMSS-770: Add SAS ID info in SUBs for the project reporting

---
 .../backend/src/tmss/tmssapp/adapters/reports.py | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
index 19020e64d15..4dfb7d52301 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
@@ -339,16 +339,24 @@ def _get_subs_and_durations_from_project(project_pk: int) -> ({}, {}):
         durations[f'total_succeeded_{prio.name}'], durations[f'total_observed_succeeded_{prio.name}'] = 0, 0
         subs = project_subs.filter(priority_queue=prio.value)
         for sub in subs:
-            # Main SUB information to be returned
+            # Gathering info for reporting
+            sub_start_time = sub.start_time.isoformat() if sub.start_time else None
+            sub_stop_time = sub.stop_time.isoformat() if sub.stop_time else None
             sub_duration = sub.duration.total_seconds()
             sub_observed_duration = sub.observed_duration.total_seconds() if sub.observed_duration else 0
-            # TODO: Check if start and stop time are None.
-            sub_info = {'id': sub.pk, 'name': sub.name, 'status': sub.status, 'start': sub.start_time.isoformat(),
-                        'stop': sub.stop_time.isoformat(), 'duration': sub_duration, 'observed_duration': sub_observed_duration}
+            # Info about the SUB to be returned
+            sub_info = {'id': sub.pk, 'name': sub.name, 'status': sub.status, 'start': sub_start_time,
+                        'stop': sub_stop_time, 'duration': sub_duration, 'observed_duration': sub_observed_duration}
             try:
                 sub_info['target'] = get_target_observation_task_name_from_requirements_doc(sub)
             except Exception as e:
                 sub_info['target'] = None
+            # Get SAS ID info
+            subtasks = models.Subtask.objects.filter(task_blueprints__scheduling_unit_blueprint=sub)
+            sub_info['SAS ID'] = {}
+            for template_name in ('observation control', 'preprocessing pipeline', 'pulsar pipeline'):
+                sub_info['SAS ID'][template_name] = [subtask.id for subtask in subtasks.filter(specifications_template__name=template_name)]
+            # Get ingest info
             dataproducts = models.Dataproduct.objects.filter(producer__subtask__specifications_template__type='ingest').filter(producer__subtask__state__value='finished').filter(producer__subtask__task_blueprints__scheduling_unit_blueprint=sub)
             # TODO: Maybe it would be useful to implement an 'ingested_stop_time' (and even an 'ingested_start_time' and consequently an 'ingested_duration'?)
             sub_info['ingested_date'] = max(dataproducts, key=lambda x: x.producer.subtask.stop_time).producer.subtask.stop_time if dataproducts else None
-- 
GitLab