This commit is contained in:
Ross
2025-12-09 11:35:52 +00:00
parent 3f73316dbf
commit 91b6fdd733
2 changed files with 91 additions and 7 deletions
+89 -7
View File
@@ -64,6 +64,79 @@ def worker_detail(request, worker_id):
return render(request, "rota/worker_detail.html", {"worker": worker, "form": form})
@require_http_methods(["GET", "POST"])
def worker_edit(request, rota_id, worker_id):
rota = get_object_or_404(RotaSchedule, pk=rota_id)
worker = get_object_or_404(Worker, pk=worker_id)
if request.method == "POST":
form = WorkerForm(request.POST, instance=worker)
if form.is_valid():
form.save()
# Return updated worker list OOB and close modal
worker_list_html = render_to_string("rota/partials/worker_list.html", {"rota": rota}, request=request)
resp = (
f'<div id="worker-list" hx-swap-oob="true">{worker_list_html}</div>'
+ '<div id="modal" hx-swap-oob="true"></div>'
)
response = HttpResponse(resp)
response["HX-Trigger"] = "closeModal"
return response
# invalid: return form modal with errors
modal_html = render_to_string(
"rota/partials/worker_form_modal.html",
{"form": form, "form_action": request.path, "rota": rota},
request=request,
)
return HttpResponse(modal_html)
# GET: populate form and return modal
form = WorkerForm(instance=worker)
modal_html = render_to_string(
"rota/partials/worker_form_modal.html",
{"form": form, "form_action": request.path, "rota": rota},
request=request,
)
return HttpResponse(modal_html)
@require_http_methods(["GET", "POST"])
def worker_delete(request, rota_id, worker_id):
rota = get_object_or_404(RotaSchedule, pk=rota_id)
worker = get_object_or_404(Worker, pk=worker_id)
if request.method == "POST":
# remove assignment between worker and rota
try:
from .models import Assignment
Assignment.objects.filter(worker=worker, rota=rota).delete()
except Exception:
try:
rota.workers.remove(worker)
except Exception:
return HttpResponseBadRequest("Unable to remove worker from rota")
rota = get_object_or_404(RotaSchedule, pk=rota_id)
worker_list_html = render_to_string("rota/partials/worker_list.html", {"rota": rota}, request=request)
resp = (
f'<div id="worker-list" hx-swap-oob="true">{worker_list_html}</div>'
+ '<div id="modal" hx-swap-oob="true"></div>'
)
response = HttpResponse(resp)
response["HX-Trigger"] = "closeModal"
return response
# GET: confirmation modal
modal_html = render_to_string(
"rota/partials/worker_confirm_delete.html",
{"rota": rota, "worker": worker},
request=request,
)
return HttpResponse(modal_html)
def rota_run_detail(request, run_id):
from .models import RotaRun
@@ -96,12 +169,15 @@ def shift_add(request, rota_id):
# Return out-of-band swap: update shift-list and clear modal
shift_list_html = render_to_string("rota/partials/shift_list.html", {"rota": rota}, request=request)
# wrap shift list for OOB swap
# wrap shift list for OOB swap and clear form/modal containers
resp = (
f'<div id="shift-list" hx-swap-oob="true">{shift_list_html}</div>'
+ '<div id="shift-form" hx-swap-oob="true"></div>'
+ '<div id="modal" hx-swap-oob="true"></div>'
)
return HttpResponse(resp)
)
response = HttpResponse(resp)
response["HX-Trigger"] = "closeModal"
return response
# invalid: return modal with form and errors
modal_html = render_to_string("rota/partials/shift_form_modal.html", {"form": form, "rota": rota, "form_action": request.path}, request=request)
@@ -141,9 +217,12 @@ def shift_edit(request, rota_id, idx):
shift_list_html = render_to_string("rota/partials/shift_list.html", {"rota": rota}, request=request)
resp = (
f'<div id="shift-list" hx-swap-oob="true">{shift_list_html}</div>'
+ '<div id="shift-form" hx-swap-oob="true"></div>'
+ '<div id="modal" hx-swap-oob="true"></div>'
)
return HttpResponse(resp)
)
response = HttpResponse(resp)
response["HX-Trigger"] = "closeModal"
return response
modal_html = render_to_string("rota/partials/shift_form_modal.html", {"form": form, "rota": rota, "form_action": request.path}, request=request)
return HttpResponse(modal_html)
@@ -181,9 +260,12 @@ def shift_delete(request, rota_id, idx):
shift_list_html = render_to_string("rota/partials/shift_list.html", {"rota": rota}, request=request)
resp = (
f'<div id="shift-list" hx-swap-oob="true">{shift_list_html}</div>'
+ '<div id="shift-form" hx-swap-oob="true"></div>'
+ '<div id="modal" hx-swap-oob="true"></div>'
)
return HttpResponse(resp)
)
response = HttpResponse(resp)
response["HX-Trigger"] = "closeModal"
return response
# GET: confirmation modal
modal_html = render_to_string("rota/partials/shift_confirm_delete.html", {"rota": rota, "idx": idx, "shift": shift}, request=request)