This commit is contained in:
Ross
2025-12-14 17:08:23 +00:00
parent 1dd7c8d19e
commit 2889825734
10 changed files with 290 additions and 205 deletions
+26 -3
View File
@@ -9,6 +9,7 @@ import json
from django.views.decorators.http import require_http_methods
from django.template.loader import render_to_string
from django.http import HttpResponse, HttpResponseBadRequest
from django.http import JsonResponse
from django.views.decorators.http import require_POST
from django.shortcuts import HttpResponseRedirect
import traceback
@@ -508,10 +509,19 @@ def request_leave(request, token=None):
# On HTMX modal post, return an OOB swap to close modal and optionally
# update worker detail partial if present.
if is_hx:
resp = '<div id="modal" hx-swap-oob="true"></div>'
# optionally include trigger
# Render updated leave list and return OOB swaps: update leave-list and clear modal.
leave_list_html = render_to_string(
"rota/partials/leave_list.html",
{"leaves": worker.leaves.all()},
request=request,
)
resp = (
f'<div id="leave-list" hx-swap-oob="true">{leave_list_html}</div>'
+ '<div id="modal" hx-swap-oob="true"></div>'
)
response = HttpResponse(resp)
response["HX-Trigger"] = "closeModal"
# Trigger modal close and a leaveUpdated event so client can refresh calendar highlights
response["HX-Trigger"] = "closeModal,leaveUpdated"
return response
return redirect("rota:worker_detail", worker_id=worker.id)
else:
@@ -929,6 +939,19 @@ def rota_run_export_download(request, run_id):
return response
def leaves_json(request, worker_id):
"""Return JSON list of leave ranges for a given worker."""
worker = get_object_or_404(Worker, pk=worker_id)
data = []
for l in worker.leaves.all().order_by('start_date'):
data.append({
'start': l.start_date.isoformat(),
'end': l.end_date.isoformat(),
'reason': l.reason,
})
return JsonResponse({'leaves': data})
@require_POST
def rota_run_export_regenerate(request, run_id):
"""Regenerate the HTML export for a completed run and persist it on the RotaRun.