Compare commits

...

1 Commits

Author SHA1 Message Date
d55ec47b18 Add 'description' field to TrainingItems
Renamed existing field to name, removed the dummy property.
2023-02-19 14:21:40 +00:00
6 changed files with 50 additions and 11 deletions

1
package-lock.json generated
View File

@@ -5,6 +5,7 @@
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "PyRIGS",
"version": "1.0.0", "version": "1.0.0",
"license": "Custom", "license": "Custom",
"dependencies": { "dependencies": {

View File

@@ -143,6 +143,11 @@ class Command(BaseCommand):
"Bin Diving", "Bin Diving",
"Wiki Editing"] "Wiki Editing"]
descriptions = ["Physical training concentrates on mechanistic goals: training programs in this area develop specific motor skills, agility, strength or physical fitness, often with an intention of peaking at a particular time.",
"In military use, training means gaining the physical ability to perform and survive in combat, and learn the many skills needed in a time of war. These include how to use a variety of weapons, outdoor survival skills, and how to survive being captured by the enemy, among many others. See military education and training.",
"For psychological or physiological reasons, people who believe it may be beneficial to them can choose to practice relaxation training, or autogenic training, in an attempt to increase their ability to relax or deal with stress. While some studies have indicated relaxation training is useful for some medical conditions, autogenic training has limited results or has been the result of few studies.",
"Some occupations are inherently hazardous, and require a minimum level of competence before the practitioners can perform the work at an acceptable level of safety to themselves or others in the vicinity. Occupational diving, rescue, firefighting and operation of certain types of machinery and vehicles may require assessment and certification of a minimum acceptable competence before the person is allowed to practice as a licensed instructor."]
for i, name in enumerate(names): for i, name in enumerate(names):
category = random.choice(self.categories) category = random.choice(self.categories)
previous_item = models.TrainingItem.objects.filter(category=category).last() previous_item = models.TrainingItem.objects.filter(category=category).last()
@@ -150,7 +155,7 @@ class Command(BaseCommand):
number = previous_item.reference_number + 1 number = previous_item.reference_number + 1
else: else:
number = 0 number = 0
item = models.TrainingItem.objects.create(category=category, reference_number=number, description=name) item = models.TrainingItem.objects.create(category=category, reference_number=number, name=name, description=random.choice(descriptions))
self.items.append(item) self.items.append(item)
def setup_levels(self): def setup_levels(self):

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.18 on 2023-02-19 14:02
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('training', '0005_auto_20220223_1535'),
]
operations = [
migrations.RenameField(
model_name='trainingitem',
old_name='description',
new_name='name',
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.18 on 2023-02-19 14:02
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('training', '0006_rename_description_trainingitem_name'),
]
operations = [
migrations.AddField(
model_name='trainingitem',
name='description',
field=models.TextField(blank=True),
),
]

View File

@@ -85,7 +85,7 @@ class TrainingItemManager(QueryablePropertiesManager):
def search(self, query=None): def search(self, query=None):
qs = self.get_queryset() qs = self.get_queryset()
if query is not None: if query is not None:
or_lookup = (Q(description__icontains=query) | Q(display_id=query)) or_lookup = (Q(name__icontains=query) | Q(description__icontains=query) | Q(display_id=query))
qs = qs.filter(or_lookup).distinct() # distinct() is often necessary with Q lookups qs = qs.filter(or_lookup).distinct() # distinct() is often necessary with Q lookups
return qs return qs
@@ -94,16 +94,13 @@ class TrainingItemManager(QueryablePropertiesManager):
class TrainingItem(models.Model): class TrainingItem(models.Model):
reference_number = models.IntegerField() reference_number = models.IntegerField()
category = models.ForeignKey('TrainingCategory', related_name='items', on_delete=models.CASCADE) category = models.ForeignKey('TrainingCategory', related_name='items', on_delete=models.CASCADE)
description = models.CharField(max_length=50) name = models.CharField(max_length=50)
description = models.TextField(blank=True)
active = models.BooleanField(default=True) active = models.BooleanField(default=True)
prerequisites = models.ManyToManyField('self', symmetrical=False, blank=True) prerequisites = models.ManyToManyField('self', symmetrical=False, blank=True)
objects = TrainingItemManager() objects = TrainingItemManager()
@property
def name(self):
return str(self)
@queryable_property @queryable_property
def display_id(self): def display_id(self):
return f"{self.category.reference_number}.{self.reference_number}" return f"{self.category.reference_number}.{self.reference_number}"
@@ -121,7 +118,7 @@ class TrainingItem(models.Model):
return models.Q() return models.Q()
def __str__(self): def __str__(self):
name = f"{self.display_id} {self.description}" name = f"{self.display_id} {self.name}"
if not self.active: if not self.active:
name += " (inactive)" name += " (inactive)"
return name return name
@@ -149,7 +146,7 @@ class TrainingItemQualificationManager(QueryablePropertiesManager):
def search(self, query=None): def search(self, query=None):
qs = self.get_queryset().select_related('item', 'supervisor', 'item__category') qs = self.get_queryset().select_related('item', 'supervisor', 'item__category')
if query is not None: if query is not None:
or_lookup = (Q(item__description__icontains=query) | Q(supervisor__first_name__icontains=query) | Q(supervisor__last_name__icontains=query) | Q(item__category__name__icontains=query) | Q(item__display_id=query)) or_lookup = (Q(item__name__icontains=query) | Q(supervisor__first_name__icontains=query) | Q(supervisor__last_name__icontains=query) | Q(item__category__name__icontains=query) | Q(item__display_id=query))
try: try:
or_lookup = Q(item__category__reference_number=int(query)) | or_lookup or_lookup = Q(item__category__reference_number=int(query)) | or_lookup

View File

@@ -13,7 +13,8 @@
<div class="card-body"> <div class="card-body">
<div class="list-group list-group-flush"> <div class="list-group list-group-flush">
{% for item in category.items.all %} {% for item in category.items.all %}
<li class="list-group-item {% if not item.active%}text-warning{%endif%}">{{ item }} <li class="list-group-item {% if not item.active%}text-warning{%endif%}">{{ item }} <a href="{% url 'item_qualification' item.pk %}" class="btn btn-info float-right"><span class="fas fa-user"></span> Qualified Users</a>
<br><small>{{ item.description }}</small>
{% if item.prerequisites.exists %} {% if item.prerequisites.exists %}
<div class="ml-3 font-italic"> <div class="ml-3 font-italic">
<p class="text-info mb-0">Passed Out Prerequisites:</p> <p class="text-info mb-0">Passed Out Prerequisites:</p>
@@ -24,7 +25,6 @@
</ul> </ul>
</div> </div>
{% endif %} {% endif %}
<a href="{% url 'item_qualification' item.pk %}" class="btn btn-info"><span class="fas fa-user"></span> Qualified Users</a>
</li> </li>
{% endfor %} {% endfor %}
</div> </div>