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 dal import autocomplete
|
||||||
|
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
def feedback_checker(user):
|
def feedback_checker(user):
|
||||||
return user.groups.filter(name="feedback_checker").exists()
|
return user.groups.filter(name="feedback_checker").exists()
|
||||||
|
|
||||||
@@ -718,32 +720,48 @@ def accounts_bulk_create_check(request):
|
|||||||
if not request.method == "POST":
|
if not request.method == "POST":
|
||||||
return HttpResponse("Invalid request")
|
return HttpResponse("Invalid request")
|
||||||
|
|
||||||
user = json.loads(request.POST.get("user"))
|
|
||||||
|
|
||||||
if "email" not in user:
|
user = {}
|
||||||
return HttpResponse(format_html("<span class='error'>{}</span>", "No email provided"))
|
|
||||||
|
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():
|
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"]):
|
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"])
|
supervisor = Supervisor.objects.filter(email=user["supervisor_email"])
|
||||||
|
|
||||||
if not supervisor:
|
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:
|
if supervisor.count() > 1:
|
||||||
return HttpResponse(format_html("<span class='error'>{}</span>", "More than one supervisor with that email"))
|
errors.append("More than one supervisor with that email")
|
||||||
|
|
||||||
if supervisor.first().name != user["supervisor_name"]:
|
if supervisor.first().name != user["supervisor_name"]:
|
||||||
return HttpResponse(format_html("<span class='error'>{}</span>", "Supervisor name does not match"))
|
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
|
@user_is_cid_user_manager
|
||||||
@@ -763,7 +781,33 @@ def accounts_bulk_create(request):
|
|||||||
print(users)
|
print(users)
|
||||||
|
|
||||||
for user in 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
|
# Start by checking the email
|
||||||
try:
|
try:
|
||||||
validate_email(user["email"])
|
validate_email(user["email"])
|
||||||
@@ -825,8 +869,6 @@ def accounts_bulk_create(request):
|
|||||||
error_text
|
error_text
|
||||||
+ f"<p>Error creating user profile: { user['email'] }<br/>{error} (user not created)</p>"
|
+ f"<p>Error creating user profile: { user['email'] }<br/>{error} (user not created)</p>"
|
||||||
)
|
)
|
||||||
else:
|
|
||||||
existing_users.append(user["email"])
|
|
||||||
|
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
error_text = error_text + f"<p>Error creating users.<br/>{error}</p>"
|
error_text = error_text + f"<p>Error creating users.<br/>{error}</p>"
|
||||||
|
|||||||
@@ -92,23 +92,32 @@
|
|||||||
// Loop over the row columns
|
// Loop over the row columns
|
||||||
if (excelRow[i][j].length != 0) {
|
if (excelRow[i][j].length != 0) {
|
||||||
var myCell = document.createElement("td");
|
var myCell = document.createElement("td");
|
||||||
myCell.innerHTML = excelRow[i][j];
|
myCell.innerHTML = excelRow[i][j].trim();
|
||||||
//users[i][elements[j]] = excelRow[i][j];
|
//users[i][elements[j]] = excelRow[i][j];
|
||||||
user[elements[j]] = excelRow[i][j];
|
user[elements[j]] = excelRow[i][j].trim();
|
||||||
}
|
}
|
||||||
myRow.appendChild(myCell);
|
myRow.appendChild(myCell);
|
||||||
}
|
}
|
||||||
myTbody.appendChild(myRow);
|
myTbody.appendChild(myRow);
|
||||||
users.push(user)
|
users.push(user)
|
||||||
emails.push(user.email)
|
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-post="{% url 'accounts_bulk_create_check' %}"
|
||||||
hx-trigger="load"
|
hx-trigger="load"
|
||||||
hx-target="next span"
|
hx-target="next span"
|
||||||
name="user"
|
name="user"
|
||||||
class="hide"
|
class="hide"
|
||||||
value='${JSON.stringify(user)}'
|
>CHECK</button>
|
||||||
>CHECK</button><span class="check-status"></span></li>`)
|
</form><span class="check-status"></span></li>`)
|
||||||
}
|
}
|
||||||
myTable.appendChild(myTbody);
|
myTable.appendChild(myTbody);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user