From b1646d556c794e1960a11496b87bcf68461b7a2d Mon Sep 17 00:00:00 2001 From: Arona Jones Date: Wed, 30 Jun 2021 15:56:28 +0100 Subject: [PATCH] Start work on sample data command --- PyRIGS/urls.py | 1 + .../management/commands/generateSampleData.py | 1 + templates/index.html | 2 +- training/admin.py | 2 + training/management/commands/__init__.py | 0 .../commands/generateSampleTrainingData.py | 45 +++++++++++++++++++ training/models.py | 5 ++- training/templates/item_list.html | 10 ++++- training/urls.py | 4 +- training/views.py | 12 ++++- 10 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 training/management/commands/__init__.py create mode 100644 training/management/commands/generateSampleTrainingData.py diff --git a/PyRIGS/urls.py b/PyRIGS/urls.py index da12b768..2eaebfaa 100644 --- a/PyRIGS/urls.py +++ b/PyRIGS/urls.py @@ -12,6 +12,7 @@ urlpatterns = [ path('', include('versioning.urls')), path('', include('RIGS.urls')), path('assets/', include('assets.urls')), + path('training/', include('training.urls')), path('', login_required(views.Index.as_view()), name='index'), diff --git a/RIGS/management/commands/generateSampleData.py b/RIGS/management/commands/generateSampleData.py index 88c33d46..237c0cb0 100644 --- a/RIGS/management/commands/generateSampleData.py +++ b/RIGS/management/commands/generateSampleData.py @@ -12,3 +12,4 @@ class Command(BaseCommand): call_command('generateSampleUserData') call_command('generateSampleRIGSData') call_command('generateSampleAssetsData') + call_command('generateSampleTrainingData') diff --git a/templates/index.html b/templates/index.html index ce238e34..912b7d87 100644 --- a/templates/index.html +++ b/templates/index.html @@ -43,7 +43,7 @@

Training Database

- View Training Items + View Training Items Log Training Session
diff --git a/training/admin.py b/training/admin.py index 0f3eacf4..2e8e05bf 100644 --- a/training/admin.py +++ b/training/admin.py @@ -4,3 +4,5 @@ from reversion.admin import VersionAdmin admin.site.register(models.Trainee, VersionAdmin) admin.site.register(models.TrainingLevel, VersionAdmin) +admin.site.register(models.TrainingCategory, VersionAdmin) +admin.site.register(models.TrainingItem, VersionAdmin) diff --git a/training/management/commands/__init__.py b/training/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/training/management/commands/generateSampleTrainingData.py b/training/management/commands/generateSampleTrainingData.py new file mode 100644 index 00000000..f92c363f --- /dev/null +++ b/training/management/commands/generateSampleTrainingData.py @@ -0,0 +1,45 @@ +import datetime +import random + +from django.contrib.auth.models import Group, Permission +from django.core.management.base import BaseCommand, CommandError +from django.db import transaction +from django.utils import timezone +from reversion import revisions as reversion + +from training import models + + +class Command(BaseCommand): + help = 'Adds sample data to use for testing' + can_import_settings = True + + categories = [] + items = [] + + def handle(self, *args, **options): + from django.conf import settings + + if not (settings.DEBUG or settings.STAGING): + raise CommandError('You cannot run this command in production') + + random.seed('otherwise it is done by time, which could lead to inconsistant tests') + + with transaction.atomic(): + self.setup_categories() + self.setup_items() + + def setup_categories(self): + names = [(1, "Basic"), (2, "Sound"), (3, "Lighting"), (4, "Rigging"), (5, "Power"), (6, "Haulage")] + + for i, name in names: + category = models.TrainingCategory.objects.create(number=i, name=name) + category.save() + self.categories.append(category) + + def setup_items(self): + names = ["Motorised Power Towers", "Catering", "Forgetting Cables", "Gazebo Construction", "Balanced Audio", "Unbalanced Audio"] + + for i,name in enumerate(names): + item = models.TrainingItem.objects.create(category=random.choice(self.categories), number=random.randint(0, 100), name=name) + self.items.append(item) diff --git a/training/models.py b/training/models.py index f880ed64..df07dd95 100644 --- a/training/models.py +++ b/training/models.py @@ -15,10 +15,13 @@ class TrainingCategory(models.Model): class TrainingItem(models.Model): - category = models.ForeignKey('TrainingCategory', on_delete=models.RESTRICT) + category = models.ForeignKey('TrainingCategory', related_name='category', on_delete=models.RESTRICT) number = models.CharField(max_length=3) name = models.CharField(max_length=50) + def __str__(self): + return "{}.{} {}".format(self.category.number, self.number, self.name) + # TODO Validation that dates cannot be in the future class TrainingItemQualification(models.Model): diff --git a/training/templates/item_list.html b/training/templates/item_list.html index 76479fdb..7b3457e8 100644 --- a/training/templates/item_list.html +++ b/training/templates/item_list.html @@ -1,5 +1,13 @@ {% extends 'base_rigs.html' %} {% block content %} - +
+{% for category in categories %} +
+
+

{{ category.name }}

+
+
+{% endfor %} +
{% endblock %} diff --git a/training/urls.py b/training/urls.py index d2d839f0..f7462685 100644 --- a/training/urls.py +++ b/training/urls.py @@ -1,5 +1,7 @@ from django.urls import path +from training import views + urlpatterns = [ - + path('items/', views.ItemList.as_view(), name='item_list'), ] diff --git a/training/views.py b/training/views.py index 91ea44a2..87380226 100644 --- a/training/views.py +++ b/training/views.py @@ -1,3 +1,13 @@ from django.shortcuts import render -# Create your views here. +from django.views import generic +from training import models + +class ItemList(generic.ListView): + template_name = "item_list.html" + model = models.TrainingItem + + def get_context_data(self, **kwargs): + context = super(ItemList, self).get_context_data(**kwargs) + context["categories"] = models.TrainingCategory.objects.all() + return context