- {% csrf_token %}
- {% bootstrap_form_errors form %}
-
+
+
+
+
- {% if quota.pk and quota.size != None %}
-
-
+
+
{% trans "Total quota" %}
+
+ {% if quota.size == None %}{% trans "Infinite" %}{% else %}{{ quota.size }}{% endif %}
-
- {% endif %}
+
+
+
{% trans "Paid orders" %}
+
– {{ quota.count_paid_orders }}
+
+
+
{% trans "Pending orders" %}
+
– {{ quota.count_pending_orders }}
+
+
+
{% trans "Vouchers" %}
+
– {{ quota.count_blocking_vouchers }}
+
+
+
{% trans "Current user's carts" %}
+
– {{ quota.count_in_cart }}
+
+
+
{% trans "Current availability" %}
+
+ {% if quota.size == None %}{% trans "Infinite" %}{% else %}{{ quota.availability.1 }}{% endif %}
+
+
-
-
-
-
+
{% endblock %}
diff --git a/src/pretix/control/templates/pretixcontrol/items/quota_edit.html b/src/pretix/control/templates/pretixcontrol/items/quota_edit.html
new file mode 100644
index 0000000000..e9891be0f2
--- /dev/null
+++ b/src/pretix/control/templates/pretixcontrol/items/quota_edit.html
@@ -0,0 +1,61 @@
+{% extends "pretixcontrol/items/base.html" %}
+{% load i18n %}
+{% load bootstrap3 %}
+{% block title %}
+ {% if question %}
+ {% blocktrans with name=quota.name %}Quota: {{ name }}{% endblocktrans %}
+ {% else %}
+ {% trans "Quota" %}
+ {% endif %}
+{% endblock %}
+{% block inside %}
+ {% if question %}
+
{% blocktrans with name=quota.name %}Quota: {{ name }}{% endblocktrans %}
+ {% else %}
+
{% trans "Quota" %}
+ {% endif %}
+
+{% endblock %}
diff --git a/src/pretix/control/templates/pretixcontrol/items/quotas.html b/src/pretix/control/templates/pretixcontrol/items/quotas.html
index f859a94717..2dbcc100a8 100644
--- a/src/pretix/control/templates/pretixcontrol/items/quotas.html
+++ b/src/pretix/control/templates/pretixcontrol/items/quotas.html
@@ -43,20 +43,19 @@
{% for q in quotas %}
|
- {{ q.name }}
+ {{ q.name }}
|
|
{% if q.size == None %}Unlimited{% else %}{{ q.size }}{% endif %} |
{% include "pretixcontrol/items/fragment_quota_availability.html" with availability=q.availability %} |
+
|
diff --git a/src/pretix/control/urls.py b/src/pretix/control/urls.py
index 7749695071..1c731a5670 100644
--- a/src/pretix/control/urls.py
+++ b/src/pretix/control/urls.py
@@ -59,7 +59,8 @@ urlpatterns = [
name='event.items.questions.edit'),
url(r'^questions/add$', item.QuestionCreate.as_view(), name='event.items.questions.add'),
url(r'^quotas/$', item.QuotaList.as_view(), name='event.items.quotas'),
- url(r'^quotas/(?P
\d+)/$', item.QuotaUpdate.as_view(), name='event.items.quotas.edit'),
+ url(r'^quotas/(?P\d+)/$', item.QuotaView.as_view(), name='event.items.quotas.show'),
+ url(r'^quotas/(?P\d+)/change$', item.QuotaUpdate.as_view(), name='event.items.quotas.edit'),
url(r'^quotas/(?P\d+)/delete$', item.QuotaDelete.as_view(),
name='event.items.quotas.delete'),
url(r'^quotas/add$', item.QuotaCreate.as_view(), name='event.items.quotas.add'),
diff --git a/src/pretix/control/views/dashboards.py b/src/pretix/control/views/dashboards.py
index f8b5056086..9a7e713a40 100644
--- a/src/pretix/control/views/dashboards.py
+++ b/src/pretix/control/views/dashboards.py
@@ -89,7 +89,7 @@ def quota_widgets(sender, **kwargs):
text=_('{quota} left').format(quota=q.name)),
'width': 3,
'priority': 50,
- 'url': reverse('control:event.items.quotas.edit', kwargs={
+ 'url': reverse('control:event.items.quotas.show', kwargs={
'event': sender.slug,
'organizer': sender.organizer.slug,
'quota': q.id
diff --git a/src/pretix/control/views/item.py b/src/pretix/control/views/item.py
index 6734a73000..10b1637c62 100644
--- a/src/pretix/control/views/item.py
+++ b/src/pretix/control/views/item.py
@@ -572,7 +572,7 @@ class QuotaEditorMixin:
class QuotaCreate(EventPermissionRequiredMixin, QuotaEditorMixin, CreateView):
model = Quota
form_class = QuotaForm
- template_name = 'pretixcontrol/items/quota.html'
+ template_name = 'pretixcontrol/items/quota_edit.html'
permission = 'can_change_items'
context_object_name = 'quota'
@@ -591,16 +591,14 @@ class QuotaCreate(EventPermissionRequiredMixin, QuotaEditorMixin, CreateView):
return ret
-class QuotaUpdate(EventPermissionRequiredMixin, QuotaEditorMixin, ChartContainingView, UpdateView):
+class QuotaView(ChartContainingView, DetailView):
model = Quota
- form_class = QuotaForm
template_name = 'pretixcontrol/items/quota.html'
- permission = 'can_change_items'
context_object_name = 'quota'
def get_context_data(self, *args, **kwargs):
ctx = super().get_context_data()
- ctx['quota_chart_data'] = json.dumps([
+ data = [
{
'label': ugettext('Paid orders'),
'value': self.object.count_paid_orders()
@@ -616,12 +614,34 @@ class QuotaUpdate(EventPermissionRequiredMixin, QuotaEditorMixin, ChartContainin
{
'label': ugettext('Current user\'s carts'),
'value': self.object.count_in_cart()
- },
- {
+ }
+ ]
+ if self.object.size is not None:
+ data.append({
'label': ugettext('Current availability'),
'value': self.object.availability()[1]
- }
- ])
+ })
+ ctx['quota_chart_data'] = json.dumps(data)
+ return ctx
+
+ def get_object(self, queryset=None) -> Quota:
+ try:
+ return self.request.event.quotas.get(
+ id=self.kwargs['quota']
+ )
+ except Quota.DoesNotExist:
+ raise Http404(_("The requested quota does not exist."))
+
+
+class QuotaUpdate(EventPermissionRequiredMixin, QuotaEditorMixin, UpdateView):
+ model = Quota
+ form_class = QuotaForm
+ template_name = 'pretixcontrol/items/quota_edit.html'
+ permission = 'can_change_items'
+ context_object_name = 'quota'
+
+ def get_context_data(self, *args, **kwargs):
+ ctx = super().get_context_data()
return ctx
def get_object(self, queryset=None) -> Quota:
diff --git a/src/tests/control/test_items.py b/src/tests/control/test_items.py
index 396c2d6eb5..0cb404f321 100644
--- a/src/tests/control/test_items.py
+++ b/src/tests/control/test_items.py
@@ -231,11 +231,12 @@ class QuotaTest(ItemFormTest):
item2 = Item.objects.create(event=self.event1, name="Business", default_price=0)
ItemVariation.objects.create(item=item2, value="Silver")
ItemVariation.objects.create(item=item2, value="Gold")
- doc = self.get_doc('/control/event/%s/%s/quotas/%s/' % (self.orga1.slug, self.event1.slug, c.id))
+ doc = self.get_doc('/control/event/%s/%s/quotas/%s/change' % (self.orga1.slug, self.event1.slug, c.id))
doc.select('[name=item_%s]' % item1.id)[0]['checked'] = 'checked'
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
form_data['size'] = '350'
- doc = self.post_doc('/control/event/%s/%s/quotas/%s/' % (self.orga1.slug, self.event1.slug, c.id), form_data)
+ doc = self.post_doc('/control/event/%s/%s/quotas/%s/change' % (self.orga1.slug, self.event1.slug, c.id),
+ form_data)
self.assertIn("350", doc.select("#page-wrapper table")[0].text)
self.assertNotIn("500", doc.select("#page-wrapper table")[0].text)
assert Quota.objects.get(id=c.id).size == 350