Add toggle functionality for pre-review flag on case resources
This commit is contained in:
@@ -12,7 +12,8 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% if can_edit %}
|
{% if can_edit %}
|
||||||
<div>
|
<div class="d-flex gap-2">
|
||||||
|
<button type="button" class="btn btn-sm btn-outline-secondary" title="Toggle pre/post" hx-post="{% url 'atlas:case_toggle_resource_pre' pk=case.pk %}" hx-vals='{"resource_id": "{{ cr.resource.pk }}"}' hx-swap="outerHTML" hx-target="#case-resources-list">Toggle</button>
|
||||||
<button type="button" class="btn btn-sm btn-outline-danger" hx-post="{% url 'atlas:case_detach_resource' pk=case.pk %}" hx-vals='{"resource_id": "{{ cr.resource.pk }}"}' hx-swap="outerHTML" hx-target="#case-resources-list">Remove</button>
|
<button type="button" class="btn btn-sm btn-outline-danger" hx-post="{% url 'atlas:case_detach_resource' pk=case.pk %}" hx-vals='{"resource_id": "{{ cr.resource.pk }}"}' hx-swap="outerHTML" hx-target="#case-resources-list">Remove</button>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -183,6 +183,7 @@ urlpatterns = [
|
|||||||
# HTMX endpoints for attaching/detaching resources to a case
|
# HTMX endpoints for attaching/detaching resources to a case
|
||||||
path("case/<int:pk>/attach-resource/", views.case_attach_resource, name="case_attach_resource"),
|
path("case/<int:pk>/attach-resource/", views.case_attach_resource, name="case_attach_resource"),
|
||||||
path("case/<int:pk>/detach-resource/", views.case_detach_resource, name="case_detach_resource"),
|
path("case/<int:pk>/detach-resource/", views.case_detach_resource, name="case_detach_resource"),
|
||||||
|
path("case/<int:pk>/toggle-resource-pre/", views.case_toggle_resource_pre, name="case_toggle_resource_pre"),
|
||||||
# Backwards-compatible redirect from legacy case_id-style URLs
|
# Backwards-compatible redirect from legacy case_id-style URLs
|
||||||
path(
|
path(
|
||||||
"collection/<int:exam_id>/case/id/<int:case_id>/details",
|
"collection/<int:exam_id>/case/id/<int:case_id>/details",
|
||||||
|
|||||||
+34
-3
@@ -4022,7 +4022,6 @@ def resource_search_widget(request):
|
|||||||
|
|
||||||
Returns rendered partial `atlas/partials/resource_search_widget_results.html`.
|
Returns rendered partial `atlas/partials/resource_search_widget_results.html`.
|
||||||
"""
|
"""
|
||||||
from .models import Resource
|
|
||||||
|
|
||||||
q = request.GET.get("q", "").strip()
|
q = request.GET.get("q", "").strip()
|
||||||
site = request.GET.get("site")
|
site = request.GET.get("site")
|
||||||
@@ -4073,7 +4072,6 @@ def case_attach_resource(request, pk):
|
|||||||
|
|
||||||
resource_id = request.POST.get("resource_id")
|
resource_id = request.POST.get("resource_id")
|
||||||
pre_review = request.POST.get("pre_review", "0") == "1"
|
pre_review = request.POST.get("pre_review", "0") == "1"
|
||||||
from .models import Resource, CaseResource
|
|
||||||
try:
|
try:
|
||||||
resource = Resource.objects.get(pk=int(resource_id))
|
resource = Resource.objects.get(pk=int(resource_id))
|
||||||
except Exception:
|
except Exception:
|
||||||
@@ -4104,7 +4102,6 @@ def case_detach_resource(request, pk):
|
|||||||
if not case.check_user_can_edit(request.user):
|
if not case.check_user_can_edit(request.user):
|
||||||
return HttpResponse(status=403)
|
return HttpResponse(status=403)
|
||||||
resource_id = request.POST.get("resource_id")
|
resource_id = request.POST.get("resource_id")
|
||||||
from .models import CaseResource
|
|
||||||
try:
|
try:
|
||||||
cr = CaseResource.objects.filter(case=case, resource__id=int(resource_id))
|
cr = CaseResource.objects.filter(case=case, resource__id=int(resource_id))
|
||||||
cr.delete()
|
cr.delete()
|
||||||
@@ -4121,6 +4118,40 @@ def case_detach_resource(request, pk):
|
|||||||
return resp
|
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):
|
def series_dicom_json(request, pk):
|
||||||
series = get_object_or_404(Series, pk=pk)
|
series = get_object_or_404(Series, pk=pk)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user