From 202c40515f914ced126a6aeaff88c0586bac61d8 Mon Sep 17 00:00:00 2001
From: Nicolas Joyard <joyard.nicolas@gmail.com>
Date: Fri, 10 Jun 2016 17:51:04 +0200
Subject: [PATCH] Enable choosing active legislature/all data on rep list

---
 core/templates/core/blocks/active-filter.haml |  9 +++++++
 core/templates/core/blocks/pagination.haml    |  5 ++++
 core/views.py                                 | 27 +++++++++++++++++++
 memopol/views/representative_list.py          | 11 +++++---
 4 files changed, 48 insertions(+), 4 deletions(-)
 create mode 100644 core/templates/core/blocks/active-filter.haml

diff --git a/core/templates/core/blocks/active-filter.haml b/core/templates/core/blocks/active-filter.haml
new file mode 100644
index 00000000..5e51e92d
--- /dev/null
+++ b/core/templates/core/blocks/active-filter.haml
@@ -0,0 +1,9 @@
+Display :
+- if active_only
+  current legislature only /
+  %a{'href': '?active_only=0'}
+    all data
+- else
+  %a{'href': '?active_only=1'}
+    current legislature only
+  ="/ all data"
\ No newline at end of file
diff --git a/core/templates/core/blocks/pagination.haml b/core/templates/core/blocks/pagination.haml
index f7d846d2..fb0ffa6c 100644
--- a/core/templates/core/blocks/pagination.haml
+++ b/core/templates/core/blocks/pagination.haml
@@ -37,6 +37,11 @@
 
   %div.count
     Number of results : {{ paginator.count }}
+
+    - if active_only != None
+      %br
+      - include 'core/blocks/active-filter.html'
+
     %br
     Number of displayed results :
     {{ paginator.per_page }}
diff --git a/core/views.py b/core/views.py
index 9099aa4f..508d14a5 100644
--- a/core/views.py
+++ b/core/views.py
@@ -4,6 +4,33 @@ from django import http
 import unicodecsv as csv
 
 
+class ActiveLegislatureMixin(object):
+    """
+    Mixin for views that can switch between active legislature and all data
+    """
+
+    default_active_only = True
+
+    def get(self, *args, **kwargs):
+        self.set_active_only()
+        return super(ActiveLegislatureMixin, self).get(*args, **kwargs)
+
+    def set_active_only(self):
+        if 'active_only' in self.request.GET:
+            self.request.session['active_only'] = \
+                self.request.GET['active_only'] == '1'
+        elif 'active_only' not in self.request.session:
+            self.request.session['active_only'] = self.default_active_only
+
+    def get_active_only(self):
+        return self.request.session['active_only']
+
+    def get_context_data(self, **kwargs):
+        c = super(ActiveLegislatureMixin, self).get_context_data(**kwargs)
+        c['active_only'] = self.get_active_only()
+        return c
+
+
 class PaginationMixin(object):
     pagination_limits = (12, 24, 48, 96)
 
diff --git a/memopol/views/representative_list.py b/memopol/views/representative_list.py
index 6b034abb..c4d603c5 100644
--- a/memopol/views/representative_list.py
+++ b/memopol/views/representative_list.py
@@ -1,6 +1,7 @@
 # coding: utf-8
 
-from core.views import GridListMixin, PaginationMixin, CSVDownloadMixin
+from core.views import GridListMixin, PaginationMixin, CSVDownloadMixin, \
+    ActiveLegislatureMixin
 
 import datetime
 
@@ -14,11 +15,11 @@ from .representative_mixin import RepresentativeViewMixin
 
 
 class RepresentativeList(CSVDownloadMixin, GridListMixin, PaginationMixin,
-                         RepresentativeViewMixin, generic.ListView):
+                         RepresentativeViewMixin, ActiveLegislatureMixin,
+                         generic.ListView):
 
     csv_name = 'meps.csv'
-    queryset = Representative.objects.filter(
-        active=True).select_related('score')
+    queryset = Representative.objects.select_related('score')
 
     def get_context_data(self, **kwargs):
         c = super(RepresentativeList, self).get_context_data(**kwargs)
@@ -66,6 +67,8 @@ class RepresentativeList(CSVDownloadMixin, GridListMixin, PaginationMixin,
 
     def get_queryset(self):
         qs = super(RepresentativeList, self).get_queryset()
+        if self.get_active_only():
+            qs = qs.filter(active=True)
         qs = self.group_filter(qs)
         qs = self.search_filter(qs)
         qs = self.prefetch_for_representative_country_and_main_mandate(qs)
-- 
GitLab