Fix #541 -- Allow delete waitinglist entries (#544)

Add new action "delete" for each waiting list entries
This commit is contained in:
Daniel
2017-07-09 21:19:30 +08:00
committed by Raphael Michel
parent 275d162b81
commit 0663f25208
5 changed files with 72 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
{% extends "pretixcontrol/event/base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% block title %}{% trans "Delete entry" %}{% endblock %}
{% block content %}
<h1>{% trans "Delete entry" %}</h1>
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<p>{% blocktrans %}Are you sure you want to delete the following waiting list entry <strong>{{ entry }}</strong>?{% endblocktrans %}</p>
<div class="form-group submit-group">
<a href="{% url "control:event.orders.waitinglist" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default btn-cancel">
{% trans "Cancel" %}
</a>
<button type="submit" class="btn btn-danger btn-save">
{% trans "Delete" %}
</button>
</div>
</form>
{% endblock %}

View File

@@ -96,6 +96,7 @@
<th>{% trans "On the list since" %}</th>
<th>{% trans "Status" %}</th>
<th>{% trans "Voucher" %}</th>
<th></th>
</tr>
</thead>
<tbody>
@@ -133,6 +134,13 @@
</button>
{% endif %}
</td>
<td>
{% if not e.voucher %}
<a href="{% url "control:event.orders.waitinglist.delete" organizer=request.event.organizer.slug event=request.event.slug entry=e.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
{% else %}
<span class="btn btn-danger btn-sm disabled"><i class="fa fa-trash"></i></span>
{% endif %}
</td>
<td class="text-right">
</td>
</tr>

View File

@@ -143,6 +143,7 @@ urlpatterns = [
url(r'^orders/$', orders.OrderList.as_view(), name='event.orders'),
url(r'^waitinglist/$', waitinglist.WaitingListView.as_view(), name='event.orders.waitinglist'),
url(r'^waitinglist/auto_assign$', waitinglist.AutoAssign.as_view(), name='event.orders.waitinglist.auto'),
url(r'^waitinglist/(?P<entry>\d+)/delete$', waitinglist.EntryDelete.as_view(), name='event.orders.waitinglist.delete'),
url(r'^checkins/$', checkin.CheckInView.as_view(), name='event.orders.checkins'),
])),
]

View File

@@ -1,11 +1,14 @@
from django.contrib import messages
from django.db import transaction
from django.db.models import Sum
from django.db.models.functions import Coalesce
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import redirect
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from django.views import View
from django.views.generic import ListView
from django.views.generic.edit import DeleteView
from pretix.base.models import Item, WaitingListEntry
from pretix.base.models.waitinglist import WaitingListException
@@ -125,3 +128,34 @@ class WaitingListView(EventPermissionRequiredMixin, ListView):
)
)
return qs['s']
class EntryDelete(EventPermissionRequiredMixin, DeleteView):
model = WaitingListEntry
template_name = 'pretixcontrol/waitinglist/delete.html'
permission = 'can_change_orders'
context_object_name = 'entry'
def get_object(self, queryset=None) -> WaitingListEntry:
try:
return self.request.event.waitinglistentries.get(
id=self.kwargs['entry'],
voucher__isnull=True,
)
except WaitingListEntry.DoesNotExist:
raise Http404(_("The requested entry does not exist."))
@transaction.atomic
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
success_url = self.get_success_url()
self.object.log_action('pretix.event.orders.waitinglist.delete', user=self.request.user)
self.object.delete()
messages.success(self.request, _('The selected entry has been deleted.'))
return HttpResponseRedirect(success_url)
def get_success_url(self) -> str:
return reverse('control:event.orders.waitinglist', kwargs={
'event': self.request.event.slug,
'organizer': self.request.event.organizer.slug
})