More improvements to user management

This commit is contained in:
Ross
2022-11-21 12:43:46 +00:00
parent be3f420c68
commit 0b90308394
21 changed files with 321 additions and 44 deletions
+70 -9
View File
@@ -1,6 +1,10 @@
import secrets
from django_tables2 import SingleTableMixin
from atlas.models import CaseCollection, CidReportAnswer
from generic.decorators import user_is_cid_user_manager
from generic.filters import UserUserFilter
from generic.tables import UserUserTable
from generic.views import CidManagerRequiredMixin, get_question_and_content_type
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
from django.shortcuts import render, get_object_or_404, redirect
@@ -58,7 +62,7 @@ from rapids.views import GenericExamViews as RapidsExamsViews
from longs.views import GenericExamViews as LongsExamViews
from generic.forms import QuestionNoteForm
from generic.models import CidUser, QuestionNote, UserGrades, UserProfile
from generic.models import CidUser, QuestionNote, Supervisor, UserGrades, UserProfile
from django_filters.views import FilterView
@@ -506,6 +510,43 @@ class UserListView(CidManagerRequiredMixin, FilterView):
filterset_class = UserListFilter
class UserListTableView(CidManagerRequiredMixin, SingleTableMixin, FilterView):
model = User
table_class = UserUserTable
template_name = "generic/user_view.html"
filterset_class = UserUserFilter
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# user = self.request.user
#filters = {"archive": False, "exam_mode": True}
#physics_exams = [(i.name, i.pk) for i in PhysicsExam.objects.filter(**filters)]
#rapid_exams = [(i.name, i.pk) for i in RapidExam.objects.filter(**filters)]
#sba_exams = [(i.name, i.pk) for i in SbasExam.objects.filter(**filters)]
#longs_exams = [(i.name, i.pk) for i in LongExam.objects.filter(**filters)]
#anatomy_exams = [(i.name, i.pk) for i in AnatomyExam.objects.filter(**filters)]
#casecollection_exams = [
# (i.name, i.pk)
# for i in CaseCollection.objects.filter(archive=False, collection_type__gt=0)
#]
#context["physics_exams"] = physics_exams
#context["rapid_exams"] = rapid_exams
#context["sba_exams"] = sba_exams
#context["longs_exams"] = longs_exams
#context["anatomy_exams"] = anatomy_exams
#context["casecollection_exams"] = casecollection_exams
#cid_user_groups = [
# (i.name, i.pk) for i in CidUserGroup.objects.filter(archive=False)
#]
#context["cid_user_groups"] = cid_user_groups
return context
class UpdateUserView(CidManagerRequiredMixin, UpdateView):
model = User
@@ -523,14 +564,12 @@ class UpdateUserView(CidManagerRequiredMixin, UpdateView):
class UpdateUserProfileView(CidManagerRequiredMixin, UpdateView):
model = UserProfile
fields = [
"supervisor_name",
"supervisor_email",
"supervisor",
"grade",
"registration_number",
"peninsula_trainee",
] # Keep listing whatever fields
template_name = "user_update.html"
template_name = "user_update_profile.html"
slug_field = "user__username"
slug_url_kwarg = "slug"
@@ -571,6 +610,21 @@ class UpdateUserProfileView(CidManagerRequiredMixin, UpdateView):
# def get(self, request, *args, **kwargs):
# return self.post(request, *args, **kwargs)
@user_is_cid_user_manager
def accounts_check_users(request):
if request.method == "POST":
users = json.loads(request.POST.get("user_list"))
existing_users = []
for email in users:
if User.objects.filter(username=email).exists():
existing_users.append(email)
return JsonResponse({"users": existing_users})
return
@user_is_cid_user_manager
def accounts_bulk_create(request):
@@ -610,13 +664,20 @@ def accounts_bulk_create(request):
user_profile = UserProfile.objects.get(user=new_user)
user_profile.peninsula_trainee = True
if "supervisor_email" in user:
user_profile.supervisor_email = user["supervisor_email"]
if "supervisor_name" in user:
user_profile.supervisor_name = user["supervisor_name"]
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
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