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 %} {% 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