begin correct sorting of exams/collection

This commit is contained in:
Ross
2024-02-18 21:56:19 +00:00
parent 4721122e4d
commit 7c9192986a
6 changed files with 29 additions and 9 deletions
+1 -1
View File
@@ -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)
+8
View File
@@ -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)
+3 -3
View File
@@ -10,9 +10,9 @@
</div>
<h3>Cases</h3>
<ol id="full-question-list" class="sortable">
{% for case in cases %}
<li data-question_pk={{case.pk}}><a href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=forloop.counter0 %}">Case {{forloop.counter}}</a>
: {{case.title}}
{% for casedetail in casesdetails %}
<li data-question_pk={{case.pk}}><a title="sort_order: {{casedetail.sort_order}}" href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=forloop.counter0 %}">Case {{forloop.counter}}</a>
: {{casedetail.case.title}}
</li>
{% endfor %}
+7 -2
View File
@@ -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},
)
+9 -2
View File
@@ -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)
+1 -1
View File
@@ -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)