From d375cea6493a07fa3ffce99740d00c8912feff4e Mon Sep 17 00:00:00 2001
From: vermaas <vermaas@astron.nl>
Date: Fri, 2 Dec 2022 10:23:33 +0100
Subject: [PATCH] split annotation in taskid and sasid to preserve the remarks
 on both levels, and add sasid remarks to tasks.

---
 atdb/taskdatabase/models.py                   | 14 ++++++++
 .../templates/taskdatabase/index.html         |  2 +-
 .../quality/annotate_quality_taskid.html      | 27 ++++++++++++++++
 .../taskdatabase/quality/tasks_quality.html   | 10 +++---
 ...ality.html => annotate_quality_sasid.html} |  4 +--
 .../validation/tasks_validation.html          | 10 +++---
 atdb/taskdatabase/urls.py                     |  9 +++---
 atdb/taskdatabase/views.py                    | 32 ++++++++++++-------
 8 files changed, 79 insertions(+), 29 deletions(-)
 create mode 100644 atdb/taskdatabase/templates/taskdatabase/quality/annotate_quality_taskid.html
 rename atdb/taskdatabase/templates/taskdatabase/validation/{annotate_quality.html => annotate_quality_sasid.html} (89%)

diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py
index cb0443b0..c5315f5f 100644
--- a/atdb/taskdatabase/models.py
+++ b/atdb/taskdatabase/models.py
@@ -139,6 +139,20 @@ class Task(models.Model):
         except:
             return None
 
+    @property
+    def get_quality_remarks_taskid(self):
+        try:
+            return self.remarks['quality_taskid']
+        except:
+            return None
+
+    @property
+    def get_quality_remarks_sasid(self):
+        try:
+            return self.remarks['quality_sasid']
+        except:
+            return None
+
     @property
     def quality_as_list(self):
         try:
diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html
index 9fcee8dd..47fcad4f 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 27 November 2022
+    <p class="footer"> Version 2 December 2022
 
 </div>
 
diff --git a/atdb/taskdatabase/templates/taskdatabase/quality/annotate_quality_taskid.html b/atdb/taskdatabase/templates/taskdatabase/quality/annotate_quality_taskid.html
new file mode 100644
index 00000000..23d0e3d6
--- /dev/null
+++ b/atdb/taskdatabase/templates/taskdatabase/quality/annotate_quality_taskid.html
@@ -0,0 +1,27 @@
+
+{% block myBlock %}
+<div class="container-fluid details-container">
+
+
+  <div class="card">
+       <div class="card-body">
+         <h4>Quality Annotation (per task)</h4>
+
+        <form class="post-form" action="{% url 'annotate-quality-taskid' task.id %}" method="POST">
+            {% csrf_token %}
+            <div>
+                {{ form }}
+            </div>
+            <div><button class="btn btn-success btn-sm" type="submit"><i class="fas fa-check"></i> OK</button>
+                <a href="{% url 'quality' %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-times-circle"></i> Cancel</a>&nbsp
+            </div>
+        </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/quality/tasks_quality.html b/atdb/taskdatabase/templates/taskdatabase/quality/tasks_quality.html
index a52b81a3..76258aec 100644
--- a/atdb/taskdatabase/templates/taskdatabase/quality/tasks_quality.html
+++ b/atdb/taskdatabase/templates/taskdatabase/quality/tasks_quality.html
@@ -53,16 +53,16 @@
                 {% endif %}
 
                 <td>{% if user.is_authenticated %}
-                    {% if task.get_quality_remarks %}
+                    {% if task.get_quality_remarks_taskid %}
                         <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-taskid' task.id my_tasks.number %}"
+                               data-popup-url="{% url 'annotate-quality-taskid' task.id my_tasks.number %}">
                             <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-taskid' task.id my_tasks.number %}"
+                               data-popup-url="{% url 'annotate-quality-taskid' task.id my_tasks.number %}">
                             <i class="fas fa-pen-alt"></i>
                         </a>&nbsp;
                     {% endif %}
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/annotate_quality.html b/atdb/taskdatabase/templates/taskdatabase/validation/annotate_quality_sasid.html
similarity index 89%
rename from atdb/taskdatabase/templates/taskdatabase/validation/annotate_quality.html
rename to atdb/taskdatabase/templates/taskdatabase/validation/annotate_quality_sasid.html
index 80b7910c..86ff0efb 100644
--- a/atdb/taskdatabase/templates/taskdatabase/validation/annotate_quality.html
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/annotate_quality_sasid.html
@@ -5,9 +5,9 @@
 
   <div class="card">
        <div class="card-body">
-         <h4>Quality Annotation</h4>
+         <h4>Quality Annotation (per SAS_ID)</h4>
 
-        <form class="post-form" action="{% url 'annotate-quality-sasid' task.sas_id %}" method="POST">
+        <form class="post-form" action="{% url 'annotate-quality-sasid' task.id %}" method="POST">
             {% csrf_token %}
             <div>
                 {{ form }}
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html b/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html
index dfd608cd..4392498e 100644
--- a/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/tasks_validation.html
@@ -29,16 +29,16 @@
 
                 <td>
                     {% if user.is_authenticated %}
-                        {% if task.get_quality_remarks %}
+                        {% if task.get_quality_remarks_sasid %}
                             <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-sasid' task.id my_tasks.number %}"
+                                   data-popup-url="{% url 'annotate-quality-sasid' task.id my_tasks.number %}">
                                 <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-sasid' task.id my_tasks.number %}"
+                                   data-popup-url="{% url 'annotate-quality-sasid' task.id my_tasks.number %}">
                                 <i class="fas fa-pen-alt"></i>
                             </a>&nbsp;
                         {% endif %}
diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py
index 891749a6..b486b50f 100644
--- a/atdb/taskdatabase/urls.py
+++ b/atdb/taskdatabase/urls.py
@@ -23,10 +23,11 @@ urlpatterns = [
     path('task_details/', views.TaskDetails, name='task-details'),
     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>', views.AnnotateQuality, name='annotate-quality'),
-    path('annotate_quality/<int:id>', views.AnnotateQuality, name='annotate-quality'),
-    path('annotate_quality/', views.AnnotateQuality, name='annotate-quality'),
-    path('annotate_quality_sasid/<sas_id>', views.AnnotateQualitySasId, name='annotate-quality-sasid'),
+    path('annotate_quality_taskid/<int:id>/<page>', views.AnnotateQualityTaskId, name='annotate-quality-taskid'),
+    path('annotate_quality_taskid/<int:id>', views.AnnotateQualityTaskId, name='annotate-quality-taskid'),
+    path('annotate_quality_taskid/', views.AnnotateQualityTaskId, name='annotate-quality-taskid'),
+    path('annotate_quality_sasid/<int:id>', views.AnnotateQualitySasId, name='annotate-quality-sasid'),
+    path('annotate_quality_sasid/<int:id>/<page>', views.AnnotateQualitySasId, name='annotate-quality-sasid'),
     path('show_inspectionplots/<int:id>/<page>', views.ShowInspectionPlots, name='inspection-plots'),
 
     path('show-inputs/<int:id>/', views.ShowInputs, name='show-inputs'),
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index 45284f9f..389fbf68 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -526,7 +526,7 @@ def ShowTaskQuality(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, new_remark=""):
+def AnnotateQualityTaskId(request, id=0, page=0):
     # a POST means that the form is filled in and should be stored in the database
     if request.method == "POST":
 
@@ -535,41 +535,49 @@ def AnnotateQuality(request, id=0, page=0, new_remark=""):
         if form.is_valid():
             task = Task.objects.get(id=id)
             try:
-                task.remarks['quality'] = request.POST.get("annotation", "")
+                task.remarks['quality_taskid'] = request.POST.get("annotation", "")
             except:
                 task.remarks = {}
-                task.remarks['quality'] = request.POST.get("annotation", "")
+                task.remarks['quality_taskid'] = request.POST.get("annotation", "")
 
             task.save()
-            return redirect_with_params('validation', '?page=' + request.POST.get("return_to_page", 1))
+            return redirect_with_params('quality', '?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:
-            quality_remarks = task.remarks['quality']
+            quality_remarks = task.remarks['quality_taskid']
         except:
             quality_remarks = ""
 
         form = QualityAnnotationForm(initial={'annotation': quality_remarks, 'return_to_page': page})
-        return render(request, "taskdatabase/validation/annotate_quality.html",
+        return render(request, "taskdatabase/quality/annotate_quality_taskid.html",
                       {'task': task, 'page': page, 'form': form})
 
 
-def AnnotateQualitySasId(request, sas_id=0, page=0, new_remark=""):
+def AnnotateQualitySasId(request, id=0, page=0):
     # 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():
-            tasks = Task.objects.filter(sas_id=sas_id)
+            task = Task.objects.get(id=id)
+            tasks = Task.objects.filter(sas_id=task.sas_id)
             for task in tasks:
                 try:
-                    task.remarks['quality'] = request.POST.get("annotation", "")
+                    remark_per_sasid = request.POST.get("annotation", "")
+                    try:
+                        remark_per_taskid = task.remarks['quality_taskid']
+                    except:
+                        remark_per_taskid = ''
+                    new_remark_per_taskid = remark_per_taskid + "\n\n" + remark_per_sasid
+                    task.remarks['quality_taskid'] = new_remark_per_taskid
+                    task.remarks['quality_sasid'] = remark_per_sasid
                 except:
                     task.remarks = {}
-                    task.remarks['quality'] = request.POST.get("annotation", "")
+                    task.remarks['quality_sasid'] = request.POST.get("annotation", "")
 
                 task.save()
 
@@ -579,12 +587,12 @@ def AnnotateQualitySasId(request, sas_id=0, page=0, new_remark=""):
         # a GET means that the form should be presented to be filled in
         task = Task.objects.get(id=id)
         try:
-            quality_remarks = task.remarks['quality']
+            quality_remarks = task.remarks['quality_sasid']
         except:
             quality_remarks = ""
 
         form = QualityAnnotationForm(initial={'annotation': quality_remarks, 'return_to_page': page})
-        return render(request, "taskdatabase/validation/annotate_quality.html",
+        return render(request, "taskdatabase/validation/annotate_quality_sasid.html",
                       {'task': task, 'page': page, 'form': form})
 
 def ShowInspectionPlots(request, id=0, page=0):
-- 
GitLab