allow trainees to be bulk updated
This commit is contained in:
+58
-16
@@ -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>"
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user