diff --git a/training/models.py b/training/models.py index 64f14529..43901c3c 100644 --- a/training/models.py +++ b/training/models.py @@ -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) diff --git a/training/templates/add_level_requirement.html b/training/templates/add_level_requirement.html index 2ad72608..3be60f10 100644 --- a/training/templates/add_level_requirement.html +++ b/training/templates/add_level_requirement.html @@ -22,6 +22,13 @@ {% block content %} {% if form.errors %} {% include 'form_errors.html' %} + + {% endif %}
{% csrf_token %} {% render_field form.level|attr:'hidden' value=form.level.initial %} diff --git a/training/templates/trainee_item_list.html b/training/templates/trainee_item_list.html index cff420bc..5b1c7557 100644 --- a/training/templates/trainee_item_list.html +++ b/training/templates/trainee_item_list.html @@ -46,4 +46,9 @@ +
+
+ {% include 'partials/last_edited.html' with target="trainee_history" object=trainee %} +
+
{% endblock %} diff --git a/training/views.py b/training/views.py index 0c92d7be..8f2f449e 100644 --- a/training/views.py +++ b/training/views.py @@ -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']}) diff --git a/versioning/versioning.py b/versioning/versioning.py index 5b18c2b4..b0a57573 100644 --- a/versioning/versioning.py +++ b/versioning/versioning.py @@ -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")