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 from reversion.models import Version
@reversion.register
class Profile(AbstractUser): class Profile(AbstractUser):
initials = models.CharField(max_length=5, unique=True, null=True, blank=False) initials = models.CharField(max_length=5, unique=True, null=True, blank=False)
phone = models.CharField(max_length=13, blank=True, default='') 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 from django.urls import reverse
# 'shim' overtop the profile model to neatly contain all training related fields etc # '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 Trainee(Profile):
class Meta: class Meta:
proxy = True 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 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 return qual is not None and qual.depth >= required_depth
def get_absolute_url(self):
return reverse('trainee_detail', kwargs={'pk': self.pk})
# Items # Items
class TrainingCategory(models.Model): class TrainingCategory(models.Model):
reference_number = models.CharField(max_length=3) reference_number = models.CharField(max_length=3)
@@ -35,6 +39,7 @@ class TrainingCategory(models.Model):
class Meta: class Meta:
verbose_name_plural = 'Training Categories' verbose_name_plural = 'Training Categories'
class TrainingItem(models.Model): class TrainingItem(models.Model):
reference_number = models.CharField(max_length=3) reference_number = models.CharField(max_length=3)
category = models.ForeignKey('TrainingCategory', related_name='items', on_delete=models.RESTRICT) category = models.ForeignKey('TrainingCategory', related_name='items', on_delete=models.RESTRICT)
@@ -75,7 +80,9 @@ class TrainingItemQualification(models.Model):
super().save() super().save()
for level in TrainingLevel.objects.all(): # Mm yes efficiency FIXME for level in TrainingLevel.objects.all(): # Mm yes efficiency FIXME
if level.user_has_requirements(self.trainee): 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 @classmethod
def get_colour_from_depth(obj, depth): def get_colour_from_depth(obj, depth):
@@ -176,12 +183,15 @@ class TrainingLevelRequirement(models.Model):
unique_together = ["level", "item"] unique_together = ["level", "item"]
@reversion.register
class TrainingLevelQualification(models.Model): class TrainingLevelQualification(models.Model):
trainee = models.ForeignKey('Trainee', related_name='levels', on_delete=models.RESTRICT) trainee = models.ForeignKey('Trainee', related_name='levels', on_delete=models.RESTRICT)
level = models.ForeignKey('TrainingLevel', on_delete=models.RESTRICT) level = models.ForeignKey('TrainingLevel', on_delete=models.RESTRICT)
confirmed_on = models.DateTimeField(null=True) confirmed_on = models.DateTimeField(null=True)
confirmed_by = models.ForeignKey('Trainee', related_name='confirmer', on_delete=models.RESTRICT, null=True) confirmed_by = models.ForeignKey('Trainee', related_name='confirmer', on_delete=models.RESTRICT, null=True)
reversion_hide = True
def __str__(self): def __str__(self):
return "{} qualified as a {}".format(self.trainee, self.level) return "{} qualified as a {}".format(self.trainee, self.level)

View File

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

View File

@@ -155,9 +155,13 @@ class RemoveRequirement(generic.DeleteView):
class ConfirmLevel(generic.RedirectView): class ConfirmLevel(generic.RedirectView):
@transaction.atomic()
@reversion.create_revision()
def get_redirect_url(self, *args, **kwargs): def get_redirect_url(self, *args, **kwargs):
level_qualification = models.TrainingLevelQualification.objects.get(trainee=kwargs['pk'], level=kwargs['level_pk']) level_qualification = models.TrainingLevelQualification.objects.get(trainee=kwargs['pk'], level=kwargs['level_pk'])
level_qualification.confirmed_by = self.request.user level_qualification.confirmed_by = self.request.user
level_qualification.confirmed_on = timezone.now() level_qualification.confirmed_on = timezone.now()
level_qualification.save() 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']}) return reverse_lazy('trainee_detail', kwargs={'pk': kwargs['pk']})

View File

@@ -23,7 +23,6 @@
{% if version.revision.user %} {% if version.revision.user %}
<a href="{% url 'profile_detail' pk=version.revision.user.pk %}" class="modal-href"> <a href="{% url 'profile_detail' pk=version.revision.user.pk %}" class="modal-href">
<img class="media-object rounded" src="{{ version.revision.user.profile_picture}}" /> <img class="media-object rounded" src="{{ version.revision.user.profile_picture}}" />
</a>
{% else %} {% else %}
<img class="media-object rounded" src="{% static 'imgs/pyrigs-avatar.png' %}" /> <img class="media-object rounded" src="{% static 'imgs/pyrigs-avatar.png' %}" />
{% endif %} {% endif %}
@@ -31,6 +30,7 @@
<div class="media-body"> <div class="media-body">
<h5> <h5>
{{ version.revision.user.name|default:'System' }} {{ 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> <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> </h5>
{% endif %} {% endif %}