## status: str ## stream_status: Optional[Status] ## event: EventType ## messages: List[Dict] <%! from typing import List from ooresults.otypes.result_type import ResultStatus from ooresults.utils.globals import MAP_STATUS from ooresults.utils.globals import minutes_seconds from ooresults.utils.globals import STREAMING_STATUS from ooresults.utils.globals import streaming_status_ok from ooresults.utils.rental_cards import format_card def format(time: int) -> str: if time is not None and time > 0: return minutes_seconds(time) + " min" else: return "" def color(status: ResultStatus) -> str: if status == ResultStatus.OK: return "#70ff70" # green elif status in (ResultStatus.MISSING_PUNCH, ResultStatus.DID_NOT_FINISH, ResultStatus.OVER_TIME): return "#ff7070" # red else: return "#ffff00" # yellow def missing(status: ResultStatus, missing_controls: List[str]) -> str: if status == ResultStatus.OK: if missing_controls: if len(missing_controls) == 1: return "1 control" else: return str(len(missing_controls)) + " controls" else: if missing_controls: if "FINISH" in missing_controls: return "Finish time" elif "START" in missing_controls: return "Start time" elif len(missing_controls) == 1: return missing_controls[0] elif len(missing_controls) == 2: return missing_controls[0] + ", " + missing_controls[1] elif len(missing_controls) == 3: return missing_controls[0] + ", " + missing_controls[1] + ", " + missing_controls[2] elif len(missing_controls) >= 4: return str(len(missing_controls)) + " controls" %>
Event name: ${event.name if event else ""}
Event date: ${event.date.isoformat() if event and event.date else ""}

% for result in messages: % if event and event.id == result.get("eventId", "-2"): % if result.get("status") in (ResultStatus.OK, ResultStatus.MISSING_PUNCH, ResultStatus.DID_NOT_FINISH, ResultStatus.OVER_TIME): % else: % endif % endif % endfor
Read Control card Status Time Name Class Missing controls
${result.get("entryTime", "")} ${format_card(result.get("controlCard"))} ${MAP_STATUS[result.get("status")]} ${format(result.get("time", 0))}${result.get("lastName", "")}, ${result.get("firstName", "")} ${result.get("class", "")} ${missing(result.get("status"), result.get("missingControls", []))}${result.get("error", "")}

% if status is None or status == "readerOffline": % elif status in ["readerConnected", "cardRead", "cardRemoved"]: % elif status == "readerDisconnected": % elif status == "cardInserted": % endif % if stream_status is not None: % if streaming_status_ok(stream_status): % else: % endif % endif
Card reader status: Offline
Card reader status: Connected
Card reader status: Disconnected
Card reader status: Reading card
Stream status: ${STREAMING_STATUS[stream_status]}
Stream status: ${STREAMING_STATUS[stream_status]}