Only require item prerequisites on competency assessed

This commit is contained in:
2022-03-07 16:43:00 +00:00
parent 900002bf71
commit 38eafbced3
4 changed files with 18 additions and 24 deletions

View File

@@ -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

View File

@@ -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):

View File

@@ -16,7 +16,7 @@
<li class="list-group-item {% if not item.active%}text-warning{%endif%}">{{ item }}
{% if item.prerequisites.exists %}
<div class="ml-3 font-italic">
<p class="text-info mb-0">Prerequisites:</p>
<p class="text-info mb-0">Passed Out Prerequisites:</p>
<ul>
{% for p in item.prerequisites.all %}
<li>{{p}}</li>

View File

@@ -39,7 +39,7 @@
<h3>Training Items</h3>
{% for depth in depths %}
<div class="form-group row">
<label for="selectpicker" class="col-sm-2 rounded bg-{% colour_from_depth depth.0 %} text-center py-1">{{ depth.1 }} Items</label>
<label for="selectpicker" class="col-sm-2 text-{% colour_from_depth depth.0 %} py-1">{{ depth.1 }} Items</label>
<select multiple name="items_{{depth.0}}" id="items_{{depth.0}}_id" class="selectpicker col-sm-10 px-0" data-live-search="true" data-sourceurl="{% url 'api_secure' model='training_item' %}?fields=display_id,description&filters=active">
</select>
</div>