enable priors in atlas

This commit is contained in:
Ross
2024-07-17 22:00:57 +01:00
parent 35e4b81e34
commit 7075bba7a2
8 changed files with 312 additions and 6 deletions
+89 -2
View File
@@ -49,6 +49,7 @@ from .forms import (
ConditionForm,
FindingForm,
JsonAnswerForm,
PriorCaseForm,
QuestionSchemaForm,
ResourceForm,
SelfReviewForm,
@@ -66,6 +67,7 @@ from .models import (
Case,
CaseCollection,
CaseDetail,
CasePrior,
CidReportAnswer,
Condition,
Differential,
@@ -1631,6 +1633,78 @@ 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.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"]
if not p.relation_text:
return HttpResponse("You need to enter text to describe the relationship between the cases")
p.save()
return HttpResponse(f"Case added")
else:
return HttpResponse("False")
raise Http404()
collection = case_detail.collection
added_priors = CasePrior.objects.filter(case_detail=case_detail)
added_relation_map = {}
for prior in added_priors:
added_relation_map[prior.prior_case] = prior.relation_text
case = case_detail.case
available_cases = case.get_all_prior_cases()
available_priors = []
for case in available_cases:
if case in added_relation_map:
available_priors.append((case, True, added_relation_map[case]))
else:
available_priors.append((case, False, ""))
form = PriorCaseForm()
case_number, case_count = collection.get_index_of_case(
case_detail.case, case_count=True
)
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,
"collection": collection,
"case": case_detail.case,
"previous": previous,
"next": next,
"collection_length": case_count,
"case_number": case_number,
"added_priors": added_priors,
"available_priors": available_priors,
},
)
@user_is_collection_author_or_atlas_editor
def collection_case_details(request, exam_id, case_id):
@@ -2039,8 +2113,8 @@ def collection_case_view_take(
cid_user_exam.start_time = timezone.now()
cid_user_exam.save()
case_detail = CaseDetail.objects.get(case=case, collection=collection)
if not collection.review_only():
case_detail = CaseDetail.objects.get(case=case, collection=collection)
if collection.collection_type == "REP":
if cid is not None:
answer = case_detail.cidreportanswer_set.filter(cid=cid).first()
@@ -2116,7 +2190,19 @@ def collection_case_view_take(
series_list = case.series.all().prefetch_related("images", "examination", "plane")
print("case_no")
prior_cases = case_detail.caseprior_set.all()
series_to_load = []
for series in series_list:
series_to_load.append((series, False, ""))
for prior in prior_cases:
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)
@@ -2160,6 +2246,7 @@ def collection_case_view_take(
"collection": collection,
"case": case,
"series_list": series_list,
"series_to_load": series_to_load,
"case_number": case_number,
"previous": previous,
"next": next,