.
This commit is contained in:
@@ -22,6 +22,8 @@ urlpatterns = [
|
||||
path("worker/settings/token/<uuid:token>/", views.worker_settings_token, name="worker_settings_token"),
|
||||
path("leaves/all/", views.leaves_global, name="leaves_global"),
|
||||
path("leaves/all.json", views.leaves_global_json, name="leaves_global_json"),
|
||||
path("leave/select_workers/", views.select_workers_modal, name="select_workers_modal"),
|
||||
path("leave/apply_multi/", views.apply_leave_multi, name="apply_leave_multi"),
|
||||
path("leave/<int:leave_id>/delete/", views.leave_delete, name="leave_delete"),
|
||||
path("worker/<int:worker_id>/leaves/delete_all/", views.leave_delete_all, name="leave_delete_all"),
|
||||
path("worker/<int:worker_id>/regenerate_token/", views.regenerate_worker_token, name="regenerate_worker_token"),
|
||||
|
||||
@@ -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