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