diff --git a/src/pretix/control/templates/pretixcontrol/event/logs_embed.html b/src/pretix/control/templates/pretixcontrol/event/dashboard_partial_logs.html
similarity index 100%
rename from src/pretix/control/templates/pretixcontrol/event/logs_embed.html
rename to src/pretix/control/templates/pretixcontrol/event/dashboard_partial_logs.html
diff --git a/src/pretix/control/templates/pretixcontrol/event/dashboard_partial_warnings.html b/src/pretix/control/templates/pretixcontrol/event/dashboard_partial_warnings.html
new file mode 100644
index 0000000000..c3585e76b5
--- /dev/null
+++ b/src/pretix/control/templates/pretixcontrol/event/dashboard_partial_warnings.html
@@ -0,0 +1,48 @@
+{% load i18n %}
+{% if has_pending_refunds %}
+
+{% endif %}
+{% if has_cancellation_requests %}
+
+{% endif %}
+{% if has_pending_approvals %}
+
+{% endif %}
+{% if has_pending_orders_with_full_payment %}
+
+ {% blocktrans trimmed %}
+ This event contains
fully paid orders that are not marked as paid, probably
+ because no quota was left at the time their payment arrived. You should review the cases and consider
+ either refunding the customer or creating more space.
+ {% endblocktrans %}
+
{% trans "Show affected orders" %}
+
+{% endif %}
+{% if has_sync_problems %}
+
+ {% blocktrans trimmed %}
+ Orders in this event could not be
synced to an external system as configured.
+ {% endblocktrans %}
+
{% trans "Show sync problems" %}
+
+{% endif %}
diff --git a/src/pretix/control/templates/pretixcontrol/event/index.html b/src/pretix/control/templates/pretixcontrol/event/index.html
index a8d04040de..42941b2349 100644
--- a/src/pretix/control/templates/pretixcontrol/event/index.html
+++ b/src/pretix/control/templates/pretixcontrol/event/index.html
@@ -14,6 +14,7 @@
{% else %}
{{ request.event.get_date_range_display }}
{% endif %}
+
@@ -31,63 +32,7 @@
- {% if has_overpaid_orders %}
-
- {% blocktrans trimmed %}
- This event contains
overpaid orders, for example due to duplicate payment attempts.
- You should review the cases and consider refunding the overpaid amount to the user.
- {% endblocktrans %}
-
{% trans "Show overpaid orders" %}
-
- {% endif %}
- {% if has_pending_refunds %}
-
- {% endif %}
- {% if has_cancellation_requests %}
-
- {% endif %}
- {% if has_pending_approvals %}
-
- {% endif %}
- {% if has_pending_orders_with_full_payment %}
-
- {% blocktrans trimmed %}
- This event contains
fully paid orders that are not marked as paid, probably
- because no quota was left at the time their payment arrived. You should review the cases and consider
- either refunding the customer or creating more space.
- {% endblocktrans %}
-
{% trans "Show affected orders" %}
-
- {% endif %}
- {% if has_sync_problems %}
-
- {% blocktrans trimmed %}
- Orders in this event could not be
synced to an external system as configured.
- {% endblocktrans %}
-
{% trans "Show sync problems" %}
-
- {% endif %}
+
{% eventsignal request.event "pretix.control.signals.event_dashboard_top" request=request %}
{% if request.event.has_subevents %}
diff --git a/src/pretix/control/urls.py b/src/pretix/control/urls.py
index edc7edf82f..c59aa26c34 100644
--- a/src/pretix/control/urls.py
+++ b/src/pretix/control/urls.py
@@ -273,7 +273,8 @@ urlpatterns = [
re_path(r'^$', dashboards.event_index, name='event.index'),
re_path(r'^qrcode.(?P(png|jpeg|gif|svg))$', event.EventQRCode.as_view(), name='event.qrcode'),
re_path(r'^widgets.json$', dashboards.event_index_widgets_lazy, name='event.index.widgets'),
- re_path(r'^logs/embed$', dashboards.event_index_log_lazy, name='event.index.logs'),
+ re_path(r'^dashboard/partials/logs$', dashboards.event_index_log_lazy, name='event.index.logs'),
+ re_path(r'^dashboard/partials/warnings$', dashboards.event_index_warnings_lazy, name='event.index.warnings'),
re_path(r'^live/$', event.EventLive.as_view(), name='event.live'),
re_path(r'^transfer_session/$', event.EventTransferSession.as_view(), name='event.transfer_session'),
re_path(r'^logs/$', event.EventLog.as_view(), name='event.log'),
diff --git a/src/pretix/control/views/dashboards.py b/src/pretix/control/views/dashboards.py
index eaa3ca2d19..cfa98a5622 100644
--- a/src/pretix/control/views/dashboards.py
+++ b/src/pretix/control/views/dashboards.py
@@ -379,6 +379,42 @@ def event_index(request, organizer, event):
'comment_form': CommentForm(initial={'comment': request.event.comment}, readonly=not can_change_event_settings),
}
+ ctx['timeline'] = [
+ {
+ 'date': t.datetime.astimezone(request.event.timezone).date(),
+ 'entry': t,
+ 'time': t.datetime.astimezone(request.event.timezone)
+ }
+ for t in timeline_for_event(request.event, subevent)
+ ]
+ ctx['today'] = now().astimezone(request.event.timezone).date()
+ ctx['nearly_now'] = now().astimezone(request.event.timezone) - timedelta(seconds=20)
+ resp = render(request, 'pretixcontrol/event/index.html', ctx)
+ return resp
+
+
+def event_index_widgets_lazy(request, organizer, event):
+ subevent = None
+ if request.GET.get("subevent", "") != "" and request.event.has_subevents:
+ i = request.GET.get("subevent", "")
+ try:
+ subevent = request.event.subevents.get(pk=i)
+ except SubEvent.DoesNotExist:
+ pass
+
+ widgets = []
+ for r, result in event_dashboard_widgets.send(sender=request.event, subevent=subevent, lazy=False):
+ widgets.extend(result)
+
+ return build_json_response(widgets)
+
+
+def event_index_warnings_lazy(request, organizer, event):
+ can_view_orders = request.user.has_event_permission(request.organizer, request.event, 'event.orders:read',
+ request=request)
+ can_change_event_settings = request.user.has_event_permission(request.organizer, request.event,
+ 'event.settings.general:write', request=request)
+ ctx = {}
ctx['has_overpaid_orders'] = can_view_orders and Order.annotate_overpayments(request.event.orders).filter(
Q(~Q(status=Order.STATUS_CANCELED) & Q(pending_sum_t__lt=0))
| Q(Q(status=Order.STATUS_CANCELED) & Q(pending_sum_rc__lt=0))
@@ -402,35 +438,11 @@ def event_index(request, organizer, event):
| Q(failed_attempts__gt=0)
).exists()
- ctx['timeline'] = [
- {
- 'date': t.datetime.astimezone(request.event.timezone).date(),
- 'entry': t,
- 'time': t.datetime.astimezone(request.event.timezone)
- }
- for t in timeline_for_event(request.event, subevent)
- ]
- ctx['today'] = now().astimezone(request.event.timezone).date()
- ctx['nearly_now'] = now().astimezone(request.event.timezone) - timedelta(seconds=20)
- resp = render(request, 'pretixcontrol/event/index.html', ctx)
- # resp['Content-Security-Policy'] = "style-src 'unsafe-inline'"
- return resp
-
-
-def event_index_widgets_lazy(request, organizer, event):
- subevent = None
- if request.GET.get("subevent", "") != "" and request.event.has_subevents:
- i = request.GET.get("subevent", "")
- try:
- subevent = request.event.subevents.get(pk=i)
- except SubEvent.DoesNotExist:
- pass
-
- widgets = []
- for r, result in event_dashboard_widgets.send(sender=request.event, subevent=subevent, lazy=False):
- widgets.extend(result)
-
- return build_json_response(widgets)
+ return render(
+ request,
+ 'pretixcontrol/event/dashboard_partial_warnings.html',
+ ctx
+ )
def event_index_log_lazy(request, organizer, event):
@@ -465,7 +477,7 @@ def event_index_log_lazy(request, organizer, event):
return render(
request,
- 'pretixcontrol/event/logs_embed.html',
+ 'pretixcontrol/event/dashboard_partial_logs.html',
{
'logs': qs[:5]
}
diff --git a/src/pretix/static/pretixcontrol/js/ui/dashboard.js b/src/pretix/static/pretixcontrol/js/ui/dashboard.js
index 22c1b95931..b0b95ae553 100644
--- a/src/pretix/static/pretixcontrol/js/ui/dashboard.js
+++ b/src/pretix/static/pretixcontrol/js/ui/dashboard.js
@@ -15,8 +15,12 @@ $(function () {
if ($("#logs_target").length == 0) {
return;
}
- $.get("logs/embed", function (data) {
- $("#logs_target").html(data)
- add_log_expand_handlers($("#logs_target"))
+ $.get("dashboard/partials/logs", function (data) {
+ $("#logs_target").html(data)
+ add_log_expand_handlers($("#logs_target"))
+ });
+ $.get("dashboard/partials/warnings", function (data) {
+ $("#warnings_loading").remove()
+ $("#warnings_target").html(data)
});
});