From 4db1f2ca1af370f2871cc89f1753356bf884ca72 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 15 Dec 2025 11:15:56 +0000 Subject: [PATCH] Add toggle functionality for pre-review flag on case resources --- .../atlas/partials/case_resources_list.html | 9 +++-- atlas/urls.py | 1 + atlas/views.py | 37 +++++++++++++++++-- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/atlas/templates/atlas/partials/case_resources_list.html b/atlas/templates/atlas/partials/case_resources_list.html index 7a8ed3af..e6197592 100644 --- a/atlas/templates/atlas/partials/case_resources_list.html +++ b/atlas/templates/atlas/partials/case_resources_list.html @@ -12,10 +12,11 @@ {% endif %} {% if can_edit %} -
- -
- {% endif %} +
+ + +
+ {% endif %} {% endfor %} diff --git a/atlas/urls.py b/atlas/urls.py index 54fa261c..ee8907f0 100755 --- a/atlas/urls.py +++ b/atlas/urls.py @@ -183,6 +183,7 @@ urlpatterns = [ # HTMX endpoints for attaching/detaching resources to a case path("case//attach-resource/", views.case_attach_resource, name="case_attach_resource"), path("case//detach-resource/", views.case_detach_resource, name="case_detach_resource"), + path("case//toggle-resource-pre/", views.case_toggle_resource_pre, name="case_toggle_resource_pre"), # Backwards-compatible redirect from legacy case_id-style URLs path( "collection//case/id//details", diff --git a/atlas/views.py b/atlas/views.py index bf60b5c9..5abd3eaa 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -4022,7 +4022,6 @@ def resource_search_widget(request): Returns rendered partial `atlas/partials/resource_search_widget_results.html`. """ - from .models import Resource q = request.GET.get("q", "").strip() site = request.GET.get("site") @@ -4073,7 +4072,6 @@ def case_attach_resource(request, pk): resource_id = request.POST.get("resource_id") pre_review = request.POST.get("pre_review", "0") == "1" - from .models import Resource, CaseResource try: resource = Resource.objects.get(pk=int(resource_id)) except Exception: @@ -4104,7 +4102,6 @@ def case_detach_resource(request, pk): if not case.check_user_can_edit(request.user): return HttpResponse(status=403) resource_id = request.POST.get("resource_id") - from .models import CaseResource try: cr = CaseResource.objects.filter(case=case, resource__id=int(resource_id)) cr.delete() @@ -4121,6 +4118,40 @@ def case_detach_resource(request, pk): return resp +@login_required +@require_POST +def case_toggle_resource_pre(request, pk): + """Toggle the pre_review flag on a CaseResource (HTMX POST). + + POST params: + - resource_id: integer + + Returns the updated `atlas/partials/case_resources_list.html` fragment. + """ + case = get_case_for_case_detail(pk) + if not case.check_user_can_edit(request.user): + return HttpResponse(status=403) + + resource_id = request.POST.get("resource_id") + try: + cr = CaseResource.objects.get(case=case, resource__id=int(resource_id)) + except Exception: + return HttpResponse(status=400) + + cr.pre_review = not bool(cr.pre_review) + cr.save() + + # Refresh case from DB to ensure related sets reflect changes and render updated list + try: + case = Case.objects.get(pk=case.pk) + except Exception: + pass + html = render_to_string("atlas/partials/case_resources_list.html", {"case": case}, request=request) + resp = HttpResponse(html) + resp["HX-Trigger"] = json.dumps({"caseResourcesChanged": {"case_id": case.pk}}) + return resp + + def series_dicom_json(request, pk): series = get_object_or_404(Series, pk=pk)