From 45dfe2db512b28a712721781cd7cdf82fc284196 Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Thu, 2 Sep 2021 10:23:53 +0100 Subject: [PATCH] Work on trainee reversion --- RIGS/models.py | 1 + training/models.py | 12 +++++++++++- training/templates/trainee_detail.html | 5 +++++ training/views.py | 4 ++++ versioning/templates/activity_feed_data.html | 2 +- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/RIGS/models.py b/RIGS/models.py index 95a75bf2..c8f218de 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -19,6 +19,7 @@ from reversion import revisions as reversion from reversion.models import Version +@reversion.register class Profile(AbstractUser): initials = models.CharField(max_length=5, unique=True, null=True, blank=False) phone = models.CharField(max_length=13, blank=True, default='') diff --git a/training/models.py b/training/models.py index 20e5abb0..8903b98b 100644 --- a/training/models.py +++ b/training/models.py @@ -5,6 +5,7 @@ from reversion import revisions as reversion from django.urls import reverse # 'shim' overtop the profile model to neatly contain all training related fields etc +@reversion.register # profile is already registered, but this triggers my custom versioning logic class Trainee(Profile): class Meta: proxy = True @@ -24,6 +25,9 @@ class Trainee(Profile): qual = self.qualifications_obtained.filter(item=item).first() # this is a somewhat ghetto version of get_or_none return qual is not None and qual.depth >= required_depth + def get_absolute_url(self): + return reverse('trainee_detail', kwargs={'pk': self.pk}) + # Items class TrainingCategory(models.Model): reference_number = models.CharField(max_length=3) @@ -35,6 +39,7 @@ class TrainingCategory(models.Model): class Meta: verbose_name_plural = 'Training Categories' + class TrainingItem(models.Model): reference_number = models.CharField(max_length=3) category = models.ForeignKey('TrainingCategory', related_name='items', on_delete=models.RESTRICT) @@ -75,7 +80,9 @@ class TrainingItemQualification(models.Model): super().save() for level in TrainingLevel.objects.all(): # Mm yes efficiency FIXME if level.user_has_requirements(self.trainee): - level_qualification = TrainingLevelQualification.objects.get_or_create(trainee=self.trainee, level=level) + with reversion.create_revision(): + level_qualification = TrainingLevelQualification.objects.get_or_create(trainee=self.trainee, level=level) + reversion.add_to_revision(self.trainee) @classmethod def get_colour_from_depth(obj, depth): @@ -176,12 +183,15 @@ class TrainingLevelRequirement(models.Model): unique_together = ["level", "item"] +@reversion.register 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(null=True) confirmed_by = models.ForeignKey('Trainee', related_name='confirmer', on_delete=models.RESTRICT, null=True) + reversion_hide = True + def __str__(self): return "{} qualified as a {}".format(self.trainee, self.level) diff --git a/training/templates/trainee_detail.html b/training/templates/trainee_detail.html index 4cc4968e..d34e2a55 100644 --- a/training/templates/trainee_detail.html +++ b/training/templates/trainee_detail.html @@ -111,4 +111,9 @@ {% endfor %} +
+
+ {% include 'partials/last_edited.html' with target="trainee_history" %} +
+
{% endblock %} diff --git a/training/views.py b/training/views.py index 7a660b60..3eb75f8a 100644 --- a/training/views.py +++ b/training/views.py @@ -155,9 +155,13 @@ class RemoveRequirement(generic.DeleteView): class ConfirmLevel(generic.RedirectView): + @transaction.atomic() + @reversion.create_revision() def get_redirect_url(self, *args, **kwargs): level_qualification = models.TrainingLevelQualification.objects.get(trainee=kwargs['pk'], level=kwargs['level_pk']) level_qualification.confirmed_by = self.request.user level_qualification.confirmed_on = timezone.now() level_qualification.save() + reversion.add_to_revision(level_qualification.trainee) + reversion.set_user(self.request.user) return reverse_lazy('trainee_detail', kwargs={'pk': kwargs['pk']}) diff --git a/versioning/templates/activity_feed_data.html b/versioning/templates/activity_feed_data.html index a41f8979..7f7130af 100644 --- a/versioning/templates/activity_feed_data.html +++ b/versioning/templates/activity_feed_data.html @@ -23,7 +23,6 @@ {% if version.revision.user %} - {% else %} {% endif %} @@ -31,6 +30,7 @@
{{ version.revision.user.name|default:'System' }} + {% if version.revision.user %}{% endif %} {{version.revision.date_created|date:"c"}} ({{version.revision.date_created}})
{% endif %}