allow trainees to be bulk updated

This commit is contained in:
Ross
2024-11-04 10:34:44 +00:00
parent 5397bf10ac
commit 2faedbcee6
2 changed files with 72 additions and 21 deletions
+58 -16
View File
@@ -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("<span class='error'>{}</span>", "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("<span class='error'>{}</span>", "User already exists"))
info.append("User already exists")
if not UserGrades.objects.filter(name=user["grade"]):
return HttpResponse(format_html("<span class='error'>{}</span>", "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("<span class='error'>{}</span>", "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("<span class='error'>{}</span>", "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("<span class='error'>{}</span>", "<br/>".join(errors)))
return HttpResponse("OK")
return HttpResponse(format_html("<span class='info'>{}</span>", "<br/>".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"<p>Error creating user profile: { user['email'] }<br/>{error} (user not created)</p>"
)
else:
existing_users.append(user["email"])
except Exception as error:
error_text = error_text + f"<p>Error creating users.<br/>{error}</p>"
+14 -5
View File
@@ -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(`<li>Name: ${user.first_name} ${user.last_name}<br/>Email: ${user.email}<br/>Grade: ${user.grade}<br/>Supervisor: ${user.supervisor_name}<br/>Supervisor email: ${user.supervisor_email}<br/><button
console.log(user)
$("#users-list").append(`<li>Name: ${user.first_name} ${user.last_name}<br/>Email: ${user.email}<br/>Grade: ${user.grade}<br/>Supervisor: ${user.supervisor_name}<br/>Supervisor email: ${user.supervisor_email}<br/>
<form>
<input type="text" name="first_name" value="${user.first_name}" hidden>
<input type="text" name="last_name" value="${user.last_name}" hidden>
<input type="text" name="email" value="${user.email}" hidden>
<input type="text" name="grade" value="${user.grade}" hidden>
<input type="text" name="supervisor_name" value="${user.supervisor_name}" hidden>
<input type="text" name="supervisor_email" value="${user.supervisor_email}" hidden>
<button
hx-post="{% url 'accounts_bulk_create_check' %}"
hx-trigger="load"
hx-target="next span"
name="user"
class="hide"
value='${JSON.stringify(user)}'
>CHECK</button><span class="check-status"></span></li>`)
>CHECK</button>
</form><span class="check-status"></span></li>`)
}
myTable.appendChild(myTbody);