This commit is contained in:
Ross
2022-04-08 23:14:32 +01:00
parent 7183cbbc09
commit 11f3836e53
4 changed files with 192 additions and 90 deletions
+77 -51
View File
@@ -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,
},
)