Add confirm button stuff

This commit is contained in:
2022-01-03 14:38:43 +00:00
parent 99e05d91bb
commit 5160eb7f78
6 changed files with 29 additions and 18 deletions

View File

@@ -201,7 +201,9 @@ class TrainingLevel(models.Model, RevisionMixin):
return 0
def user_has_requirements(self, user):
return all(TrainingItem.user_has_qualification(req.item, user, req.depth) for req in self.requirements.all())
has_required_items = all(TrainingItem.user_has_qualification(req.item, user, req.depth) for req in self.requirements.all())
has_required_levels = set(user.level_qualifications.values_list('level', flat=True)).issubset(set(self.prerequisite_levels.all()))
return has_required_items and has_required_levels
def __str__(self):
if self.department is None:

View File

@@ -44,6 +44,7 @@
{% endblock %}
{% block content %}
{% if u %}<h3>for {{ u }}</h3>{% endif %}
{% 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 %}" id="requirement_button">

View File

@@ -2,6 +2,7 @@
{% load static %}
{% load percentage_complete from tags %}
{% load confirm_button from tags %}
{% load markdown_tags %}
{% block css %}
@@ -54,15 +55,7 @@
<li class="list-group-item">
{{ qual.level.get_icon }}
<a href="{% url 'level_detail' qual.level.pk %}">{{ qual.level }}</a>
{% if qual.confirmed_on is None %}
{% if request.user.pk != object.pk and request.user.is_supervisor %}
<span class="badge badge-warning">Awaiting Confirmation</span> <a class="btn btn-info" href="{% url 'confirm_level' object.pk qual.level.pk %}">Confirm</a>
{% else %}
<button class="btn btn-warning" disabled>Awaiting Confirmation</button>
{% endif %}
{% else %}
Confirmed by <a href="{{ qual.confirmed_by.get_absolute_url }}">{{ qual.confirmed_by|default:'System' }}</a> on {{ qual.confirmed_on|date }}
{% endif %}
</li>
{% empty %}
<div class="alert alert-warning mx-auto">No qualifications in any levels yet...did someone forget to fill out the paperwork?</div>
@@ -72,14 +65,22 @@
{% for level in started_levels %}
{% percentage_complete level object as completion %}
<div class="card my-3 border-warning">
<h3 class="card-header"><a href="{{ level.get_absolute_url }}">{{ level }}</a></h3>
<h3 class="card-header"><a href="{% url 'level_detail' level.pk object.pk %}">{{ level }}</a></h3>
<div class="card-body">
{{ level.description|markdown }}
</div>
<div class="card-footer">
<div class="progress">
<div class="progress-bar progress-bar-striped" role="progressbar" style="width: {{completion}}%" aria-valuenow="{{completion}}" aria-valuemin="0" aria-valuemax="100">{{completion}}% complete</div>
</div>
</div>
{% if completion == 100 %}
{% confirm_button request.user object level as cb %}
{% if cb %}
{{ cb }}
{% else %}
<p class="font-italic pt-2 pb-0">Missing prequisite level(s)</p>
{% endif %}
{% endif %}
</div>
</div>
{% endfor %}

View File

@@ -40,3 +40,14 @@ def get_supervisor(tech):
@register.filter
def get_levels_of_depth(trainee, level):
return trainee.level_qualifications.all().exclude(confirmed_on=None).exclude(level__department=models.TrainingLevel.HAULAGE).select_related('level').filter(level__level=level)
@register.simple_tag
def confirm_button(user, trainee, level):
if level.user_has_requirements(trainee):
string = "<span class='badge badge-warning'>Awaiting Confirmation</span>"
if user.is_supervisor or user.has_perm('training.add_traininglevelqualification'):
string += " <a class='btn btn-info' href='{% url 'confirm_level' trainee.pk level.pk %}'>Confirm</a>"
return mark_safe(string)
else:
return ""

View File

@@ -3,9 +3,3 @@ import pytest
from pytest_django.asserts import assertFormError, assertRedirects, assertContains, assertNotContains
pytestmark = pytest.mark.django_db
def test_(admin_client):
url = reverse('add_qualification')
response = admin_client.post(url)
assertFormError(response, 'form', 'name', 'This field is required.')

View File

@@ -17,11 +17,13 @@ urlpatterns = [
name='add_qualification'),
path('trainee/<int:pk>/edit_qualification/', permission_required_with_403('training.change_trainingitemqualification')(views.EditQualification.as_view()),
name='edit_qualification'),
path('session/', login_required(views.SessionLog.as_view()), name='session_log'),
path('levels/', login_required(views.LevelList.as_view()), name='level_list'),
path('level/<int:pk>/', login_required(views.LevelDetail.as_view()), name='level_detail'),
path('level/<int:pk>/user/<int:u>/', login_required(views.LevelDetail.as_view()), name='level_detail'),
path('level/<int:pk>/add_requirement/', login_required(views.AddLevelRequirement.as_view()), name='add_requirement'),
path('level/remove_requirement/<int:pk>/', login_required(views.RemoveRequirement.as_view()), name='remove_requirement'),
path('trainee/<int:pk>/level/<int:level_pk>/confirm', login_required(views.ConfirmLevel.as_view()), name='confirm_level'),
path('trainee/<int:pk>/item_record', login_required(views.TraineeItemDetail.as_view()), name='trainee_item_detail'),
]