diff --git a/memopol/filters.py b/memopol/filters.py index f8c08d21838ec07231aa893dd0ee7567a59469ca..453731b72b5e0a6ba6271f8da455e716ae09c59a 100644 --- a/memopol/filters.py +++ b/memopol/filters.py @@ -1,5 +1,10 @@ # coding: utf-8 +from dal.autocomplete import ModelSelect2 + +import datetime + +from django.db.models import Q from django.utils.text import slugify from django_filters import FilterSet, MethodFilter, ModelChoiceFilter @@ -8,11 +13,19 @@ from representatives.models import Chamber, Group, Representative def chamber_filter(qs, value): - return qs.filter(mandates__group__chamber=value) + today = datetime.date.today() + return qs.filter( + Q(mandates__end_date__gte=today) | Q(mandates__end_date__isnull=True), + mandates__group__chamber=value + ) def group_filter(qs, value): - return qs.filter(mandates__group=value) + today = datetime.date.today() + return qs.filter( + Q(mandates__end_date__gte=today) | Q(mandates__end_date__isnull=True), + mandates__group=value + ) class RepresentativeFilter(FilterSet): @@ -25,6 +38,12 @@ class RepresentativeFilter(FilterSet): country = ModelChoiceFilter(queryset=Group.objects.filter(kind='country'), action=group_filter) + group = ModelChoiceFilter(queryset=Group.objects.exclude( + kind__in=['chamber', 'country']), + action=group_filter, + widget=ModelSelect2(url='group-autocomplete'), + label='Party, committee or delegation') + class Meta: model = Representative fields = ['search', 'chamber', 'country'] diff --git a/memopol/urls.py b/memopol/urls.py index 5f6e885fb6f5123cb3022d0f60f568a5c5257b30..2cf2f67848aac1dd58bdcb9e054fc163b28e1de8 100644 --- a/memopol/urls.py +++ b/memopol/urls.py @@ -6,6 +6,7 @@ from django.views import generic from views.dossier_ac import DossierAutocomplete, ProposalAutocomplete from views.dossier_detail import DossierDetail from views.dossier_list import DossierList +from views.group_ac import GroupAutocomplete from views.group_list import GroupList from views.representative_detail import RepresentativeDetail from views.representative_list import RepresentativeList @@ -58,6 +59,11 @@ urlpatterns = [ RedirectGroupList.as_view(), name='group-list-redirect' ), + url( + r'^legislature/autocomplete/group/$', + GroupAutocomplete.as_view(), + name='group-autocomplete', + ), url( r'^votes/dossier/$', DossierList.as_view(), diff --git a/memopol/views/group_ac.py b/memopol/views/group_ac.py new file mode 100644 index 0000000000000000000000000000000000000000..9e231b21a13f96a4387ec0e8f27f6dda157cda13 --- /dev/null +++ b/memopol/views/group_ac.py @@ -0,0 +1,20 @@ +# coding: utf-8 + +from dal.autocomplete import Select2QuerySetView + +from django.db.models import Q + +from representatives.models import Group + + +class GroupAutocomplete(Select2QuerySetView): + def get_queryset(self): + qs = Group.objects.exclude(kind__in=['chamber', 'country']) + + if self.q: + qs = qs.filter( + Q(name__icontains=self.q) | + Q(abbreviation__icontains=self.q) + ) + + return qs diff --git a/memopol/views/representative_list.py b/memopol/views/representative_list.py index 82eda403c81f4681cdc027a94d01b59b59e012e4..9f700efa3ad87eeba48ae388f1dbebbd8b53e6cc 100644 --- a/memopol/views/representative_list.py +++ b/memopol/views/representative_list.py @@ -39,34 +39,6 @@ class RepresentativeList(CSVDownloadMixin, GridListMixin, PaginationMixin, self.current_filter = f return f.qs - def group_filter(self, qs): - group_kind = self.kwargs.get('group_kind', None) - chamber = self.kwargs.get('chamber', None) - group = self.kwargs.get('group', None) - today = datetime.date.today() - - if group_kind and group: - if group.isnumeric(): - group_qs = Group.objects.filter( - id=int(group) - ) - else: - group_qs = Group.objects.filter( - name=group, - kind=group_kind - ) - - if chamber: - group_qs = group_qs.filter(chamber__name=chamber) - - qs = qs.filter( - models.Q(mandates__end_date__gte=today) | - models.Q(mandates__end_date__isnull=True), - mandates__group__in=group_qs - ) - - return qs - def get_queryset(self): qs = super(RepresentativeList, self).get_queryset() if self.get_active_only(): diff --git a/templates/representatives/representative_list.haml b/templates/representatives/representative_list.haml index 39f1789a9c15095fdc2835ce11c5472c59830218..620388405597234cac772062d833c5ccfbe2b7bd 100644 --- a/templates/representatives/representative_list.haml +++ b/templates/representatives/representative_list.haml @@ -8,7 +8,9 @@ - block search - %form{action:'', method:'get'} + {{ filter.form.media }} + + %form.filter-form{action:'', method:'get'} {{ filter.form.as_p }} %input{type:"submit", value:"Go"}