From eb99c30bd050281aa064771de037a44227139d2c Mon Sep 17 00:00:00 2001
From: Nico Vermaas <vermaas@astron.nl>
Date: Mon, 7 Feb 2022 15:10:43 +0100
Subject: [PATCH] apply filter button to dashboard add 'clear filter' button

---
 atdb/taskdatabase/services/algorithms.py      | 15 ++++------
 .../templates/dashboard/toggles.html          | 30 ++++++++++++++++++-
 .../templates/taskdatabase/base.html          |  2 +-
 .../templates/taskdatabase/index.html         |  2 +-
 atdb/taskdatabase/views.py                    | 20 ++++++-------
 5 files changed, 45 insertions(+), 24 deletions(-)

diff --git a/atdb/taskdatabase/services/algorithms.py b/atdb/taskdatabase/services/algorithms.py
index 0489a857..3db3fa83 100644
--- a/atdb/taskdatabase/services/algorithms.py
+++ b/atdb/taskdatabase/services/algorithms.py
@@ -472,13 +472,6 @@ def highlight_value(values, value_to_highlight):
 
 def construct_tasks_per_workflow_html(request, workflow_results):
 
-    try:
-        query_list_of_ids = request.session['query_list_of_ids']
-        current_query_params = request.session['current_query_params']
-    except:
-        pass
-
-
     # --- Progress of tasks per active workflow ---
     results_tasks = "<p>Progress of tasks per workflow</p>"
 
@@ -618,11 +611,13 @@ def construct_logs_per_workflow_html(request, workflow_results):
 def construct_dashboard_html(request, selection):
     # gather and construct the dashboard based on the requested selection
 
+    filtered_tasks = Task.objects.all()
     try:
-        filtered_tasks_as_list = request.session['filtered_tasks_as_list']
-        filtered_tasks = Task.objects.filter(id__in=filtered_tasks_as_list)
+        if 'applyfilter' in selection:
+            filtered_tasks_as_list = request.session['filtered_tasks_as_list']
+            filtered_tasks = Task.objects.filter(id__in=filtered_tasks_as_list)
     except:
-        filtered_tasks = Task.objects.all()
+        pass
 
     # --- Progress of tasks per active workflow ---
     workflow_results = aggregate_resources_tasks(request, selection, filtered_tasks)
diff --git a/atdb/taskdatabase/templates/dashboard/toggles.html b/atdb/taskdatabase/templates/dashboard/toggles.html
index 1cdf43c1..07829575 100644
--- a/atdb/taskdatabase/templates/dashboard/toggles.html
+++ b/atdb/taskdatabase/templates/dashboard/toggles.html
@@ -9,7 +9,7 @@
            data-onstyle="warning"
            data-offstyle="primary"
            data-style
-           {% if not 'active' in toggle_selection %} checked {% endif %}
+           {% if not 'active' in selection %} checked {% endif %}
     >&nbsp;
 
     <input type="checkbox"
@@ -24,6 +24,17 @@
            {% if 'resources' in selection %} checked {% endif %}
     >&nbsp;
 
+        <input type="checkbox"
+           id = "apply_filter"
+           name="apply_filter"
+           data-on="Latest Filter Applied"
+           data-off="No Filter Applied"
+           data-toggle="toggle"
+           data-onstyle="primary"
+           data-offstyle="secondary"
+           data-style
+           {% if 'applyfilter' in selection %} checked {% endif %}
+    >&nbsp;
 
     <script>
       $(function() {
@@ -58,4 +69,21 @@
         })
       })
     </script>
+
+    <script>
+      $(function() {
+        $('#apply_filter').change(function() {
+
+          let url = location.href
+          if ($(this).prop('checked')) {
+            url = url.replace('nofilter','applyfilter');
+            location.assign(url);
+          } else {
+            url = url.replace('applyfilter','nofilter');
+            location.assign(url);
+          }
+
+        })
+      })
+    </script>
 </table>
\ No newline at end of file
diff --git a/atdb/taskdatabase/templates/taskdatabase/base.html b/atdb/taskdatabase/templates/taskdatabase/base.html
index 1ca7e614..2e7799d6 100644
--- a/atdb/taskdatabase/templates/taskdatabase/base.html
+++ b/atdb/taskdatabase/templates/taskdatabase/base.html
@@ -52,7 +52,7 @@
                     <li><a class="nav-link" href="{% url 'quality' %}">Quality</a></li>
                 {% endif %}
 
-                <li><a class="nav-link" href="{% url 'dashboard' 'active_nores' %}">Dashboard</a></li>
+                <li><a class="nav-link" href="{% url 'dashboard' 'active_nores_nofilter' %}">Dashboard</a></li>
 
                 <li><a class="nav-link" href="{% url 'query' %}">Filter</a></li>
 
diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html
index 1abdb6fe..1187bbc5 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 1.0.0 (7 feb 2021 - 14:00)
+    <p class="footer"> Version 1.0.0 (7 feb 2021 - 15:00)
 
 </div>
 
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index 203c6361..2b06e3b2 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -178,7 +178,6 @@ class QueryView(SingleTableMixin, FilterView):
 
         # store on the session
         self.request.session['filtered_tasks_as_list'] = filtered_tasks_as_list
-        self.request.session['query_list_of_ids'] = query_list_of_ids
         return self.object_list
 
 
@@ -488,7 +487,7 @@ def ShowDashboard(request, selection):
     return render(request, "dashboard/dashboard.html",
                   {'results_tasks': results_tasks,
                    'results_logs': results_logs,
-                   'toggle_selection': selection})
+                   'selection': selection})
 
 
 def WorkflowDetails(request, id):
@@ -812,7 +811,6 @@ def TaskClearFilter(request):
     request.session['task_filter'] = 'all'
     request.session['task_onhold_filter'] = None
     request.session['filtered_tasks_as_list'] = None
-    request.session['query_list_of_ids'] = None
     request.session['search_box'] = ''
     return redirect('/atdb/?page=1')
 
@@ -881,13 +879,13 @@ def TaskSetStatusTables2(request, pk, new_status, query_params):
 @login_required
 def TaskMultiStatus(request, new_status, query_params):
     # get the list of id's from the session
-    query_list_of_ids = request.session['query_list_of_ids']
-    count = len(query_list_of_ids)
+    filtered_tasks_as_list = request.session['filtered_tasks_as_list']
+    count = len(filtered_tasks_as_list)
 
     if request.method == "POST":
 
-        for id in query_list_of_ids:
-            task = Task.objects.get(id=id[0])
+        for id in filtered_tasks_as_list:
+            task = Task.objects.get(id=id)
             task.new_status = new_status
             task.save()
 
@@ -905,13 +903,13 @@ def TaskMultiStatus(request, new_status, query_params):
 @login_required
 def TaskMultiHold(request, onhold, query_params):
     # get the list of id's from the session
-    query_list_of_ids = request.session['query_list_of_ids']
-    count = len(query_list_of_ids)
+    filtered_tasks_as_list = request.session['filtered_tasks_as_list']
+    count = len(filtered_tasks_as_list)
 
     if request.method == "POST":
 
-        for id in query_list_of_ids:
-            task = Task.objects.get(id=id[0])
+        for id in filtered_tasks_as_list:
+            task = Task.objects.get(id=id)
             task.resume = (onhold == 'resume')
             task.save()
 
-- 
GitLab