From 4abf5bbf4ecac34d2a4ffe0514ce686ba6ac5bf6 Mon Sep 17 00:00:00 2001
From: Vermaas <vermaas@astron.nl>
Date: Tue, 20 Feb 2024 14:38:11 +0100
Subject: [PATCH] add is_summary field

---
 .../migrations/0042_task_is_summary.py         | 18 ++++++++++++++++++
 atdb/taskdatabase/models.py                    |  7 ++++++-
 atdb/taskdatabase/serializers.py               |  2 +-
 .../services/activities_handler.py             | 10 +++++++---
 .../templates/taskdatabase/index.html          |  2 +-
 atdb/taskdatabase/views.py                     |  1 +
 6 files changed, 34 insertions(+), 6 deletions(-)
 create mode 100644 atdb/taskdatabase/migrations/0042_task_is_summary.py

diff --git a/atdb/taskdatabase/migrations/0042_task_is_summary.py b/atdb/taskdatabase/migrations/0042_task_is_summary.py
new file mode 100644
index 00000000..eae714e8
--- /dev/null
+++ b/atdb/taskdatabase/migrations/0042_task_is_summary.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0 on 2024-02-20 12:28
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('taskdatabase', '0041_alter_task_activity'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='task',
+            name='is_summary',
+            field=models.BooleanField(default=False),
+        ),
+    ]
diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py
index 51f56a7f..ce55099e 100644
--- a/atdb/taskdatabase/models.py
+++ b/atdb/taskdatabase/models.py
@@ -88,7 +88,6 @@ def associate_task_with_activity(task):
 
             activity = Activity(sas_id=task.sas_id,
                                 project=task.project,
-                                workflow_id = task.workflow.id,
                                 filter=task.filter)
             activity.save()
 
@@ -140,6 +139,7 @@ class Task(models.Model):
 
     # Task control properties
     task_type = models.CharField(max_length=20, default="regular")
+    is_summary = models.BooleanField(default=False)
     filter = models.CharField(max_length=30, blank=True, null=True)
     environment = models.CharField(max_length=255, blank=True, null=True)
     new_status = models.CharField(max_length=50, default="defining", null=True)
@@ -202,6 +202,11 @@ class Task(models.Model):
             tasks_for_this_sasid = Task.objects.filter(sas_id=self.sas_id)
             self.calculated_qualities = qualities.calculate_qualities(self, tasks_for_this_sasid, quality_thresholds)
 
+        # nv:20feb2024, check if this task is a summary task
+        if (self.status != State.PROCESSED.value) & (self.new_status == State.PROCESSED.value):
+            #task.is_summary = algorithms.check_if_summary(self)
+            pass
+
         # make sure that every task has an activity (also for backward compatibility)
         associate_task_with_activity(self)
 
diff --git a/atdb/taskdatabase/serializers.py b/atdb/taskdatabase/serializers.py
index 3adcc01c..f80c4eb1 100644
--- a/atdb/taskdatabase/serializers.py
+++ b/atdb/taskdatabase/serializers.py
@@ -97,7 +97,7 @@ class TaskReadSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = Task
-        fields = ['id','task_type','creationTime','filter',
+        fields = ['id','task_type','is_summary','creationTime','filter',
                   'predecessor','predecessor_status','successors',
                   'joined_input_tasks','joined_output_task','joined_status',
                   'project','sas_id','priority','purge_policy','cleanup_policy','resume',
diff --git a/atdb/taskdatabase/services/activities_handler.py b/atdb/taskdatabase/services/activities_handler.py
index 1f215340..086542dd 100644
--- a/atdb/taskdatabase/services/activities_handler.py
+++ b/atdb/taskdatabase/services/activities_handler.py
@@ -143,6 +143,10 @@ def update_activity(task):
         activity.filter = task.filter
         activity.save()
 
-    if activity.workflow_id != task.workflow.id:
-        activity.workflow_id = task.workflow.id
-        activity.save()
\ No newline at end of file
+    try:
+        if activity.workflow_id != task.workflow.id:
+            activity.workflow_id = task.workflow.id
+            activity.save()
+    except:
+        # continue, workflow is not initially needed
+        logger.error(f'no workflow found for this task')
\ No newline at end of file
diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html
index d9a8482a..fc4fe7f3 100644
--- a/atdb/taskdatabase/templates/taskdatabase/index.html
+++ b/atdb/taskdatabase/templates/taskdatabase/index.html
@@ -31,7 +31,7 @@
             {% include 'taskdatabase/pagination.html' %}
         </div>
     </div>
-    <p class="footer"> Version 19 Feb 2024
+    <p class="footer"> Version 20 Feb 2024
 </div>
 
 {% include 'taskdatabase/refresh.html' %}
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index eb462904..0ff77a34 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -57,6 +57,7 @@ class TaskFilter(filters.FilterSet):
 
         fields = {
             'task_type': ['exact', 'icontains', 'in'],
+            'is_summary': ['exact'],
             'creationTime': ['icontains'],
             'filter': ['exact', 'icontains'],
             'workflow__id': ['exact', 'icontains'],
-- 
GitLab