From 900002bf715e052977c6171987afd9ba6420bba6 Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Sun, 6 Mar 2022 18:30:03 +0000 Subject: [PATCH] Modalise training item qualification edit Also fixed some stuff --- training/forms.py | 18 ++++----- training/models.py | 2 +- .../templates/partials/supervisor_field.html | 2 +- training/templates/trainee_item_list.html | 37 ++++++++++++++++++- training/tests/test_unit.py | 1 + training/views.py | 5 ++- 6 files changed, 52 insertions(+), 13 deletions(-) diff --git a/training/forms.py b/training/forms.py index 41869833..b3f9a570 100644 --- a/training/forms.py +++ b/training/forms.py @@ -3,15 +3,14 @@ import datetime from django import forms from training import models -from RIGS.models import Profile -def validate_user_can_train_in(supervisor, item): +def validate_user_can_train_in(self, supervisor, item): if item.category.training_level: if not supervisor.level_qualifications.filter(level=item.category.training_level): - raise forms.ValidationError('Selected supervising person is missing requisite training level to train in this department') + self.add_error('supervisor', 'Selected supervising person is missing requisite training level to train in this department') elif not supervisor.is_supervisor: - raise forms.ValidationError('Selected supervisor must actually *be* a supervisor...') + self.add_error('supervisor', 'Selected supervisor must actually *be* a supervisor...') class QualificationForm(forms.ModelForm): @@ -28,8 +27,9 @@ class QualificationForm(forms.ModelForm): cleaned_data = super().clean() item = cleaned_data.get('item') trainee = cleaned_data.get('trainee') - supervisor = self.cleaned_data.get('supervisor') - validate_user_can_train_in(supervisor, item) + supervisor = cleaned_data.get('supervisor') + if supervisor: + validate_user_can_train_in(self, supervisor, item) if not item.user_has_requirements(trainee): self.add_error('item', 'Missing prerequisites') @@ -52,10 +52,10 @@ class QualificationForm(forms.ModelForm): class AddQualificationForm(QualificationForm): def __init__(self, *args, **kwargs): - kwargs.pop('pk', None) + pk = kwargs.pop('pk', None) super().__init__(*args, **kwargs) if pk: - self.fields['trainee'].initial = Profile.objects.get(pk=pk) + self.fields['trainee'].initial = models.Trainee.objects.get(pk=pk) class RequirementForm(forms.ModelForm): @@ -97,5 +97,5 @@ class SessionLogForm(forms.Form): raise forms.ValidationError('One may not supervise oneself...') for depth in models.TrainingItemQualification.CHOICES: for item in self.cleaned_data.get('items_{depth.0}', []): - validate_user_can_train_in(supervisor, item) + validate_user_can_train_in(self, supervisor, item) return supervisor diff --git a/training/models.py b/training/models.py index 099be7c8..72f33a66 100644 --- a/training/models.py +++ b/training/models.py @@ -198,7 +198,7 @@ class TrainingItemQualification(models.Model, RevisionMixin): return "info" def get_absolute_url(self): - return reverse('trainee_item_detail', kwargs={'pk': self.trainee.pk}) + return reverse('edit_qualification', kwargs={'pk': self.pk}) class Meta: unique_together = ["trainee", "item", "depth"] diff --git a/training/templates/partials/supervisor_field.html b/training/templates/partials/supervisor_field.html index b0e07815..a58e697b 100644 --- a/training/templates/partials/supervisor_field.html +++ b/training/templates/partials/supervisor_field.html @@ -1,6 +1,6 @@ diff --git a/training/templates/trainee_item_list.html b/training/templates/trainee_item_list.html index b43ace80..235a849a 100644 --- a/training/templates/trainee_item_list.html +++ b/training/templates/trainee_item_list.html @@ -5,6 +5,41 @@ {% load linkornone from filters %} {% load button from filters %} {% load colour_from_depth from tags %} +{% load static %} + +{% block css %} + +{% endblock %} + +{% block preload_js %} + +{% endblock %} + +{% block js %} + + +{% endblock %} {% block content %}

Search by supervisor name, item name or item ID

{% include 'partials/list_search.html' %} @@ -33,7 +68,7 @@ {{ object.supervisor }} {{ object.notes }} {% if request.user.is_supervisor or perms.training.change_trainingitemqualification %} - {% button 'edit' 'edit_qualification' object.pk %} + {% button 'edit' 'edit_qualification' object.pk id="edit" %} {% endif %} {% empty %} diff --git a/training/tests/test_unit.py b/training/tests/test_unit.py index 6dbf4f0b..4c23e0ab 100644 --- a/training/tests/test_unit.py +++ b/training/tests/test_unit.py @@ -17,6 +17,7 @@ def test_add_qualification(admin_client, trainee, admin_user, training_item): assertFormError(response, 'form', 'date', 'Qualification date may not be in the future') assertFormError(response, 'form', 'supervisor', 'One may not supervise oneself...') response = admin_client.post(url, {'date': date, 'trainee': trainee.pk, 'supervisor': admin_user.pk, 'item': training_item.pk}) + print(response.content) assertFormError(response, 'form', 'supervisor', 'Selected supervisor must actually *be* a supervisor...') diff --git a/training/views.py b/training/views.py index 5d431c7c..50d1c4a6 100644 --- a/training/views.py +++ b/training/views.py @@ -130,7 +130,7 @@ class AddQualification(generic.CreateView, ModalURLMixin): return kwargs -class EditQualification(generic.UpdateView): +class EditQualification(generic.UpdateView, ModalURLMixin): template_name = 'edit_training_record.html' model = models.TrainingItemQualification form_class = forms.QualificationForm @@ -148,6 +148,9 @@ class EditQualification(generic.UpdateView): reversion.add_to_revision(form.cleaned_data['trainee']) return super().form_valid(form, *args, **kwargs) + def get_success_url(self): + return self.get_close_url('edit_qualification', 'trainee_item_detail') + class AddLevelRequirement(generic.CreateView, ModalURLMixin): template_name = "add_level_requirement.html"