diff --git a/training/forms.py b/training/forms.py index b3f9a570..c97b3c78 100644 --- a/training/forms.py +++ b/training/forms.py @@ -5,14 +5,6 @@ from django import forms from training import models -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): - self.add_error('supervisor', 'Selected supervising person is missing requisite training level to train in this department') - elif not supervisor.is_supervisor: - self.add_error('supervisor', 'Selected supervisor must actually *be* a supervisor...') - - class QualificationForm(forms.ModelForm): related_models = { 'item': models.TrainingItem, @@ -23,16 +15,6 @@ class QualificationForm(forms.ModelForm): model = models.TrainingItemQualification fields = '__all__' - def clean(self): - cleaned_data = super().clean() - item = cleaned_data.get('item') - trainee = cleaned_data.get('trainee') - 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') - def clean_date(self): date = self.cleaned_data.get('date') if date > date.today(): @@ -95,7 +77,4 @@ class SessionLogForm(forms.Form): supervisor = self.cleaned_data['supervisor'] if supervisor in self.cleaned_data.get('trainees', []): 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(self, supervisor, item) return supervisor diff --git a/training/models.py b/training/models.py index 72f33a66..ee5cadf5 100644 --- a/training/models.py +++ b/training/models.py @@ -181,12 +181,27 @@ class TrainingItemQualification(models.Model, RevisionMixin): objects = TrainingItemQualificationManager() + def clean(self): + errdict = {} + # Validate supervisor can train in this item + if hasattr(self, 'supervisor'): # This will be false if form validation fails + if self.item.category.training_level: + if not self.supervisor.level_qualifications.filter(level=self.item.category.training_level): + errdict['supervisor'] = ('Selected supervising person is missing requisite training level to train in this department') + elif not self.supervisor.is_supervisor: + errdict['supervisor'] = ('Selected supervisor must actually *be* a supervisor...') + # Item requirements only apply to being passed out + if self.depth == TrainingItemQualification.PASSED_OUT and not self.item.user_has_requirements(self.trainee): + errdict['item'] = ('Missing prerequisites') + if errdict != {}: # If there was an error when validation + raise ValidationError(errdict) + def __str__(self): return f"{self.get_depth_display()} in {self.item} on {self.date.strftime('%b %d %Y')}" @property def activity_feed_string(self): - return f"{self.get_depth_display()} in {self.item}" + return f"{self.trainee} {self.get_depth_display().lower()} {self.get_depth_display()} in {self.item}" @classmethod def get_colour_from_depth(cls, depth): diff --git a/training/templates/item_list.html b/training/templates/item_list.html index b4880246..556c550b 100644 --- a/training/templates/item_list.html +++ b/training/templates/item_list.html @@ -16,7 +16,7 @@
  • {{ item }} {% if item.prerequisites.exists %}
    -

    Prerequisites:

    +

    Passed Out Prerequisites: