diff --git a/conftest.py b/conftest.py
index 904c46ec..fe0afdf1 100644
--- a/conftest.py
+++ b/conftest.py
@@ -28,6 +28,7 @@ def admin_user(admin_user):
admin_user.last_name = "Test"
admin_user.initials = "ETU"
admin_user.is_approved = True
+ admin_user.is_supervisor = True
admin_user.save()
return admin_user
diff --git a/training/decorators.py b/training/decorators.py
index d232f4da..c56f9470 100644
--- a/training/decorators.py
+++ b/training/decorators.py
@@ -1,5 +1,5 @@
from PyRIGS.decorators import user_passes_test_with_403
-def has_perm_or_supervisor(perm, login_url=None, oembed_view=None):
- return user_passes_test_with_403(lambda u: (hasattr(u, 'is_supervisor') and u.is_supervisor) or u.has_perm(perm), login_url=login_url, oembed_view=oembed_view)
+def is_supervisor(login_url=None, oembed_view=None):
+ return user_passes_test_with_403(lambda u: (hasattr(u, 'is_supervisor') and u.is_supervisor))
diff --git a/training/models.py b/training/models.py
index ee5cadf5..db36c7ed 100644
--- a/training/models.py
+++ b/training/models.py
@@ -201,7 +201,7 @@ class TrainingItemQualification(models.Model, RevisionMixin):
@property
def activity_feed_string(self):
- return f"{self.trainee} {self.get_depth_display().lower()} {self.get_depth_display()} in {self.item}"
+ return f"{self.trainee} {self.get_depth_display().lower()} in {self.item}"
@classmethod
def get_colour_from_depth(cls, depth):
diff --git a/training/templates/base_training.html b/training/templates/base_training.html
index 56957302..f60de7f1 100644
--- a/training/templates/base_training.html
+++ b/training/templates/base_training.html
@@ -30,7 +30,7 @@
Item List
- {% if perms.training.add_trainingitemqualification or request.user.is_supervisor %}
+ {% if request.user.is_supervisor %}
Add New Requirement
@@ -79,9 +79,9 @@
{% endfor %}
| {{object}} |
- {% for req in object.started_requirements %}- {{ req.item }} {% user_has_qualification u req.item 0 %} {% if request.user.is_supervisor or perms.training.delete_traininglevelrequirement %}{%endif%}
{% endfor %} |
- {% for req in object.complete_requirements %}- {{ req.item }} {% user_has_qualification u req.item 1 %} {% if request.user.is_supervisor or perms.training.delete_traininglevelrequirement %}{%endif%}
{% endfor %} |
- {% for req in object.passed_out_requirements %}- {{ req.item }} {% user_has_qualification u req.item 2 %} {% if request.user.is_supervisor or perms.training.delete_traininglevelrequirement %}{%endif%}
{% endfor %} |
+ {% for req in object.started_requirements %}- {{ req.item }} {% user_has_qualification u req.item 0 %} {% if request.user.is_supervisor %}{%endif%}
{% endfor %} |
+ {% for req in object.complete_requirements %}- {{ req.item }} {% user_has_qualification u req.item 1 %} {% if request.user.is_supervisor %}{%endif%}
{% endfor %} |
+ {% for req in object.passed_out_requirements %}- {{ req.item }} {% user_has_qualification u req.item 2 %} {% if request.user.is_supervisor %}{%endif%}
{% endfor %} |
diff --git a/training/templates/partials/add_qualification.html b/training/templates/partials/add_qualification.html
index 96cb5b42..094b54dc 100644
--- a/training/templates/partials/add_qualification.html
+++ b/training/templates/partials/add_qualification.html
@@ -1,4 +1,4 @@
-{% if request.user.is_supervisor or perms.training.add_trainingitemqualification %}
+{% if request.user.is_supervisor %}
Add New Training Record
diff --git a/training/templates/trainee_item_list.html b/training/templates/trainee_item_list.html
index 235a849a..91e2cc9d 100644
--- a/training/templates/trainee_item_list.html
+++ b/training/templates/trainee_item_list.html
@@ -54,7 +54,7 @@
Date |
Supervisor |
Notes |
- {% if request.user.is_supervisor or perms.training.change_trainingitemqualification %}
+ {% if request.user.is_supervisor %}
|
{% endif %}
@@ -67,7 +67,7 @@
{{ object.date }} |
{{ object.supervisor }} |
{{ object.notes }} |
- {% if request.user.is_supervisor or perms.training.change_trainingitemqualification %}
+ {% if request.user.is_supervisor %}
{% button 'edit' 'edit_qualification' object.pk id="edit" %} |
{% endif %}
diff --git a/training/tests/test_unit.py b/training/tests/test_unit.py
index 4c23e0ab..4660c141 100644
--- a/training/tests/test_unit.py
+++ b/training/tests/test_unit.py
@@ -16,7 +16,7 @@ def test_add_qualification(admin_client, trainee, admin_user, training_item):
response = admin_client.post(url, {'date': date, 'trainee': trainee.pk, 'supervisor': trainee.pk, 'item': training_item.pk})
assertFormError(response, 'form', 'date', 'Qualification date may not be in the future')
assertFormError(response, 'form', 'supervisor', 'One may not supervise oneself...')
- response = admin_client.post(url, {'date': date, 'trainee': trainee.pk, 'supervisor': admin_user.pk, 'item': training_item.pk})
+ response = admin_client.post(url, {'date': date, 'trainee': admin_user.pk, 'supervisor': trainee.pk, 'item': training_item.pk})
print(response.content)
assertFormError(response, 'form', 'supervisor', 'Selected supervisor must actually *be* a supervisor...')
diff --git a/training/urls.py b/training/urls.py
index bb512c96..4fefe353 100644
--- a/training/urls.py
+++ b/training/urls.py
@@ -1,7 +1,8 @@
from django.urls import path
from django.contrib.auth.decorators import login_required
-from training.decorators import has_perm_or_supervisor
+from training.decorators import is_supervisor
+from PyRIGS.decorators import permission_required_with_403
from training import views, models
from versioning.views import VersionHistory
@@ -12,22 +13,22 @@ urlpatterns = [
path('trainee/list/', login_required(views.TraineeList.as_view()), name='trainee_list'),
path('trainee/
/',
- has_perm_or_supervisor('RIGS.view_profile')(views.TraineeDetail.as_view()),
+ permission_required_with_403('RIGS.view_profile')(views.TraineeDetail.as_view()),
name='trainee_detail'),
- path('trainee//history', has_perm_or_supervisor('RIGS.view_profile')(VersionHistory.as_view()), name='trainee_history', kwargs={'model': models.Trainee, 'app': 'training'}), # Not picked up automatically because proxy model (I think)
- path('trainee//add_qualification/', has_perm_or_supervisor('training.add_trainingitemqualification')(views.AddQualification.as_view()),
+ path('trainee//history', permission_required_with_403('RIGS.view_profile')(VersionHistory.as_view()), name='trainee_history', kwargs={'model': models.Trainee, 'app': 'training'}), # Not picked up automatically because proxy model (I think)
+ path('trainee//add_qualification/', is_supervisor()(views.AddQualification.as_view()),
name='add_qualification'),
- path('trainee/edit_qualification//', has_perm_or_supervisor('training.change_trainingitemqualification')(views.EditQualification.as_view()),
+ path('trainee/edit_qualification//', is_supervisor()(views.EditQualification.as_view()),
name='edit_qualification'),
path('levels/', login_required(views.LevelList.as_view()), name='level_list'),
path('level//', login_required(views.LevelDetail.as_view()), name='level_detail'),
path('level//user//', login_required(views.LevelDetail.as_view()), name='level_detail'),
- path('level//add_requirement/', login_required(views.AddLevelRequirement.as_view()), name='add_requirement'),
- path('level/remove_requirement//', login_required(views.RemoveRequirement.as_view()), name='remove_requirement'),
+ path('level//add_requirement/', is_supervisor()(views.AddLevelRequirement.as_view()), name='add_requirement'),
+ path('level/remove_requirement//', is_supervisor()(views.RemoveRequirement.as_view()), name='remove_requirement'),
- path('trainee//level//confirm', login_required(views.ConfirmLevel.as_view()), name='confirm_level'),
+ path('trainee//level//confirm', is_supervisor()(views.ConfirmLevel.as_view()), name='confirm_level'),
path('trainee//item_record', login_required(views.TraineeItemDetail.as_view()), name='trainee_item_detail'),
- path('session_log', has_perm_or_supervisor('training.add_trainingitemqualification')(views.SessionLog.as_view()), name='session_log'),
+ path('session_log', is_supervisor()(views.SessionLog.as_view()), name='session_log'),
]