mirror of
https://github.com/Tria-plc/emaui.git
synced 2026-08-28 14:50:58 +00:00
The registrations table mirrored the server's old attendance deny-list — ABSENT/WITHDRAWN/DISQUALIFIED — so the default REGISTERED fell through and "Take exam" appeared before any invigilator had confirmed the candidate was there. It is an allow-list now, PRESENT and LATE only, matching ExamAttemptService.MAY_SIT. A blocked candidate gets a reason rather than an empty cell: "Awaiting attendance" with a tooltip while nobody has called the register, "Not sitting" once attendance was taken and they are not. useExamAttempt does the same for the direct-link path, and translates attendance_not_confirmed / candidate_not_present instead of showing a raw error key on a Start button that cannot work. The server refuses either way — this only makes the refusal legible. ScheduleExamModal no longer promises an admission number: scheduling makes a sitting available, and the candidate registers for it themselves.