from django.contrib.auth.decorators import login_required from django.shortcuts import render, get_object_or_404 from django.http import HttpResponse from django.db.models import Q from .models import Employee from .forms import EmployeeForm @login_required def user_list(request): query = request.GET.get("search", "") employees = Employee.objects.all().order_by("name") if query: # Filter by name, username, or role (case-insensitive) employees = employees.filter( Q(name__icontains=query) | Q(username__icontains=query) | Q(role__icontains=query) ) context = {"employees": employees} # If the request comes from HTMX, only return the table rows if request.headers.get("HX-Request"): return render(request, "users/partials/user_table.html", context) # Otherwise, return the full page return render(request, "users/user_list.html", context) @login_required def employee_form(request, pk=None): if pk: employee = get_object_or_404(Employee, pk=pk) else: employee = None if request.method == "POST": form = EmployeeForm(request.POST, instance=employee) if form.is_valid(): form.save() # Return a 204 No Content response, but trigger custom HTMX events response = HttpResponse(status=204) response["HX-Trigger"] = "employeeListChanged, closeModal" return response else: form = EmployeeForm(instance=employee) return render( request, "users/partials/employee_form.html", {"form": form, "employee": employee}, )