mirror of
https://github.com/pretix/pretix.git
synced 2026-05-03 14:54:04 +00:00
Integrate orders and vouchers into navigation typeahead
This commit is contained in:
@@ -11,7 +11,7 @@ from django.utils.formats import get_format
|
||||
from django.utils.timezone import make_aware
|
||||
from django.utils.translation import pgettext, ugettext as _
|
||||
|
||||
from pretix.base.models import Organizer, User
|
||||
from pretix.base.models import Order, Organizer, User, Voucher
|
||||
from pretix.control.forms.event import EventWizardCopyForm
|
||||
from pretix.control.permissions import event_permission_required
|
||||
from pretix.helpers.daterange import daterange
|
||||
@@ -67,6 +67,32 @@ def serialize_event(e):
|
||||
}
|
||||
|
||||
|
||||
def serialize_order(o):
|
||||
return {
|
||||
'type': 'order',
|
||||
'event': str(o.event),
|
||||
'title': _('Order {}').format(str(o.code)),
|
||||
'url': reverse('control:event.order', kwargs={
|
||||
'event': o.event.slug,
|
||||
'organizer': o.event.organizer.slug,
|
||||
'code': o.code
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
def serialize_voucher(v):
|
||||
return {
|
||||
'type': 'voucher',
|
||||
'event': str(v.event),
|
||||
'title': _('Voucher {}').format(str(v.code)),
|
||||
'url': reverse('control:event.voucher', kwargs={
|
||||
'event': v.event.slug,
|
||||
'organizer': v.event.organizer.slug,
|
||||
'voucher': v.pk
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
def event_list(request):
|
||||
query = request.GET.get('query', '')
|
||||
try:
|
||||
@@ -132,6 +158,24 @@ def nav_context_list(request):
|
||||
if query:
|
||||
qs_orga = qs_orga.filter(Q(name__icontains=query) | Q(slug__icontains=query))
|
||||
|
||||
qs_orders = Order.objects.filter(code__icontains=query).select_related('event', 'event__organizer')
|
||||
if not request.user.has_active_staff_session(request.session.session_key):
|
||||
qs_orders = qs_orders.filter(
|
||||
Q(event__organizer_id__in=request.user.teams.filter(
|
||||
all_events=True, can_view_orders=True).values_list('organizer', flat=True))
|
||||
| Q(event_id__in=request.user.teams.filter(
|
||||
can_view_orders=True).values_list('limit_events__id', flat=True))
|
||||
)
|
||||
|
||||
qs_vouchers = Voucher.objects.filter(code__icontains=query).select_related('event', 'event__organizer')
|
||||
if not request.user.has_active_staff_session(request.session.session_key):
|
||||
qs_orders = qs_orders.filter(
|
||||
Q(event__organizer_id__in=request.user.teams.filter(
|
||||
all_events=True, can_view_vouchers=True).values_list('organizer', flat=True))
|
||||
| Q(event_id__in=request.user.teams.filter(
|
||||
can_view_vouchers=True).values_list('limit_events__id', flat=True))
|
||||
)
|
||||
|
||||
show_user = not query or (
|
||||
query and request.user.email and query.lower() in request.user.email.lower()
|
||||
) or (
|
||||
@@ -146,6 +190,10 @@ def nav_context_list(request):
|
||||
serialize_orga(e) for e in qs_orga[offset:offset + (pagesize if query else 5)]
|
||||
] + [
|
||||
serialize_event(e) for e in qs_events.select_related('organizer')[offset:offset + (pagesize if query else 5)]
|
||||
] + [
|
||||
serialize_order(e) for e in qs_orders[offset:offset + (pagesize if query else 5)]
|
||||
] + [
|
||||
serialize_voucher(e) for e in qs_vouchers[offset:offset + (pagesize if query else 5)]
|
||||
]
|
||||
|
||||
if show_user and organizer:
|
||||
|
||||
@@ -42,6 +42,27 @@ $(function () {
|
||||
})
|
||||
)
|
||||
);
|
||||
} else if (res.type === "order" || res.type === "voucher") {
|
||||
$container.append(
|
||||
$("<li>").append(
|
||||
$("<a>").attr("href", res.url).append(
|
||||
$("<div>").append(
|
||||
$("<span>").addClass("event-name-full").append($("<div>").text(res.title).html())
|
||||
).append(
|
||||
$("<span>").addClass("event-organizer").append(
|
||||
$("<span>").addClass("fa fa-calendar fa-fw")
|
||||
).append(" ").append($("<div>").text(res.event).html())
|
||||
)
|
||||
).on("mousedown", function (event) {
|
||||
if ($(this).length) {
|
||||
location.href = $(this).attr("href");
|
||||
}
|
||||
$(this).parent().addClass("active");
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
})
|
||||
)
|
||||
);
|
||||
} else if (res.type === "user") {
|
||||
$container.append(
|
||||
$("<li>").append(
|
||||
|
||||
Reference in New Issue
Block a user