fix case rodering
This commit is contained in:
@@ -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
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user