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