mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-02-09 16:29:41 +00:00
Add 'is van driver' to trainee list, haulage super doesn't count as a supervisor
This commit is contained in:
@@ -90,4 +90,4 @@ class Command(BaseCommand):
|
|||||||
is_staff=True)
|
is_staff=True)
|
||||||
supervisor.set_password('supervisor')
|
supervisor.set_password('supervisor')
|
||||||
supervisor.save()
|
supervisor.save()
|
||||||
models.TrainingLevelQualification.objects.create(trainee=supervisor, level=self.levels[-1], confirmed_on=timezone.now())
|
models.TrainingLevelQualification.objects.create(trainee=supervisor, level=models.TrainingLevel.objects.filter(level__gte=models.TrainingLevel.SUPERVISOR).exclude(department=models.TrainingLevel.HAULAGE).first(), confirmed_on=timezone.now())
|
||||||
|
|||||||
@@ -16,12 +16,16 @@ class Trainee(Profile):
|
|||||||
def level_qualifications(self, only_confirmed=False):
|
def level_qualifications(self, only_confirmed=False):
|
||||||
levels = self.levels.all()
|
levels = self.levels.all()
|
||||||
if only_confirmed:
|
if only_confirmed:
|
||||||
levels = levels.filter(confirmed_on__isnull=False)
|
levels = levels.exclude(confirmed_on__isnull=True)
|
||||||
return levels.select_related('level')
|
return levels.select_related('level')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_supervisor(self):
|
def is_supervisor(self):
|
||||||
return self.level_qualifications(True).filter(level__gte=TrainingLevel.SUPERVISOR).exists()
|
return self.level_qualifications(True).filter(level__gte=TrainingLevel.SUPERVISOR).exclude(level__department=TrainingLevel.HAULAGE).exists()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_driver(self):
|
||||||
|
return self.level_qualifications(True).filter(level__department=TrainingLevel.HAULAGE).exists()
|
||||||
|
|
||||||
def get_records_of_depth(self, depth):
|
def get_records_of_depth(self, depth):
|
||||||
return self.qualifications_obtained.filter(depth=depth).select_related('item', 'trainee', 'supervisor')
|
return self.qualifications_obtained.filter(depth=depth).select_related('item', 'trainee', 'supervisor')
|
||||||
@@ -123,12 +127,13 @@ class TrainingLevel(models.Model, RevisionMixin):
|
|||||||
(TECHNICIAN, 'Technician'),
|
(TECHNICIAN, 'Technician'),
|
||||||
(SUPERVISOR, 'Supervisor'),
|
(SUPERVISOR, 'Supervisor'),
|
||||||
)
|
)
|
||||||
|
HAULAGE = 4
|
||||||
DEPARTMENTS = (
|
DEPARTMENTS = (
|
||||||
(0, 'Sound'),
|
(0, 'Sound'),
|
||||||
(1, 'Lighting'),
|
(1, 'Lighting'),
|
||||||
(2, 'Power'),
|
(2, 'Power'),
|
||||||
(3, 'Rigging'),
|
(3, 'Rigging'),
|
||||||
(4, 'Haulage'),
|
(HAULAGE, 'Haulage'),
|
||||||
)
|
)
|
||||||
department = models.IntegerField(choices=DEPARTMENTS, null=True) # N.B. Technical Assistant does not have a department
|
department = models.IntegerField(choices=DEPARTMENTS, null=True) # N.B. Technical Assistant does not have a department
|
||||||
level = models.IntegerField(choices=CHOICES)
|
level = models.IntegerField(choices=CHOICES)
|
||||||
|
|||||||
@@ -10,19 +10,26 @@
|
|||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<li class="nav-item"><a class="nav-link" href="/">Home</a></li>
|
<li class="nav-item"><a class="nav-link" href="/">Home</a></li>
|
||||||
<li class="nav-item dropdown">
|
<li class="nav-item dropdown">
|
||||||
<a class="nav-link dropdown-toggle text-info" href="#" id="navbarDropdownRigboard" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<a class="nav-link dropdown-toggle text-info" href="#" id="navbarDropdownMy" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
My Record
|
My Record
|
||||||
</a>
|
</a>
|
||||||
<div class="dropdown-menu" aria-labelledby="navbarDropdownRigboard">
|
<div class="dropdown-menu" aria-labelledby="navbarDropdownMy">
|
||||||
<a class="dropdown-item" href="{% url 'trainee_detail' %}"><span class="fas fa-eye"></span>
|
<a class="dropdown-item" href="{% url 'trainee_detail' %}"><span class="fas fa-eye"></span>
|
||||||
Overview</a>
|
Overview</a>
|
||||||
<a class="dropdown-item" href="{% url 'trainee_item_detail' request.user.pk %}"><span class="fas fa-list"></span>
|
<a class="dropdown-item" href="{% url 'trainee_item_detail' request.user.pk %}"><span class="fas fa-list"></span>
|
||||||
Item Detail</a>
|
Item Detail</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item"><a class="nav-link" href="{% url 'trainee_list' %}"><span class="fas fa-users"></span> Trainee List</a></li>
|
<li class="nav-item dropdown">
|
||||||
<li class="nav-item"><a class="nav-link" href="{% url 'level_list' %}"><span class="fas fa-layer-group"></span> Level List</a></li>
|
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownLists" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
<li class="nav-item"><a class="nav-link" href="{% url 'item_list' %}"><span class="fas fa-sitemap"></span> Item List</a></li>
|
Lists
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-menu" aria-labelledby="navbarDropdownLists">
|
||||||
|
<a class="dropdown-item" href="{% url 'trainee_list' %}"><span class="fas fa-users"></span> Trainee List</a>
|
||||||
|
<a class="dropdown-item" href="{% url 'level_list' %}"><span class="fas fa-layer-group"></span> Level List</a>
|
||||||
|
<a class="dropdown-item" href="{% url 'item_list' %}"><span class="fas fa-sitemap"></span> Item List</a>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
<li class="nav-item"><a class="nav-link" href="{% url 'training_activity_table' %}"><span class="fas fa-random"></span> Recent Changes</a></li>
|
<li class="nav-item"><a class="nav-link" href="{% url 'training_activity_table' %}"><span class="fas fa-random"></span> Recent Changes</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -53,10 +53,21 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<h2 class="col-12">Training Levels</h2>
|
<h2 class="col-12">Training Levels</h2>
|
||||||
{% for level in completed_levels %}
|
{% for qual in completed_levels %}
|
||||||
{% if forloop.first %}<div class="card-columns">{% endif %}
|
{% if forloop.first %}<div class="card-columns">{% endif %}
|
||||||
<div class="card my-3 border-success">
|
<div class="card my-3 border-success">
|
||||||
<h3 class="card-header"><a href="{% url 'level_detail' level.pk %}">{{ level }}</a></h3>
|
<h3 class="card-header"><a href="{% url 'level_detail' qual.level.pk %}">{{ qual }}</a></h3>
|
||||||
|
<div class="card-footer text-right pr-1">
|
||||||
|
{% if qual.confirmed_by is None %}
|
||||||
|
{% if request.user.is_supervisor or request.user.is_superuser %}
|
||||||
|
<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 %}
|
||||||
|
<button class="btn btn-success active">Confirmed <small>by {{ qual.confirmed_by }}</small></button>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% if forloop.last %}</div>{%endif%}
|
{% if forloop.last %}</div>{%endif%}
|
||||||
{% empty %}
|
{% empty %}
|
||||||
@@ -73,22 +84,6 @@
|
|||||||
<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 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>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer text-right">
|
|
||||||
{% user_level_if_present object level as level_qualification %}
|
|
||||||
{% if level_qualification %}
|
|
||||||
{% if level_qualification.confirmed_by is None %}
|
|
||||||
{% if request.user.is_supervisor or request.user.is_superuser %}
|
|
||||||
<a class="btn btn-info" href="{% url 'confirm_level' object.pk level.pk %}">Confirm</a>
|
|
||||||
{% else %}
|
|
||||||
<button class="btn btn-warning" disabled>Awaiting Confirmation</button>
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
<button class="btn btn-success active">Confirmed <small>by {{ level_qualification.confirmed_by }}</small></button>
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
<button class="btn btn-danger" disabled>Incomplete</button>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">Name</th>
|
<th scope="col">Name</th>
|
||||||
|
<th>Van Driver?</th>
|
||||||
<th>Supervisor?</th>
|
<th>Supervisor?</th>
|
||||||
<th>Qualification Count</th>
|
<th>Qualification Count</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
@@ -23,6 +24,7 @@
|
|||||||
{% for object in object_list %}
|
{% for object in object_list %}
|
||||||
<tr id="row_item">
|
<tr id="row_item">
|
||||||
<th scope="row" class="align-middle" id="cell_name"><a href="{% url 'trainee_detail' object.pk %}">{{ object.name }} {% if request.user.pk == object.pk %}<span class="fas fa-user text-success"></span>{%endif%}</a></th>
|
<th scope="row" class="align-middle" id="cell_name"><a href="{% url 'trainee_detail' object.pk %}">{{ object.name }} {% if request.user.pk == object.pk %}<span class="fas fa-user text-success"></span>{%endif%}</a></th>
|
||||||
|
<td {% if object.is_driver %}class="table-success"{%endif%}>{{ object.is_driver|yesno|title }}</td>
|
||||||
<td {% if object.is_supervisor %}class="table-success"{%endif%}>{{ object.is_supervisor|yesno|title }}</td>
|
<td {% if object.is_supervisor %}class="table-success"{%endif%}>{{ object.is_supervisor|yesno|title }}</td>
|
||||||
<td>{{ object.qualifications_obtained.all|length }}</td>
|
<td>{{ object.qualifications_obtained.all|length }}</td>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
Reference in New Issue
Block a user