Fix #357 -- Implement go to for vouchers (#849)

* Add Go input for vouchers on the vouchers list page (#357)

* Final fixes
This commit is contained in:
Mason Mohkami
2018-05-31 03:43:32 -07:00
committed by Raphael Michel
parent 6fe02f156a
commit 479a7d9162
3 changed files with 36 additions and 8 deletions

View File

@@ -11,32 +11,41 @@
{% endblocktrans %}
</p>
<div class="row filter-form">
<form class="col-lg-2 col-sm-6 col-xs-6"
action="{% url "control:event.vouchers.go" event=request.event.slug organizer=request.event.organizer.slug %}">
<div class="input-group">
<input type="text" name="code" class="form-control" placeholder="{% trans "Voucher code" %}" autofocus>
<span class="input-group-btn">
<button class="btn btn-primary" type="submit">{% trans "Go!" %}</button>
</span>
</div>
</form>
<form class="" action="" method="get">
<div class="col-md-2 col-xs-6">
<div class="col-lg-2 col-sm-3 col-xs-6">
{% bootstrap_field filter_form.search layout='inline' %}
</div>
<div class="col-md-2 col-xs-6">
<div class="col-lg-1 col-sm-3 col-xs-6">
{% bootstrap_field filter_form.tag layout='inline' %}
</div>
{% if request.event.has_subevents %}
<div class="col-md-1 col-xs-6">
<div class="col-lg-1 col-sm-3 col-xs-6">
{% bootstrap_field filter_form.status layout='inline' %}
</div>
<div class="col-md-2 col-xs-6">
<div class="col-lg-2 col-sm-3 col-xs-6">
{% bootstrap_field filter_form.subevent layout='inline' %}
</div>
{% else %}
<div class="col-md-3 col-xs-6">
<div class="col-lg-3 col-sm-6 col-xs-6">
{% bootstrap_field filter_form.status layout='inline' %}
</div>
{% endif %}
<div class="col-md-2 col-xs-6">
<div class="col-lg-2 col-sm-6 col-xs-6">
{% bootstrap_field filter_form.itemvar layout='inline' %}
</div>
<div class="col-md-1 col-xs-6">
<div class="col-lg-1 col-sm-6 col-xs-6">
{% bootstrap_field filter_form.qm layout='inline' %}
</div>
<div class="col-md-2 col-xs-6">
<div class="col-lg-1 col-sm-6 col-xs-6">
<button class="btn btn-primary btn-block" type="submit">
<span class="fa fa-filter"></span>
<span class="hidden-md">

View File

@@ -151,6 +151,7 @@ urlpatterns = [
url(r'^vouchers/(?P<voucher>\d+)/delete$', vouchers.VoucherDelete.as_view(),
name='event.voucher.delete'),
url(r'^vouchers/add$', vouchers.VoucherCreate.as_view(), name='event.vouchers.add'),
url(r'^vouchers/go$', vouchers.VoucherGo.as_view(), name='event.vouchers.go'),
url(r'^vouchers/bulk_add$', vouchers.VoucherBulkCreate.as_view(), name='event.vouchers.bulk'),
url(r'^orders/(?P<code>[0-9A-Z]+)/transition$', orders.OrderTransition.as_view(),
name='event.order.transition'),

View File

@@ -10,6 +10,7 @@ from django.http import (
Http404, HttpResponse, HttpResponseBadRequest, HttpResponseRedirect,
JsonResponse,
)
from django.shortcuts import redirect
from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _
from django.views.generic import (
@@ -225,6 +226,23 @@ class VoucherCreate(EventPermissionRequiredMixin, CreateView):
return super().post(request, *args, **kwargs)
class VoucherGo(EventPermissionRequiredMixin, View):
permission = 'can_view_vouchers'
def get_voucher(self, code):
return Voucher.objects.get(code__iexact=code, event=self.request.event)
def get(self, request, *args, **kwargs):
code = request.GET.get("code", "").strip()
try:
voucher = self.get_voucher(code)
return redirect('control:event.voucher', event=request.event.slug, organizer=request.event.organizer.slug,
voucher=voucher.id)
except Voucher.DoesNotExist:
messages.error(request, _('There is no voucher with the given voucher code.'))
return redirect('control:event.vouchers', event=request.event.slug, organizer=request.event.organizer.slug)
class VoucherBulkCreate(EventPermissionRequiredMixin, CreateView):
model = Voucher
template_name = 'pretixcontrol/vouchers/bulk.html'