fix case rodering
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
from django.http import Http404, HttpRequest
|
from django.http import Http404, HttpRequest
|
||||||
from rad.settings import REMOTE_URL
|
from rad.settings import REMOTE_URL
|
||||||
@@ -521,6 +522,22 @@ class CaseCollection(ExamCollectionGenericBase):
|
|||||||
|
|
||||||
return False
|
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):
|
class CaseDetail(models.Model):
|
||||||
case = models.ForeignKey(Case, on_delete=models.CASCADE)
|
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":
|
if collection.collection_type == "REV":
|
||||||
raise Http404("Collection in review mode")
|
raise Http404("Collection in review mode")
|
||||||
|
|
||||||
cases = collection.cases.all().order_by("casedetail__sort_order").prefetch_related()
|
case, case_count = collection.get_case_by_index(case_number, case_count=True)
|
||||||
case = cases[case_number]
|
|
||||||
|
|
||||||
previous = case_number > 0
|
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)
|
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)
|
collection.check_user_can_take(cid, passcode, request)
|
||||||
|
|
||||||
cases = collection.cases.all().order_by("casedetail__sort_order").prefetch_related()
|
case, case_count = collection.get_case_by_index(case_number, case_count=True)
|
||||||
case = cases[case_number]
|
|
||||||
|
|
||||||
cid_user_exam = collection.get_or_create_cid_user_exam(
|
cid_user_exam = collection.get_or_create_cid_user_exam(
|
||||||
cid=cid, user_user=request.user
|
cid=cid, user_user=request.user
|
||||||
@@ -1453,7 +1451,7 @@ def collection_case_view_take(
|
|||||||
|
|
||||||
print("case_no")
|
print("case_no")
|
||||||
previous = case_number > 0
|
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
|
# Set what details a user is / is not able to view when taking the case
|
||||||
# this can be configured via the collection edit menu
|
# this can be configured via the collection edit menu
|
||||||
@@ -1521,18 +1519,13 @@ def collection_case_view(request, pk, case_number):
|
|||||||
form = None
|
form = None
|
||||||
answer = None
|
answer = None
|
||||||
|
|
||||||
cases = collection.cases.all().order_by("casedetail__sort_order").prefetch_related()
|
|
||||||
|
|
||||||
try:
|
case, case_count = collection.get_case_by_index(case_number, case_count=True)
|
||||||
case = cases[case_number]
|
|
||||||
except IndexError: # Catch an invalid case_number
|
|
||||||
s = f"Invalid case number: {case_number}"
|
|
||||||
raise Http404(s)
|
|
||||||
|
|
||||||
series_list = case.series.all().prefetch_related("images", "examination", "plane")
|
series_list = case.series.all().prefetch_related("images", "examination", "plane")
|
||||||
|
|
||||||
previous = case_number > 0
|
previous = case_number > 0
|
||||||
next = case_number < (len(cases) - 1)
|
next = case_number < (case_count - 1)
|
||||||
|
|
||||||
return render(
|
return render(
|
||||||
request,
|
request,
|
||||||
@@ -1540,7 +1533,7 @@ def collection_case_view(request, pk, case_number):
|
|||||||
{
|
{
|
||||||
"form": form,
|
"form": form,
|
||||||
"collection": collection,
|
"collection": collection,
|
||||||
"collection_length": len(cases),
|
"collection_length": case_count,
|
||||||
"case": case,
|
"case": case,
|
||||||
"series_list": series_list,
|
"series_list": series_list,
|
||||||
"case_number": case_number,
|
"case_number": case_number,
|
||||||
|
|||||||
Reference in New Issue
Block a user