forked from CGM_Public/pretix_original
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.timezone import make_aware
|
||||||
from django.utils.translation import pgettext, ugettext as _
|
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.forms.event import EventWizardCopyForm
|
||||||
from pretix.control.permissions import event_permission_required
|
from pretix.control.permissions import event_permission_required
|
||||||
from pretix.helpers.daterange import daterange
|
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):
|
def event_list(request):
|
||||||
query = request.GET.get('query', '')
|
query = request.GET.get('query', '')
|
||||||
try:
|
try:
|
||||||
@@ -132,6 +158,24 @@ def nav_context_list(request):
|
|||||||
if query:
|
if query:
|
||||||
qs_orga = qs_orga.filter(Q(name__icontains=query) | Q(slug__icontains=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 (
|
show_user = not query or (
|
||||||
query and request.user.email and query.lower() in request.user.email.lower()
|
query and request.user.email and query.lower() in request.user.email.lower()
|
||||||
) or (
|
) 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_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_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:
|
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") {
|
} else if (res.type === "user") {
|
||||||
$container.append(
|
$container.append(
|
||||||
$("<li>").append(
|
$("<li>").append(
|
||||||
|
|||||||
Reference in New Issue
Block a user