.
This commit is contained in:
@@ -16,6 +16,7 @@ urlpatterns = [
|
||||
path("worker/<int:rota_id>/<int:worker_id>/edit/", views.worker_edit, name="worker_edit"),
|
||||
path("worker/<int:rota_id>/<int:worker_id>/delete/", views.worker_delete, name="worker_delete"),
|
||||
path("worker/<int:worker_id>/", views.worker_detail, name="worker_detail"),
|
||||
path("worker/<int:worker_id>/leaves.json", views.leaves_json, name="worker_leaves_json"),
|
||||
path("leave/request/", views.request_leave, name="request_leave"),
|
||||
path("leave/request/token/<uuid:token>/", views.request_leave, name="request_leave_token"),
|
||||
path("worker/<int:worker_id>/regenerate_token/", views.regenerate_worker_token, name="regenerate_worker_token"),
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user