From cfbc50b1a33768f57dba6647ee21a39ade079529 Mon Sep 17 00:00:00 2001 From: Vermaas <vermaas@astron.nl> Date: Mon, 8 May 2023 13:12:00 +0200 Subject: [PATCH] add discard functionality from filter page --- atdb/atdb/static/taskdatabase/style.css | 11 +++- .../static/taskdatabase/style.css | 11 +++- atdb/taskdatabase/tables.py | 2 +- .../discarded/clear_filter_button.html | 1 + .../taskdatabase/discarded/page.html | 8 ++- .../templates/taskdatabase/index.html | 2 +- .../taskdatabase/quality/filter_buttons.html | 26 +++++----- .../taskdatabase/query/confirm_discard.html | 31 +++++++++++ .../query/set_multi_status_panel.html | 2 +- atdb/taskdatabase/urls.py | 3 -- atdb/taskdatabase/views.py | 51 +++++++++++-------- 11 files changed, 104 insertions(+), 44 deletions(-) create mode 100644 atdb/taskdatabase/templates/taskdatabase/discarded/clear_filter_button.html create mode 100644 atdb/taskdatabase/templates/taskdatabase/query/confirm_discard.html diff --git a/atdb/atdb/static/taskdatabase/style.css b/atdb/atdb/static/taskdatabase/style.css index b927c966..e3b90a87 100644 --- a/atdb/atdb/static/taskdatabase/style.css +++ b/atdb/atdb/static/taskdatabase/style.css @@ -49,7 +49,7 @@ TD { font-weight: bold; } -.scrubbed, { +.scrubbed { color: darkgray; font-style: italic; } @@ -141,4 +141,11 @@ p.title { .poor { color: red; font-weight: bold; -} \ No newline at end of file +} + +#search_box +{ + color: darkblue; + display: inline-block; + vertical-align: middle; +} diff --git a/atdb/taskdatabase/static/taskdatabase/style.css b/atdb/taskdatabase/static/taskdatabase/style.css index b927c966..e3b90a87 100644 --- a/atdb/taskdatabase/static/taskdatabase/style.css +++ b/atdb/taskdatabase/static/taskdatabase/style.css @@ -49,7 +49,7 @@ TD { font-weight: bold; } -.scrubbed, { +.scrubbed { color: darkgray; font-style: italic; } @@ -141,4 +141,11 @@ p.title { .poor { color: red; font-weight: bold; -} \ No newline at end of file +} + +#search_box +{ + color: darkblue; + display: inline-block; + vertical-align: middle; +} diff --git a/atdb/taskdatabase/tables.py b/atdb/taskdatabase/tables.py index 8390b260..b8ad9471 100644 --- a/atdb/taskdatabase/tables.py +++ b/atdb/taskdatabase/tables.py @@ -25,7 +25,7 @@ class TaskTable(tables.Table): class Meta: model = Task template_name = "django_tables2/bootstrap4.html" - fields = ("id", "workflow","filter","priority","status","quality","project","sas_id","resume","actions","buttons") + fields = ("id", "workflow.id","filter","priority","status","quality","project","sas_id","resume","actions","buttons") # columns that need specific rendering status = StatusColumn() diff --git a/atdb/taskdatabase/templates/taskdatabase/discarded/clear_filter_button.html b/atdb/taskdatabase/templates/taskdatabase/discarded/clear_filter_button.html new file mode 100644 index 00000000..9e843a84 --- /dev/null +++ b/atdb/taskdatabase/templates/taskdatabase/discarded/clear_filter_button.html @@ -0,0 +1 @@ +<a href="{% url 'clear-filter' 'discarded' %}" class="btn btn-success btn-sm" role="button"><i class="fas fa-window-close"></i> Clear Filter</a> diff --git a/atdb/taskdatabase/templates/taskdatabase/discarded/page.html b/atdb/taskdatabase/templates/taskdatabase/discarded/page.html index 79fbe26f..66a827c7 100644 --- a/atdb/taskdatabase/templates/taskdatabase/discarded/page.html +++ b/atdb/taskdatabase/templates/taskdatabase/discarded/page.html @@ -10,7 +10,13 @@ <div class="col-8"> <h3>Discarded</h3> These the discarded tasks, invisible in the rest of ATDB. - <td>{% include 'taskdatabase/filter/search.html' %}</td> + <hr> + <table> + <tr> + <td>{% include "taskdatabase/discarded/clear_filter_button.html" %}</td> + <td>{% include 'taskdatabase/filter/search.html' %}</td> + </tr> + </table> <hr> </div> </div> diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html index 7a55509e..6b73f0d8 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 4 May 2023 + <p class="footer"> Version 8 May 2023 </div> {% include 'taskdatabase/refresh.html' %} diff --git a/atdb/taskdatabase/templates/taskdatabase/quality/filter_buttons.html b/atdb/taskdatabase/templates/taskdatabase/quality/filter_buttons.html index 31c387bd..106a5044 100644 --- a/atdb/taskdatabase/templates/taskdatabase/quality/filter_buttons.html +++ b/atdb/taskdatabase/templates/taskdatabase/quality/filter_buttons.html @@ -16,19 +16,19 @@ <tr> <td> {% include "taskdatabase/quality/clear_filter_button.html" %} - <a href="{% url 'task-set-filter' 'failed' 'quality' %}" class="btn btn-secondary btn-sm" role="button"><i class="fas fa-layer-group"></i> Failed</a> - <a href="{% url 'task-set-onhold-filter' True 'quality' %}" class="btn btn-secondary btn-sm" role="button"><i class="fas fa-layer-group"></i> On Hold</a> - - <a href="{% url 'task-set-filter' 'processed' 'quality' %}" class="btn btn-secondary btn-sm" role="button">processed</a> - <a href="{% url 'task-set-filter' 'storing' 'quality' %}" class="btn btn-secondary btn-sm" role="button"><i>storing</i></a> - <a href="{% url 'task-set-filter' 'stored' 'quality' %}" class="btn btn-secondary btn-sm" role="button">stored</a> - <a href="{% url 'task-set-filter' 'validated' 'quality' %}" class="btn btn-secondary btn-sm" role="button">validated</a> - <a href="{% url 'task-set-filter' 'scrubbing' 'quality' %}" class="btn btn-secondary btn-sm" role="button"><i>scrubbing</i></a> - <a href="{% url 'task-set-filter' 'scrubbed' 'quality' %}" class="btn btn-secondary btn-sm" role="button">scrubbed</a> - <a href="{% url 'task-set-filter' 'archiving' 'quality' %}" class="btn btn-secondary btn-sm" role="button"><i>archiving</i></a> - <a href="{% url 'task-set-filter' 'archived' 'quality' %}" class="btn btn-secondary btn-sm" role="button">archived</a> - <a href="{% url 'task-set-filter' 'finished' 'quality' %}" class="btn btn-secondary btn-sm" role="button">finished</a> - <a href="{% url 'task-set-filter' 'suspended' 'quality' %}" class="btn btn-secondary btn-sm" role="button">suspended</a> + <a href="{% url 'task-set-filter' 'failed' 'quality' %}" class="btn btn-secondary btn-sm" role="button"><i class="fas fa-layer-group"></i> Failed</a> + <a href="{% url 'task-set-onhold-filter' True 'quality' %}" class="btn btn-secondary btn-sm" role="button"><i class="fas fa-layer-group"></i> On Hold</a> + + <a href="{% url 'task-set-filter' 'processed' 'quality' %}" class="btn btn-secondary btn-sm" role="button">processed</a> + <a href="{% url 'task-set-filter' 'storing' 'quality' %}" class="btn btn-secondary btn-sm" role="button"><i>storing</i></a> + <a href="{% url 'task-set-filter' 'stored' 'quality' %}" class="btn btn-secondary btn-sm" role="button">stored</a> + <a href="{% url 'task-set-filter' 'validated' 'quality' %}" class="btn btn-secondary btn-sm" role="button">validated</a> + <a href="{% url 'task-set-filter' 'scrubbing' 'quality' %}" class="btn btn-secondary btn-sm" role="button"><i>scrubbing</i></a> + <a href="{% url 'task-set-filter' 'scrubbed' 'quality' %}" class="btn btn-secondary btn-sm" role="button">scrubbed</a> + <a href="{% url 'task-set-filter' 'archiving' 'quality' %}" class="btn btn-secondary btn-sm" role="button"><i>archiving</i></a> + <a href="{% url 'task-set-filter' 'archived' 'quality' %}" class="btn btn-secondary btn-sm" role="button">archived</a> + <a href="{% url 'task-set-filter' 'finished' 'quality' %}" class="btn btn-secondary btn-sm" role="button">finished</a> + <a href="{% url 'task-set-filter' 'suspended' 'quality' %}" class="btn btn-secondary btn-sm" role="button">suspended</a> </td> <td> diff --git a/atdb/taskdatabase/templates/taskdatabase/query/confirm_discard.html b/atdb/taskdatabase/templates/taskdatabase/query/confirm_discard.html new file mode 100644 index 00000000..a0381cce --- /dev/null +++ b/atdb/taskdatabase/templates/taskdatabase/query/confirm_discard.html @@ -0,0 +1,31 @@ +{% extends 'taskdatabase/base.html' %} + +{% block myBlock %} +<div class="container-fluid details-container"> + + + <div class="card"> + <div class="card-body"> + + <form action="./{{ new_value }}" method="POST">{% csrf_token %} + <div class="text-center"> + + <h5> Are you sure you want to discard ({{ count }}) tasks ?</h5> + Enter a reason for discarding (optional) + {% csrf_token %} + + <div> + {{ my_form }} + </div> + + <p> + <button class="btn btn-success btn-sm" type="submit"><i class="fas fa-check"></i> OK</button> + <a href="{% url 'query' %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-times-circle"></i> Cancel</a>  + </p> + </div> + </form> + + </div> + </div> +</div> +{% endblock %} \ No newline at end of file diff --git a/atdb/taskdatabase/templates/taskdatabase/query/set_multi_status_panel.html b/atdb/taskdatabase/templates/taskdatabase/query/set_multi_status_panel.html index c84b4981..d0110b2f 100644 --- a/atdb/taskdatabase/templates/taskdatabase/query/set_multi_status_panel.html +++ b/atdb/taskdatabase/templates/taskdatabase/query/set_multi_status_panel.html @@ -20,7 +20,7 @@ <a href="{% url 'task-multi-setstatus' 'archived' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-sync-alt"></i> archived</a> <a href="{% url 'task-multi-setstatus' 'finished' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-sync-alt"></i> finished</a> <a href="{% url 'task-multi-setstatus' 'suspended' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-sync-alt"></i> suspended</a> - + <a href="{% url 'task-multi-setstatus' 'discarded' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-trash-alt"></i> discard</a> </tr> </table> {% endif %} diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py index 102fe1aa..faeda24a 100644 --- a/atdb/taskdatabase/urls.py +++ b/atdb/taskdatabase/urls.py @@ -115,8 +115,5 @@ urlpatterns = [ path('tasks/<int:pk>/hold/<hold_it>/<page>', views.Hold, name='task-hold-resume'), path('tasks/<int:pk>/hold/<hold_it>', views.Hold, name='task-hold-resume'), path('tasks/<int:pk>/query-hold/<hold_it>/<query_params>', views.HoldQuery, name='query-hold-resume'), - path('tasks/<int:pk>/hold/<hold_it>/<page>', views.Hold, name='service-hold-resume'), - - path('hello/', views.HelloView.as_view(), name='hello'), ] diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index b652df00..43041f1a 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -1109,9 +1109,6 @@ def TaskDiscard(request, pk, new_status, page=0): if request.method == "POST": form = DiscardAnnotationForm(request.POST) - # set the cleanup_policy, which states what the cleanup service should do with it. - task.cleanup_policy = task.status - if form.is_valid(): try: task.remarks['discard_reason'] = request.POST.get("annotation", "") @@ -1119,6 +1116,10 @@ def TaskDiscard(request, pk, new_status, page=0): task.remarks = {} task.remarks['discard_reason'] = request.POST.get("annotation", "") + # currently, the cleanup_policy is set to the old status. + # That will tell the cleanup service what to do with it. + task.cleanup_policy = task.status + # set the status to discard and save it task.new_status = new_status task.save() @@ -1228,6 +1229,8 @@ def TaskClearFilter(request, redirect_to_page): return redirect('quality') if redirect_to_page == 'query': return redirect('query') + if redirect_to_page == 'discarded': + return redirect('discarded') return redirect_with_params('index', '?page=1') @@ -1280,7 +1283,6 @@ def convert_query_params_to_url(query_params): params = "" for key in d: params = params + "&" + key + "=" + d[key] - print(params) return params @@ -1304,21 +1306,40 @@ def TaskMultiStatus(request, new_status, query_params): count = len(filtered_tasks_as_list) if request.method == "POST": + form = DiscardAnnotationForm(request.POST) for id in filtered_tasks_as_list: task = Task.objects.get(id=id) + + # setting status to discard or discarded uses a different form + if 'discard' in new_status: + if form.is_valid(): + try: + task.remarks['discard_reason'] = request.POST.get("annotation", "") + except: + task.remarks = {} + task.remarks['discard_reason'] = request.POST.get("annotation", "") + + # currently, the cleanup_policy is set to the old status. + # That will tell the cleanup service what to do with it. + task.cleanup_policy = task.status task.new_status = new_status task.save() current_query_params = request.session['current_query_params'] return redirect_with_params('query', '?' + current_query_params) - # add the current query parameters to the session so that they survive - # the request/response to the confirmation page (which has other query parameters) - current_query_params = convert_query_params_to_url(query_params) - request.session['current_query_params'] = current_query_params - - return render(request, "taskdatabase/query/confirm_multi_change.html", {'new_value': new_status, 'count': count}) + else: + # add the current query parameters to the session so that they survive + # the request/response to the confirmation page (which has other query parameters) + current_query_params = convert_query_params_to_url(query_params) + request.session['current_query_params'] = current_query_params + + if 'discard' in new_status: + my_form = DiscardAnnotationForm(initial={'annotation': '', 'return_to_page': 0}) + return render(request, "taskdatabase/query/confirm_discard.html", {'my_form': my_form, 'new_value': new_status,'count': count}) + else: + return render(request, "taskdatabase/query/confirm_multi_change.html", {'new_value': new_status, 'count': count}) @login_required @@ -1427,13 +1448,3 @@ class GetUniqueValuesForKey(generics.ListAPIView): }) -# 4 mar 2022 -# this is a test class to test token authentication -# can be removed if it all also works in production -class HelloView(APIView): - permission_classes = (IsAuthenticated,) - queryset = Task.objects.all() - - def get(self, request): - content = {'message': 'Hello, World!'} - return Response(content) -- GitLab