diff --git a/src/pretix/control/templates/pretixcontrol/vouchers/base.html b/src/pretix/control/templates/pretixcontrol/vouchers/base.html
new file mode 100644
index 000000000..a795273f3
--- /dev/null
+++ b/src/pretix/control/templates/pretixcontrol/vouchers/base.html
@@ -0,0 +1,16 @@
+{% extends "pretixcontrol/event/base.html" %}
+{% load i18n %}
+{% load bootstrap3 %}
+{% block title %}{% trans "Vouchers" %}{% endblock %}
+{% block content %}
+
{% trans "Vouchers" %}
+
+ {% block inside %}
+ {% endblock %}
+{% endblock %}
diff --git a/src/pretix/control/templates/pretixcontrol/vouchers/index.html b/src/pretix/control/templates/pretixcontrol/vouchers/index.html
index 9f4029576..3941e062d 100644
--- a/src/pretix/control/templates/pretixcontrol/vouchers/index.html
+++ b/src/pretix/control/templates/pretixcontrol/vouchers/index.html
@@ -1,20 +1,38 @@
-{% extends "pretixcontrol/items/base.html" %}
+{% extends "pretixcontrol/vouchers/base.html" %}
{% load i18n %}
{% block title %}{% trans "Vouchers" %}{% endblock %}
{% block inside %}
- {% trans "Vouchers" %}
{% blocktrans trimmed %}
Vouchers allow you to assign tickets to specific persons for a lower price. They also enable you to
reserve some quota for your very special guests.
{% endblocktrans %}
+
{% if vouchers|length == 0 %}
- {% blocktrans trimmed %}
- You haven't created any vouchers yet.
- {% endblocktrans %}
+ {% if request.GET.search or request.GET.tag or request.GET.status %}
+ {% trans "Your search did not match any vouchers." %}
+ {% else %}
+ {% blocktrans trimmed %}
+ You haven't created any vouchers yet.
+ {% endblocktrans %}
+ {% endif %}
{% trans "Create multiple new vouchers" %}
-
diff --git a/src/pretix/control/views/vouchers.py b/src/pretix/control/views/vouchers.py
index 73298f1bc..c0f80c96a 100644
--- a/src/pretix/control/views/vouchers.py
+++ b/src/pretix/control/views/vouchers.py
@@ -3,6 +3,7 @@ from django.core.urlresolvers import resolve, reverse
from django.db import transaction
from django.db.models import Q
from django.http import Http404, HttpResponseRedirect
+from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
@@ -24,6 +25,17 @@ class VoucherList(EventPermissionRequiredMixin, ListView):
if self.request.GET.get("search", "") != "":
s = self.request.GET.get("search", "")
qs = qs.filter(Q(code__icontains=s) | Q(tag__icontains=s) | Q(comment__icontains=s))
+ if self.request.GET.get("tag", "") != "":
+ s = self.request.GET.get("tag", "")
+ qs = qs.filter(tag=s)
+ if self.request.GET.get("status", "") != "":
+ s = self.request.GET.get("status", "")
+ if s == 'v':
+ qs = qs.filter(Q(valid_until__isnull=True) | Q(valid_until__gt=now())).filter(redeemed=False)
+ elif s == 'r':
+ qs = qs.filter(redeemed=True)
+ elif s == 'e':
+ qs = qs.filter(Q(valid_until__isnull=False) & Q(valid_until__lt=now())).filter(redeemed=False)
return qs