forked from CGM_Public/pretix_original
Check-in log: Add select2 for device selection
This commit is contained in:
@@ -2202,6 +2202,18 @@ class CheckinFilterForm(FilterForm):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
self.fields['device'].queryset = self.event.organizer.devices.all().order_by('device_id')
|
self.fields['device'].queryset = self.event.organizer.devices.all().order_by('device_id')
|
||||||
|
self.fields['device'].widget = Select2(
|
||||||
|
attrs={
|
||||||
|
'data-model-select2': 'generic',
|
||||||
|
'data-select2-url': reverse('control:organizer.devices.select2', kwargs={
|
||||||
|
'organizer': self.event.organizer.slug,
|
||||||
|
}),
|
||||||
|
'data-placeholder': _('All devices'),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.fields['device'].widget.choices = self.fields['device'].choices
|
||||||
|
self.fields['device'].label = _('Device')
|
||||||
|
|
||||||
self.fields['gate'].queryset = self.event.organizer.gates.all()
|
self.fields['gate'].queryset = self.event.organizer.gates.all()
|
||||||
|
|
||||||
self.fields['checkin_list'].queryset = self.event.checkin_lists.all()
|
self.fields['checkin_list'].queryset = self.event.checkin_lists.all()
|
||||||
|
|||||||
@@ -177,6 +177,7 @@ urlpatterns = [
|
|||||||
re_path(r'^organizer/(?P<organizer>[^/]+)/webhook/(?P<webhook>[^/]+)/logs$', organizer.WebHookLogsView.as_view(),
|
re_path(r'^organizer/(?P<organizer>[^/]+)/webhook/(?P<webhook>[^/]+)/logs$', organizer.WebHookLogsView.as_view(),
|
||||||
name='organizer.webhook.logs'),
|
name='organizer.webhook.logs'),
|
||||||
re_path(r'^organizer/(?P<organizer>[^/]+)/devices$', organizer.DeviceListView.as_view(), name='organizer.devices'),
|
re_path(r'^organizer/(?P<organizer>[^/]+)/devices$', organizer.DeviceListView.as_view(), name='organizer.devices'),
|
||||||
|
re_path(r'^organizer/(?P<organizer>[^/]+)/devices/select2$', typeahead.devices_select2, name='organizer.devices.select2'),
|
||||||
re_path(r'^organizer/(?P<organizer>[^/]+)/device/add$', organizer.DeviceCreateView.as_view(),
|
re_path(r'^organizer/(?P<organizer>[^/]+)/device/add$', organizer.DeviceCreateView.as_view(),
|
||||||
name='organizer.device.add'),
|
name='organizer.device.add'),
|
||||||
re_path(r'^organizer/(?P<organizer>[^/]+)/device/bulk_edit$', organizer.DeviceBulkUpdateView.as_view(),
|
re_path(r'^organizer/(?P<organizer>[^/]+)/device/bulk_edit$', organizer.DeviceBulkUpdateView.as_view(),
|
||||||
|
|||||||
@@ -831,3 +831,41 @@ def item_meta_values(request, organizer, event):
|
|||||||
)
|
)
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@organizer_permission_required(("can_view_orders", "can_change_organizer_settings"))
|
||||||
|
# This decorator is a bit of a hack since this is not technically an organizer permission, but it does the job here --
|
||||||
|
# anyone who can see orders for any event can see the check-in log view where this is used as a filter
|
||||||
|
def devices_select2(request, **kwargs):
|
||||||
|
query = request.GET.get('query', '')
|
||||||
|
try:
|
||||||
|
page = int(request.GET.get('page', '1'))
|
||||||
|
except ValueError:
|
||||||
|
page = 1
|
||||||
|
|
||||||
|
qq = (
|
||||||
|
Q(name__icontains=query) | Q(hardware_brand__icontains=query) | Q(hardware_model__icontains=query) |
|
||||||
|
Q(unique_serial__istartswith=query)
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
qq |= Q(device_id=int(query))
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
qs = request.organizer.devices.filter(qq).order_by('device_id')
|
||||||
|
|
||||||
|
total = qs.count()
|
||||||
|
pagesize = 20
|
||||||
|
offset = (page - 1) * pagesize
|
||||||
|
doc = {
|
||||||
|
'results': [
|
||||||
|
{
|
||||||
|
'id': e.pk,
|
||||||
|
'text': str(e),
|
||||||
|
}
|
||||||
|
for e in qs[offset:offset + pagesize]
|
||||||
|
],
|
||||||
|
'pagination': {
|
||||||
|
"more": total >= (offset + pagesize)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return JsonResponse(doc)
|
||||||
|
|||||||
@@ -513,6 +513,7 @@ organizer_permission_urls = [
|
|||||||
("can_change_organizer_settings", "organizer/dummy/settings/email", 200),
|
("can_change_organizer_settings", "organizer/dummy/settings/email", 200),
|
||||||
("can_change_organizer_settings", "organizer/dummy/settings/email/setup", 200),
|
("can_change_organizer_settings", "organizer/dummy/settings/email/setup", 200),
|
||||||
("can_change_organizer_settings", "organizer/dummy/devices", 200),
|
("can_change_organizer_settings", "organizer/dummy/devices", 200),
|
||||||
|
("can_change_organizer_settings", "organizer/dummy/devices/select2", 200),
|
||||||
("can_change_organizer_settings", "organizer/dummy/device/add", 200),
|
("can_change_organizer_settings", "organizer/dummy/device/add", 200),
|
||||||
("can_change_organizer_settings", "organizer/dummy/device/1/edit", 404),
|
("can_change_organizer_settings", "organizer/dummy/device/1/edit", 404),
|
||||||
("can_change_organizer_settings", "organizer/dummy/device/1/connect", 404),
|
("can_change_organizer_settings", "organizer/dummy/device/1/connect", 404),
|
||||||
|
|||||||
Reference in New Issue
Block a user