mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-17 05:22:16 +00:00
Test work, some CSS fixes, mild reversion pokage
This commit is contained in:
@@ -77,13 +77,13 @@
|
|||||||
border-collapse: separate !important;
|
border-collapse: separate !important;
|
||||||
border-spacing: 0;
|
border-spacing: 0;
|
||||||
}
|
}
|
||||||
.table tr th {
|
#event_table tr th {
|
||||||
border-right: 0 !important;
|
border-right: 0 !important;
|
||||||
}
|
}
|
||||||
.table tr td {
|
#event_table tr td {
|
||||||
border-left: 0 !important;
|
border-left: 0 !important;
|
||||||
}
|
}
|
||||||
.table tr td:not(:last-child) {
|
#event_table tr td:not(:last-child) {
|
||||||
border-right: 0 !important;
|
border-right: 0 !important;
|
||||||
}
|
}
|
||||||
@each $color, $value in $theme-colors {
|
@each $color, $value in $theme-colors {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from django.contrib import admin
|
|||||||
from training import models
|
from training import models
|
||||||
from reversion.admin import VersionAdmin
|
from reversion.admin import VersionAdmin
|
||||||
|
|
||||||
# admin.site.register(models.Trainee, VersionAdmin)
|
|
||||||
admin.site.register(models.TrainingCategory, VersionAdmin)
|
admin.site.register(models.TrainingCategory, VersionAdmin)
|
||||||
admin.site.register(models.TrainingItem, VersionAdmin)
|
admin.site.register(models.TrainingItem, VersionAdmin)
|
||||||
admin.site.register(models.TrainingLevel, VersionAdmin)
|
admin.site.register(models.TrainingLevel, VersionAdmin)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class TraineeManager(models.Manager):
|
|||||||
return super().get_queryset().filter(is_active=True, is_approved=True)
|
return super().get_queryset().filter(is_active=True, is_approved=True)
|
||||||
|
|
||||||
|
|
||||||
@reversion.register(for_concrete_model=False, fields=[])
|
@reversion.register(for_concrete_model=False, fields=['is_supervisor'])
|
||||||
class Trainee(Profile, RevisionMixin):
|
class Trainee(Profile, RevisionMixin):
|
||||||
class Meta:
|
class Meta:
|
||||||
proxy = True
|
proxy = True
|
||||||
@@ -50,10 +50,6 @@ class Trainee(Profile, RevisionMixin):
|
|||||||
def display_id(self):
|
def display_id(self):
|
||||||
return str(self)
|
return str(self)
|
||||||
|
|
||||||
@property
|
|
||||||
def full_name(self):
|
|
||||||
return self.first_name + " " + self.last_name
|
|
||||||
|
|
||||||
|
|
||||||
class TrainingCategory(models.Model):
|
class TrainingCategory(models.Model):
|
||||||
reference_number = models.IntegerField(unique=True)
|
reference_number = models.IntegerField(unique=True)
|
||||||
@@ -226,9 +222,9 @@ class TrainingLevel(models.Model, RevisionMixin):
|
|||||||
if self.level == self.TA:
|
if self.level == self.TA:
|
||||||
return self.get_level_display()
|
return self.get_level_display()
|
||||||
else:
|
else:
|
||||||
return "{} Common Competencies".format(self.get_level_display())
|
return f"{self.get_level_display()} Common Competencies"
|
||||||
else:
|
else:
|
||||||
return "{} {}".format(self.get_department_display(), self.get_level_display())
|
return f"{self.get_department_display()} {self.get_level_display()}"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def activity_feed_string(self):
|
def activity_feed_string(self):
|
||||||
@@ -243,7 +239,7 @@ class TrainingLevel(models.Model, RevisionMixin):
|
|||||||
icon = f"<span class='fas fa-{self.icon}'></span>"
|
icon = f"<span class='fas fa-{self.icon}'></span>"
|
||||||
else:
|
else:
|
||||||
icon = "".join([w[0] for w in str(self).split()])
|
icon = "".join([w[0] for w in str(self).split()])
|
||||||
return mark_safe("<span class='badge badge-{} badge-pill' data-toggle='tooltip' title='{}'>{}</span>".format(self.department_colour, str(self), icon))
|
return mark_safe(f"<span class='badge badge-{self.department_colour} badge-pill' data-toggle='tooltip' title='{str(self)}'>{icon}</span>")
|
||||||
|
|
||||||
|
|
||||||
@reversion.register
|
@reversion.register
|
||||||
@@ -252,8 +248,6 @@ class TrainingLevelRequirement(models.Model, RevisionMixin):
|
|||||||
item = models.ForeignKey('TrainingItem', on_delete=models.CASCADE)
|
item = models.ForeignKey('TrainingItem', on_delete=models.CASCADE)
|
||||||
depth = models.IntegerField(choices=TrainingItemQualification.CHOICES)
|
depth = models.IntegerField(choices=TrainingItemQualification.CHOICES)
|
||||||
|
|
||||||
reversion_hide = True
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
depth = TrainingItemQualification.CHOICES[self.depth][1]
|
depth = TrainingItemQualification.CHOICES[self.depth][1]
|
||||||
return f"{depth} in {self.item}"
|
return f"{depth} in {self.item}"
|
||||||
@@ -269,8 +263,6 @@ class TrainingLevelQualification(models.Model, RevisionMixin):
|
|||||||
confirmed_on = models.DateTimeField(null=True)
|
confirmed_on = models.DateTimeField(null=True)
|
||||||
confirmed_by = models.ForeignKey('Trainee', related_name='confirmer', on_delete=models.CASCADE, null=True)
|
confirmed_by = models.ForeignKey('Trainee', related_name='confirmer', on_delete=models.CASCADE, null=True)
|
||||||
|
|
||||||
reversion_hide = True
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def get_icon(self):
|
def get_icon(self):
|
||||||
return self.level.get_icon
|
return self.level.get_icon
|
||||||
|
|||||||
@@ -7,7 +7,10 @@
|
|||||||
{% load button from filters %}
|
{% load button from filters %}
|
||||||
{% load get_levels_of_depth from tags %}
|
{% load get_levels_of_depth from tags %}
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
{% block js %}
|
{% block js %}
|
||||||
|
<script src="{% static "js/tooltip.js" %}"></script>
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
$('[data-toggle="tooltip"]').tooltip();
|
$('[data-toggle="tooltip"]').tooltip();
|
||||||
|
|||||||
@@ -42,22 +42,40 @@ def test_add_requirement(admin_client, level):
|
|||||||
assertContains(response, level.pk)
|
assertContains(response, level.pk)
|
||||||
|
|
||||||
|
|
||||||
def test_trainee_detail(admin_client, trainee, admin_user):
|
def get_response(admin_client, url, kwargs={}):
|
||||||
url = reverse('trainee_detail', kwargs={'pk': admin_user.pk})
|
url = reverse(url, kwargs=kwargs)
|
||||||
response = admin_client.get(url)
|
response = admin_client.get(url)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
def test_trainee_detail(admin_client, trainee, admin_user):
|
||||||
|
response = get_response(admin_client, 'trainee_detail', {'pk': admin_user.pk})
|
||||||
assertContains(response, "Your Training Record")
|
assertContains(response, "Your Training Record")
|
||||||
assertContains(response, "No qualifications in any levels")
|
assertContains(response, "No qualifications in any levels")
|
||||||
|
|
||||||
url = reverse('trainee_detail', kwargs={'pk': trainee.pk})
|
response = get_response(admin_client, 'trainee_detail', {'pk': trainee.pk})
|
||||||
response = admin_client.get(url)
|
|
||||||
assertNotContains(response, "Your")
|
assertNotContains(response, "Your")
|
||||||
name = trainee.first_name + " " + trainee.last_name
|
assertContains(response, f"{trainee.get_full_name()}'s Training Record")
|
||||||
assertContains(response, f"{name}'s Training Record")
|
|
||||||
|
|
||||||
|
|
||||||
def test_trainee_item_detail(admin_client, trainee):
|
def test_trainee_item_detail(admin_client, trainee):
|
||||||
url = reverse('trainee_item_detail', kwargs={'pk': trainee.pk})
|
response = get_response(admin_client, 'trainee_item_detail', {'pk': trainee.pk})
|
||||||
response = admin_client.get(url)
|
|
||||||
assert response.status_code == 200
|
|
||||||
assertContains(response, "Nothing found")
|
assertContains(response, "Nothing found")
|
||||||
|
|
||||||
|
|
||||||
|
def test_item_list(admin_client, training_item):
|
||||||
|
response = get_response(admin_client, 'item_list')
|
||||||
|
assertContains(response, str(training_item.category))
|
||||||
|
|
||||||
|
|
||||||
|
def test_trainee_list_search(admin_client, admin_user, trainee, supervisor):
|
||||||
|
response = get_response(admin_client, 'trainee_list')
|
||||||
|
assertContains(response, admin_user.get_full_name())
|
||||||
|
assertContains(response, trainee.get_full_name())
|
||||||
|
assertContains(response, supervisor.get_full_name())
|
||||||
|
|
||||||
|
url = reverse('trainee_list')
|
||||||
|
response = admin_client.get(url, {'q': trainee.get_full_name()})
|
||||||
|
assertContains(response, trainee.get_full_name())
|
||||||
|
assertNotContains(response, supervisor.get_full_name())
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class TraineeDetail(views.ProfileDetail):
|
|||||||
if self.request.user.pk == self.object.pk:
|
if self.request.user.pk == self.object.pk:
|
||||||
context["page_title"] = "Your Training Record"
|
context["page_title"] = "Your Training Record"
|
||||||
else:
|
else:
|
||||||
context["page_title"] = f"{self.object.full_name}'s Training Record"
|
context["page_title"] = f"{self.object.get_full_name()}'s Training Record"
|
||||||
context["started_levels"] = self.object.started_levels()
|
context["started_levels"] = self.object.started_levels()
|
||||||
context["completed_levels"] = self.object.level_qualifications.all()
|
context["completed_levels"] = self.object.level_qualifications.all()
|
||||||
context["categories"] = models.TrainingCategory.objects.all().prefetch_related('items')
|
context["categories"] = models.TrainingCategory.objects.all().prefetch_related('items')
|
||||||
|
|||||||
Reference in New Issue
Block a user