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)
Error creating users.
{error}