diff --git a/TODO.md b/TODO.md index af6cbac0..13cdd85e 100644 --- a/TODO.md +++ b/TODO.md @@ -16,6 +16,8 @@ - Sort out conditions / signs / findings etc - Search by image id / name / etc - Add markers directly to exam +- Periodic posting of answers from RTS +- Exam status # Future diff --git a/anatomy/api.py b/anatomy/api.py index afee2fda..b5aab755 100644 --- a/anatomy/api.py +++ b/anatomy/api.py @@ -81,11 +81,34 @@ def user_exams(request): @router.get('/exam/{exam_id}/user_status', response=List[ExamUserStatusSchema]) -def get_exam_user_status(request, exam_id: int, latest:bool=True): +def get_exam_user_status_all(request, exam_id: int, latest:bool=True): exam = get_object_or_404(Exam, id=exam_id) if not exam.check_user_can_edit(request.user): raise HttpError(HTTPStatus.UNAUTHORIZED,"Exam author required") - return exam.exam_user_status.all() + results = exam.exam_user_status.all() + if latest: + cid_users = exam.exam_user_status.filter(cid_user__isnull=False).order_by("cid_user", "-datetime").distinct("cid_user") + user_users = exam.exam_user_status.filter(user_user__isnull=False).order_by("user_user", "-datetime").distinct("user_user") - \ No newline at end of file + results = list(cid_users) + results.extend(list(user_users)) + + return results + + +@router.get('/exam/{exam_id}/user_status/{cid}/cid', response=List[ExamUserStatusSchema]) +def get_exam_user_status_cid_user(request, exam_id: int, cid: int): + exam = get_object_or_404(Exam, id=exam_id) + if not exam.check_user_can_edit(request.user): + raise HttpError(HTTPStatus.UNAUTHORIZED,"Exam author required") + + return exam.exam_user_status.filter(cid_user=cid) + +@router.get('/exam/{exam_id}/user_status/{user_id}/user', response=List[ExamUserStatusSchema]) +def get_exam_user_status_user_user(request, exam_id: int, user_id: int): + exam = get_object_or_404(Exam, id=exam_id) + if not exam.check_user_can_edit(request.user): + raise HttpError(HTTPStatus.UNAUTHORIZED,"Exam author required") + + return exam.exam_user_status.filter(user_user=user_id) \ No newline at end of file diff --git a/generic/views.py b/generic/views.py index 37c436b9..c81fa746 100644 --- a/generic/views.py +++ b/generic/views.py @@ -1627,15 +1627,22 @@ class ExamViews(View, LoginRequiredMixin): datetime.fromtimestamp(float(request.POST.get("start_time"))) ) + # We currently store the submission time in two different places if request.POST.get("cid").startswith("u-"): cid_user_exam = exam.get_or_create_cid_user_exam( user_user=request.user, start_time=t ) + exam.exam_user_status.create( + cid_user=None, user_user=request.user, status="submitted", extra="manual submission" + ) else: c = CidUser.objects.filter(cid=request.POST.get("cid")).first() cid_user_exam = exam.get_or_create_cid_user_exam( cid_user=c, start_time=t ) + exam.exam_user_status.create( + cid_user=c, user_user=None, status="submitted", extra="manual submission" + ) cid_user_exam.end_time = timezone.now() cid_user_exam.save() @@ -1671,11 +1678,11 @@ class ExamViews(View, LoginRequiredMixin): # Log exam access if exam.exam_mode: - user = request.user if cid is not None: user = None cid_user = CidUser.objects.get(cid=cid) else: + user = request.user cid_user = None exam.exam_user_status.create( cid_user=cid_user, user_user=user, status="downloaded"