.
This commit is contained in:
@@ -1085,6 +1085,59 @@ def leaves_global(request):
|
||||
return render(request, 'rota/leaves_global.html', {'leaves_json': leaves_json})
|
||||
|
||||
|
||||
@require_http_methods(["GET"])
|
||||
def select_workers_modal(request):
|
||||
"""Return an HTMX modal partial that lists workers to apply a selected leave range to.
|
||||
|
||||
Query params: start_date, end_date, rota_id (optional)
|
||||
"""
|
||||
start_date = request.GET.get('start_date')
|
||||
end_date = request.GET.get('end_date')
|
||||
rota_id = request.GET.get('rota_id')
|
||||
workers = Worker.objects.all()
|
||||
if rota_id:
|
||||
try:
|
||||
workers = workers.filter(rotas__id=int(rota_id))
|
||||
except Exception:
|
||||
pass
|
||||
workers = workers.order_by('name')
|
||||
modal_html = render_to_string(
|
||||
'rota/partials/select_workers_modal.html',
|
||||
{'workers': workers, 'start_date': start_date, 'end_date': end_date},
|
||||
request=request,
|
||||
)
|
||||
return HttpResponse(modal_html)
|
||||
|
||||
|
||||
@require_http_methods(["POST"])
|
||||
def apply_leave_multi(request):
|
||||
"""Apply a leave range to multiple workers. Expects POST with worker_ids (list), start_date and end_date."""
|
||||
from .models import Leave
|
||||
|
||||
worker_ids = request.POST.getlist('worker_id')
|
||||
start_date = request.POST.get('start_date')
|
||||
end_date = request.POST.get('end_date')
|
||||
if not worker_ids or not start_date:
|
||||
return HttpResponseBadRequest('Missing parameters')
|
||||
created = []
|
||||
for wid in worker_ids:
|
||||
try:
|
||||
w = Worker.objects.get(pk=int(wid))
|
||||
except Exception:
|
||||
continue
|
||||
try:
|
||||
leave = Leave(worker=w, start_date=start_date, end_date=end_date)
|
||||
leave.save()
|
||||
created.append(leave)
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
# Return simple HTMX response: close modal and trigger calendar refresh
|
||||
response = HttpResponse('')
|
||||
response['HX-Trigger'] = 'closeModal,leaveUpdated'
|
||||
return response
|
||||
|
||||
|
||||
@require_POST
|
||||
def leave_delete(request, leave_id):
|
||||
"""Delete a Leave record. Allowed if the requester is staff, or if a valid token matches the worker, or the authenticated user's email matches the worker email."""
|
||||
|
||||
Reference in New Issue
Block a user