Skip to content

Commit 60878cb

Browse files
committed
Return permissions as part of scanner API status responses
This will make it possible for apps to prepopulate a list of conferences and fields instead of having to add each one manually.
1 parent 8b3692c commit 60878cb

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

postgresqleu/confreg/checkin.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from .models import ConferenceRegistration
2525
from .util import render_conference_response, reglog
2626
from .util import get_conference_or_404
27+
from .util import get_conference_scanner_permissions
2728

2829
import json
2930

@@ -312,6 +313,7 @@ def _checkin_api(request, urlname, regtoken, what, tokenfield, tokenmatcher, fie
312313
'activestatus': 'Check-in active' if conference.checkinactive else 'Check-in is not open',
313314
'confname': conference.conferencename,
314315
'admin': is_admin,
316+
'permissions': get_conference_scanner_permissions(user.attendee),
315317
**extrastatus
316318
})
317319

postgresqleu/confreg/util.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import re
1616

1717
from postgresqleu.mailqueue.util import send_simple_mail, send_template_mail
18+
from postgresqleu.util.db import exec_to_keyed_dict
1819
from postgresqleu.util.middleware import RedirectException
1920
from postgresqleu.util.time import today_conference
2021
from postgresqleu.util.messaging.util import send_org_notification
@@ -489,6 +490,34 @@ def get_conference_or_404(urlname):
489490
return conference
490491

491492

493+
def get_conference_scanner_permissions(user):
494+
permissions = exec_to_keyed_dict("""SELECT conferencename AS name, startdate::text, true AS checkin,
495+
CASE WHEN scannerfields != '' THEN regexp_split_to_array(scannerfields, ',') ELSE '{}' END AS scannerfields,
496+
regtoken AS token
497+
FROM confreg_conference c
498+
INNER JOIN confreg_conferenceregistration r ON r.conference_id=c.id
499+
WHERE r.attendee_id=%(userid)s
500+
AND c.enddate > CURRENT_TIMESTAMP - '2 weeks'::interval
501+
AND EXISTS (SELECT 1 FROM confreg_conference_checkinprocessors cp WHERE cp.conference_id=c.id AND cp.conferenceregistration_id=r.id)
502+
""", {'userid': user.id})
503+
504+
for conf, data in exec_to_keyed_dict("""SELECT conferencename AS name, startdate::text, false as checkin,
505+
jsonb_agg(jsonb_build_object('sponsor', s.name, 'token', ss.token)) AS sponsors
506+
FROM confreg_conference c
507+
INNER JOIN confreg_conferenceregistration r ON r.conference_id=c.id
508+
INNER JOIN confsponsor_sponsorscanner ss ON ss.scanner_id=r.id
509+
INNER JOIN confsponsor_sponsor s ON s.id=ss.sponsor_id
510+
WHERE r.attendee_id=%(userid)s
511+
AND c.enddate > CURRENT_TIMESTAMP - '2 weeks'::interval
512+
GROUP BY 1, 2, 3
513+
""", {'userid': user.id}).items():
514+
if conf in permissions:
515+
permissions[conf]['sponsors'] = data['sponsors']
516+
else:
517+
permissions[conf] = data
518+
return permissions
519+
520+
492521
def activate_conference_timezone(conference):
493522
timezone.activate(conference.tzname)
494523

postgresqleu/confsponsor/scanning.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from postgresqleu.util.decorators import global_login_exempt
1717
from postgresqleu.confreg.models import ConferenceRegistration
1818
from postgresqleu.confreg.util import send_conference_mail, get_conference_or_404, render_conference_response
19+
from postgresqleu.confreg.util import get_conference_scanner_permissions
1920

2021
from .views import _get_sponsor_and_admin, get_authenticated_conference
2122
from .models import SponsorScanner, ScannedAttendee
@@ -304,6 +305,7 @@ def scanning_api(request, scannertoken, what):
304305
'active': True, # As soon as badges are available they can be scanned.
305306
'admin': False, # There are no "admins" in badge scanning
306307
'activestatus': '',
308+
'permissions': get_conference_scanner_permissions(scanner.scanner.attendee),
307309
}), content_type='application/json')
308310
elif what == 'lookup':
309311
token = request.GET.get('lookup')

0 commit comments

Comments
 (0)