Reversion working for training level

This commit is contained in:
2021-08-29 22:16:25 +01:00
parent 4a121964dc
commit de5997b9da
6 changed files with 23 additions and 5 deletions

View File

@@ -46,7 +46,7 @@
<p class="dont-break-out">{{ event.notes|linebreaksbr }}</p>
{% endif %}
<br>
{% include 'item_table.html' %}
{% include 'partials/item_table.html' %}
</div>
</div>
</div>

View File

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

View File

@@ -20,6 +20,7 @@
Item Detail</a>
</div>
</li>
<li class="nav-item"><a class="nav-link" href="{% url 'training_activity_table' %}"><span class="fas fa-random"></span> Recent Changes</a></li>
{% endif %}
{% endblock %}

View File

@@ -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 %}
<div class="col-sm-12 text-right pr-0">
<a type="button" class="btn btn-success mb-3" href="{% url 'add_requirement' pk=object.pk %}">
<span class="fas fa-plus"></span> Add New Requirement

View File

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

View File

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