Added filters to the list of orders

This commit is contained in:
Raphael Michel
2015-06-23 19:17:09 +02:00
parent 0108a955c3
commit b7cbf55db4
5 changed files with 102 additions and 25 deletions

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 1\n" "Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-06-23 08:09+0000\n" "POT-Creation-Date: 2015-06-23 17:16+0000\n"
"PO-Revision-Date: 2015-06-23 10:10+0100\n" "PO-Revision-Date: 2015-06-23 19:17+0100\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n" "Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: Raphael Michel <michel@rami.io>\n" "Language-Team: Raphael Michel <michel@rami.io>\n"
"Language: de\n" "Language: de\n"
@@ -65,7 +65,7 @@ msgstr "Zeitzone"
#: pretix/base/models.py:213 pretix/base/models.py:1509 #: pretix/base/models.py:213 pretix/base/models.py:1509
#: pretix/base/models.py:1812 #: pretix/base/models.py:1812
#: pretix/control/templates/pretixcontrol/event/permissions.html:13 #: pretix/control/templates/pretixcontrol/event/permissions.html:13
#: pretix/control/templates/pretixcontrol/orders/index.html:10 #: pretix/control/templates/pretixcontrol/orders/index.html:33
#: pretix/control/views/event.py:273 tests/base/test_mail.py:71 #: pretix/control/views/event.py:273 tests/base/test_mail.py:71
msgid "User" msgid "User"
msgstr "Benutzer" msgstr "Benutzer"
@@ -436,13 +436,14 @@ msgid "refunded"
msgstr "erstattet" msgstr "erstattet"
#: pretix/base/models.py:1495 #: pretix/base/models.py:1495
#: pretix/control/templates/pretixcontrol/orders/index.html:9 #: pretix/control/templates/pretixcontrol/orders/index.html:10
#: pretix/control/templates/pretixcontrol/orders/index.html:32
#: pretix/presale/templates/pretixpresale/event/orders.html:14 #: pretix/presale/templates/pretixpresale/event/orders.html:14
msgid "Order code" msgid "Order code"
msgstr "Bestellnummer" msgstr "Bestellnummer"
#: pretix/base/models.py:1500 #: pretix/base/models.py:1500
#: pretix/control/templates/pretixcontrol/orders/index.html:13 #: pretix/control/templates/pretixcontrol/orders/index.html:36
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_confirm.html:18 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_confirm.html:18
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:30 #: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:30
#: pretix/presale/templates/pretixpresale/event/orders.html:17 #: pretix/presale/templates/pretixpresale/event/orders.html:17
@@ -1017,6 +1018,7 @@ msgid "Categories"
msgstr "Kategorien" msgstr "Kategorien"
#: pretix/control/templates/pretixcontrol/event/base.html:99 #: pretix/control/templates/pretixcontrol/event/base.html:99
#: pretix/control/templates/pretixcontrol/orders/index.html:18
msgid "All orders" msgid "All orders"
msgstr "Alle Bestellungen" msgstr "Alle Bestellungen"
@@ -1548,36 +1550,53 @@ msgid "Yes, refund order"
msgstr "Ja, Bestellung zurückerstatten" msgstr "Ja, Bestellung zurückerstatten"
#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:4 #: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:4
#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:8 #: pretix/control/templates/pretixcontrol/orders/index.html:20
#: pretix/control/templates/pretixcontrol/orders/overview.html:11 msgid "Pending"
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:4
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:8
msgid "Payment pending"
msgstr "Zahlung ausstehend" msgstr "Zahlung ausstehend"
#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:6 #: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:6
#: pretix/control/templates/pretixcontrol/orders/index.html:19
#: pretix/control/templates/pretixcontrol/orders/overview.html:14 #: pretix/control/templates/pretixcontrol/orders/overview.html:14
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:6 #: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:6
msgid "Paid" msgid "Paid"
msgstr "bezahlt" msgstr "bezahlt"
#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:8
#: pretix/control/templates/pretixcontrol/orders/index.html:21
msgid "Pending (expired)"
msgstr "Zahlung ausstehend (abgelaufen)"
#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:10 #: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:10
#: pretix/control/templates/pretixcontrol/orders/index.html:22
#: pretix/control/templates/pretixcontrol/orders/overview.html:12 #: pretix/control/templates/pretixcontrol/orders/overview.html:12
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:10 #: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:10
msgid "Cancelled" msgid "Cancelled"
msgstr "storniert" msgstr "storniert"
#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:12 #: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:12
#: pretix/control/templates/pretixcontrol/orders/index.html:23
#: pretix/control/templates/pretixcontrol/orders/overview.html:13 #: pretix/control/templates/pretixcontrol/orders/overview.html:13
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:12 #: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:12
msgid "Refunded" msgid "Refunded"
msgstr "erstattet" msgstr "erstattet"
#: pretix/control/templates/pretixcontrol/orders/index.html:11 #: pretix/control/templates/pretixcontrol/orders/index.html:12
msgid "Go!"
msgstr "Los!"
#: pretix/control/templates/pretixcontrol/orders/index.html:25
msgid "Search user"
msgstr "Benutzer suchen"
#: pretix/control/templates/pretixcontrol/orders/index.html:26
msgid "Filter"
msgstr "Filter"
#: pretix/control/templates/pretixcontrol/orders/index.html:34
msgid "Order total" msgid "Order total"
msgstr "Gesamtbetrag" msgstr "Gesamtbetrag"
#: pretix/control/templates/pretixcontrol/orders/index.html:12 #: pretix/control/templates/pretixcontrol/orders/index.html:35
msgid "Order date" msgid "Order date"
msgstr "Bestelldatum" msgstr "Bestelldatum"
@@ -1590,6 +1609,12 @@ msgstr "Bestellübersicht"
msgid "Total orders" msgid "Total orders"
msgstr "Bestellungen gesamt" msgstr "Bestellungen gesamt"
#: pretix/control/templates/pretixcontrol/orders/overview.html:11
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:4
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:8
msgid "Payment pending"
msgstr "Zahlung ausstehend"
#: pretix/control/templates/pretixcontrol/organizers/create.html:4 #: pretix/control/templates/pretixcontrol/organizers/create.html:4
#: pretix/control/templates/pretixcontrol/organizers/create.html:6 #: pretix/control/templates/pretixcontrol/organizers/create.html:6
#: pretix/control/templates/pretixcontrol/organizers/index.html:10 #: pretix/control/templates/pretixcontrol/organizers/index.html:10
@@ -1708,30 +1733,34 @@ msgstr "Das ausgewählte Produkt existiert nicht."
msgid "The new event has been created." msgid "The new event has been created."
msgstr "Eine neue Veranstaltung wurde erstellt." msgstr "Eine neue Veranstaltung wurde erstellt."
#: pretix/control/views/orders.py:115 #: pretix/control/views/orders.py:125
msgid "The order has been marked as paid." msgid "The order has been marked as paid."
msgstr "Die Bestellung wurde als bezahlt markiert." msgstr "Die Bestellung wurde als bezahlt markiert."
#: pretix/control/views/orders.py:120 #: pretix/control/views/orders.py:130
msgid "The order has been cancelled." msgid "The order has been cancelled."
msgstr "Die Bestellung wurde storniert." msgstr "Die Bestellung wurde storniert."
#: pretix/control/views/orders.py:126 #: pretix/control/views/orders.py:136
msgid "The order has been marked as not paid." msgid "The order has been marked as not paid."
msgstr "Die Bestellung wurde als unbezahlt markiert." msgstr "Die Bestellung wurde als unbezahlt markiert."
#: pretix/control/views/orders.py:156 pretix/control/views/orders.py:182 #: pretix/control/views/orders.py:166 pretix/control/views/orders.py:192
msgid "This action is only allowed for pending orders." msgid "This action is only allowed for pending orders."
msgstr "Diese Aktion ist nur für unbezahlte Bestellungen möglich." msgstr "Diese Aktion ist nur für unbezahlte Bestellungen möglich."
#: pretix/control/views/orders.py:167 #: pretix/control/views/orders.py:177
msgid "The payment term has been changed." msgid "The payment term has been changed."
msgstr "Die Zahlungsfrist wurde geändert." msgstr "Die Zahlungsfrist wurde geändert."
#: pretix/control/views/orders.py:261 #: pretix/control/views/orders.py:271
msgid "Uncategorized" msgid "Uncategorized"
msgstr "Unkategorisiert" msgstr "Unkategorisiert"
#: pretix/control/views/orders.py:311
msgid "There is no order with the given order code."
msgstr "Es existiert keine Bestellung mit der eingegebenen Bestellnummer."
#: pretix/control/views/organizer.py:59 #: pretix/control/views/organizer.py:59
msgid "The new organizer has been created." msgid "The new organizer has been created."
msgstr "Ein neuer Veranstalter wurde erstellt." msgstr "Ein neuer Veranstalter wurde erstellt."

View File

@@ -1,11 +1,11 @@
{% load i18n %} {% load i18n %}
{% load bootstrap3 %} {% load bootstrap3 %}
{% if order.status == "n" %} {% if order.status == "n" %}
<span class="label label-warning {{ class }}">{% trans "Payment pending" %}</span> <span class="label label-warning {{ class }}">{% trans "Pending" %}</span>
{% elif order.status == "p" %} {% elif order.status == "p" %}
<span class="label label-success {{ class }}">{% trans "Paid" %}</span> <span class="label label-success {{ class }}">{% trans "Paid" %}</span>
{% elif order.status == "e" %} {% elif order.status == "e" %} {# expired #}
<span class="label label-danger {{ class }}">{% trans "Payment pending" %}</span> <span class="label label-danger {{ class }}">{% trans "Pending (expired)" %}</span>
{% elif order.status == "c" %} {% elif order.status == "c" %}
<span class="label label-danger {{ class }}">{% trans "Cancelled" %}</span> <span class="label label-danger {{ class }}">{% trans "Cancelled" %}</span>
{% elif order.status == "r" %} {% elif order.status == "r" %}

View File

@@ -3,6 +3,29 @@
{% block title %}{% trans "Orders" %}{% endblock %} {% block title %}{% trans "Orders" %}{% endblock %}
{% block content %} {% block content %}
<h1>{% trans "Orders" %}</h1> <h1>{% trans "Orders" %}</h1>
<p>
<form class="form-inline" style="display: inline;"
action="{% url "control:event.orders.go" event=request.event.slug organizer=request.event.organizer.slug %}">
<div class="input-group">
<input type="text" name="code" class="form-control" maxlength="8" placeholder="{% trans "Order code" %}">
<span class="input-group-btn">
<button class="btn btn-primary" type="submit">{% trans "Go!" %}</button>
</span>
</div>
</form>
<form class="form-inline" action="" method="get" style="display: inline;">
<select name="status" class="form-control">
<option value="">{% trans "All orders" %}</option>
<option value="p" {% if request.GET.status == "p" %}selected="selected"{% endif %}>{% trans "Paid" %}</option>
<option value="n" {% if request.GET.status == "n" %}selected="selected"{% endif %}>{% trans "Pending" %}</option>
<option value="e" {% if request.GET.status == "e" %}selected="selected"{% endif %}>{% trans "Pending (expired)" %}</option>
<option value="c" {% if request.GET.status == "c" %}selected="selected"{% endif %}>{% trans "Cancelled" %}</option>
<option value="r" {% if request.GET.status == "r" %}selected="selected"{% endif %}>{% trans "Refunded" %}</option>
</select>
<input type="text" name="user" class="form-control" placeholder="{% trans "Search user" %}" value="{{ request.GET.user }}">
<button class="btn btn-primary" type="submit">{% trans "Filter" %}</button>
</form>
</p>
<table class="table table-condensed table-hover"> <table class="table table-condensed table-hover">
<thead> <thead>
<tr> <tr>

View File

@@ -63,6 +63,7 @@ urlpatterns = [
name='event.order.extend'), name='event.order.extend'),
url(r'^orders/(?P<code>[0-9A-Z]+)/$', orders.OrderDetail.as_view(), name='event.order'), url(r'^orders/(?P<code>[0-9A-Z]+)/$', orders.OrderDetail.as_view(), name='event.order'),
url(r'^orders/overview/$', orders.OverView.as_view(), name='event.orders.overview'), url(r'^orders/overview/$', orders.OverView.as_view(), name='event.orders.overview'),
url(r'^orders/go$', orders.OrderGo.as_view(), name='event.orders.go'),
url(r'^orders/$', orders.OrderList.as_view(), name='event.orders'), url(r'^orders/$', orders.OrderList.as_view(), name='event.orders'),
])), ])),
] ]

View File

@@ -1,13 +1,13 @@
from itertools import groupby from itertools import groupby
from django.contrib import messages from django.contrib import messages
from django.db.models import Count from django.db.models import Count, Q
from django.utils.timezone import now from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.http import HttpResponse from django.http import HttpResponse
from django.shortcuts import redirect, render from django.shortcuts import redirect, render
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.views.generic import ListView, DetailView, TemplateView from django.views.generic import ListView, DetailView, TemplateView, View
from pretix.base.models import Order, Quota, OrderPosition, ItemCategory from pretix.base.models import Order, Quota, OrderPosition, ItemCategory
from pretix.base.services.orders import mark_order_paid from pretix.base.services.orders import mark_order_paid
from pretix.base.signals import register_payment_providers from pretix.base.signals import register_payment_providers
@@ -23,9 +23,19 @@ class OrderList(EventPermissionRequiredMixin, ListView):
permission = 'can_view_orders' permission = 'can_view_orders'
def get_queryset(self): def get_queryset(self):
return Order.objects.current.filter( qs = Order.objects.current.filter(
event=self.request.event event=self.request.event
).select_related("user") )
if self.request.GET.get("user", "") != "":
u = self.request.GET.get("user", "")
qs = qs.filter(
Q(user__identifier__icontains=u) | Q(user__email__icontains=u)
| Q(user__givenname__icontains=u) | Q(user__familyname__icontains=u)
)
if self.request.GET.get("status", "") != "":
s = self.request.GET.get("status", "")
qs = qs.filter(status=s)
return qs.select_related("user")
class OrderView(EventPermissionRequiredMixin, DetailView): class OrderView(EventPermissionRequiredMixin, DetailView):
@@ -286,3 +296,17 @@ class OverView(EventPermissionRequiredMixin, TemplateView):
} }
return ctx return ctx
class OrderGo(EventPermissionRequiredMixin, View):
permission = 'can_view_orders'
def get(self, request, *args, **kwargs):
code = request.GET.get("code")
try:
order = Order.objects.current.get(code=code, event=request.event)
return redirect('control:event.order', event=request.event.slug, organizer=request.event.organizer.slug,
code=order.code)
except Order.DoesNotExist:
messages.error(request, _('There is no order with the given order code.'))
return redirect('control:event.orders', event=request.event.slug, organizer=request.event.organizer.slug)