Work on trainee reversion

This commit is contained in:
2021-09-02 10:23:53 +01:00
parent de5997b9da
commit 45dfe2db51
5 changed files with 22 additions and 2 deletions

View File

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

View File

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

View File

@@ -111,4 +111,9 @@
{% endfor %}
</div>
</div>
<div class="row">
<div class="col text-right">
{% include 'partials/last_edited.html' with target="trainee_history" %}
</div>
</div>
{% endblock %}

View File

@@ -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']})

View File

@@ -23,7 +23,6 @@
{% if version.revision.user %}
<a href="{% url 'profile_detail' pk=version.revision.user.pk %}" class="modal-href">
<img class="media-object rounded" src="{{ version.revision.user.profile_picture}}" />
</a>
{% else %}
<img class="media-object rounded" src="{% static 'imgs/pyrigs-avatar.png' %}" />
{% endif %}
@@ -31,6 +30,7 @@
<div class="media-body">
<h5>
{{ version.revision.user.name|default:'System' }}
{% if version.revision.user %}</a>{% endif %}
<span class="float-right"><small><span class="fas fa-clock"></span> <span class="time">{{version.revision.date_created|date:"c"}}</span> ({{version.revision.date_created}})</small></span>
</h5>
{% endif %}