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 %} -
  1. Case {{forloop.counter}} - : {{case.title}} + {% for casedetail in casesdetails %} +
  2. Case {{forloop.counter}} + : {{casedetail.case.title}}
  3. {% 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)