Compare commits

...

4 Commits

Author SHA1 Message Date
af987c1ebb Make TrainingLevelRequirement the correct level of unique
Also updates generateSampleData to match
2021-08-19 18:47:38 +01:00
d406a911bb Initial refactoring of profile detail 2021-08-19 18:27:52 +01:00
63c5a68933 Goddamnit 2021-08-19 18:12:15 +01:00
66f7f830db Forgot that needed migrations generating 2021-08-19 18:08:57 +01:00
6 changed files with 99 additions and 41 deletions

View File

@@ -35,15 +35,15 @@ class Command(BaseCommand):
def setup_categories(self): def setup_categories(self):
names = [(1, "Basic"), (2, "Sound"), (3, "Lighting"), (4, "Rigging"), (5, "Power"), (6, "Haulage")] names = [(1, "Basic"), (2, "Sound"), (3, "Lighting"), (4, "Rigging"), (5, "Power"), (6, "Haulage")]
for i, name in names: for i, name in names:
category = models.TrainingCategory.objects.create(reference_number=i, name=name) category = models.TrainingCategory.objects.create(reference_number=i, name=name)
category.save() category.save()
self.categories.append(category) self.categories.append(category)
def setup_items(self): def setup_items(self):
names = ["Motorised Power Towers", "Catering", "Forgetting Cables", "Gazebo Construction", "Balanced Audio", "Unbalanced Audio", "BBQ/Bin Interactions", "Pushing Boxes", "How Not To Die", "Setting up projectors", "Basketing truss", "First Aid", "Digging Trenches", "Avoiding Bin Lorries", "Getting cherry pickers stuck in mud", "Crashing the Van"] names = ["Motorised Power Towers", "Catering", "Forgetting Cables", "Gazebo Construction", "Balanced Audio", "Unbalanced Audio", "BBQ/Bin Interactions", "Pushing Boxes", "How Not To Die", "Setting up projectors", "Basketing truss", "First Aid", "Digging Trenches", "Avoiding Bin Lorries", "Getting cherry pickers stuck in mud", "Crashing the Van", "Getting pigs to fly", "Basketing picnics", "Python programming", "Building Cables", "Unbuilding Cables", "Cat Herding", "Pancake making", "Tidying up", "Reading Manuals", "Bikeshedding"]
for i,name in enumerate(names): for i,name in enumerate(names):
item = models.TrainingItem.objects.create(category=random.choice(self.categories), reference_number=random.randint(0, 100), name=name) item = models.TrainingItem.objects.create(category=random.choice(self.categories), reference_number=random.randint(0, 100), name=name)
self.items.append(item) self.items.append(item)
@@ -54,10 +54,15 @@ class Command(BaseCommand):
technician = models.TrainingLevel.objects.create(level=models.TrainingLevel.TECHNICIAN, department=i, description="Moral pinnacle derive ultimate war dead. Strong fearful joy contradict battle christian faithful enlightenment prejudice zarathustra moral.") technician = models.TrainingLevel.objects.create(level=models.TrainingLevel.TECHNICIAN, department=i, description="Moral pinnacle derive ultimate war dead. Strong fearful joy contradict battle christian faithful enlightenment prejudice zarathustra moral.")
supervisor = models.TrainingLevel.objects.create(level=models.TrainingLevel.SUPERVISOR, department=i, description="Spirit holiest merciful mountains inexpedient reason value. Suicide ultimate hope.") supervisor = models.TrainingLevel.objects.create(level=models.TrainingLevel.SUPERVISOR, department=i, description="Spirit holiest merciful mountains inexpedient reason value. Suicide ultimate hope.")
supervisor.prerequisite_levels.add(technician) supervisor.prerequisite_levels.add(technician)
items = self.items.copy()
for i in range(0, 30): for i in range(0, 30):
if len(items) == 0:
break
item = random.choice(items)
items.remove(item)
if i % 3 == 0: if i % 3 == 0:
models.TrainingLevelRequirement.objects.create(level=technician, item=random.choice(self.items), depth=random.choice(models.TrainingItemQualification.CHOICES)[0]) models.TrainingLevelRequirement.objects.create(level=technician, item=item, depth=random.choice(models.TrainingItemQualification.CHOICES)[0])
else: else:
models.TrainingLevelRequirement.objects.create(level=supervisor, item=random.choice(self.items), depth=random.choice(models.TrainingItemQualification.CHOICES)[0]) models.TrainingLevelRequirement.objects.create(level=supervisor, item=item, depth=random.choice(models.TrainingItemQualification.CHOICES)[0])
self.levels.append(technician) self.levels.append(technician)
self.levels.append(supervisor) self.levels.append(supervisor)

View File

@@ -0,0 +1,21 @@
# Generated by Django 3.1.7 on 2021-08-19 17:08
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('training', '0003_auto_20210716_0150'),
]
operations = [
migrations.AlterUniqueTogether(
name='trainingitemqualification',
unique_together={('trainee', 'item', 'depth')},
),
migrations.AlterUniqueTogether(
name='traininglevelqualification',
unique_together={('trainee', 'level')},
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 3.1.7 on 2021-08-19 17:33
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('training', '0004_auto_20210819_1808'),
]
operations = [
migrations.AlterUniqueTogether(
name='traininglevelrequirement',
unique_together={('level', 'item')},
),
]

View File

@@ -147,6 +147,9 @@ class TrainingLevelRequirement(models.Model):
def __str__(self): def __str__(self):
return "{} in {}".format(TrainingItemQualification.CHOICES[self.depth][1], self.item) return "{} in {}".format(TrainingItemQualification.CHOICES[self.depth][1], self.item)
class Meta:
unique_together = ["level", "item"]
class TrainingLevelQualification(models.Model): class TrainingLevelQualification(models.Model):
trainee = models.ForeignKey('Trainee', related_name='levels', on_delete=models.RESTRICT) trainee = models.ForeignKey('Trainee', related_name='levels', on_delete=models.RESTRICT)

View File

@@ -1,10 +1,12 @@
from django.shortcuts import render import reversion
from django.shortcuts import render
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.views import generic from django.views import generic
from PyRIGS.views import OEmbedView, is_ajax from PyRIGS.views import OEmbedView, is_ajax
from training import models, forms from training import models, forms
from django.utils import timezone from django.utils import timezone
from django.db import transaction
from users import views from users import views
@@ -15,7 +17,7 @@ class ItemList(generic.ListView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ItemList, self).get_context_data(**kwargs) context = super(ItemList, self).get_context_data(**kwargs)
context["page_title"] = "Training Items" context["page_title"] = "Training Items"
context["categories"] = models.TrainingCategory.objects.all() context["categories"] = models.TrainingCategory.objects.all()
return context return context
@@ -80,7 +82,7 @@ class AddQualification(generic.CreateView):
return kwargs return kwargs
class AddLevelRequirement(generic.CreateView): class AddLevelRequirement(generic.CreateView):
template_name = "edit_training_level.html" template_name = "edit_training_level.html"
model = models.TrainingLevelRequirement model = models.TrainingLevelRequirement
form_class = forms.RequirementForm form_class = forms.RequirementForm
@@ -96,7 +98,14 @@ class AddLevelRequirement(generic.CreateView):
return kwargs return kwargs
def get_success_url(self): def get_success_url(self):
return reverse_lazy('trainee_detail') return reverse_lazy('level_detail', kwargs={"pk": self.kwargs['pk']})
@transaction.atomic()
@reversion.create_revision()
def form_valid(self, form, *args, **kwargs):
reversion.add_to_revision(form.cleaned_data['level'])
reversion.set_comment("Level requirement added")
return super().form_valid(form, *args, **kwargs)
class LevelDetail(generic.DetailView): class LevelDetail(generic.DetailView):
@@ -129,4 +138,3 @@ class ConfirmLevel(generic.RedirectView):
level_qualification.confirmed_on = timezone.now() level_qualification.confirmed_on = timezone.now()
level_qualification.save() level_qualification.save()
return reverse_lazy('trainee_detail', kwargs={'pk': kwargs['pk']}) return reverse_lazy('trainee_detail', kwargs={'pk': kwargs['pk']})

View File

@@ -56,43 +56,37 @@
</div> </div>
{% endif %} {% endif %}
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-lg-4 col-12 mb-2">
<div class="card"> <div class="card">
<div class="row no-gutters"> <img src="{{object.profile_picture}}" class="card-img img-fluid" />
<div class="col-md-3"> <div class="card-body">
<img src="{{object.profile_picture}}" class="card-img img-fluid" /> <dl class="row">
</div> <dt class="col-5">First Name</dt>
<div class="col-md-9"> <dd class="col-7">{{object.first_name}}</dd>
<div class="card-body">
<dl class="row">
<dt class="col-5">First Name</dt>
<dd class="col-7">{{object.first_name}}</dd>
<dt class="col-5">Last Name</dt> <dt class="col-5">Last Name</dt>
<dd class="col-7">{{object.last_name}}</dd> <dd class="col-7">{{object.last_name}}</dd>
<dt class="col-5">Email</dt> <dt class="col-5">Email</dt>
<dd class="col-7">{{object.email}}</dd> <dd class="col-7">{{object.email}}</dd>
<dt class="col-5">Last Login</dt> <dt class="col-5">Last Login</dt>
<dd class="col-7">{{object.last_login|date:"d/m/Y H:i"}}</dd> <dd class="col-7">{{object.last_login|date:"d/m/Y H:i"}}</dd>
<dt class="col-5">Date Joined</dt> <dt class="col-5">Date Joined</dt>
<dd class="col-7">{{object.date_joined|date:"d/m/Y H:i"}}</dd> <dd class="col-7">{{object.date_joined|date:"d/m/Y H:i"}}</dd>
<dt class="col-5">Initials</dt> <dt class="col-5">Initials</dt>
<dd class="col-7">{{object.initials}}</dd> <dd class="col-7">{{object.initials}}</dd>
<dt class="col-5">Phone</dt> <dt class="col-5">Phone</dt>
<dd class="col-7">{{object.phone|linkornone:'tel'}}</dd> <dd class="col-7">{{object.phone|linkornone:'tel'}}</dd>
</dl> </dl>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
{% if not request.is_ajax and object.pk == user.pk %} {% if not request.is_ajax and object.pk == user.pk %}
<div class="col-12 my-2"> <div class="col-lg-8 col-12">
<div class="card"> <div class="card">
<div class="card-header">Personal iCal Details</div> <div class="card-header">Personal iCal Details</div>
<div class="card-body"> <div class="card-body">
@@ -152,9 +146,19 @@
</div> </div>
</div> </div>
{% endif %} {% endif %}
<div class="col mb-2">
<div class="card">
<div class="card-header">Training Record</div>
<div class="card-body">
<a href="{% url 'trainee_detail' object.pk %}" class="btn btn-primary"><span class="fas fa-eye"></span> View Training Record</a>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">Events</div>
{% with object.latest_events as events %}
{% include 'partials/event_table.html' %}
{% endwith %}
</div> </div>
<h4>Events</h4>
{% with object.latest_events as events %}
{% include 'partials/event_table.html' %}
{% endwith %}
{% endblock %} {% endblock %}