From af3234bacc939647a68643c3d134b3362445d8d3 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 9 Sep 2024 13:49:05 +0100 Subject: [PATCH] add some basic checks when batch creating users --- generic/templates/generic/trainees.html | 1 + rad/urls.py | 3 +++ rad/views.py | 30 +++++++++++++++++++++++++ templates/accounts_bulk_create.html | 28 +++++++++++++++++++++-- 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/generic/templates/generic/trainees.html b/generic/templates/generic/trainees.html index 364d466f..19fdc61f 100644 --- a/generic/templates/generic/trainees.html +++ b/generic/templates/generic/trainees.html @@ -10,6 +10,7 @@ ST{{i}}{% if not forloop.last %}, {% endif %} {% endfor %} (Add trainee) + (Bulk create)

{% if grade %} diff --git a/rad/urls.py b/rad/urls.py index 90a1418c..b9f7b773 100644 --- a/rad/urls.py +++ b/rad/urls.py @@ -72,6 +72,9 @@ urlpatterns = [ path( "accounts/bulk_create/", views.accounts_bulk_create, name="accounts_bulk_create" ), + path( + "accounts/bulk_create/check", views.accounts_bulk_create_check, name="accounts_bulk_create_check" + ), path( "accounts/create/", generic_views.create_user, name="create_user" ), diff --git a/rad/views.py b/rad/views.py index 9af2db23..7305f2ee 100644 --- a/rad/views.py +++ b/rad/views.py @@ -730,6 +730,35 @@ def accounts_check_users(request): return +@user_is_cid_user_manager +def accounts_bulk_create_check(request): + if not request.method == "POST": + return HttpResponse("Invalid request") + + user = json.loads(request.POST.get("user")) + + if User.objects.filter(username=user["email"]).exists(): + return HttpResponse(format_html("{}", "User already exists")) + + if not UserGrades.objects.filter(name=user["grade"]): + return HttpResponse(format_html("{}", "Invalid grade")) + + if "supervisor_email" in user: + supervisor = Supervisor.objects.filter(email=user["supervisor_email"]) + + if not supervisor: + return HttpResponse("Ok, supervisor will be created") + + if supervisor.count() > 1: + return HttpResponse(format_html("{}", "More than one supervisor with that email")) + + if supervisor.first().name != user["supervisor_name"]: + return HttpResponse(format_html("{}", "Supervisor name does not match")) + + return HttpResponse("OK, supervisor exists") + + return HttpResponse("OK") + @user_is_cid_user_manager def accounts_bulk_create(request): @@ -781,6 +810,7 @@ def accounts_bulk_create(request): try: user_profile = UserProfile.objects.get(user=new_user) user_profile.peninsula_trainee = True + # TODO: check supervisor details are correct if "supervisor_email" in user and "supervisor_name" in user: s, created = Supervisor.objects.get_or_create( email=user["supervisor_email"], diff --git a/templates/accounts_bulk_create.html b/templates/accounts_bulk_create.html index 7aaeac18..3f4a1b57 100644 --- a/templates/accounts_bulk_create.html +++ b/templates/accounts_bulk_create.html @@ -37,7 +37,7 @@

Please note users created this way bypass some of the validations so check details such as email addresses are correct


- +
@@ -101,7 +101,14 @@ myTbody.appendChild(myRow); users.push(user) emails.push(user.email) - $("#users-list").append(`
  • Name: ${user.first_name} ${user.last_name}
    Email: ${user.email}
    Grade: ${user.grade}
    Supervisor: ${user.supervisor_name}
    Supervisor email: ${user.supervisor_email}
  • `) + $("#users-list").append(`
  • Name: ${user.first_name} ${user.last_name}
    Email: ${user.email}
    Grade: ${user.grade}
    Supervisor: ${user.supervisor_name}
    Supervisor email: ${user.supervisor_email}
  • `) } myTable.appendChild(myTbody); @@ -112,6 +119,10 @@ $("#users-list").append(`${users.length} users to create.`) + // Make sure the new hyperscript works + _hyperscript.processNode($("#users-list")[0]); + htmx.process($("#users-list")[0]); + $("#user-list-json").val(JSON.stringify(users)); $("#submit-users").show(); @@ -143,5 +154,18 @@ margin: 10px; padding: 10px; } + + .check-status { + color: blue; + } + + .error { + color:red; + } + + #users-list li:has(.error) { + border: 1px solid red; + } + {% endblock content %} \ No newline at end of file