mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-18 05:52:15 +00:00
Repair confirmation logic
This commit is contained in:
@@ -202,7 +202,7 @@ class TrainingLevel(models.Model, RevisionMixin):
|
||||
|
||||
def user_has_requirements(self, user):
|
||||
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()))
|
||||
has_required_levels = not self.prerequisite_levels.all().exists() or 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):
|
||||
|
||||
@@ -89,11 +89,11 @@
|
||||
<ul>
|
||||
{% for level in object.prerequisite_levels.all %}
|
||||
{% user_level_if_present u level as level_qualification %}
|
||||
<li><a href="{{level.get_absolute_url}}">{{ level }}</a> <span class="fas {% if level_qualification %}text-success fa-check{% if level_qualification.confirmed_by is not None %}-double{% endif %}{% else %}fa-hourglass-start text-warning{%endif%}"></span></li>
|
||||
<li><a href="{% url 'level_detail' level.pk u.pk %}">{{ level }}</a> <span class="fas {% if level_qualification %}text-success fa-check{% if level_qualification.confirmed_by is not None %}-double{% endif %}{% else %}fa-hourglass-start text-warning{%endif%}"></span></li>
|
||||
{% for nested_level in level.prerequisite_levels.all %}
|
||||
{% user_level_if_present u nested_level as nested_level_qualification %}
|
||||
<ul>
|
||||
<li><a href="{{nested_level.get_absolute_url}}">{{ nested_level }}</a> <span class="fas {% if nested_level_qualification %}text-success fa-check{% if nested_level_qualification.confirmed_by is not None %}-double{% endif %}{% else %}fa-hourglass-start text-warning{%endif%}"></span></li>
|
||||
<li><a href="{% url 'level_detail' nested_level.pk u.pk %}">{{ nested_level }}</a> <span class="fas {% if nested_level_qualification %}text-success fa-check{% if nested_level_qualification.confirmed_by is not None %}-double{% endif %}{% else %}fa-hourglass-start text-warning{%endif%}"></span></li>
|
||||
</ul>
|
||||
{% endfor %}
|
||||
{% empty %}
|
||||
|
||||
@@ -74,9 +74,10 @@
|
||||
<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>
|
||||
{% if completion == 100 %}
|
||||
<br>
|
||||
{% confirm_button request.user object level as cb %}
|
||||
{% if cb %}
|
||||
{{ cb }}
|
||||
<div class="d-flex justify-content-between">{{ cb }}</div>
|
||||
{% else %}
|
||||
<p class="font-italic pt-2 pb-0">Missing prequisite level(s)</p>
|
||||
{% endif %}
|
||||
|
||||
@@ -3,6 +3,7 @@ from django import template
|
||||
from django.utils.html import escape
|
||||
from django.utils.safestring import SafeData, mark_safe
|
||||
from django.utils.text import normalize_newlines
|
||||
from django.urls import reverse
|
||||
|
||||
from training import models
|
||||
|
||||
@@ -45,9 +46,9 @@ def get_levels_of_depth(trainee, 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>"
|
||||
string = "<span class='badge badge-warning p-2'>Awaiting Confirmation</span>"
|
||||
if models.Trainee.objects.get(pk=user.pk).is_supervisor or user.has_perm('training.add_traininglevelqualification'):
|
||||
string += "<a class='btn btn-info' href='{}'>Confirm</a>".format(reverse('confirm_level', kwargs={'pk': trainee.pk, 'level_pk': level.pk}))
|
||||
return mark_safe(string)
|
||||
else:
|
||||
return ""
|
||||
|
||||
@@ -205,10 +205,7 @@ class ConfirmLevel(generic.RedirectView):
|
||||
@transaction.atomic()
|
||||
@reversion.create_revision()
|
||||
def get_redirect_url(self, *args, **kwargs):
|
||||
level_qualification = models.TrainingLevelQualification.objects.get(trainee=kwargs['pk'], level=kwargs['level_pk'])
|
||||
level_qualification.confirmed_by = self.request.user
|
||||
level_qualification.confirmed_on = timezone.now()
|
||||
level_qualification.save()
|
||||
level_qualification = models.TrainingLevelQualification.objects.create(trainee=models.Trainee.objects.get(pk=kwargs['pk']), level=models.TrainingLevel.objects.get(pk=kwargs['level_pk']), confirmed_by=self.request.user, confirmed_on=timezone.now())
|
||||
reversion.add_to_revision(level_qualification.trainee)
|
||||
reversion.set_user(self.request.user)
|
||||
return reverse_lazy('trainee_detail', kwargs={'pk': kwargs['pk']})
|
||||
|
||||
Reference in New Issue
Block a user