Add mark2 overview page and update navigation for improved marking workflow
This commit is contained in:
@@ -15,6 +15,7 @@ from django.views.generic.edit import CreateView, UpdateView, DeleteView
|
||||
from django.views.generic import ListView
|
||||
|
||||
from django.db.models.functions import Lower
|
||||
from django.db.models import Prefetch
|
||||
|
||||
from django.core.cache import cache
|
||||
|
||||
@@ -780,6 +781,65 @@ def mark2(request, exam_pk, sk, unmarked_exam_answers_only=True, review=False):
|
||||
return render(request, "anatomy/mark2.html", context)
|
||||
|
||||
|
||||
@login_required
|
||||
def mark2_overview(request, pk):
|
||||
"""Overview page for mark2 workflow: lists questions and unmarked counts and links into mark2."""
|
||||
exam = get_object_or_404(Exam, pk=pk)
|
||||
|
||||
if not exam.exam_mode:
|
||||
raise Http404("Packet not in exam mode")
|
||||
|
||||
# Only allow authors or designated markers
|
||||
if request.user not in exam.author.all():
|
||||
if not GenericExamViews.check_user_marker_access(request.user, pk):
|
||||
raise PermissionDenied
|
||||
|
||||
# For anatomy prefer prefetch similar to generic.mark_overview
|
||||
questions = (
|
||||
exam.exam_questions.select_related(
|
||||
"modality",
|
||||
"structure",
|
||||
"body_part",
|
||||
"region",
|
||||
"examination",
|
||||
"question_type",
|
||||
)
|
||||
.all()
|
||||
.prefetch_related(
|
||||
Prefetch(
|
||||
"answers",
|
||||
queryset=Answer.objects.filter(proposed=False, status=Answer.MarkOptions.CORRECT),
|
||||
to_attr="prefetched_primary_answer",
|
||||
),
|
||||
)
|
||||
.order_by("examquestiondetail__sort_order")
|
||||
)
|
||||
|
||||
# Handle double marking which needs per-marker counts
|
||||
try:
|
||||
if exam.double_mark:
|
||||
question_unmarked_map = []
|
||||
for q in questions:
|
||||
question_unmarked_map.append(
|
||||
(
|
||||
q,
|
||||
int(q.get_unmarked_user_answer_count(exam_pk=exam.pk)),
|
||||
int(q.get_unmarked_user_answer_count(exam_pk=exam.pk, marker=request.user)),
|
||||
)
|
||||
)
|
||||
|
||||
return render(request, "anatomy/mark2_overview.html", {"exam": exam, "question_unmarked_map": question_unmarked_map})
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
question_unmarked_map = []
|
||||
for q in questions:
|
||||
count = int(q.get_unmarked_user_answer_count(exam_pk=exam.pk))
|
||||
question_unmarked_map.append((q, count, count))
|
||||
|
||||
return render(request, "anatomy/mark2_overview.html", {"exam": exam, "question_unmarked_map": question_unmarked_map})
|
||||
|
||||
|
||||
@login_required
|
||||
def mark2_toggle_answer(request):
|
||||
"""Endpoint to toggle/set a single answer mark quickly.
|
||||
|
||||
Reference in New Issue
Block a user