From 2faedbcee63ee1dbb03bb7069554cda3f580e464 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 4 Nov 2024 10:34:44 +0000 Subject: [PATCH] allow trainees to be bulk updated --- rad/views.py | 74 ++++++++++++++++++++++------- templates/accounts_bulk_create.html | 19 ++++++-- 2 files changed, 72 insertions(+), 21 deletions(-) diff --git a/rad/views.py b/rad/views.py index ea7b03d9..c3fc8c4e 100644 --- a/rad/views.py +++ b/rad/views.py @@ -77,6 +77,8 @@ from django.db.models import Q from dal import autocomplete +from loguru import logger + def feedback_checker(user): return user.groups.filter(name="feedback_checker").exists() @@ -718,32 +720,48 @@ def accounts_bulk_create_check(request): if not request.method == "POST": return HttpResponse("Invalid request") - user = json.loads(request.POST.get("user")) - if "email" not in user: - return HttpResponse(format_html("{}", "No email provided")) + user = {} + + user["email"] = request.POST.get("email") + user["first_name"] = request.POST.get("first_name") + user["last_name"] = request.POST.get("last_name") + user["grade"] = request.POST.get("grade") + user["supervisor_email"] = request.POST.get("supervisor_email") + user["supervisor_name"] = request.POST.get("supervisor_name") + + errors = [] + info = [] + + if user["email"] == "undefined": + errors.append("No email provided") if User.objects.filter(username=user["email"]).exists(): - return HttpResponse(format_html("{}", "User already exists")) + info.append("User already exists") if not UserGrades.objects.filter(name=user["grade"]): - return HttpResponse(format_html("{}", "Invalid grade")) + errors.append("Invalid grade") - if "supervisor_email" in user: + if user["supervisor_email"] == "undefined": + errors.append("No supervisor email provided") + else: supervisor = Supervisor.objects.filter(email=user["supervisor_email"]) if not supervisor: - return HttpResponse("Ok, supervisor does not exist so will be created") + info.append("Supervisor does not exist (will be created)") + else: + info.append("Supervisor exists") - if supervisor.count() > 1: - return HttpResponse(format_html("{}", "More than one supervisor with that email")) + if supervisor.count() > 1: + errors.append("More than one supervisor with that email") - if supervisor.first().name != user["supervisor_name"]: - return HttpResponse(format_html("{}", "Supervisor name does not match")) + if supervisor.first().name != user["supervisor_name"]: + errors.append("Supervisor name does not match") - return HttpResponse("OK, supervisor exists") + if errors: + return HttpResponse(format_html("{}", "
".join(errors))) - return HttpResponse("OK") + return HttpResponse(format_html("{}", "
".join(info))) @user_is_cid_user_manager @@ -763,7 +781,33 @@ def accounts_bulk_create(request): print(users) for user in users: - if not User.objects.filter(username=user["email"]).exists(): + try: + existing_user = User.objects.get(username=user["email"]) + existing_users.append(user["email"]) + + user_profile = UserProfile.objects.get(user=existing_user) + + # Update grade and supervisor details + # This code is dup[licated] + if "grade" in user: + if not user["grade"].startswith("ST"): + user["grade"] = f"ST{user['grade']}" + + grade = UserGrades.objects.get(name=user["grade"]) + user_profile.grade = grade + + if "supervisor_email" in user and "supervisor_name" in user: + s, created = Supervisor.objects.get_or_create( + email=user["supervisor_email"], + name=user["supervisor_name"], + ) + + if created: + s.save() + + user_profile.supervisor = s + user_profile.save() + except User.DoesNotExist: # Start by checking the email try: validate_email(user["email"]) @@ -825,8 +869,6 @@ def accounts_bulk_create(request): error_text + f"

Error creating user profile: { user['email'] }
{error} (user not created)

" ) - else: - existing_users.append(user["email"]) except Exception as error: error_text = error_text + f"

Error creating users.
{error}

" diff --git a/templates/accounts_bulk_create.html b/templates/accounts_bulk_create.html index 3f4a1b57..f1111986 100644 --- a/templates/accounts_bulk_create.html +++ b/templates/accounts_bulk_create.html @@ -92,23 +92,32 @@ // Loop over the row columns if (excelRow[i][j].length != 0) { var myCell = document.createElement("td"); - myCell.innerHTML = excelRow[i][j]; + myCell.innerHTML = excelRow[i][j].trim(); //users[i][elements[j]] = excelRow[i][j]; - user[elements[j]] = excelRow[i][j]; + user[elements[j]] = excelRow[i][j].trim(); } myRow.appendChild(myCell); } 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}
  • `) + >CHECK + `) } myTable.appendChild(myTbody);