diff --git a/RIGS/static/imgs/tappytaptap.gif b/RIGS/static/imgs/tappytaptap.gif new file mode 100644 index 00000000..ff7511bb Binary files /dev/null and b/RIGS/static/imgs/tappytaptap.gif differ diff --git a/templates/index.html b/templates/index.html index 2dd304ef..ce238e34 100644 --- a/templates/index.html +++ b/templates/index.html @@ -23,7 +23,8 @@
- + {% now "m-d" as todays_date %} +

Asset Database

Asset List @@ -42,6 +43,8 @@

Training Database

diff --git a/training/admin.py b/training/admin.py index 00c93a2c..0f3eacf4 100644 --- a/training/admin.py +++ b/training/admin.py @@ -3,7 +3,4 @@ from training import models from reversion.admin import VersionAdmin admin.site.register(models.Trainee, VersionAdmin) -admin.site.register(models.TechnicalAssistant, VersionAdmin) -admin.site.register(models.Technician, VersionAdmin) -admin.site.register(models.Supervisor, VersionAdmin) -admin.site.register(models.Department, VersionAdmin) +admin.site.register(models.TrainingLevel, VersionAdmin) diff --git a/training/migrations/0002_auto_20210630_1514.py b/training/migrations/0002_auto_20210630_1514.py new file mode 100644 index 00000000..cede19b4 --- /dev/null +++ b/training/migrations/0002_auto_20210630_1514.py @@ -0,0 +1,118 @@ +# Generated by Django 3.1.5 on 2021-06-30 14:14 + +import RIGS.models +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('training', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='TrainingItemQualification', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('depth', models.IntegerField(choices=[(0, 'Training Started'), (1, 'Training Complete'), (2, 'Passed Out')])), + ('date', models.DateTimeField()), + ('notes', models.TextField()), + ], + ), + migrations.CreateModel( + name='TrainingLevel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('department', models.CharField(max_length=50, null=True)), + ('level', models.IntegerField(choices=[(0, 'Technical Assistant'), (1, 'Technician'), (2, 'Supervisor')])), + ], + bases=(models.Model, RIGS.models.RevisionMixin), + ), + migrations.CreateModel( + name='TrainingLevelQualification', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('confirmed_on', models.DateTimeField()), + ('confirmed_by', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='confirmer', to='training.trainee')), + ('level', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='training.traininglevel')), + ('trainee', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='levels', to='training.trainee')), + ], + ), + migrations.RemoveField( + model_name='supervisor', + name='department', + ), + migrations.RemoveField( + model_name='supervisor', + name='requirements', + ), + migrations.RemoveField( + model_name='technicalassistant', + name='requirements', + ), + migrations.RemoveField( + model_name='technician', + name='department', + ), + migrations.RemoveField( + model_name='technician', + name='requirements', + ), + migrations.RemoveField( + model_name='trainingiteminstance', + name='item', + ), + migrations.RemoveField( + model_name='trainingiteminstance', + name='passed_out_by', + ), + migrations.RemoveField( + model_name='trainingiteminstance', + name='trainee', + ), + migrations.RemoveField( + model_name='trainingiteminstance', + name='training_complete_by', + ), + migrations.RemoveField( + model_name='trainingiteminstance', + name='training_started_by', + ), + migrations.AlterField( + model_name='trainingitem', + name='category', + field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='training.trainingcategory'), + ), + migrations.DeleteModel( + name='Department', + ), + migrations.DeleteModel( + name='Supervisor', + ), + migrations.DeleteModel( + name='TechnicalAssistant', + ), + migrations.DeleteModel( + name='Technician', + ), + migrations.DeleteModel( + name='TrainingItemInstance', + ), + migrations.AddField( + model_name='trainingitemqualification', + name='item', + field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='training.trainingitem'), + ), + migrations.AddField( + model_name='trainingitemqualification', + name='supervisor', + field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='training_started', to='training.trainee'), + ), + migrations.AddField( + model_name='trainingitemqualification', + name='trainee', + field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='items', to='training.trainee'), + ), + ] diff --git a/training/models.py b/training/models.py index cb346452..f880ed64 100644 --- a/training/models.py +++ b/training/models.py @@ -10,52 +10,50 @@ class Trainee(Profile): # Items class TrainingCategory(models.Model): - number = models.CharField(max_length=3) # Does this 1:1 correspond with a department? I think the answer is sometimes... - name = models.CharField(max_length=50) - - -class TrainingItem(models.Model): - category = models.ForeignKey('TrainingCategory', on_delete=models.CASCADE) number = models.CharField(max_length=3) name = models.CharField(max_length=50) -class TrainingItemInstance(models.Model): - item = models.ForeignKey('TrainingItem', on_delete=models.CASCADE) - trainee = models.ForeignKey('Trainee', related_name='items', on_delete=models.CASCADE) - - training_started_on = models.DateField() - training_started_by = models.ForeignKey('Trainee', related_name='training_started', on_delete=models.CASCADE) - - training_complete_on = models.DateField() - training_complete_by = models.ForeignKey('Trainee', related_name='training_complete', on_delete=models.CASCADE) - - passed_out_on = models.DateField() - passed_out_by = models.ForeignKey('Trainee', related_name='passed_out', on_delete=models.CASCADE) - - -class Department(models.Model): +class TrainingItem(models.Model): + category = models.ForeignKey('TrainingCategory', on_delete=models.RESTRICT) + number = models.CharField(max_length=3) name = models.CharField(max_length=50) +# 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): - requirements = models.ManyToManyField(TrainingItem) - - class Meta: - abstract = True - -@reversion.register -class TechnicalAssistant(TrainingLevel): - # department = models.ForeignKey('Department', on_delete=models.CASCADE) - pass + 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) -@reversion.register -class Technician(TrainingLevel): - department = models.ForeignKey('Department', on_delete=models.CASCADE) - - -@reversion.register -class Supervisor(TrainingLevel): - department = models.ForeignKey('Department', on_delete=models.CASCADE) +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) diff --git a/training/templates/item_list.html b/training/templates/item_list.html new file mode 100644 index 00000000..76479fdb --- /dev/null +++ b/training/templates/item_list.html @@ -0,0 +1,5 @@ +{% extends 'base_rigs.html' %} + +{% block content %} + +{% endblock %} diff --git a/training/urls.py b/training/urls.py new file mode 100644 index 00000000..d2d839f0 --- /dev/null +++ b/training/urls.py @@ -0,0 +1,5 @@ +from django.urls import path + +urlpatterns = [ + +]