75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
from sanic.response import html, redirect, text
|
|
from sanic import Blueprint, exceptions, response
|
|
from random import choice
|
|
from ext import *
|
|
from config import headers, base_url_event
|
|
from PIL import Image
|
|
from os.path import isfile
|
|
from os import unlink
|
|
from io import BytesIO
|
|
from hashlib import sha224
|
|
from time import time
|
|
from urllib.parse import unquote
|
|
import json
|
|
from metrics import *
|
|
|
|
bp = Blueprint("checkin", url_prefix="/checkin")
|
|
|
|
@bp.get("/")
|
|
async def redirect_start(request):
|
|
return response.redirect("start")
|
|
|
|
@bp.get("/start")
|
|
async def start_checkin(request):
|
|
orders = request.app.ctx.om.cache.values()
|
|
tpl = request.app.ctx.tpl.get_template('checkin_1.html')
|
|
return html(tpl.render(orders=orders))
|
|
|
|
@bp.get("/order")
|
|
async def show_order(request):
|
|
|
|
max_id = 0
|
|
for o in request.app.ctx.om.cache.values():
|
|
if not o.badge_id: continue
|
|
max_id = max(o.badge_id, max_id)
|
|
|
|
order = await request.app.ctx.om.get_order(code=request.args.get('order'))
|
|
|
|
if order.room_id == order.code:
|
|
room_owner = order
|
|
else:
|
|
room_owner = await request.app.ctx.om.get_order(code=order.room_id)
|
|
|
|
tpl = request.app.ctx.tpl.get_template('checkin_2.html')
|
|
return html(tpl.render(order=order, room_owner=room_owner, max_id=max_id))
|
|
|
|
@bp.post("/checkin")
|
|
async def do_checkin(request):
|
|
|
|
# Update room info
|
|
order = await request.app.ctx.om.get_order(code=request.form.get('code'))
|
|
if order.room_id == order.code:
|
|
room_owner = order
|
|
await order.edit_answer('actual_room', request.form.get('actual_room'))
|
|
else:
|
|
room_owner = await request.app.ctx.om.get_order(code=order.room_id)
|
|
await room_owner.edit_answer('actual_room', request.form.get('actual_room'))
|
|
await room_owner.send_answers()
|
|
|
|
roommates = [await request.app.ctx.om.get_order(code=code, cached=True) for code in room_owner.room_members]
|
|
|
|
# Update nfc and badge id
|
|
await order.edit_answer('nfc_id', request.form.get('nfc_id'))
|
|
await order.edit_answer('badge_id', request.form.get('badge_id'))
|
|
await order.send_answers()
|
|
|
|
if not order.checked_in:
|
|
async with httpx.AsyncClient() as client:
|
|
incPretixWrite()
|
|
res = await client.post(base_url_event.replace(f'events/{EVENT_NAME}/', 'checkinrpc/redeem/'), json={'secret': order.barcode, 'source_type': 'barcode', 'type': 'entry', 'lists': [3,]}, headers=headers)
|
|
|
|
tpl = request.app.ctx.tpl.get_template('checkin_3.html')
|
|
return html(tpl.render(order=order, room_owner=room_owner, roommates=roommates))
|
|
|
|
|