generated from bisco/codex-bootstrap
31 lines
912 B
Python
31 lines
912 B
Python
import base64
|
|
from io import BytesIO
|
|
|
|
import qrcode
|
|
from django.conf import settings
|
|
|
|
from .models import Reservation
|
|
|
|
|
|
CHECK_IN_PREVIEW_PATH = "/api/check-ins/preview/"
|
|
|
|
|
|
def build_check_in_preview_url(raw_check_in_token):
|
|
return f"{settings.SITE_BASE_URL}{CHECK_IN_PREVIEW_PATH}?token={raw_check_in_token}"
|
|
|
|
|
|
def generate_check_in_qr_png(raw_check_in_token):
|
|
qr_image = qrcode.make(build_check_in_preview_url(raw_check_in_token))
|
|
buffer = BytesIO()
|
|
qr_image.save(buffer, format="PNG")
|
|
return buffer.getvalue()
|
|
|
|
|
|
def generate_check_in_qr_base64(*, reservation, raw_check_in_token):
|
|
if reservation.status != Reservation.Status.CONFIRMED:
|
|
raise ValueError("QR codes are available only for confirmed reservations.")
|
|
|
|
png_bytes = generate_check_in_qr_png(raw_check_in_token)
|
|
encoded = base64.b64encode(png_bytes).decode("ascii")
|
|
return f"data:image/png;base64,{encoded}"
|