diff options
Diffstat (limited to 'ctrack/caf')
-rw-r--r-- | ctrack/caf/__init__.py | 0 | ||||
-rw-r--r-- | ctrack/caf/admin.py | 10 | ||||
-rw-r--r-- | ctrack/caf/apps.py | 6 | ||||
-rw-r--r-- | ctrack/caf/forms.py | 26 | ||||
-rw-r--r-- | ctrack/caf/migrations/0001_initial.py | 59 | ||||
-rw-r--r-- | ctrack/caf/migrations/__init__.py | 0 | ||||
-rw-r--r-- | ctrack/caf/models.py | 61 | ||||
-rw-r--r-- | ctrack/caf/templates/caf/create.html | 14 | ||||
-rw-r--r-- | ctrack/caf/tests.py | 3 | ||||
-rw-r--r-- | ctrack/caf/urls.py | 9 | ||||
-rw-r--r-- | ctrack/caf/views.py | 17 |
11 files changed, 205 insertions, 0 deletions
diff --git a/ctrack/caf/__init__.py b/ctrack/caf/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ctrack/caf/__init__.py diff --git a/ctrack/caf/admin.py b/ctrack/caf/admin.py new file mode 100644 index 0000000..c0f416e --- /dev/null +++ b/ctrack/caf/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin + +from .models import CAF, CAFFileStore, DocumentFile, Ranking + +# Register your models here. + +admin.site.register(CAF) +admin.site.register(CAFFileStore) +admin.site.register(DocumentFile) +admin.site.register(Ranking) diff --git a/ctrack/caf/apps.py b/ctrack/caf/apps.py new file mode 100644 index 0000000..d8ae85f --- /dev/null +++ b/ctrack/caf/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CafConfig(AppConfig): + name = 'ctrack.caf' + verbose_name = "CAF Register" diff --git a/ctrack/caf/forms.py b/ctrack/caf/forms.py new file mode 100644 index 0000000..ee3bf21 --- /dev/null +++ b/ctrack/caf/forms.py @@ -0,0 +1,26 @@ +from crispy_forms.helper import FormHelper +from crispy_forms.layout import Button +from crispy_forms.layout import ButtonHolder +from crispy_forms.layout import Fieldset +from crispy_forms.layout import Layout +from crispy_forms.layout import Submit +from django import forms + +from ctrack.caf.models import CAF + + +class CAFForm(forms.ModelForm): + class Meta: + model = CAF + fields = ["owner", "essential_system"] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.helper = FormHelper(self) + self.helper.form_class = "form-group" + self.helper.form_method = "post" + self.helper.layout = Layout( + Fieldset("Create/Edit CAF", "owner", "essential_system"), + ButtonHolder(Submit("submit", "Submit"), Button("cancel", "Cancel")), + ) diff --git a/ctrack/caf/migrations/0001_initial.py b/ctrack/caf/migrations/0001_initial.py new file mode 100644 index 0000000..8e0b11a --- /dev/null +++ b/ctrack/caf/migrations/0001_initial.py @@ -0,0 +1,59 @@ +# Generated by Django 2.2.9 on 2020-01-25 16:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('organisations', '0014_auto_20200125_1459'), + ] + + operations = [ + migrations.CreateModel( + name='CAFFileStore', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('descriptor', models.CharField(max_length=100)), + ('virtual_location', models.CharField(help_text='USB, Rosa, email, etc', max_length=100)), + ('physical_location', models.CharField(blank=True, help_text='Cupboard, room, building, etc', max_length=100)), + ('physical_location_organisation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organisations.Organisation')), + ], + options={ + 'verbose_name': 'CAF File Store', + }, + ), + migrations.CreateModel( + name='Ranking', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('descriptor', models.CharField(max_length=100)), + ('type', models.IntegerField(choices=[(1, 'Triage'), (2, 'First Assessment')], default=1)), + ], + ), + migrations.CreateModel( + name='DocumentFile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('type', models.IntegerField(choices=[(1, 'Excel'), (2, 'Word'), (3, 'PDF'), (4, 'Hard Copy')], default=1)), + ('file_store_location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='caf.CAFFileStore')), + ], + ), + migrations.CreateModel( + name='CAF', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('essential_system', models.CharField(blank=True, max_length=255)), + ('file', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='caf.DocumentFile')), + ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organisations.Organisation')), + ('triage_ranking', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='caf.Ranking')), + ], + options={ + 'verbose_name': 'CAF', + }, + ), + ] diff --git a/ctrack/caf/migrations/__init__.py b/ctrack/caf/migrations/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ctrack/caf/migrations/__init__.py diff --git a/ctrack/caf/models.py b/ctrack/caf/models.py new file mode 100644 index 0000000..53faabf --- /dev/null +++ b/ctrack/caf/models.py @@ -0,0 +1,61 @@ +from django.db import models + +from ctrack.organisations.models import Organisation + +# TODO - thinking about whether TriageAssessment can be converted into an inherited class +# e.g. we inherit from +# class Assessment(models.Model): +# descriptor = models.CharField(max_length=100) +# date_entered = models.DateTimeField(auto_now_add=True) +# modified = models.DateTimeField(auto_now=True) +# +# class Meta: +# abstract = True + + +class Ranking(models.Model): + RANKING_TYPE = [(1, "Triage"), (2, "First Assessment")] + descriptor = models.CharField(max_length=100) + type = models.IntegerField(choices=RANKING_TYPE, default=1) + + def __str__(self): + return self.descriptor + + +class CAFFileStore(models.Model): + descriptor = models.CharField(max_length=100) + virtual_location = models.CharField( + max_length=100, help_text="USB, Rosa, email, etc" + ) + physical_location = models.CharField( + max_length=100, blank=True, help_text="Cupboard, room, building, etc" + ) # cupboard, room, building, address + physical_location_organisation = models.ForeignKey( + Organisation, on_delete=models.CASCADE + ) + + class Meta: + verbose_name = "CAF File Store" + + +class DocumentFile(models.Model): + FILETYPE_CHOICES = [(1, "Excel"), (2, "Word"), (3, "PDF"), (4, "Hard Copy")] + name = models.CharField(max_length=255) + type = models.IntegerField(choices=FILETYPE_CHOICES, default=1) + file_store_location = models.ForeignKey(CAFFileStore, on_delete=models.CASCADE) + + +class CAF(models.Model): + owner = models.ForeignKey(Organisation, on_delete=models.CASCADE) + essential_system = models.CharField(max_length=255, blank=True) + triage_ranking = models.ForeignKey(Ranking, on_delete=models.CASCADE) + file = models.ForeignKey(DocumentFile, on_delete=models.CASCADE) + + def __str__(self): + if not self.essential_system: + return f"Comprehensive CAF for {self.owner}" + else: + return f"{self.essential_system} CAF for {self.owner}" + + class Meta: + verbose_name = "CAF" diff --git a/ctrack/caf/templates/caf/create.html b/ctrack/caf/templates/caf/create.html new file mode 100644 index 0000000..822da83 --- /dev/null +++ b/ctrack/caf/templates/caf/create.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} +{% load crispy_forms_tags %} +{% crispy form form.helper %} + + +{% block content %} +<div class="container"> + <div class="row"> + <div class="col-lg-6"> + {% crispy form %} + </div> + </div> +</div> +{% endblock %} diff --git a/ctrack/caf/tests.py b/ctrack/caf/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/ctrack/caf/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/ctrack/caf/urls.py b/ctrack/caf/urls.py new file mode 100644 index 0000000..e819ef7 --- /dev/null +++ b/ctrack/caf/urls.py @@ -0,0 +1,9 @@ +from django.urls import path + +from ctrack.caf.views import CreateCAF + +app_name = "caf" + +urlpatterns = [ + path("", view=CreateCAF.as_view(), name="create") +] diff --git a/ctrack/caf/views.py b/ctrack/caf/views.py new file mode 100644 index 0000000..b46360b --- /dev/null +++ b/ctrack/caf/views.py @@ -0,0 +1,17 @@ +from django.views.generic import CreateView + +from ctrack.caf.forms import CAFForm + + +class CreateCAF(CreateView): + form_class = CAFForm + template_name = "caf/create.html" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['form'] = self.form_class + return context + + + + |