Compare commits

...

2 Commits

Author SHA1 Message Date
de5997b9da Reversion working for training level 2021-08-29 22:19:30 +01:00
4a121964dc Start training navbar 2021-08-21 11:42:31 +01:00
7 changed files with 53 additions and 7 deletions

View File

@@ -46,7 +46,7 @@
<p class="dont-break-out">{{ event.notes|linebreaksbr }}</p>
{% endif %}
<br>
{% include 'item_table.html' %}
{% include 'partials/item_table.html' %}
</div>
</div>
</div>

View File

@@ -2,6 +2,7 @@ from django.db import models
from RIGS.models import RevisionMixin, Profile
from reversion import revisions as reversion
from django.urls import reverse
# 'shim' overtop the profile model to neatly contain all training related fields etc
class Trainee(Profile):
@@ -90,6 +91,7 @@ class TrainingItemQualification(models.Model):
# Levels
@reversion.register(follow=["requirements"])
class TrainingLevel(models.Model, RevisionMixin):
description = models.CharField(max_length=120, blank=True)
TA = 0
@@ -151,11 +153,21 @@ class TrainingLevel(models.Model, RevisionMixin):
else:
return "{} {}".format(self.get_department_display(), self.get_level_display())
@property
def activity_feed_string(self):
return str(self)
def get_absolute_url(self):
return reverse('level_detail', kwargs={'pk': self.pk})
@reversion.register
class TrainingLevelRequirement(models.Model):
level = models.ForeignKey('TrainingLevel', related_name='requirements', on_delete=models.RESTRICT)
item = models.ForeignKey('TrainingItem', on_delete=models.RESTRICT)
depth = models.IntegerField(TrainingItemQualification.CHOICES)
depth = models.IntegerField(choices=TrainingItemQualification.CHOICES)
reversion_hide = True
def __str__(self):
return "{} in {}".format(TrainingItemQualification.CHOICES[self.depth][1], self.item)

View File

@@ -1 +1,30 @@
{% extends 'base_rigs.html' %}
{% extends 'base.html' %}
{% load static %}
{% block titleheader %}
<a class="navbar-brand" href="{% url 'trainee_list' %}">Training</a>
{% endblock %}
{% block titleelements %}
{% if user.is_authenticated %}
<li class="nav-item"><a class="nav-link" href="/">Home</a></li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownRigboard" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
My Record
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownRigboard">
<a class="dropdown-item" href="{% url 'trainee_detail' %}"><span class="fas fa-eye"></span>
Overview</a>
<a class="dropdown-item" href="{% url 'trainee_item_detail' request.user.pk %}"><span class="fas fa-list"></span>
Item Detail</a>
</div>
</li>
<li class="nav-item"><a class="nav-link" href="{% url 'training_activity_table' %}"><span class="fas fa-random"></span> Recent Changes</a></li>
{% endif %}
{% endblock %}
{% block titleelements_right %}
{% include 'partials/search.html' %}
{% include 'partials/navbar_user.html' %}
{% endblock %}

View File

@@ -4,7 +4,7 @@
{% load user_level_if_present from tags %}
{% block content %}
{% if edit or True %}
{% if request.user.is_supervisor or perms.training.change_traininglevel %}
<div class="col-sm-12 text-right pr-0">
<a type="button" class="btn btn-success mb-3" href="{% url 'add_requirement' pk=object.pk %}">
<span class="fas fa-plus"></span> Add New Requirement

View File

@@ -1,4 +1,4 @@
{% extends 'base_rigs.html' %}
{% extends 'base_training.html' %}
{% load static %}
{% load user_has_qualification from tags %}

View File

@@ -147,6 +147,12 @@ class RemoveRequirement(generic.DeleteView):
def get_success_url(self):
return self.request.POST.get('next')
@transaction.atomic()
@reversion.create_revision()
def delete(self, *args, **kwargs):
reversion.add_to_revision(self.get_object().level)
return super().delete(*args, **kwargs)
class ConfirmLevel(generic.RedirectView):
def get_redirect_url(self, *args, **kwargs):

View File

@@ -21,7 +21,6 @@ class FieldComparison(object):
def display_value(self, value):
if (isinstance(self.field, IntegerField) or isinstance(self.field, CharField)) and self.field.choices is not None and len(self.field.choices) > 0:
choice = [x[1] for x in self.field.choices if x[0] == value]
# TODO This defensive piece should not be necessary?
if len(choice) > 0:
return choice[0]
if isinstance(self.field, BooleanField):
@@ -122,7 +121,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']}
comparisonParams = {'excluded_keys': ['id', 'event', 'order', 'checklist', 'level']}
# Build some dicts of what we have
item_dict = {} # build a list of items, key is the item_pk