From 07e9d8e9f9f4a3a2600dcc151a19a07eb26eff3e Mon Sep 17 00:00:00 2001 From: Oskar Hahn Date: Wed, 18 Apr 2012 19:57:39 +0200 Subject: [PATCH] rewrote application filters --- .../templates/application/overview.html | 6 +- openslides/application/views.py | 57 ++++++++++++++----- 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/openslides/application/templates/application/overview.html b/openslides/application/templates/application/overview.html index 3db80705a..de699d8bf 100644 --- a/openslides/application/templates/application/overview.html +++ b/openslides/application/templates/application/overview.html @@ -27,17 +27,17 @@

- {{ applications|length }} {% trans "Applications" %} + {{ applications.exist }} {% trans "Applications" %} - + {% if min_supporters > 0 %} {% endif %} - + {% for application in applications %} diff --git a/openslides/application/views.py b/openslides/application/views.py index a9e317878..03cbf95b5 100644 --- a/openslides/application/views.py +++ b/openslides/application/views.py @@ -15,6 +15,12 @@ import csv import utils.csv_ext import os +from urllib import urlencode +try: + from urlparse import parse_qs +except ImportError: # python <= 2.5 + from cgi import parse_qs + from django.shortcuts import redirect from django.contrib import messages from django.contrib.auth.decorators import login_required @@ -62,28 +68,51 @@ def overview(request): """ View all applications """ - query = Application.objects - if 'number' in request.GET: - query = query.filter(number=None) - if 'status' in request.GET: - if 'statusvalue' in request.GET and 'on' in request.GET['status']: - query = query.filter(status__iexact=request.GET['statusvalue']) try: - sort = request.GET['sort'] - if sort in ['number', 'supporter', 'status', 'submitter', \ - 'aversion__time', 'aversion__title']: - query = query.order_by(sort) + sortfilter = parse_qs(request.COOKIES['votecollector_sortfilter']) + for value in sortfilter: + sortfilter[value] = sortfilter[value][0] except KeyError: - query = query.order_by("number") - if 'reverse' in request.GET: + sortfilter = {} + + for value in [u'sort', u'reverse', u'number', u'status', u'needsup', u'statusvalue']: + if value in request.REQUEST: + if request.REQUEST[value] == '0': + try: + del sortfilter[value] + except KeyError: + pass + else: + sortfilter[value] = request.REQUEST[value] + + query = Application.objects.all() + if 'number' in sortfilter: + query = query.filter(number=None) + if 'status' in sortfilter: + if 'statusvalue' in sortfilter and 'on' in sortfilter['status']: + query = query.filter(status__iexact=sortfilter['statusvalue']) + + if 'sort' in sortfilter: + if sortfilter['sort'] == 'title': + sort = 'aversion__title' + elif sortfilter['sort'] == 'time': + sort = 'aversion__time' + else: + sort = sortfilter['sort'] + query = query.order_by(sort) + + if 'reverse' in sortfilter: query = query.reverse() - if 'needsup' in request.GET: + + # todo: rewrite this with a .filter() + if 'needsup' in sortfilter: applications = [] for application in query.all(): if not application.enough_supporters: applications.append(application) else: - applications = query.all() + applications = query + return { 'applications': applications, 'min_supporters': int(config['application_min_supporters']),
{%trans "Number" %}{%trans "Application title" %}{%trans "Application title" %}{%trans "Number of supporters" %}{%trans "Status" %} {%trans "Submitter" %}{%trans "Creation Time" %}{%trans "Creation Time" %}