Files
PyRIGS/training/models.py

63 lines
2.1 KiB
Python

from django.db import models
from RIGS.models import RevisionMixin, Profile
from reversion import revisions as reversion
# 'shim' overtop the profile model to neatly contain all training related fields etc
@reversion.register
class Trainee(Profile):
pass
# Items
class TrainingCategory(models.Model):
number = models.CharField(max_length=3)
name = models.CharField(max_length=50)
class TrainingItem(models.Model):
category = models.ForeignKey('TrainingCategory', related_name='category', on_delete=models.RESTRICT)
number = models.CharField(max_length=3)
name = models.CharField(max_length=50)
def __str__(self):
return "{}.{} {}".format(self.category.number, self.number, self.name)
# TODO Validation that dates cannot be in the future
class TrainingItemQualification(models.Model):
STARTED = 0
COMPLETE = 1
PASSED_OUT = 2
CHOICES = (
(STARTED, 'Training Started'),
(COMPLETE, 'Training Complete'),
(PASSED_OUT, 'Passed Out'),
)
item = models.ForeignKey('TrainingItem', on_delete=models.RESTRICT)
trainee = models.ForeignKey('Trainee', related_name='items', on_delete=models.RESTRICT)
depth = models.IntegerField(choices=CHOICES)
date = models.DateTimeField()
supervisor = models.ForeignKey('Trainee', related_name='training_started', on_delete=models.RESTRICT)
notes = models.TextField()
# Levels
class TrainingLevel(models.Model, RevisionMixin):
ASSISTANT = 0
TECHNICIAN = 1
SUPERVISOR = 2
CHOICES = (
(ASSISTANT, 'Technical Assistant'),
(TECHNICIAN, 'Technician'),
(SUPERVISOR, 'Supervisor'),
)
department = models.CharField(max_length=50, null=True) # Technical Assistant does not have a department
level = models.IntegerField(choices=CHOICES)
class TrainingLevelQualification(models.Model):
trainee = models.ForeignKey('Trainee', related_name='levels', on_delete=models.RESTRICT)
level = models.ForeignKey('TrainingLevel', on_delete=models.RESTRICT)
confirmed_on = models.DateTimeField()
confirmed_by = models.ForeignKey('Trainee', related_name='confirmer', on_delete=models.RESTRICT)