diff --git a/src/pretix/control/templates/pretixcontrol/event/dashboard_partial_quotas.html b/src/pretix/control/templates/pretixcontrol/event/dashboard_partial_quotas.html
new file mode 100644
index 000000000..ff10069c7
--- /dev/null
+++ b/src/pretix/control/templates/pretixcontrol/event/dashboard_partial_quotas.html
@@ -0,0 +1,4 @@
+{% load i18n %}
+{% for q in quotas %}
+ {% include "pretixcontrol/fragment_quota_box.html" with quota=q full=1 %}
+{% endfor %}
diff --git a/src/pretix/control/templates/pretixcontrol/event/index.html b/src/pretix/control/templates/pretixcontrol/event/index.html
index dc02754eb..dc3af2df7 100644
--- a/src/pretix/control/templates/pretixcontrol/event/index.html
+++ b/src/pretix/control/templates/pretixcontrol/event/index.html
@@ -75,8 +75,30 @@
{% if not request.event.has_subevents %}
{% include "pretixcontrol/event/fragment_timeline.html" %}
+
+
{% endif %}
- {% if widgets_override %}
+ {% if widgets_override and 0 %}
{{ widgets_override|safe }}
{% endif %}
{% if widgets %}
@@ -112,7 +134,6 @@
{% endfor %}
{% endif %}
-
{% if "event.orders:read" in request.eventpermset or "event.orders:write" in request.eventpermset or "event.settings.general:write" in request.eventpermset or "event.items:write" in request.eventpermset %}
diff --git a/src/pretix/control/templates/pretixcontrol/events/index.html b/src/pretix/control/templates/pretixcontrol/events/index.html
index 4ef033f7f..067b7afaa 100644
--- a/src/pretix/control/templates/pretixcontrol/events/index.html
+++ b/src/pretix/control/templates/pretixcontrol/events/index.html
@@ -151,7 +151,7 @@
{% for q in e.first_quotas|slice:":3" %}
- {% include "pretixcontrol/fragment_quota_box_paid.html" with quota=q %}
+ {% include "pretixcontrol/fragment_quota_box.html" with quota=q %}
{% endfor %}
{% if e.first_quotas|length > 3 %}
{% blocktrans with date=q.cached_availability_time|date:"SHORT_DATETIME_FORMAT" %}Numbers as of {{ date }}{% endblocktrans %}">
+{% blocktrans with num=q.cached_avail.1 %}Currently available: {{ num }}{% endblocktrans %}{% endif %}"
+ href="{% url "control:event.items.quotas.show" event=q.event.slug organizer=q.event.organizer.slug quota=q.pk %}">
+ {% if full %}
+ {{ q.name }}
+ {% endif %}
{% if q.size|default_if_none:"NONE" == "NONE" %}
{% else %}
-
{% endif %}
- {{ q.cached_avail.1|default_if_none:"∞" }} / {{ q.size|default_if_none:"∞" }}
+ {{ q.cached_availability_paid_orders|default_if_none:"?" }} / {{ q.size|default_if_none:"∞" }}
-
+
diff --git a/src/pretix/control/templates/pretixcontrol/fragment_quota_box_paid.html b/src/pretix/control/templates/pretixcontrol/fragment_quota_box_paid.html
deleted file mode 100644
index 1878965a5..000000000
--- a/src/pretix/control/templates/pretixcontrol/fragment_quota_box_paid.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% load i18n %}
-{% blocktrans with num=q.cached_avail.1 %}Currently available: {{ num }}{% endblocktrans %}{% endif %}"
- href="{% url "control:event.items.quotas.show" event=q.event.slug organizer=q.event.organizer.slug quota=q.pk %}">
- {% if q.size|default_if_none:"NONE" == "NONE" %}
-
-
- {% else %}
-
- {% endif %}
-
- {{ q.cached_availability_paid_orders|default_if_none:"?" }} / {{ q.size|default_if_none:"∞" }}
-
-
diff --git a/src/pretix/control/templates/pretixcontrol/subevents/index.html b/src/pretix/control/templates/pretixcontrol/subevents/index.html
index 60c235dcb..377c395ba 100644
--- a/src/pretix/control/templates/pretixcontrol/subevents/index.html
+++ b/src/pretix/control/templates/pretixcontrol/subevents/index.html
@@ -155,7 +155,7 @@
|
{% for q in s.first_quotas|slice:":3" %}
- {% include "pretixcontrol/fragment_quota_box_paid.html" with quota=q %}
+ {% include "pretixcontrol/fragment_quota_box.html" with quota=q %}
{% endfor %}
{% if s.first_quotas|length > 3 %}
0 else 100
- )
+ prepare_quotas_for_boxes(quotas)
return ctx
@cached_property
diff --git a/src/pretix/control/views/subevents.py b/src/pretix/control/views/subevents.py
index ae11b77c5..12022c78c 100644
--- a/src/pretix/control/views/subevents.py
+++ b/src/pretix/control/views/subevents.py
@@ -84,6 +84,7 @@ from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.control.signals import subevent_forms
from pretix.control.views import PaginationMixin
from pretix.control.views.event import MetaDataEditorMixin
+from pretix.control.views.utils import prepare_quotas_for_boxes
from pretix.helpers import GroupConcat
from pretix.helpers.compat import CompatDeleteView
from pretix.helpers.i18n import get_format_without_seconds
@@ -145,19 +146,7 @@ class SubEventList(EventPermissionRequiredMixin, PaginationMixin, SubEventQueryM
s.first_quotas = s.first_quotas[:4]
quotas += list(s.first_quotas)
- qa = QuotaAvailability(early_out=False)
- for q in quotas:
- qa.queue(q)
- qa.compute()
-
- for q in quotas:
- q.cached_avail = qa.results[q]
- q.cached_availability_paid_orders = qa.count_paid_orders.get(q, 0)
- if q.size is not None:
- q.percent_paid = min(
- 100,
- round(q.cached_availability_paid_orders / q.size * 100) if q.size > 0 else 100
- )
+ prepare_quotas_for_boxes(quotas)
return ctx
diff --git a/src/pretix/control/views/utils.py b/src/pretix/control/views/utils.py
new file mode 100644
index 000000000..5f3968132
--- /dev/null
+++ b/src/pretix/control/views/utils.py
@@ -0,0 +1,22 @@
+from pretix.base.services.quotas import QuotaAvailability
+
+
+def prepare_quotas_for_boxes(quotas):
+ qa = QuotaAvailability(early_out=False)
+ for q in quotas:
+ qa.queue(q)
+ qa.compute()
+
+ for q in quotas:
+ q.cached_avail = qa.results[q]
+ q.cached_availability_paid_orders = qa.count_paid_orders.get(q, 0)
+ if q.size is not None:
+ other_blocked = q.size - q.cached_availability_paid_orders - q.cached_avail[1]
+ q.percent_paid = min(
+ 100,
+ round(q.cached_availability_paid_orders / q.size * 100) if q.size > 0 else 100
+ )
+ q.percent_other = min(
+ 100,
+ round(other_blocked / q.size * 100) if q.size > 0 else 100
+ )
diff --git a/src/pretix/static/pretixcontrol/scss/_dashboard.scss b/src/pretix/static/pretixcontrol/scss/_dashboard.scss
index cf0446f0c..b20aea5b6 100644
--- a/src/pretix/static/pretixcontrol/scss/_dashboard.scss
+++ b/src/pretix/static/pretixcontrol/scss/_dashboard.scss
@@ -20,10 +20,7 @@
}
.loading-mock {
- display: inline-block;
background: #eee;
- border-radius: $border-radius-base;
- height: 1em;
animation: loading-mock-pulse 3s infinite;
background-size: 200% 100%;
background-image: linear-gradient(
@@ -43,6 +40,11 @@
width: 200px;
}
}
+span.loading-mock {
+ display: inline-block;
+ border-radius: $border-radius-base;
+ height: 1em;
+}
.dashboard {
diff --git a/src/pretix/static/pretixcontrol/scss/main.scss b/src/pretix/static/pretixcontrol/scss/main.scss
index 955fd7059..587dd3629 100644
--- a/src/pretix/static/pretixcontrol/scss/main.scss
+++ b/src/pretix/static/pretixcontrol/scss/main.scss
@@ -530,18 +530,45 @@ table td ul:last-child {
display: inline-block;
vertical-align: top;
width: 50px;
+ text-align: center;
+ margin-bottom: 5px;
+ strong {
+ display: block;
+ width: 100%;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
.progress {
- height: 7px;
+ height: 10px;
margin-bottom: 2px;
}
.numbers {
font-size: 10px;
color: $text-muted;
display: block;
- text-align: center;
}
- &.availability .progress-bar-success {
- background: var(--pretix-brand-success-lighten-20);
+ .progress-bar-unconfirmed {
+ opacity: 0.7;
+ }
+
+ &.quotabox-full {
+ width: 100px;
+ padding: 0 2px;
+
+ strong {
+ font-size: 12px;
+ }
+
+ .progress {
+ height: 16px;
+ width: 80px;
+ margin: auto;
+ }
+
+ .numbers {
+ font-size: 12px;
+ }
}
}
.quotabox-more {
|