diff --git a/atdb/taskdatabase/tables.py b/atdb/taskdatabase/tables.py index b8ad9471f10a72409740e54a11b7d114e864e97d..9d40e6aff72383215dcfc0bf5bbbd2f9ce8e3896 100644 --- a/atdb/taskdatabase/tables.py +++ b/atdb/taskdatabase/tables.py @@ -20,15 +20,20 @@ class ResumeColumn(tables.BooleanColumn): def render(self, record): return record.resume +class PurgeColumn(tables.BooleanColumn): + def render(self, record): + return record.purge_policy + class TaskTable(tables.Table): class Meta: model = Task template_name = "django_tables2/bootstrap4.html" - fields = ("id", "workflow.id","filter","priority","status","quality","project","sas_id","resume","actions","buttons") + fields = ("id", "workflow.id","filter","priority","status","quality","project","sas_id","resume","purge","actions","buttons") # columns that need specific rendering status = StatusColumn() + purge = PurgeColumn() actions = tables.TemplateColumn(verbose_name='Details', template_name='taskdatabase/query/action_buttons_per_row.html', diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html index c47304bc858d393279e87367aa14f355ef85f88a..cc6073b07ca5d3be6f9cd8835044bb6e8f80375e 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 3 Aug 2023 + <p class="footer"> Version 4 Aug 2023 </div> {% include 'taskdatabase/refresh.html' %} diff --git a/atdb/taskdatabase/templates/taskdatabase/query/action_buttons_per_row.html b/atdb/taskdatabase/templates/taskdatabase/query/action_buttons_per_row.html index 8cebd0473126d486fec6877a0ff2d456764706f1..00c2324c419e4f3e461e2f6814c2bb361fb7883a 100644 --- a/atdb/taskdatabase/templates/taskdatabase/query/action_buttons_per_row.html +++ b/atdb/taskdatabase/templates/taskdatabase/query/action_buttons_per_row.html @@ -6,4 +6,12 @@ {% if not record.resume %} <a href="{% url 'query-hold-resume' record.pk 'resume' request.GET %}" class="btn btn-success btn-sm" role="button"><i class="fas fa-play"></i> start</a> +{% endif %} + +{% if record.purge_policy == 'no' %} + <a href="{% url 'query-purge' record.pk 'yes' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-xmark"></i> purge: yes</a> +{% endif %} + +{% if record.purge_policy == 'yes' %} + <a href="{% url 'query-purge' record.pk 'no' request.GET %}" class="btn btn-success btn-sm" role="button"><i class="fas fa-check"></i> purge: no</a> {% endif %} \ 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 19c8a1f167849ef0f2922c2c478fb6c159128568..4de39dac548667fd28190e677ed31aa1de5980fd 100644 --- a/atdb/taskdatabase/templates/taskdatabase/query/set_multi_status_panel.html +++ b/atdb/taskdatabase/templates/taskdatabase/query/set_multi_status_panel.html @@ -10,6 +10,9 @@ <tr> <a href="{% url 'task-multi-hold' 'hold' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-pause"></i> hold</a> <a href="{% url 'task-multi-hold' 'resume' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-play"></i> start</a> + <a href="{% url 'task-multi-purge' 'yes' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-xmark"></i> purge: yes</a> + <a href="{% url 'task-multi-purge' 'no' request.GET %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-check"></i> purge: no</a> + <a href="{% url 'task-multi-setstatus' 'defined' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-sync-alt"></i> defined</a> <a href="{% url 'task-multi-setstatus' 'staged' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-sync-alt"></i> staged</a> <a href="{% url 'task-multi-setstatus' 'fetched' request.GET %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-sync-alt"></i> fetched</a> diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py index 7fdc80434b54e926e3ab33a25feddd4ee79ad942..091e51c1f28c18f617606841b85346cc6e0f63b8 100644 --- a/atdb/taskdatabase/urls.py +++ b/atdb/taskdatabase/urls.py @@ -114,9 +114,11 @@ urlpatterns = [ path('tasks/<int:pk>/set_status/<new_status>/<query_params>', views.TaskSetStatusTables2, name = 'task-setstatus'), path('tasks/set_status_multi/<new_status>/<query_params>', views.TaskMultiStatus, name='task-multi-setstatus'), path('tasks/set_multi_hold/<onhold>/<query_params>', views.TaskMultiHold, name='task-multi-hold'), + path('tasks/set_multi_purge/<purge_policy>/<query_params>', views.TaskMultiPurge, name='task-multi-purge'), 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('tasks/<int:pk>/query-purge/<purge_policy>/<query_params>', views.PurgeQuery, name='query-purge'), ] diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 10cca3c97e9a89f56b46893148c3a6a40da8120d..bbe98330e2d41bc89a1ee8f4c36bb0c57e48cbde 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -82,6 +82,7 @@ class TaskFilterQueryPage(filters.FilterSet): 'quality': ['icontains', 'in'], 'project': ['exact', 'icontains', 'in'], 'sas_id': ['exact', 'icontains', 'in'], + 'purge_policy': ['icontains'], #'sas_id_archived': ['exact', 'icontains', 'in'], } @@ -1045,6 +1046,16 @@ def HoldQuery(request, pk, hold_it, query_params): return redirect_with_params('query', '?' + current_query_params) +def PurgeQuery(request, pk, purge_policy, query_params): + model = Task + task = Task.objects.get(pk=pk) + task.purge_policy = purge_policy + task.save() + + current_query_params = convert_query_params_to_url(query_params) + return redirect_with_params('query', '?' + current_query_params) + + @login_required def ServiceHoldResume(request, name, hostname, enabled): model = LatestMonitor @@ -1418,6 +1429,30 @@ def TaskMultiHold(request, onhold, query_params): return render(request, "taskdatabase/query/confirm_multi_change.html", {'new_value': onhold, 'count': count}) +@login_required +def TaskMultiPurge(request, purge_policy, query_params): + # get the list of id's from the session + filtered_tasks_as_list = request.session['filtered_tasks_as_list'] + count = len(filtered_tasks_as_list) + + if request.method == "POST": + + for id in filtered_tasks_as_list: + task = Task.objects.get(id=id) + task.purge_policy = purge_policy + 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': purge_policy, 'count': count}) + + # /atdb/get_size?status__in=defined,staged class GetSizeView(generics.ListAPIView): queryset = Task.objects.all()