mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-26 18:02:18 +00:00
Work on trainee reversion
This commit is contained in:
@@ -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='')
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|||||||
@@ -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']})
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|||||||
Reference in New Issue
Block a user