Reversion should mostly work now

This commit is contained in:
2022-01-09 14:52:59 +00:00
parent 88dee9477b
commit b539312538
5 changed files with 39 additions and 11 deletions

View File

@@ -7,7 +7,7 @@ from django.urls import reverse
from django.utils.safestring import SafeData, mark_safe
@reversion.register(for_concrete_model=False)
@reversion.register(for_concrete_model=False, fields=[], follow=["qualifications_obtained", "level_qualifications"])
class Trainee(Profile, RevisionMixin):
class Meta:
proxy = True
@@ -43,6 +43,10 @@ class Trainee(Profile, RevisionMixin):
def get_absolute_url(self):
return reverse('trainee_detail', kwargs={'pk': self.pk})
@property
def display_id(self):
return str(self)
class TrainingCategory(models.Model):
reference_number = models.IntegerField(unique=True)
@@ -55,6 +59,7 @@ class TrainingCategory(models.Model):
verbose_name_plural = 'Training Categories'
@reversion.register
class TrainingItem(models.Model):
reference_number = models.IntegerField()
category = models.ForeignKey('TrainingCategory', related_name='items', on_delete=models.CASCADE)
@@ -80,8 +85,8 @@ class TrainingItem(models.Model):
ordering = ['category__reference_number', 'reference_number']
@reversion.register(follow=['trainee'])
class TrainingItemQualification(models.Model):
@reversion.register
class TrainingItemQualification(models.Model, RevisionMixin):
STARTED = 0
COMPLETE = 1
PASSED_OUT = 2
@@ -248,7 +253,7 @@ class TrainingLevelRequirement(models.Model, RevisionMixin):
unique_together = ["level", "item"]
@reversion.register(follow=['trainee'])
@reversion.register
class TrainingLevelQualification(models.Model, RevisionMixin):
trainee = models.ForeignKey('Trainee', related_name='level_qualifications', on_delete=models.CASCADE)
level = models.ForeignKey('TrainingLevel', on_delete=models.CASCADE)

View File

@@ -22,6 +22,13 @@
{% block content %}
{% if form.errors %}
{% include 'form_errors.html' %}
<script src="{% static 'js/autocompleter.js' %}"></script>
<script>
//Has to be done here or the pickers disappear on modal error
$('document').ready(function(){
$(document).find(".selectpicker").selectpicker().each(function(){initPicker($(this))});
});
</script>
{% endif %}
<form id="requirement-form" action="{{ form.action|default:request.path }}" method="post">{% csrf_token %}
{% render_field form.level|attr:'hidden' value=form.level.initial %}

View File

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

View File

@@ -121,6 +121,12 @@ class AddQualification(generic.CreateView, ModalURLMixin):
model = models.TrainingItemQualification
form_class = forms.QualificationForm
@transaction.atomic()
@reversion.create_revision()
def form_valid(self, form, *args, **kwargs):
reversion.add_to_revision(form.cleaned_data['trainee'])
return super().form_valid(form, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super(AddQualification, self).get_context_data(**kwargs)
context["depths"] = models.TrainingItemQualification.CHOICES
@@ -156,6 +162,12 @@ class EditQualification(generic.UpdateView):
kwargs['pk'] = self.kwargs['pk']
return kwargs
@transaction.atomic()
@reversion.create_revision()
def form_valid(self, form, *args, **kwargs):
reversion.add_to_revision(form.cleaned_data['trainee'])
return super().form_valid(form, *args, **kwargs)
class AddLevelRequirement(generic.CreateView, ModalURLMixin):
template_name = "add_level_requirement.html"
@@ -179,7 +191,6 @@ class AddLevelRequirement(generic.CreateView, ModalURLMixin):
@reversion.create_revision()
def form_valid(self, form, *args, **kwargs):
reversion.add_to_revision(form.cleaned_data['level'])
reversion.set_comment("Level requirement added")
return super().form_valid(form, *args, **kwargs)
@@ -206,13 +217,13 @@ class ConfirmLevel(generic.RedirectView):
@transaction.atomic()
@reversion.create_revision()
def get_redirect_url(self, *args, **kwargs):
level_qualification, created = models.TrainingLevelQualification.objects.get_or_create(trainee=models.Trainee.objects.get(pk=kwargs['pk']), level=models.TrainingLevel.objects.get(pk=kwargs['level_pk']))
trainee = models.Trainee.objects.get(pk=kwargs['pk'])
level_qualification, created = models.TrainingLevelQualification.objects.get_or_create(trainee=trainee, level=models.TrainingLevel.objects.get(pk=kwargs['level_pk']))
if created:
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)
reversion.add_to_revision(trainee)
return reverse_lazy('trainee_detail', kwargs={'pk': kwargs['pk']})

View File

@@ -72,7 +72,7 @@ class FieldComparison(object):
class ModelComparison(object):
def __init__(self, old=None, new=None, version=None, follow=False, excluded_keys=[]):
def __init__(self, old=None, new=None, version=None, follow=False, excluded_keys=['date_joined']):
# recieves two objects of the same model, and compares them. Returns an array of FieldCompare objects
try:
self.fields = old._meta.get_fields()
@@ -122,7 +122,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', 'level', '_order', 'last_login']}
comparisonParams = {'excluded_keys': ['id', 'event', 'order', 'checklist', 'level', '_order', 'date_joined']}
# Build some dicts of what we have
item_dict = {} # build a list of items, key is the item_pk
@@ -170,7 +170,7 @@ class RIGSVersionManager(VersionQuerySet):
for model in model_array:
content_types.append(ContentType.objects.get_for_model(model))
return self.filter(content_type__in=content_types).select_related("revision").order_by(
return self.filter(content_type__in=content_types).select_related("revision",).order_by(
"-revision__date_created")