Enhance supervisor email handling and input format options in bulk user creation
This commit is contained in:
+53
-15
@@ -815,8 +815,20 @@ def accounts_bulk_create_check(request):
|
||||
if not UserGrades.objects.filter(name=user["grade"]):
|
||||
errors.append("Invalid grade")
|
||||
|
||||
if user["supervisor_email"] == "undefined":
|
||||
errors.append("No supervisor email provided")
|
||||
# Treat empty, missing or the string 'undefined' as no supervisor email provided
|
||||
if not user.get("supervisor_email") or user["supervisor_email"] == "undefined":
|
||||
# Supervisor email not provided; try to match by name
|
||||
if not user.get("supervisor_name"):
|
||||
errors.append("No supervisor provided")
|
||||
else:
|
||||
supervisor = Supervisor.objects.filter(name__iexact=user["supervisor_name"])
|
||||
if not supervisor.exists():
|
||||
info.append("Supervisor does not exist (will be created)")
|
||||
else:
|
||||
info.append("Supervisor exists (matched by name)")
|
||||
if supervisor.count() > 1:
|
||||
errors.append("More than one supervisor with that name")
|
||||
# no further name check needed since matched by name
|
||||
else:
|
||||
supervisor = Supervisor.objects.filter(email=user["supervisor_email"])
|
||||
|
||||
@@ -828,8 +840,14 @@ def accounts_bulk_create_check(request):
|
||||
if supervisor.count() > 1:
|
||||
errors.append("More than one supervisor with that email")
|
||||
|
||||
if supervisor.first().name != user["supervisor_name"]:
|
||||
errors.append("Supervisor name does not match")
|
||||
# Compare names case-insensitively and trimmed to avoid false mismatches
|
||||
try:
|
||||
sup_name = (supervisor.first().name or '').strip().lower()
|
||||
posted_name = (user.get("supervisor_name") or '').strip().lower()
|
||||
if posted_name and sup_name != posted_name:
|
||||
errors.append("Supervisor name does not match")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if errors:
|
||||
return HttpResponse(
|
||||
@@ -869,11 +887,22 @@ def accounts_bulk_create(request):
|
||||
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 "supervisor_name" in user and user.get("supervisor_name"):
|
||||
sup_email = user.get("supervisor_email")
|
||||
# If supervisor email provided, prefer that. Otherwise try to match by name or create placeholder
|
||||
if sup_email and sup_email != 'undefined':
|
||||
s, created = Supervisor.objects.get_or_create(email=sup_email, defaults={"name": user.get("supervisor_name")})
|
||||
else:
|
||||
# try match by name
|
||||
s_qs = Supervisor.objects.filter(name__iexact=user.get("supervisor_name"))
|
||||
if s_qs.exists():
|
||||
s = s_qs.first()
|
||||
created = False
|
||||
else:
|
||||
import uuid
|
||||
placeholder = f"no-email-{uuid.uuid4().hex}@local.invalid"
|
||||
s = Supervisor.objects.create(email=placeholder, name=user.get("supervisor_name"))
|
||||
created = True
|
||||
|
||||
if created:
|
||||
s.save()
|
||||
@@ -913,11 +942,20 @@ def accounts_bulk_create(request):
|
||||
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"],
|
||||
name=user["supervisor_name"],
|
||||
)
|
||||
if "supervisor_name" in user and user.get("supervisor_name"):
|
||||
sup_email = user.get("supervisor_email")
|
||||
if sup_email and sup_email != 'undefined':
|
||||
s, created = Supervisor.objects.get_or_create(email=sup_email, defaults={"name": user.get("supervisor_name")})
|
||||
else:
|
||||
s_qs = Supervisor.objects.filter(name__iexact=user.get("supervisor_name"))
|
||||
if s_qs.exists():
|
||||
s = s_qs.first()
|
||||
created = False
|
||||
else:
|
||||
import uuid
|
||||
placeholder = f"no-email-{uuid.uuid4().hex}@local.invalid"
|
||||
s = Supervisor.objects.create(email=placeholder, name=user.get("supervisor_name"))
|
||||
created = True
|
||||
|
||||
if created:
|
||||
s.save()
|
||||
@@ -962,7 +1000,7 @@ def request_cid_details(request):
|
||||
email = request.POST.get("email")
|
||||
try:
|
||||
validate_email(email)
|
||||
except ValidationError as e:
|
||||
except ValidationError:
|
||||
return HttpResponse("Invalid email.")
|
||||
|
||||
cid_users = CidUser.objects.filter(email=email)
|
||||
|
||||
Reference in New Issue
Block a user