From b3c36c0cc25cf19f5e98d1dfed9e6e3ece66d251 Mon Sep 17 00:00:00 2001
From: Nico Vermaas <vermaas@astron.nl>
Date: Thu, 7 Apr 2022 21:08:04 +0200
Subject: [PATCH] working on annotation moved multi-query into deeper folder

---
 atdb/taskdatabase/forms.py                    | 11 ++---
 atdb/taskdatabase/services/algorithms.py      |  6 +--
 .../taskdatabase/modal/modal_no_close.html    |  8 ++++
 .../taskdatabase/modal/modal_script.html      |  2 +-
 .../templates/taskdatabase/refresh.html       |  2 +-
 .../taskdatabase/validation/annotate.html     |  7 ---
 .../validation/annotate_quality.html          | 36 ++++++++++-----
 .../validation/tasks_validation.html          | 10 ++--
 atdb/taskdatabase/urls.py                     |  7 +--
 atdb/taskdatabase/views.py                    | 46 +++++++++++--------
 10 files changed, 77 insertions(+), 58 deletions(-)
 create mode 100644 atdb/taskdatabase/templates/taskdatabase/modal/modal_no_close.html
 delete mode 100644 atdb/taskdatabase/templates/taskdatabase/validation/annotate.html

diff --git a/atdb/taskdatabase/forms.py b/atdb/taskdatabase/forms.py
index 8df61fe6..c015e1d7 100644
--- a/atdb/taskdatabase/forms.py
+++ b/atdb/taskdatabase/forms.py
@@ -1,10 +1,5 @@
 from django import forms
-STATUS_CHOICES = [('defined','defined'),
-                  ('scheduled','scheduled'),
-                  ('running','running'),
-                  ('removed','removed'),
-                  ('error','error')
-                ]
 
-class FilterForm(forms.Form):
-     status = forms.MultipleChoiceField(required=True, widget=forms.CheckboxSelectMultiple, choices=STATUS_CHOICES)
+class QualityAnnotationForm(forms.Form):
+      annotation = forms.CharField(label='', widget=forms.Textarea, max_length=255)
+      return_to_page = forms.IntegerField(widget=forms.HiddenInput)
\ No newline at end of file
diff --git a/atdb/taskdatabase/services/algorithms.py b/atdb/taskdatabase/services/algorithms.py
index 958cb43d..69b58e50 100644
--- a/atdb/taskdatabase/services/algorithms.py
+++ b/atdb/taskdatabase/services/algorithms.py
@@ -138,9 +138,9 @@ def convert_quality_to_html(task):
             pass
 
         results += "<tr><td><b>QA diagnostic plots</b></td><td>" + "-" + "</td></tr>"
-        results += "<tr><td><b>Workflow summary parset</b></td><td>" + "-" + "</td></tr>"
-        results += "<tr><td><b>Summary logs</b></td><td>" + "-" + "</td></tr>"
-        results += "<tr><td><b>QA summary.hf5</b></td><td>" + "-" + "</td></tr>"
+        #results += "<tr><td><b>Workflow summary parset</b></td><td>" + "-" + "</td></tr>"
+        #results += "<tr><td><b>Summary logs</b></td><td>" + "-" + "</td></tr>"
+        #results += "<tr><td><b>QA summary.hf5</b></td><td>" + "-" + "</td></tr>"
 
     except Exception as err:
         results = "<tr><td>" + str(err) + "</td></tr>"
diff --git a/atdb/taskdatabase/templates/taskdatabase/modal/modal_no_close.html b/atdb/taskdatabase/templates/taskdatabase/modal/modal_no_close.html
new file mode 100644
index 00000000..e153f3a8
--- /dev/null
+++ b/atdb/taskdatabase/templates/taskdatabase/modal/modal_no_close.html
@@ -0,0 +1,8 @@
+
+<div id="popup" class="modal fade" role="dialog">
+  <div class="modal-dialog modal-lg">
+    <div class="modal-content">
+      <div class="modal-body"></div>
+    </div>
+  </div>
+</div>
\ No newline at end of file
diff --git a/atdb/taskdatabase/templates/taskdatabase/modal/modal_script.html b/atdb/taskdatabase/templates/taskdatabase/modal/modal_script.html
index 1c0d5006..52cff4d4 100644
--- a/atdb/taskdatabase/templates/taskdatabase/modal/modal_script.html
+++ b/atdb/taskdatabase/templates/taskdatabase/modal/modal_script.html
@@ -8,4 +8,4 @@
       $popup.modal("show");
     });
   });
-</script>
\ No newline at end of file
+</script>
diff --git a/atdb/taskdatabase/templates/taskdatabase/refresh.html b/atdb/taskdatabase/templates/taskdatabase/refresh.html
index f0a067e6..6e558ab3 100644
--- a/atdb/taskdatabase/templates/taskdatabase/refresh.html
+++ b/atdb/taskdatabase/templates/taskdatabase/refresh.html
@@ -12,5 +12,5 @@
         $(document).on('keypress click', function() { intvrefresh() });
         intvrefresh();
 
-    }(30));
+    }(5));
 </script>
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/annotate.html b/atdb/taskdatabase/templates/taskdatabase/validation/annotate.html
deleted file mode 100644
index beac39a4..00000000
--- a/atdb/taskdatabase/templates/taskdatabase/validation/annotate.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-<form class="navbar-form navbar-left" role="Annotate" onsubmit="writeToLocalStorage('annotate')" method="get" action="">
-    <div class="form-group">
-        <input type="text" class="form-control" id="annotate_box" name="annotate" placeholder="Annotate..." value="">
-    </div>
-</form>
-
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/annotate_quality.html b/atdb/taskdatabase/templates/taskdatabase/validation/annotate_quality.html
index 9a87b5d9..2cb020d1 100644
--- a/atdb/taskdatabase/templates/taskdatabase/validation/annotate_quality.html
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/annotate_quality.html
@@ -1,18 +1,30 @@
-{% load static %}
 
-<div class="card">
-     <div class="card-body">
+{% block myBlock %}
+<div class="container-fluid details-container">
+
+
+  <div class="card">
+       <div class="card-body">
          <h4>Quality Annotation</h4>
-         <table class="table table-striped">
-             {{ quality_remarks | safe }}
-         </table>
-     </div>
-    <form class="navbar-form navbar-left" role="Annotate" onsubmit="writeToLocalStorage('annotate')" method="get" action="">
-        <div class="form-group">
-            <input type="text" class="form-control" id="annotate_box" name="annotate" placeholder="Enter annotation..." value={{ quality_remarks | safe }}>
-        </div>
-    </form>
+
+        <form action="{% url 'annotate-quality' task.id %}" method="POST">
+            {% csrf_token %}
+            <table>
+            <tr>
+                {{ form }}
+            </tr>
+            <tr>
+                <button class="btn btn-success btn-sm" type="submit"><i class="fas fa-check"></i> OK</button>
+                <a href="{% url 'validation' %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-times-circle"></i> Cancel</a>&nbsp
+            </tr>
+            </table>
+        </form>
+
+       </div>
+  </div>
 </div>
+{% endblock %}
+
 
 {% include "taskdatabase/modal/modal_script.html" %}
 {% include "taskdatabase/modal/modal.html" %}
\ No newline at end of file
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html b/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html
index 50606205..77075fc6 100644
--- a/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html
@@ -48,14 +48,14 @@
                 <td>
                     {% if task.has_quality_remarks %}
                         <a class="open-modal btn btn-warning btn-sm"
-                               href="{% url 'annotate-quality' task.id my_tasks.number %}"
-                               data-popup-url="{% url 'annotate-quality' task.id my_tasks.number %}">
+                               href="{% url 'annotate-quality' task.id my_tasks.number task.has_quality_remarks %}"
+                               data-popup-url="{% url 'annotate-quality' task.id my_tasks.number task.has_quality_remarks %}">
                             <i class="fas fa-pen-alt"></i>
                         </a>&nbsp;
                     {% else %}
                         <a class="open-modal btn btn-secondary btn-sm"
-                               href="{% url 'annotate-quality' task.id my_tasks.number %}"
-                               data-popup-url="{% url 'annotate-quality' task.id my_tasks.number %}">
+                               href="{% url 'annotate-quality' task.id my_tasks.number task.has_quality_remarks %}"
+                               data-popup-url="{% url 'annotate-quality' task.id my_tasks.number task.has_quality_remarks %}">
                             <i class="fas fa-pen-alt"></i>
                         </a>&nbsp;
                     {% endif %}
@@ -73,4 +73,4 @@
 {% endfor %}
 
 {% include "taskdatabase/modal/modal_script.html" %}
-{% include "taskdatabase/modal/modal.html" %}
\ No newline at end of file
+{% include "taskdatabase/modal/modal_no_close.html" %}
\ No newline at end of file
diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py
index 4f2cca51..f0a12c98 100644
--- a/atdb/taskdatabase/urls.py
+++ b/atdb/taskdatabase/urls.py
@@ -21,9 +21,10 @@ urlpatterns = [
 
     path('task_details/<int:id>/<page>', views.TaskDetails, name='task-details'),
     path('task_details/', views.TaskDetails, name='task-details'),
-    path('task_quality/<int:id>/<page>', views.TaskQuality, name='task-quality'),
-    path('task_quality/', views.TaskQuality, name='task-quality'),
-    path('annotate_quality/<int:id>/<page>', views.AnnotateQuality, name='annotate-quality'),
+    path('task_quality/<int:id>/<page>', views.ShowTaskQuality, name='task-quality'),
+    path('task_quality/', views.ShowTaskQuality, name='task-quality'),
+    path('annotate_quality/<int:id>/<page>/<new_remark>', views.AnnotateQuality, name='annotate-quality'),
+    path('annotate_quality/<int:id>', views.AnnotateQuality, name='annotate-quality'),
     path('annotate_quality/', views.AnnotateQuality, name='annotate-quality'),
 
     path('show-inputs/<int:id>/', views.ShowInputs, name='show-inputs'),
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index 86899d54..10082001 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -27,6 +27,7 @@ from rest_framework.request import Request
 from django.conf import settings
 from .models import Task, Status, Workflow, LogEntry, Configuration, Job, PostProcessingRule, Monitor, LatestMonitor
 from .tables import TaskTable
+from .forms import QualityAnnotationForm
 
 from django.db.models import Q
 from .serializers import \
@@ -554,7 +555,7 @@ def TaskDetails(request, id=0, page=0):
     return render(request, "taskdatabase/tasks/task_details.html", {'task': task, 'logentries': logentries_html})
 
 
-def TaskQuality(request, id=0, page=0):
+def ShowTaskQuality(request, id=0, page=0):
     try:
         task = Task.objects.get(id=id)
 
@@ -579,29 +580,38 @@ def TaskQuality(request, id=0, page=0):
     return render(request, "taskdatabase/tasks/task_quality.html", {'task': task, 'quality': quality_html})
 
 
-def AnnotateQuality(request, id=0, page=0):
-    try:
-        task = Task.objects.get(id=id)
+def AnnotateQuality(request, id=0, page=0, new_remark=""):
 
-        # store the requested task_id on the session
-        request.session['task_id'] = task.id
+    # store the current page on the session
+    # request.session['page'] = page
 
-    except:
-        # when an invalid id is given, like '/atdb/task_details/0/',
-        # then look if there is a task stored on the session
+    # a POST means that the form is filled in and should be stored in the database
+    if request.method == "POST":
+
+        form = QualityAnnotationForm(request.POST)
+
+        if form.is_valid():
+            task = Task.objects.get(id=id)
+            try:
+                task.remarks['quality'] = request.POST.get("annotation","")
+            except:
+                task.remarks = {}
+                task.remarks['quality'] = request.POST.get("annotation","")
+
+            task.save()
+            return redirect('/atdb/validation?page='+request.POST.get("return_to_page",1))
+
+    else:
+        # a GET means that the form should be presented to be filled in
+        task = Task.objects.get(id=id)
         try:
-            task_on_session = request.session['task_id']
-            task = Task.objects.get(id=task_on_session)
+            quality_remarks = task.remarks['quality']
         except:
-            messages.add_message(request, messages.WARNING, 'no task selected.')
-            return redirect('index')
-
-    # store the current page on the session
-    request.session['page'] = page
+            quality_remarks = ""
 
-    quality_remarks = task.remarks['quality']
+        form = QualityAnnotationForm(initial={'annotation': quality_remarks, 'return_to_page': page})
 
-    return render(request, "taskdatabase/validation/annotate_quality.html", {'task': task, 'quality_remarks': quality_remarks})
+        return render(request, "taskdatabase/validation/annotate_quality.html", {'task': task, 'page': page, 'form':form})
 
 
 def ShowInputs(request, id):
-- 
GitLab