From 11f3836e539880aac00082301b2c80475e903621 Mon Sep 17 00:00:00 2001 From: Ross Date: Fri, 8 Apr 2022 23:14:32 +0100 Subject: [PATCH] . --- atlas/models.py | 2 +- .../templates/atlas/collection_case_view.html | 48 ++----- .../atlas/collection_case_view_take.html | 104 ++++++++++++++ atlas/views.py | 128 +++++++++++------- 4 files changed, 192 insertions(+), 90 deletions(-) create mode 100644 atlas/templates/atlas/collection_case_view_take.html diff --git a/atlas/models.py b/atlas/models.py index 311a061c..40d4b766 100644 --- a/atlas/models.py +++ b/atlas/models.py @@ -598,7 +598,7 @@ class CaseCollection(models.Model): cases = models.ManyToManyField(Case, through="CaseDetail") publish_results = models.BooleanField( - help_text="If a collection should published", default=True + help_text="If a collection should published", default=False ) active = models.BooleanField( diff --git a/atlas/templates/atlas/collection_case_view.html b/atlas/templates/atlas/collection_case_view.html index 1f9f58cc..2ef86e7e 100644 --- a/atlas/templates/atlas/collection_case_view.html +++ b/atlas/templates/atlas/collection_case_view.html @@ -59,45 +59,17 @@ {% endif %} - {% if take %} -
{% csrf_token %} -
- {% if collection.publish_results %}
{% endif %} - {{form}} - {% if collection.publish_results %}
{% endif %} -
- {% if previous > -1 %} - - {% endif %} - {% if next %} - - {% else %} - {% if not exam.publish_results %} - - {% endif %} - {% endif %} +
+ {% if previous %} + Previous + {% endif %} + {% if next %} + Next + {% endif %} +
+
+ Return to collection - {% if collection.publish_results %} - Answer score: {{answer.score}}
- Answer feedback: {{answer.feedback|safe}} - {% endif %} -
- - -
- {% else %} -
- {% if previous %} - Previous - {% endif %} - {% if next %} - Next - {% endif %} -
-
- Return to collection - - {% endif %} {% endblock %} {% block js %} diff --git a/atlas/templates/atlas/collection_case_view_take.html b/atlas/templates/atlas/collection_case_view_take.html new file mode 100644 index 00000000..bf054d2a --- /dev/null +++ b/atlas/templates/atlas/collection_case_view_take.html @@ -0,0 +1,104 @@ +{% extends 'atlas/base.html' %} + +{% block content %} +

Case {{case_number|add:1}} + + {% if collection.show_title %} + : {{case.title}} + {% endif %} + +

+ + {% if collection.show_description and case.description%} +
+ Description: {{case.description}} +
+ {% endif %} + {% if collection.show_history and case.history%} +
+ History: {{case.history}} +
+ {% endif %} + +
+ {% for series in series_list %} + + + Series {{ forloop.counter }}: + + {{series.get_block}} + + + + {% endfor %} +
+ +
+
+
+ +
+ {% if collection.show_discussion and case.discussion%} +
+ + Discussion: + +
+ {{case.discussion}} +
+
+ {% endif %} + {% if collection.show_report and case.report%} +
+ + Report: + +
+ {{case.report}} +
+
+ {% endif %} + +
{% csrf_token %} +
+ {% if collection.publish_results %}
{% endif %} + {{form}} + {% if collection.publish_results %}
{% endif %} +
+ {% if previous > -1 %} + + {% endif %} + {% if next %} + + {% else %} + {% if not exam.publish_results %} + + {% endif %} + {% endif %} + + {% if collection.publish_results %} + Answer score: {{answer.score}}
+ Answer feedback: {{answer.feedback|safe}} + {% endif %} +
+ + +
+ +{% endblock %} +{% block js %} + + +{% endblock js %} diff --git a/atlas/views.py b/atlas/views.py index fd56d8e2..2b671085 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -1275,13 +1275,6 @@ def collection_take_overview(request, pk, cid, passcode): def collection_case_view_take(request, pk, case_number, cid, passcode): - return collection_case_view_base(request, pk, case_number, True, cid, passcode) - -@user_is_collection_author_or_atlas_editor -def collection_case_view(request, pk, case_number, take=False, cid=None, passcode=None): - return collection_case_view_base(request, pk, case_number, take=False, cid=None, passcode=None) - -def collection_case_view_base(request, pk, case_number, take=False, cid=None, passcode=None): collection = get_object_or_404(CaseCollection, pk=pk) form = None @@ -1291,58 +1284,57 @@ def collection_case_view_base(request, pk, case_number, take=False, cid=None, pa if not collection.active: raise Http404("Exam not found") - if take and not collection.check_cid_user(cid, passcode, request): + if not collection.check_cid_user(cid, passcode, request): raise Http404("Error accessing exam") cases = collection.cases.all().order_by("casedetail__sort_order").prefetch_related() case = cases[case_number] - if take: - c = CidUser.objects.filter(cid=cid).first() - cid_user_exam = collection.get_or_create_cid_user_exam(cid_user=c) - case_detail = CaseDetail.objects.get(case=case, collection=collection) - answer = case_detail.cidreportanswer_set.filter(cid=cid).first() + c = CidUser.objects.filter(cid=cid).first() + cid_user_exam = collection.get_or_create_cid_user_exam(cid_user=c) + case_detail = CaseDetail.objects.get(case=case, collection=collection) + answer = case_detail.cidreportanswer_set.filter(cid=cid).first() - if request.method == "POST": - if not collection.publish_results: - if answer: - form = CidReportAnswerForm(request.POST, instance=answer) - else: - form = CidReportAnswerForm(request.POST) - if form.is_valid(): - answer = form.save(commit=False) - answer.cid = cid - answer.question = case_detail - # answer.published_date = timezone.now() - answer.save() + if request.method == "POST": + if not collection.publish_results: + if answer: + form = CidReportAnswerForm(request.POST, instance=answer) + else: + form = CidReportAnswerForm(request.POST) + if form.is_valid(): + answer = form.save(commit=False) + answer.cid = cid + answer.question = case_detail + # answer.published_date = timezone.now() + answer.save() - cid_user_exam.end_time = timezone.now() - cid_user_exam.save() + cid_user_exam.end_time = timezone.now() + cid_user_exam.save() - kwargs = {"pk": pk, "cid": cid, "passcode": passcode} + kwargs = {"pk": pk, "cid": cid, "passcode": passcode} - if "next" in request.POST: - return redirect( - "atlas:collection_case_view_take", - case_number=case_number + 1, - **kwargs - ) - elif "previous" in request.POST: - return redirect( - "atlas:collection_case_view_take", - case_number=case_number - 1, - **kwargs - ) - elif "finish" in request.POST: - return redirect("atlas:collection_take_overview", **kwargs) - elif "goto" in request.POST: - return redirect( - "atlas:collection_case_view_take", - case_number=int(request.POST.get("goto")), - **kwargs - ) - else: - form = CidReportAnswerForm(instance=answer) + if "next" in request.POST: + return redirect( + "atlas:collection_case_view_take", + case_number=case_number + 1, + **kwargs + ) + elif "previous" in request.POST: + return redirect( + "atlas:collection_case_view_take", + case_number=case_number - 1, + **kwargs + ) + elif "finish" in request.POST: + return redirect("atlas:collection_take_overview", **kwargs) + elif "goto" in request.POST: + return redirect( + "atlas:collection_case_view_take", + case_number=int(request.POST.get("goto")), + **kwargs + ) + else: + form = CidReportAnswerForm(instance=answer) series_list = case.series.all().prefetch_related("images", "examination", "plane") @@ -1360,9 +1352,43 @@ def collection_case_view_base(request, pk, case_number, take=False, cid=None, pa "case_number": case_number, "previous": previous, "next": next, - "take": take, "cid": cid, "passcode": passcode, "answer": answer, }, ) + +@user_is_collection_author_or_atlas_editor +def collection_case_view(request, pk, case_number): + collection = get_object_or_404(CaseCollection, pk=pk) + + form = None + answer = None + + if collection.collection_type != collection.COLLECTION_TYPE_CHOICES.REVIEW: + if not collection.active: + raise Http404("Exam not found") + + + cases = collection.cases.all().order_by("casedetail__sort_order").prefetch_related() + case = cases[case_number] + + series_list = case.series.all().prefetch_related("images", "examination", "plane") + + previous = case_number > 0 + next = case_number < (len(cases) - 1) + + return render( + request, + "atlas/collection_case_view.html", + { + "form": form, + "collection": collection, + "case": case, + "series_list": series_list, + "case_number": case_number, + "previous": previous, + "next": next, + "answer": answer, + }, + )