From 9121d737c226a083d95c4bb1203ea517e152ad9d Mon Sep 17 00:00:00 2001
From: Nico Vermaas <vermaas@astron.nl>
Date: Fri, 1 Apr 2022 17:38:40 +0200
Subject: [PATCH] Validation Page

---
 atdb/taskdatabase/models.py                   |  3 +-
 .../taskdatabase/failures/failures_page.html  |  4 +-
 .../taskdatabase/failures/tasks_failures.html | 39 +++++++++++++++++--
 .../templates/taskdatabase/index.html         |  2 +-
 .../taskdatabase/quality/tasks_quality.html   |  4 +-
 .../validation/tasks_validation.html          |  2 +-
 .../validation/tasks_validation_headers.html  |  1 +
 .../validation/validation_page.html           |  4 +-
 atdb/taskdatabase/urls.py                     |  1 +
 atdb/taskdatabase/views.py                    | 28 +++++++++----
 10 files changed, 68 insertions(+), 20 deletions(-)

diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py
index ddf73715..857c36fc 100644
--- a/atdb/taskdatabase/models.py
+++ b/atdb/taskdatabase/models.py
@@ -43,7 +43,8 @@ def convert_quality_to_shortlist_for_template(task):
         list.append(str(task.quality_json['uv-coverage']))
         list.append(str(task.quality_json['sensitivity']))
         list.append(str(task.quality_json['observing-conditions']))
-
+        #url = '{ <a href="' + task.quality_json['plots'][0]["path"] + '">Diagnostic Plots</a> }'
+        list.append("Diagnostic Plots")
     except Exception as err:
         pass
 
diff --git a/atdb/taskdatabase/templates/taskdatabase/failures/failures_page.html b/atdb/taskdatabase/templates/taskdatabase/failures/failures_page.html
index 6f67507a..fa53f4e8 100644
--- a/atdb/taskdatabase/templates/taskdatabase/failures/failures_page.html
+++ b/atdb/taskdatabase/templates/taskdatabase/failures/failures_page.html
@@ -10,8 +10,8 @@
             <div class="col-8">
                 <h3>Failures</h3>
                 These are all the tasks that failed.
-                Click 'Retry' to restart a specific step in the workflow.
-                <a class="nav-link" href="{% url 'diagram' %}">See workflow diagram</a>
+                Click 'Retry' to restart the this step in the workflow (see 'Diagram' in top menu).
+                <td>{% include 'taskdatabase/filter/search.html' %}</td>
                 <hr>
             </div>
         </div>
diff --git a/atdb/taskdatabase/templates/taskdatabase/failures/tasks_failures.html b/atdb/taskdatabase/templates/taskdatabase/failures/tasks_failures.html
index 796d6e52..817f4405 100644
--- a/atdb/taskdatabase/templates/taskdatabase/failures/tasks_failures.html
+++ b/atdb/taskdatabase/templates/taskdatabase/failures/tasks_failures.html
@@ -3,7 +3,7 @@
 
         {% if task.status != "removed_invisible" %}
         <div class="row">
-            <tr class="{{ task.status }}">
+            <tr>
 
                 <td>
                     <a href="{{ task.get_absolute_url }}" target="_blank">{{ task.id }} </a>
@@ -16,6 +16,13 @@
                            ><i class="fas fa-list"></i> Details
                         </a>&nbsp;
                     {% endif %}
+                    {% if task.has_quality %}
+                            <a class="open-modal btn btn-primary btn-sm"
+                               href="{% url 'task-quality' task.id my_tasks.number %}"
+                               data-popup-url="{% url 'task-quality' task.id my_tasks.number %}"
+                               ><i class="fas fa-balance-scale-right"></i> Quality
+                            </a>&nbsp;
+                    {% endif %}
                 </td>
 
                 {% if task.resume  %}
@@ -29,9 +36,35 @@
                 <td>{{ task.sas_id }}</td>
 
                 <td>{{ task.filter }} </td>
-                {% if task.status == "processed_failed" %}
+
+                {% if task.status == "staged_failed" or task.status == "staging_failed" %}
+                    <td>
+                        <a href="{% url 'task-retry-view' task.pk 'defined' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
+                    </td>
+                {% endif %}
+                {% if task.status == "fetched_failed" or task.status == "fetching_failed" %}
+                    <td>
+                        <a href="{% url 'task-retry-view' task.pk 'staged' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
+                    </td>
+                 {% endif %}
+                {% if task.status == "processed_failed" or task.status == "processing_failed" %}
+                    <td>
+                        <a href="{% url 'task-retry-view' task.pk 'fetched' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
+                    </td>
+                {% endif %}
+                {% if task.status == "stored_failed" or task.status == "storing_failed" %}
+                    <td>
+                        <a href="{% url 'task-retry-view' task.pk 'processed' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
+                    </td>
+                {% endif %}
+                {% if task.status == "scrubbed_failed" or task.status == "scrubbing_failed" %}
+                    <td>
+                        <a href="{% url 'task-retry-view' task.pk 'validated' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
+                    </td>
+                {% endif %}
+                {% if task.status == "archived_failed" or task.status == "archiving_failed" %}
                     <td>
-                        <a href="{% url 'task-setstatus-view' task.pk 'fetched' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
+                        <a href="{% url 'task-retry-view' task.pk 'scrubbed' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
                     </td>
                 {% endif %}
                 <td>
diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html
index acc10b22..8e748528 100644
--- a/atdb/taskdatabase/templates/taskdatabase/index.html
+++ b/atdb/taskdatabase/templates/taskdatabase/index.html
@@ -34,7 +34,7 @@
         {% include 'taskdatabase/pagination.html' %}
        </div>
     </div>
-    <p class="footer"> Version 1.0.0 (1 apr 2021 - 15:00)
+    <p class="footer"> Version 1.0.0 (1 apr 2021 - 16:00)
 
 </div>
 
diff --git a/atdb/taskdatabase/templates/taskdatabase/quality/tasks_quality.html b/atdb/taskdatabase/templates/taskdatabase/quality/tasks_quality.html
index e665307f..77cf0330 100644
--- a/atdb/taskdatabase/templates/taskdatabase/quality/tasks_quality.html
+++ b/atdb/taskdatabase/templates/taskdatabase/quality/tasks_quality.html
@@ -16,13 +16,13 @@
                            ><i class="fas fa-list"></i> Details
                         </a>&nbsp;
                     {% endif %}
-                                            {% if task.has_quality %}
+                    {% if task.has_quality %}
                             <a class="open-modal btn btn-primary btn-sm"
                                href="{% url 'task-quality' task.id my_tasks.number %}"
                                data-popup-url="{% url 'task-quality' task.id my_tasks.number %}"
                                ><i class="fas fa-balance-scale-right"></i> Quality
                             </a>&nbsp;
-                        {% endif %}
+                    {% endif %}
                 </td>
 
                 {% if task.resume  %}
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html b/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html
index 8de0b96f..d49a67de 100644
--- a/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html
@@ -35,7 +35,7 @@
                         <td>{{value}}</td>
                      {% endfor %}
                 {% else %}
-                        <td>-</td><td>-</td><td>-</td>
+                        <td>-</td><td>-</td><td>-</td><td>-</td>
                 {% endif %}
 
                 <td>{{ task.quality|default_if_none:"-" }}</td>
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation_headers.html b/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation_headers.html
index 50e8cb88..366e15ae 100644
--- a/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation_headers.html
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation_headers.html
@@ -8,6 +8,7 @@
     <th>uv-coverage</th>
     <th>Sensitivity</th>
     <th>Conditions</th>
+    <th>Diagnostic plots</th>
     <th>Current Quality</th>
     <th>Choose a Quality</th>
 </tr>
\ No newline at end of file
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/validation_page.html b/atdb/taskdatabase/templates/taskdatabase/validation/validation_page.html
index ad60380d..88a9b12a 100644
--- a/atdb/taskdatabase/templates/taskdatabase/validation/validation_page.html
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/validation_page.html
@@ -10,9 +10,7 @@
             <div class="col-8">
                 <h3>Validation</h3>
                 These are the tasks in status 'stored' that can be validated. Click one of the quality buttons to validate.
-                <td>
-                     {% include 'taskdatabase/filter/search.html' %}
-                 </td>
+                <td>{% include 'taskdatabase/filter/search.html' %}</td>
                 <hr>
             </div>
         </div>
diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py
index ad825a43..acdb79f4 100644
--- a/atdb/taskdatabase/urls.py
+++ b/atdb/taskdatabase/urls.py
@@ -82,6 +82,7 @@ urlpatterns = [
     path('tasks/<int:pk>/setstatus/<new_status>', views.TaskSetStatus, name='task-details-setstatus'),
 
     path('tasks/<int:pk>/validate/<quality>/<new_status>/<page>', views.TaskValidate, name='task-validate-view'),
+    path('tasks/<int:pk>/retry//<new_status>/<page>', views.TaskRetry, name='task-retry-view'),
 
     path('tasks/<int:pk>/change_priority/<priority_change>/<page>', views.ChangePriority, name='task-change-priority'),
     path('tasks/<int:pk>/change_priority/<priority_change>', views.ChangePriority, name='task-change-priority'),
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index 7e7ac65a..ea83c2ea 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -457,7 +457,6 @@ class ShowFailuresPage(ListView):
     context_object_name = 'my_tasks'
 
     def get_queryset(self):
-        status = self.request.GET.get('status')
         search_box = self.request.GET.get('search_box', None)
 
         # get the sort variable from the session or use default
@@ -469,12 +468,12 @@ class ShowFailuresPage(ListView):
         tasks = Task.objects.filter(status__icontains='failed').order_by(sort)
 
         # check if there is a 'task_filter' put on the session
-        try:
-            filter = self.request.session['task_filter']
-            if filter != 'all':
-                tasks = get_searched_tasks(filter, sort)
-        except:
-            pass
+        #try:
+        #    filter = self.request.session['task_filter']
+        #    if filter != 'all':
+        #        tasks = get_searched_tasks(filter, sort)
+        #except:
+        #    pass
 
         if (search_box is not None):
             tasks = get_searched_tasks(search_box, sort)
@@ -924,6 +923,21 @@ def TaskValidate(request, pk, quality, new_status, page=0):
         return redirect('/atdb/validation?page=' + page)
 
 
+@login_required
+def TaskRetry(request, pk, new_status, page=0):
+    model = Task
+    task = Task.objects.get(pk=pk)
+    task.new_status = new_status
+    task.save()
+
+    if page == 0:
+        # redirect to details screen
+        return redirect('/atdb/task_details')
+    else:
+        # redirect to tasks list
+        return redirect('/atdb/failures?page=' + page)
+
+
 # set a filter value in the session, used later by the 'get_searched_tasks' mechanism
 def TaskSetFilter(request, filter):
     request.session['task_filter'] = filter
-- 
GitLab