mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-19 14:32:16 +00:00
Force trainingitemqualifications to be unique
This commit is contained in:
@@ -34,7 +34,7 @@ class TrainingCategory(models.Model):
|
|||||||
|
|
||||||
class TrainingItem(models.Model):
|
class TrainingItem(models.Model):
|
||||||
reference_number = models.CharField(max_length=3)
|
reference_number = models.CharField(max_length=3)
|
||||||
category = models.ForeignKey('TrainingCategory', related_name='items', on_delete=models.RESTRICT)
|
category = models.ForeignKey('TrainingCategory', related_name='items', on_delete=models.RESTRICT)
|
||||||
name = models.CharField(max_length=50)
|
name = models.CharField(max_length=50)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
@@ -57,10 +57,10 @@ class TrainingItemQualification(models.Model):
|
|||||||
(PASSED_OUT, 'Passed Out'),
|
(PASSED_OUT, 'Passed Out'),
|
||||||
)
|
)
|
||||||
item = models.ForeignKey('TrainingItem', on_delete=models.RESTRICT)
|
item = models.ForeignKey('TrainingItem', on_delete=models.RESTRICT)
|
||||||
trainee = models.ForeignKey('Trainee', related_name='qualifications_obtained', on_delete=models.RESTRICT)
|
trainee = models.ForeignKey('Trainee', related_name='qualifications_obtained', on_delete=models.RESTRICT)
|
||||||
depth = models.IntegerField(choices=CHOICES)
|
depth = models.IntegerField(choices=CHOICES)
|
||||||
date = models.DateField()
|
date = models.DateField()
|
||||||
# TODO Remember that some training is external. Support for making an organisation the trainer?
|
# TODO Remember that some training is external. Support for making an organisation the trainer?
|
||||||
supervisor = models.ForeignKey('Trainee', related_name='qualifications_granted', on_delete=models.RESTRICT)
|
supervisor = models.ForeignKey('Trainee', related_name='qualifications_granted', on_delete=models.RESTRICT)
|
||||||
notes = models.TextField(blank=True)
|
notes = models.TextField(blank=True)
|
||||||
# TODO Maximum depth - some things stop at Complete and you can't be passed out in them
|
# TODO Maximum depth - some things stop at Complete and you can't be passed out in them
|
||||||
@@ -74,6 +74,9 @@ class TrainingItemQualification(models.Model):
|
|||||||
if level.user_has_requirements(self.trainee):
|
if level.user_has_requirements(self.trainee):
|
||||||
level_qualification = TrainingLevelQualification.objects.create(trainee=self.trainee, level=level)
|
level_qualification = TrainingLevelQualification.objects.create(trainee=self.trainee, level=level)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
unique_together = ["trainee", "item", "depth"]
|
||||||
|
|
||||||
|
|
||||||
# Levels
|
# Levels
|
||||||
class TrainingLevel(models.Model, RevisionMixin):
|
class TrainingLevel(models.Model, RevisionMixin):
|
||||||
@@ -126,7 +129,7 @@ class TrainingLevel(models.Model, RevisionMixin):
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
def user_has_requirements(self, user):
|
def user_has_requirements(self, user):
|
||||||
return all(TrainingItem.user_has_qualification(req.item, user, req.depth) for req in self.requirements.select_related().all())
|
return all(TrainingItem.user_has_qualification(req.item, user, req.depth) for req in self.requirements.select_related().all())
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.department is None: # 2TA
|
if self.department is None: # 2TA
|
||||||
@@ -145,7 +148,7 @@ class TrainingLevelRequirement(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class TrainingLevelQualification(models.Model):
|
class TrainingLevelQualification(models.Model):
|
||||||
trainee = models.ForeignKey('Trainee', related_name='levels', on_delete=models.RESTRICT)
|
trainee = models.ForeignKey('Trainee', related_name='levels', on_delete=models.RESTRICT)
|
||||||
level = models.ForeignKey('TrainingLevel', on_delete=models.RESTRICT)
|
level = models.ForeignKey('TrainingLevel', on_delete=models.RESTRICT)
|
||||||
confirmed_on = models.DateTimeField(null=True)
|
confirmed_on = models.DateTimeField(null=True)
|
||||||
confirmed_by = models.ForeignKey('Trainee', related_name='confirmer', on_delete=models.RESTRICT, null=True)
|
confirmed_by = models.ForeignKey('Trainee', related_name='confirmer', on_delete=models.RESTRICT, null=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user