add trainees page
This commit is contained in:
@@ -0,0 +1,25 @@
|
|||||||
|
{% extends 'generic/base.html' %}
|
||||||
|
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
{% block css %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
{% if grade %}
|
||||||
|
{{grade}}
|
||||||
|
{% endif %}Trainees
|
||||||
|
</h2>
|
||||||
|
<table>
|
||||||
|
<tr class="header"><th>Name</th><th>Grade</th><th>Email</th><th>Supervisor</th></tr>
|
||||||
|
|
||||||
|
{% for trainee in trainees %}
|
||||||
|
<tr class="trainee"><td>{{trainee.user.first_name}} {{trainee.user.last_name}}</td><td>{{trainee.grade}}</td><td>{{trainee.user.email}}</td><td>{{trainee.supervisor}}</td></tr>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
from bs4 import BeautifulSoup
|
||||||
|
from django.urls import reverse
|
||||||
|
from generic.models import UserProfile, UserGrades
|
||||||
|
from django.contrib.auth.models import Group
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def create_cid_manager(db, django_user_model):
|
||||||
|
user = django_user_model.objects.create_user(
|
||||||
|
"cidmanager", "test@test.com", "password"
|
||||||
|
)
|
||||||
|
g = Group.objects.create(name="cid_user_manager")
|
||||||
|
g.save()
|
||||||
|
user.groups.add(g)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def create_user_grades(db):
|
||||||
|
for i in range(1, 6):
|
||||||
|
UserGrades.objects.create(name=f"ST{i}")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def create_users(db, django_user_model, create_user_grades):
|
||||||
|
users = [
|
||||||
|
("user1", "ST1", "email@email.com"),
|
||||||
|
("user2", "ST1", "email@email.com"),
|
||||||
|
("user3", "ST2", "email@email.com"),
|
||||||
|
("user4", "ST3", "email@email.com"),
|
||||||
|
]
|
||||||
|
|
||||||
|
for name, grade, email in users:
|
||||||
|
user = django_user_model.objects.create_user(name, email, "password")
|
||||||
|
|
||||||
|
user.userprofile.grade = UserGrades.objects.get(name=grade)
|
||||||
|
user.userprofile.peninsula_trainee = True
|
||||||
|
user.userprofile.save()
|
||||||
|
|
||||||
|
|
||||||
|
def test_trainee_stuff(client, create_cid_manager, create_users):
|
||||||
|
print(UserProfile.objects.all().count())
|
||||||
|
|
||||||
|
assert UserProfile.objects.all().count() == 5
|
||||||
|
assert UserProfile.objects.filter(peninsula_trainee=True).count() == 4
|
||||||
|
|
||||||
|
response = client.get(reverse(f"trainees"))
|
||||||
|
assert response.status_code == 403
|
||||||
|
|
||||||
|
client.login(username="user1", password="password")
|
||||||
|
|
||||||
|
response = client.get(reverse(f"trainees"))
|
||||||
|
assert response.status_code == 403
|
||||||
|
|
||||||
|
client.login(username="cidmanager", password="password")
|
||||||
|
|
||||||
|
response = client.get(reverse(f"trainees"))
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
trainee_rows = BeautifulSoup(response.content, "html.parser").find(
|
||||||
|
"tr", {"class": "trainee"}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert (
|
||||||
|
len(trainee_rows) == UserProfile.objects.filter(peninsula_trainee=True).count()
|
||||||
|
)
|
||||||
@@ -7,6 +7,7 @@ from dal import autocomplete
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.forms.models import model_to_dict
|
from django.forms.models import model_to_dict
|
||||||
|
from django.db.models.functions import Coalesce
|
||||||
from django.shortcuts import render, get_object_or_404, redirect
|
from django.shortcuts import render, get_object_or_404, redirect
|
||||||
|
|
||||||
from django.contrib.auth.decorators import login_required, user_passes_test
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||||
@@ -3030,6 +3031,20 @@ def exam_inactive(request, context):
|
|||||||
#
|
#
|
||||||
# success_url = reverse_lazy("accounts_list")
|
# success_url = reverse_lazy("accounts_list")
|
||||||
|
|
||||||
|
@user_is_cid_user_manager
|
||||||
|
def trainees(request, grade: None|str=None):
|
||||||
|
|
||||||
|
trainees = UserProfile.objects.filter(peninsula_trainee=True).order_by(Coalesce("grade__name", "user__last_name").asc())
|
||||||
|
|
||||||
|
if grade is not None:
|
||||||
|
trainees = trainees.filter(grade__name=grade)
|
||||||
|
|
||||||
|
context = {
|
||||||
|
"trainees" : trainees,
|
||||||
|
"grade": grade
|
||||||
|
}
|
||||||
|
|
||||||
|
return render(request, "generic/trainees.html", context)
|
||||||
|
|
||||||
def create_user(request, context=None):
|
def create_user(request, context=None):
|
||||||
# if this is a POST request we need to process the form data
|
# if this is a POST request we need to process the form data
|
||||||
|
|||||||
@@ -6,6 +6,13 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
Trainees can be viewed <a href='{% url "trainees" %}'>here</a> (
|
||||||
|
|
||||||
|
{% for i in "123456"|make_list %}
|
||||||
|
<a href='{% url "trainees_grade" "ST"|add:i %}'>ST{{i}}</a>{% if not forloop.last %}, {% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
)
|
||||||
|
|
||||||
<h2>People</h2>
|
<h2>People</h2>
|
||||||
<p>The system contains a number of different people / groups. This affects how they are managed and what they are able to do.</p>
|
<p>The system contains a number of different people / groups. This affects how they are managed and what they are able to do.</p>
|
||||||
<p>They can be managed using the navigation links above</p>
|
<p>They can be managed using the navigation links above</p>
|
||||||
|
|||||||
Reference in New Issue
Block a user