More improvements to user management
This commit is contained in:
+70
-9
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user