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>  + </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> {% 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> {% 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