add basic (user) history for collections
This commit is contained in:
+80
-17
@@ -246,6 +246,7 @@ def question_schema_detail(request, pk: int):
|
||||
{"question_schema": question_schema, "example_form": example_form},
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
# @user_is_atlas_editor
|
||||
def question_schema_schemas(request):
|
||||
@@ -259,6 +260,7 @@ def question_schema_schemas(request):
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
# @user_is_atlas_editor
|
||||
def condition_detail(request, pk):
|
||||
@@ -857,14 +859,17 @@ class QuestionSchemaCreate(LoginRequiredMixin, CreateView):
|
||||
model = QuestionSchema
|
||||
form_class = QuestionSchemaForm
|
||||
|
||||
|
||||
class QuestionSchemaUpdate(LoginRequiredMixin, UpdateView):
|
||||
model = QuestionSchema
|
||||
form_class = QuestionSchemaForm
|
||||
|
||||
|
||||
class QuestionSchemaDelete(AuthorOrCheckerRequiredMixin, DeleteView):
|
||||
model = QuestionSchema
|
||||
template_name = "confirm_delete.html"
|
||||
|
||||
|
||||
class FindingUpdate(RevisionMixin, LoginRequiredMixin, UpdateView):
|
||||
model = Finding
|
||||
form_class = FindingForm
|
||||
@@ -1272,7 +1277,6 @@ def series_order_dicom(request, pk):
|
||||
@login_required
|
||||
def image_diff(request):
|
||||
if request.htmx:
|
||||
|
||||
image_ids = request.POST.getlist("image-id")
|
||||
|
||||
if len(image_ids) == 2:
|
||||
@@ -1596,6 +1600,58 @@ def collection_detail(request, pk):
|
||||
)
|
||||
|
||||
|
||||
@user_is_collection_author_or_atlas_editor
|
||||
def collection_history(request, exam_id: int):
|
||||
"""An overview page that shows who has attempted / finised the collection"""
|
||||
collection = get_object_or_404(CaseCollection, pk=exam_id)
|
||||
|
||||
casedetails = CaseDetail.objects.filter(collection=collection).order_by(
|
||||
"sort_order"
|
||||
)
|
||||
|
||||
userexams = collection.get_cid_user_exams()
|
||||
|
||||
print(userexams)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"atlas/collection_history.html",
|
||||
{
|
||||
"collection": collection,
|
||||
"casesdetails": casedetails,
|
||||
"can_edit": True,
|
||||
"userexams": userexams,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@user_is_collection_author_or_atlas_editor
|
||||
def collection_history_user(request, exam_id: int, user_pk: int):
|
||||
collection = get_object_or_404(CaseCollection, pk=exam_id)
|
||||
|
||||
user = get_object_or_404(User, pk=user_pk)
|
||||
|
||||
casedetails = CaseDetail.objects.filter(
|
||||
collection=collection,
|
||||
).order_by("sort_order")
|
||||
|
||||
print(user)
|
||||
print(casedetails)
|
||||
|
||||
user_answers = [(casedetail, casedetail.get_user_answers(user)) for casedetail in casedetails]
|
||||
|
||||
return render(
|
||||
request,
|
||||
"atlas/collection_history_user.html",
|
||||
{
|
||||
"collection": collection,
|
||||
"user": user,
|
||||
"casedetails": casedetails,
|
||||
"user_answers": user_answers,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
def collection_take_start(request, pk):
|
||||
"""The starting page for taking / reviewing a case collection
|
||||
|
||||
@@ -1630,23 +1686,29 @@ def collection_take_start(request, pk):
|
||||
request, "atlas/collection_review_start.html", template_variables
|
||||
)
|
||||
|
||||
|
||||
@user_is_collection_author_or_atlas_editor
|
||||
def collection_case_priors(request, exam_id, case_id):
|
||||
case_detail = CaseDetail.objects.get(case=case_id, collection=exam_id)
|
||||
|
||||
|
||||
if request.htmx:
|
||||
if "remove" in request.POST:
|
||||
p = CasePrior.objects.get(case_detail=case_detail, prior_case=request.POST["remove"])
|
||||
p = CasePrior.objects.get(
|
||||
case_detail=case_detail, prior_case=request.POST["remove"]
|
||||
)
|
||||
p.delete()
|
||||
return HttpResponse(f"Case removed")
|
||||
elif "prior_case_id" in request.POST:
|
||||
prior_case = Case.objects.get(pk=request.POST["prior_case_id"])
|
||||
p, created = CasePrior.objects.get_or_create(case_detail=case_detail, prior_case=prior_case)
|
||||
p.relation_text=request.POST["relation"]
|
||||
p, created = CasePrior.objects.get_or_create(
|
||||
case_detail=case_detail, prior_case=prior_case
|
||||
)
|
||||
p.relation_text = request.POST["relation"]
|
||||
|
||||
if not p.relation_text:
|
||||
return HttpResponse("You need to enter text to describe the relationship between the cases")
|
||||
return HttpResponse(
|
||||
"You need to enter text to describe the relationship between the cases"
|
||||
)
|
||||
|
||||
p.save()
|
||||
|
||||
@@ -1674,7 +1736,6 @@ def collection_case_priors(request, exam_id, case_id):
|
||||
else:
|
||||
available_priors.append((case, False, ""))
|
||||
|
||||
|
||||
form = PriorCaseForm()
|
||||
|
||||
case_number, case_count = collection.get_index_of_case(
|
||||
@@ -1684,14 +1745,13 @@ def collection_case_priors(request, exam_id, case_id):
|
||||
previous = collection.get_previous_case(case_detail.case)
|
||||
next = collection.get_next_case(case_detail.case)
|
||||
|
||||
|
||||
return render(
|
||||
request,
|
||||
"atlas/collection_case_priors.html",
|
||||
{
|
||||
"case_detail": case_detail,
|
||||
"form": form,
|
||||
#"example_form": example_form,
|
||||
# "example_form": example_form,
|
||||
"collection": collection,
|
||||
"case": case_detail.case,
|
||||
"previous": previous,
|
||||
@@ -1703,6 +1763,7 @@ def collection_case_priors(request, exam_id, case_id):
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@user_is_collection_author_or_atlas_editor
|
||||
def collection_case_details(request, exam_id, case_id):
|
||||
case_detail = CaseDetail.objects.get(case=case_id, collection=exam_id)
|
||||
@@ -1713,7 +1774,6 @@ def collection_case_details(request, exam_id, case_id):
|
||||
raise Http404("Collection not in question mode")
|
||||
|
||||
if request.method == "POST":
|
||||
|
||||
# Called if the user saves the correct answer form
|
||||
if request.POST.get("submit") == "answer":
|
||||
# answers = request.POST
|
||||
@@ -1986,7 +2046,9 @@ def collection_take_overview(
|
||||
cid_user_exam.save()
|
||||
|
||||
collection.exam_user_status.create(
|
||||
cid_user_exam=cid_user_exam, status="submitted", extra="manual submission"
|
||||
cid_user_exam=cid_user_exam,
|
||||
status="submitted",
|
||||
extra="manual submission",
|
||||
)
|
||||
|
||||
return HttpResponse("True")
|
||||
@@ -2012,7 +2074,9 @@ def collection_take_overview(
|
||||
answer_count = 0
|
||||
for cd in case_details:
|
||||
self_review = cid_user_exam.selfreview_set.filter(case=cd.case)
|
||||
if cd in answer_question_map and (answer_question_map[cd].answer or answer_question_map[cd].json_answer):
|
||||
if cd in answer_question_map and (
|
||||
answer_question_map[cd].answer or answer_question_map[cd].json_answer
|
||||
):
|
||||
question_answer_tuples.append((cd, answer_question_map[cd], self_review))
|
||||
answer_count += 1
|
||||
else:
|
||||
@@ -2192,8 +2256,6 @@ def collection_case_view_take(
|
||||
for series in prior.prior_case.get_series():
|
||||
series_to_load.append((series, True, prior.relation_text))
|
||||
|
||||
|
||||
|
||||
previous = case_number > 0
|
||||
next = case_number < (case_count - 1)
|
||||
|
||||
@@ -2317,6 +2379,7 @@ def use_dates_as_descriptions(request, pk):
|
||||
|
||||
return HttpResponse("Done")
|
||||
|
||||
|
||||
def collection_case_dicom_json(request, exam_id, case_id):
|
||||
case_detail = CaseDetail.objects.get(case=case_id, collection=exam_id)
|
||||
|
||||
@@ -2715,6 +2778,7 @@ class CaseCollectionAuthorUpdate(RevisionMixin, AuthorRequiredMixin, UpdateView)
|
||||
context["collection"] = context["object"]
|
||||
return context
|
||||
|
||||
|
||||
class ExamGroupsUpdate(ExamGroupsUpdateBase):
|
||||
model = CaseCollection
|
||||
form_class = ExamGroupsForm
|
||||
@@ -2819,6 +2883,7 @@ def collection_question_schemas(request, exam_id: int):
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
def collection_reset_answers(request, exam_id: int):
|
||||
if request.htmx:
|
||||
collection = get_object_or_404(CaseCollection, pk=exam_id)
|
||||
@@ -2834,14 +2899,12 @@ def collection_reset_answers(request, exam_id: int):
|
||||
user_answers = case.userreportanswer_set.all()
|
||||
user_answers.delete()
|
||||
|
||||
|
||||
# User statuses
|
||||
collection.exam_user_status.all().delete()
|
||||
|
||||
# CidUserExams
|
||||
collection.cid_users.all().delete()
|
||||
return HttpResponse("Success")
|
||||
|
||||
|
||||
else:
|
||||
raise Http404("Invalid request")
|
||||
raise Http404("Invalid request")
|
||||
|
||||
Reference in New Issue
Block a user