forked from CGM_Public/pretix_original
Fix #782 -- Select2 widget for check-in lists
This commit is contained in:
@@ -3,11 +3,13 @@ import copy
|
||||
from django import forms
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db.models.functions import Lower
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||
|
||||
from pretix.base.forms import I18nModelForm
|
||||
from pretix.base.models import Item, ItemVariation, Quota, Voucher
|
||||
from pretix.control.forms import SplitDateTimePickerWidget
|
||||
from pretix.control.forms.widgets import Select2
|
||||
from pretix.control.signals import voucher_form_validation
|
||||
|
||||
|
||||
@@ -54,6 +56,18 @@ class VoucherForm(I18nModelForm):
|
||||
|
||||
if instance.event.has_subevents:
|
||||
self.fields['subevent'].queryset = instance.event.subevents.all()
|
||||
self.fields['subevent'].widget = Select2(
|
||||
attrs={
|
||||
'data-model-select2': 'event',
|
||||
'data-select2-url': reverse('control:event.subevents.select2', kwargs={
|
||||
'event': instance.event.slug,
|
||||
'organizer': instance.event.organizer.slug,
|
||||
}),
|
||||
'data-placeholder': pgettext_lazy('subevent', 'Date')
|
||||
}
|
||||
)
|
||||
self.fields['subevent'].widget.choices = self.fields['subevent'].choices
|
||||
self.fields['subevent'].required = True
|
||||
elif 'subevent':
|
||||
del self.fields['subevent']
|
||||
|
||||
|
||||
@@ -192,6 +192,7 @@ urlpatterns = [
|
||||
name='event.orders.waitinglist.delete'),
|
||||
url(r'^checkinlists/$', checkin.CheckinListList.as_view(), name='event.orders.checkinlists'),
|
||||
url(r'^checkinlists/add$', checkin.CheckinListCreate.as_view(), name='event.orders.checkinlists.add'),
|
||||
url(r'^checkinlists/select2$', typeahead.checkinlist_select2, name='event.orders.checkinlists.select2'),
|
||||
url(r'^checkinlists/(?P<list>\d+)/$', checkin.CheckInListShow.as_view(), name='event.orders.checkinlists.show'),
|
||||
url(r'^checkinlists/(?P<list>\d+)/change$', checkin.CheckinListUpdate.as_view(),
|
||||
name='event.orders.checkinlists.edit'),
|
||||
|
||||
@@ -115,6 +115,49 @@ def subevent_select2(request, **kwargs):
|
||||
return JsonResponse(doc)
|
||||
|
||||
|
||||
@event_permission_required(None)
|
||||
def checkinlist_select2(request, **kwargs):
|
||||
query = request.GET.get('query', '')
|
||||
try:
|
||||
page = int(request.GET.get('page', '1'))
|
||||
except ValueError:
|
||||
page = 1
|
||||
|
||||
qf = Q(name__icontains=i18ncomp(query))
|
||||
|
||||
try:
|
||||
dt = parse(query)
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
tz = request.event.timezone
|
||||
if dt and request.event.has_subevents:
|
||||
dt_start = make_aware(datetime.combine(dt.date(), time(hour=0, minute=0, second=0)), tz)
|
||||
dt_end = make_aware(datetime.combine(dt.date(), time(hour=23, minute=59, second=59)), tz)
|
||||
qf |= Q(subevent__date_from__gte=dt_start) & Q(subevent__date_from__lte=dt_end)
|
||||
|
||||
qs = request.event.checkin_lists.filter(
|
||||
qf
|
||||
).order_by('name')
|
||||
|
||||
total = qs.count()
|
||||
pagesize = 20
|
||||
offset = (page - 1) * pagesize
|
||||
doc = {
|
||||
'results': [
|
||||
{
|
||||
'id': e.pk,
|
||||
'text': str(e.name),
|
||||
}
|
||||
for e in qs[offset:offset + pagesize]
|
||||
],
|
||||
'pagination': {
|
||||
"more": total >= (offset + pagesize)
|
||||
}
|
||||
}
|
||||
return JsonResponse(doc)
|
||||
|
||||
|
||||
def organizer_select2(request):
|
||||
term = request.GET.get('query', '')
|
||||
try:
|
||||
|
||||
@@ -6,6 +6,7 @@ from defusedcsv import csv
|
||||
from django import forms
|
||||
from django.db.models import Max, OuterRef, Subquery
|
||||
from django.db.models.functions import Coalesce
|
||||
from django.urls import reverse
|
||||
from django.utils.formats import date_format
|
||||
from django.utils.timezone import is_aware, make_aware
|
||||
from django.utils.translation import pgettext, ugettext as _, ugettext_lazy
|
||||
@@ -16,6 +17,7 @@ from reportlab.platypus import Flowable, Paragraph, Spacer, Table, TableStyle
|
||||
from pretix.base.exporter import BaseExporter
|
||||
from pretix.base.models import Checkin, Order, OrderPosition, Question
|
||||
from pretix.base.templatetags.money import money_filter
|
||||
from pretix.control.forms.widgets import Select2
|
||||
from pretix.plugins.reports.exporters import ReportlabExportMixin
|
||||
|
||||
|
||||
@@ -60,6 +62,21 @@ class BaseCheckinList(BaseExporter):
|
||||
)),
|
||||
]
|
||||
)
|
||||
|
||||
d['list'].queryset = self.event.checkin_lists.all()
|
||||
d['list'].widget = Select2(
|
||||
attrs={
|
||||
'data-model-select2': 'generic',
|
||||
'data-select2-url': reverse('control:event.orders.checkinlists.select2', kwargs={
|
||||
'event': self.event.slug,
|
||||
'organizer': self.event.organizer.slug,
|
||||
}),
|
||||
'data-placeholder': _('Check-in list')
|
||||
}
|
||||
)
|
||||
d['list'].widget.choices = d['list'].choices
|
||||
d['list'].required = True
|
||||
|
||||
return d
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
from django import forms
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from pretix.control.forms.widgets import Select2
|
||||
from pretix.plugins.pretixdroid.models import AppConfiguration
|
||||
|
||||
|
||||
@@ -19,3 +22,15 @@ class AppConfigurationForm(forms.ModelForm):
|
||||
super().__init__(**kwargs)
|
||||
self.fields['items'].queryset = self.event.items.all()
|
||||
self.fields['list'].queryset = self.event.checkin_lists.all()
|
||||
self.fields['list'].widget = Select2(
|
||||
attrs={
|
||||
'data-model-select2': 'generic',
|
||||
'data-select2-url': reverse('control:event.orders.checkinlists.select2', kwargs={
|
||||
'event': self.event.slug,
|
||||
'organizer': self.event.organizer.slug,
|
||||
}),
|
||||
'data-placeholder': _('Check-in list')
|
||||
}
|
||||
)
|
||||
self.fields['list'].widget.choices = self.fields['list'].choices
|
||||
self.fields['list'].required = True
|
||||
|
||||
Reference in New Issue
Block a user