Allow subevent filtering in dashboard

This commit is contained in:
Raphael Michel
2017-08-24 16:12:50 +02:00
parent ff21380099
commit cd6b1a2327
4 changed files with 42 additions and 16 deletions

View File

@@ -94,6 +94,7 @@ should return a list of dictionaries, where each dictionary can have the keys:
* link (str, optional, if the full widget should be a link)
As with all plugin signals, the ``sender`` keyword argument will contain the event.
An additional keyword argument ``subevent`` *can* contain a sub-event.
"""
user_dashboard_widgets = Signal(

View File

@@ -9,5 +9,5 @@
</option>
{% endfor %}
</select>
<button class="btn btn-primary" type="submit">{% trans "Filter" %}</button>
<button class="btn btn-primary" type="submit">{% trans "Show" %}</button>
</p>

View File

@@ -39,7 +39,12 @@
</div>
{% endif %}
<div class="row dashboard">
{% if request.event.has_subevents %}
<form class="form-inline helper-display-inline" action="" method="get">
{% include "pretixcontrol/event/fragment_subevent_choice_simple.html" %}
</form>
{% endif %}
<div class="dashboard">
{% for w in widgets %}
<div class="widget-container widget-{{ w.display_size|default:"small" }}">
{% if w.url %}{# backwards compatibility #}

View File

@@ -16,7 +16,7 @@ from django.utils.html import escape
from django.utils.translation import ugettext_lazy as _, ungettext
from pretix.base.models import (
Event, Item, Order, OrderPosition, RequiredAction, Voucher,
Event, Item, Order, OrderPosition, RequiredAction, SubEvent, Voucher,
WaitingListEntry,
)
from pretix.control.forms.event import CommentForm
@@ -31,25 +31,37 @@ NUM_WIDGET = '<div class="numwidget"><span class="num">{num}</span><span class="
@receiver(signal=event_dashboard_widgets)
def base_widgets(sender, **kwargs):
def base_widgets(sender, subevent=None, **kwargs):
prodc = Item.objects.filter(
event=sender, active=True,
).count()
tickc = OrderPosition.objects.filter(
if subevent:
opqs = OrderPosition.objects.filter(subevent=subevent)
else:
opqs = OrderPosition.objects
tickc = opqs.filter(
order__event=sender, item__admission=True,
order__status__in=(Order.STATUS_PAID, Order.STATUS_PENDING)
order__status__in=(Order.STATUS_PAID, Order.STATUS_PENDING),
).count()
paidc = OrderPosition.objects.filter(
paidc = opqs.filter(
order__event=sender, item__admission=True,
order__status=Order.STATUS_PAID,
).count()
rev = Order.objects.filter(
event=sender,
status=Order.STATUS_PAID
).aggregate(sum=Sum('total'))['sum'] or Decimal('0.00')
if subevent:
rev = opqs.filter(
order__event=sender, order__status=Order.STATUS_PAID
).aggregate(
sum=Sum('price')
)['sum'] or Decimal('0.00')
else:
rev = Order.objects.filter(
event=sender,
status=Order.STATUS_PAID
).aggregate(sum=Sum('total'))['sum'] or Decimal('0.00')
return [
{
@@ -93,10 +105,10 @@ def base_widgets(sender, **kwargs):
@receiver(signal=event_dashboard_widgets)
def waitinglist_widgets(sender, **kwargs):
def waitinglist_widgets(sender, subevent=None, **kwargs):
widgets = []
wles = WaitingListEntry.objects.filter(event=sender, voucher__isnull=True)
wles = WaitingListEntry.objects.filter(event=sender, subevent=subevent, voucher__isnull=True)
if wles.count():
quota_cache = {}
itemvar_cache = {}
@@ -136,10 +148,10 @@ def waitinglist_widgets(sender, **kwargs):
@receiver(signal=event_dashboard_widgets)
def quota_widgets(sender, **kwargs):
def quota_widgets(sender, subevent=None, **kwargs):
widgets = []
for q in sender.quotas.all():
for q in sender.quotas.filter(subevent=subevent):
status, left = q.availability()
widgets.append({
'content': NUM_WIDGET.format(num='{}/{}'.format(left, q.size) if q.size is not None else '\u221e',
@@ -229,8 +241,16 @@ def welcome_wizard_widget(sender, **kwargs):
def event_index(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, request=request):
for r, result in event_dashboard_widgets.send(sender=request.event, subevent=subevent):
widgets.extend(result)
can_change_orders = request.user.has_event_permission(request.organizer, request.event, 'can_change_orders')