diff --git a/RIGS/templates/event_detail.html b/RIGS/templates/event_detail.html
index a5b6ecb3..a0afc50e 100644
--- a/RIGS/templates/event_detail.html
+++ b/RIGS/templates/event_detail.html
@@ -46,7 +46,7 @@
{{ event.notes|linebreaksbr }}
{% endif %}
- {% include 'item_table.html' %}
+ {% include 'partials/item_table.html' %}
diff --git a/training/models.py b/training/models.py
index d47debdd..20e5abb0 100644
--- a/training/models.py
+++ b/training/models.py
@@ -2,6 +2,7 @@ from django.db import models
from RIGS.models import RevisionMixin, Profile
from reversion import revisions as reversion
+from django.urls import reverse
# 'shim' overtop the profile model to neatly contain all training related fields etc
class Trainee(Profile):
@@ -90,6 +91,7 @@ class TrainingItemQualification(models.Model):
# Levels
+@reversion.register(follow=["requirements"])
class TrainingLevel(models.Model, RevisionMixin):
description = models.CharField(max_length=120, blank=True)
TA = 0
@@ -151,11 +153,21 @@ class TrainingLevel(models.Model, RevisionMixin):
else:
return "{} {}".format(self.get_department_display(), self.get_level_display())
+ @property
+ def activity_feed_string(self):
+ return str(self)
+ def get_absolute_url(self):
+ return reverse('level_detail', kwargs={'pk': self.pk})
+
+
+@reversion.register
class TrainingLevelRequirement(models.Model):
level = models.ForeignKey('TrainingLevel', related_name='requirements', on_delete=models.RESTRICT)
item = models.ForeignKey('TrainingItem', on_delete=models.RESTRICT)
- depth = models.IntegerField(TrainingItemQualification.CHOICES)
+ depth = models.IntegerField(choices=TrainingItemQualification.CHOICES)
+
+ reversion_hide = True
def __str__(self):
return "{} in {}".format(TrainingItemQualification.CHOICES[self.depth][1], self.item)
diff --git a/training/templates/base_training.html b/training/templates/base_training.html
index 2f4c13da..3a696d53 100644
--- a/training/templates/base_training.html
+++ b/training/templates/base_training.html
@@ -20,6 +20,7 @@
Item Detail
+ Recent Changes
{% endif %}
{% endblock %}
diff --git a/training/templates/level_detail.html b/training/templates/level_detail.html
index 544c3b76..e1f557f9 100644
--- a/training/templates/level_detail.html
+++ b/training/templates/level_detail.html
@@ -4,7 +4,7 @@
{% load user_level_if_present from tags %}
{% block content %}
-{% if edit or True %}
+{% if request.user.is_supervisor or perms.training.change_traininglevel %}
Add New Requirement
diff --git a/training/views.py b/training/views.py
index 6b64767e..7a660b60 100644
--- a/training/views.py
+++ b/training/views.py
@@ -147,6 +147,12 @@ class RemoveRequirement(generic.DeleteView):
def get_success_url(self):
return self.request.POST.get('next')
+ @transaction.atomic()
+ @reversion.create_revision()
+ def delete(self, *args, **kwargs):
+ reversion.add_to_revision(self.get_object().level)
+ return super().delete(*args, **kwargs)
+
class ConfirmLevel(generic.RedirectView):
def get_redirect_url(self, *args, **kwargs):
diff --git a/versioning/versioning.py b/versioning/versioning.py
index 72308919..c7ee68ba 100644
--- a/versioning/versioning.py
+++ b/versioning/versioning.py
@@ -21,7 +21,6 @@ class FieldComparison(object):
def display_value(self, value):
if (isinstance(self.field, IntegerField) or isinstance(self.field, CharField)) and self.field.choices is not None and len(self.field.choices) > 0:
choice = [x[1] for x in self.field.choices if x[0] == value]
- # TODO This defensive piece should not be necessary?
if len(choice) > 0:
return choice[0]
if isinstance(self.field, BooleanField):
@@ -122,7 +121,7 @@ class ModelComparison(object):
old_item_versions = self.version.parent.revision.version_set.exclude(content_type=item_type)
new_item_versions = self.version.revision.version_set.exclude(content_type=item_type).exclude(content_type=ContentType.objects.get_for_model(models.EventAuthorisation))
- comparisonParams = {'excluded_keys': ['id', 'event', 'order', 'checklist']}
+ comparisonParams = {'excluded_keys': ['id', 'event', 'order', 'checklist', 'level']}
# Build some dicts of what we have
item_dict = {} # build a list of items, key is the item_pk