diff --git a/generic/forms.py b/generic/forms.py
index 99f19b60..efe55b82 100755
--- a/generic/forms.py
+++ b/generic/forms.py
@@ -684,7 +684,7 @@ class TraineeForm(Form):
last_name = CharField(max_length=255, required=True)
grade = ModelChoiceField(UserGrades.objects.all(), required=False)
supervisor = ModelChoiceField(
- Supervisor.objects.all(), required=False, widget=autocomplete.ModelSelect2(url='generic:supervisor-autocomplete')
+ Supervisor.objects.all().order_by("name"), required=False, widget=autocomplete.ModelSelect2(url='generic:supervisor-autocomplete')
) # Needs to be a user/object ref
#class Meta:
diff --git a/generic/models.py b/generic/models.py
index f210aaff..8098247b 100644
--- a/generic/models.py
+++ b/generic/models.py
@@ -1643,7 +1643,7 @@ class Supervisor(models.Model):
on_delete=models.CASCADE,
null=True,
blank=True,
- help_text="If the supervisor has an account on the test system that can be associated here",
+ help_text="If the supervisor has an account on the test system it can be associated here",
)
site = models.ForeignKey(
"Site",
diff --git a/generic/tables.py b/generic/tables.py
index 7cb64b08..0e9cd972 100644
--- a/generic/tables.py
+++ b/generic/tables.py
@@ -1,3 +1,4 @@
+from django.urls import reverse
import django_tables2 as tables
from django_tables2.utils import A
@@ -312,8 +313,9 @@ class SupervisorTable(tables.Table):
verbose_name="Name",
)
- edit = tables.LinkColumn(
- "generic:supervisor_edit", text="Edit", args=[A("pk")], orderable=False
+ # We don't use a link column as we want to add a redirect parameter
+ edit = tables.Column(
+ accessor="pk", orderable=False
)
class Meta:
@@ -321,4 +323,8 @@ class SupervisorTable(tables.Table):
template_name = "django_tables2/bootstrap4.html"
sequence = ("name", "email")
- exclude = ("id",)
\ No newline at end of file
+ exclude = ("id",)
+
+ def render_edit(self, value, record):
+ url = f"{reverse("generic:supervisor_edit", args=[record.pk])}?redirect={self.request.path}"
+ return format_html("Edit", url)
\ No newline at end of file
diff --git a/generic/templates/generic/supervisor_form.html b/generic/templates/generic/supervisor_form.html
index 53401b3a..58f873da 100644
--- a/generic/templates/generic/supervisor_form.html
+++ b/generic/templates/generic/supervisor_form.html
@@ -18,7 +18,8 @@
{% endblock %}
{% block content %}
Edit Supervisor / {{object.cid}}
-Use this form to create / edit a supervisor
+Use this form to create / edit a supervisor
+Trainees can be assigned to a supervisor by editing the trainee and selecting the supervisor from the drop down list.
{% if errors %}
{{errors}}
{% endif %}
diff --git a/generic/views.py b/generic/views.py
index 36fd1617..b15bc155 100644
--- a/generic/views.py
+++ b/generic/views.py
@@ -112,6 +112,13 @@ import plotly.express as px
from django.db.models import Prefetch
+
+class RedirectMixin():
+ def get_success_url(self) -> str:
+ if "redirect" in self.request.GET:
+ return self.request.GET["redirect"]
+ return super().get_success_url()
+
class AuthorRequiredMixin(object):
def get_object(self, *args, **kwargs):
obj = super().get_object(*args, **kwargs)
@@ -3480,7 +3487,7 @@ class SupervisorDelete(CidManagerRequiredMixin, DeleteView):
success_url = reverse_lazy("generic:supervisor")
-class SupervisorUpdate(CidManagerRequiredMixin, UpdateView):
+class SupervisorUpdate(RedirectMixin, CidManagerRequiredMixin, UpdateView):
model = Supervisor
form_class = SupervisorForm
# success_url = reverse_lazy("generic:supervisor_detail", kwargs={'pk': self.pk})
@@ -3630,12 +3637,6 @@ class ExamGroupsUpdateBase(
kwargs.update({"user": self.request.user})
return kwargs
-class RedirectMixin():
- def get_success_url(self) -> str:
- if "redirect" in self.request.GET:
- return self.request.GET["redirect"]
- return super().get_success_url()
-
class UpdateQuestionMixin(RedirectMixin, RevisionMixin, UpdateView):
def get_form_kwargs(self):
diff --git a/rad/views.py b/rad/views.py
index a81cd630..9af2db23 100644
--- a/rad/views.py
+++ b/rad/views.py
@@ -1,5 +1,5 @@
import secrets
-from typing import Optional
+from typing import Any, Optional
from django.conf import settings
from django_tables2 import SingleTableMixin
@@ -77,6 +77,8 @@ from django.template import RequestContext
from django.db.models import Q
+from dal import autocomplete
+
def feedback_checker(user):
return user.groups.filter(name="feedback_checker").exists()
@@ -655,6 +657,18 @@ class UpdateUserProfileView(UpdateView):
self.fields = ["grade", "registration_number", "site"]
return super().dispatch(request, *args, **kwargs)
+ def get_context_data(self, **kwargs: reverse_lazy) -> dict[str, Any]:
+ context = super().get_context_data(**kwargs)
+
+ form = context["form"]
+
+ if "supervisor" in form.fields:
+ #form.fields["supervisor"].queryset = Supervisor.objects.all()
+ form.fields["supervisor"] = forms.ModelChoiceField(
+ Supervisor.objects.all().order_by("name"), required=False, widget=autocomplete.ModelSelect2(url='generic:supervisor-autocomplete')
+ )
+ return context
+
def get_success_url(self):
if "redirect" in self.request.GET:
diff --git a/templates/index.html b/templates/index.html
index 0a9a82b7..2f55f505 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,5 +1,5 @@
{% extends 'base.html' %}
-
+{% load auth_extras %}
{% block content %}
@@ -53,7 +53,8 @@
{% endif %}
- {% if request.user.is_staff %}
+ {% if request.user|has_group:"cid_user_manager" %}
+ Manage
trainees
Manage users
here and candidates
here
Manage Examinations