fix case rodering

This commit is contained in:
Ross
2023-07-31 12:02:23 +01:00
parent fdc0de29d3
commit b36fa370f1
2 changed files with 24 additions and 14 deletions
+17
View File
@@ -1,6 +1,7 @@
import json
import os
import pathlib
from typing import Tuple
from django.http import Http404, HttpRequest
from rad.settings import REMOTE_URL
@@ -521,6 +522,22 @@ class CaseCollection(ExamCollectionGenericBase):
return False
def get_case_by_index(self, case_index:int, case_count=False) -> Case | Tuple[Case, int]:
# Seems to be a bug when case_number is 0 or 1 the same (first) object gets returned
# forces a list fixes (but is likely inefficient)
cases = list(self.cases.all().order_by("casedetail__sort_order").prefetch_related())
try:
case = cases[case_index]
except IndexError: # Catch an invalid case_number
s = f"Invalid case number: {case_index}"
raise Http404(s)
if case_count:
return case, len(cases)
else:
return case
class CaseDetail(models.Model):
case = models.ForeignKey(Case, on_delete=models.CASCADE)
+7 -14
View File
@@ -1177,11 +1177,10 @@ def collection_mark_question(request, pk, case_number):
if collection.collection_type == "REV":
raise Http404("Collection in review mode")
cases = collection.cases.all().order_by("casedetail__sort_order").prefetch_related()
case = cases[case_number]
case, case_count = collection.get_case_by_index(case_number, case_count=True)
previous = case_number > 0
next = case_number < (len(cases) - 1)
next = case_number < (case_count - 1)
case_detail = CaseDetail.objects.filter(case=case, collection=collection)
@@ -1378,8 +1377,7 @@ def collection_case_view_take(
collection.check_user_can_take(cid, passcode, request)
cases = collection.cases.all().order_by("casedetail__sort_order").prefetch_related()
case = cases[case_number]
case, case_count = collection.get_case_by_index(case_number, case_count=True)
cid_user_exam = collection.get_or_create_cid_user_exam(
cid=cid, user_user=request.user
@@ -1453,7 +1451,7 @@ def collection_case_view_take(
print("case_no")
previous = case_number > 0
next = case_number < (len(cases) - 1)
next = case_number < (case_count - 1)
# Set what details a user is / is not able to view when taking the case
# this can be configured via the collection edit menu
@@ -1521,18 +1519,13 @@ def collection_case_view(request, pk, case_number):
form = None
answer = None
cases = collection.cases.all().order_by("casedetail__sort_order").prefetch_related()
try:
case = cases[case_number]
except IndexError: # Catch an invalid case_number
s = f"Invalid case number: {case_number}"
raise Http404(s)
case, case_count = collection.get_case_by_index(case_number, case_count=True)
series_list = case.series.all().prefetch_related("images", "examination", "plane")
previous = case_number > 0
next = case_number < (len(cases) - 1)
next = case_number < (case_count - 1)
return render(
request,
@@ -1540,7 +1533,7 @@ def collection_case_view(request, pk, case_number):
{
"form": form,
"collection": collection,
"collection_length": len(cases),
"collection_length": case_count,
"case": case,
"series_list": series_list,
"case_number": case_number,