diff --git a/anatomy/models.py b/anatomy/models.py
index c6d157ab..3e80b5fd 100644
--- a/anatomy/models.py
+++ b/anatomy/models.py
@@ -411,7 +411,7 @@ class Exam(ExamBase):
examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="anatomy_exams")
def get_exam_json(self, based=True):
- questions = self.exam_questions.all()
+ questions = self.get_questions()
exam_questions = defaultdict(dict)
diff --git a/atlas/models.py b/atlas/models.py
index 4f83e0c4..50aff24b 100644
--- a/atlas/models.py
+++ b/atlas/models.py
@@ -426,6 +426,7 @@ class Case(models.Model, AuthorMixin):
return json.dumps(self.get_viva_details())
+
def extract_image_dicom_json_from_ds(ds, url, image_index):
to_keep = [
"Columns",
@@ -866,6 +867,13 @@ class CaseCollection(ExamOrCollectionGenericBase):
}
+ def order_cases(self):
+ """Modifies the casedetail sort_order to sequentially order the cases"""
+ for n, c in enumerate(self.casedetail_set.all().order_by("sort_order")):
+ c.sort_order = n
+ c.save()
+
+
class SeriesDetail(models.Model):
case = models.ForeignKey(Case, on_delete=models.CASCADE)
series = models.ForeignKey(Series, on_delete=models.CASCADE)
diff --git a/atlas/templates/atlas/collection_detail.html b/atlas/templates/atlas/collection_detail.html
index 2dbc3942..8882deec 100644
--- a/atlas/templates/atlas/collection_detail.html
+++ b/atlas/templates/atlas/collection_detail.html
@@ -10,9 +10,9 @@
Cases
- {% for case in cases %}
- - Case {{forloop.counter}}
- : {{case.title}}
+ {% for casedetail in casesdetails %}
+
- Case {{forloop.counter}}
+ : {{casedetail.case.title}}
{% endfor %}
diff --git a/atlas/views.py b/atlas/views.py
index f84b52f8..f37c0283 100755
--- a/atlas/views.py
+++ b/atlas/views.py
@@ -387,8 +387,12 @@ def add_case_to_collection(request, collection_id):
if request.method == "POST":
case = get_object_or_404(Case, pk=request.POST["case"])
+
+ if case in collection.cases.all():
+ return HttpResponse("Case already in collection")
print(case)
collection.cases.add(case)
+ collection.order_cases()
return HttpResponse("Case added to collection")
@@ -1380,12 +1384,13 @@ def collection_viva_series(request, pk, series_id):
def collection_detail(request, pk):
collection = get_object_or_404(CaseCollection, pk=pk)
- cases = collection.cases.all().order_by("casedetail__sort_order")
+ #cases = collection.cases.all().order_by("casedetail__sort_order")
+ casedetails = CaseDetail.objects.filter(collection=collection).order_by("sort_order")
return render(
request,
"atlas/collection_detail.html",
- {"collection": collection, "cases": cases, "can_edit": True},
+ {"collection": collection, "casesdetails": casedetails, "can_edit": True},
)
diff --git a/generic/models.py b/generic/models.py
index 94b2ee53..ccb37a47 100644
--- a/generic/models.py
+++ b/generic/models.py
@@ -828,8 +828,15 @@ class ExamBase(ExamOrCollectionGenericBase):
super().save(*args, **kwargs)
def get_questions(self):
+ """Returns a list of questions in the exam in the correct order"""
return self.exam_questions.all().order_by("examquestiondetail__sort_order")
+ def order_questions(self):
+ """Modifies the examquestiondetail sort_order to sequentially order the cases"""
+ for n, c in enumerate(self.examquestiondetail_set.all().order_by("sort_order")):
+ c.sort_order = n
+ c.save()
+
def get_exam_stats(self, name=True):
if self.stats_candidates < int(4):
return f"- Candidates: {int(self.stats_candidates)} (too few to generate stats)"
@@ -889,11 +896,11 @@ class ExamBase(ExamOrCollectionGenericBase):
return time_limit.strip()
def get_question_index(self, question):
- return list(self.exam_questions.all()).index(question)
+ return list(self.get_questions()).index(question)
def get_question_by_index(self, index: int):
# There must be a better way to do this
- return list(self.exam_questions.all())[index]
+ return list(self.get_questions)[index]
def get_cid_user_score(self, cid_user):
c = "c/" + str(cid_user)
diff --git a/rapids/models.py b/rapids/models.py
index 7c404c9b..3117c7d4 100644
--- a/rapids/models.py
+++ b/rapids/models.py
@@ -667,7 +667,7 @@ class Exam(ExamBase):
return len(normal)
def get_exam_json(self, based=True):
- questions = self.exam_questions.all()
+ questions = self.get_questions()
exam_questions = defaultdict(dict)