Improvements to user management

This commit is contained in:
Ross
2022-11-14 14:25:24 +00:00
parent 02eb812122
commit 6e6ba178b5
27 changed files with 515 additions and 20 deletions
+87 -2
View File
@@ -1,5 +1,6 @@
from collections import defaultdict, Counter
from pathlib import Path
import secrets
import statistics
import threading
from dal import autocomplete
@@ -35,6 +36,8 @@ import urllib
from django.views import View
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django_filters.views import FilterView
from django_filters import FilterSet, OrderingFilter
from django_tables2.views import SingleTableMixin
@@ -49,10 +52,12 @@ from .forms import (
CidUserForm,
ExaminationForm,
CidUserGroupForm,
SupervisorForm,
UserUserForm,
UserUserGroupForm,
)
from .models import CidUser, CidUserGroup, Examination, QuestionNote, UserUserGroup, get_next_cid
from .models import CidUser, CidUserGroup, Examination, QuestionNote, Supervisor, UserGrades, UserProfile, UserUserGroup, get_next_cid
from rapids.models import Rapid as RapidQuestion
from rapids.models import Exam as RapidExam
@@ -2500,4 +2505,84 @@ class ExamDeleteBase(RevisionMixin, DeleteView):
def exam_inactive(request, context):
return render(request, "exam_inactive.html", context)
return render(request, "exam_inactive.html", context)
#class UserUserCreate(CidManagerRequiredMixin, CreateView):
# model = User
# form_class = UserUserForm
# template_name: str = "generic/user_creation_form.html"
#
# success_url = reverse_lazy("accounts_list")
def create_user(request, context=None):
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = UserUserForm(request.POST)
# check whether it's valid:
if form.is_valid():
try:
user_dict = {
"username": request.POST["username"],
"first_name": request.POST["first_name"],
"last_name": request.POST["last_name"],
"email": request.POST["username"],
"password": secrets.token_hex(nbytes=16)
}
new_user = User.objects.create_user(**user_dict)
except Exception as error:
errors = f"Unable to create account: {error}"
return render(request, 'generic/user_creation_form.html', {'form': form, "errors": errors})
try:
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 request.POST["grade"]:
grade = UserGrades.objects.get(name=f"ST{ request.POST['grade'] }")
user_profile.grade = grade
user_profile.save()
except Exception as error:
errors = f"Unable to create account profile {error}"
return render(request, 'generic/user_creation_form.html', {'form': form, "errors": errors})
return HttpResponseRedirect(reverse_lazy("accounts_list"))
return reverse_lazy("accounts_list")
# if a GET (or any other method) we'll create a blank form
else:
form = UserUserForm()
return render(request, 'generic/user_creation_form.html', {'form': form})
class SupervisorDetail(CidManagerRequiredMixin, DetailView):
model = Supervisor
class SupervisorDelete(CidManagerRequiredMixin, DeleteView):
model = Supervisor
template_name: str = "confirm_delete.html"
success_url = reverse_lazy("generic:supervisor")
class SupervisorUpdate(CidManagerRequiredMixin, UpdateView):
model = Supervisor
form_class = SupervisorForm
#success_url = reverse_lazy("generic:supervisor_detail", kwargs={'pk': self.pk})
class SupervisorCreate(CidManagerRequiredMixin, CreateView):
model = Supervisor
form_class = SupervisorForm
#success_url = reverse_lazy("generic:supervisor_detail")
class SupervisorList(CidManagerRequiredMixin, ListView):
model = Supervisor