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)