From 915bc13575440c1884daf106e1bf317c31a8d13e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniele=20Vigan=C3=B2?= Date: Sat, 2 Apr 2022 12:43:40 +0200 Subject: [PATCH] Add consist app --- dcc/consist/__init__.py | 0 dcc/consist/admin.py | 35 ++++++++++++ dcc/consist/apps.py | 6 +++ dcc/consist/migrations/0001_initial.py | 39 ++++++++++++++ ...r_consistitem_options_consistitem_order.py | 22 ++++++++ .../migrations/0003_consist_address.py | 18 +++++++ dcc/consist/migrations/__init__.py | 0 dcc/consist/models.py | 53 +++++++++++++++++++ dcc/consist/tests.py | 3 ++ dcc/consist/views.py | 3 ++ dcc/dcc/settings.py | 2 + dcc/roster/admin.py | 2 +- .../migrations/0003_consistitem_consist.py | 36 +++++++++++++ .../migrations/0004_consistitem_consist.py | 20 +++++++ ...005_remove_consistitem_consist_and_more.py | 27 ++++++++++ dcc/roster/models.py | 2 - requirements.txt | 1 + 17 files changed, 266 insertions(+), 3 deletions(-) create mode 100644 dcc/consist/__init__.py create mode 100644 dcc/consist/admin.py create mode 100644 dcc/consist/apps.py create mode 100644 dcc/consist/migrations/0001_initial.py create mode 100644 dcc/consist/migrations/0002_alter_consistitem_options_consistitem_order.py create mode 100644 dcc/consist/migrations/0003_consist_address.py create mode 100644 dcc/consist/migrations/__init__.py create mode 100644 dcc/consist/models.py create mode 100644 dcc/consist/tests.py create mode 100644 dcc/consist/views.py create mode 100644 dcc/roster/migrations/0003_consistitem_consist.py create mode 100644 dcc/roster/migrations/0004_consistitem_consist.py create mode 100644 dcc/roster/migrations/0005_remove_consistitem_consist_and_more.py diff --git a/dcc/consist/__init__.py b/dcc/consist/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dcc/consist/admin.py b/dcc/consist/admin.py new file mode 100644 index 0000000..f21151d --- /dev/null +++ b/dcc/consist/admin.py @@ -0,0 +1,35 @@ +from django.contrib import admin +from adminsortable2.admin import SortableInlineAdminMixin + +from consist.models import Consist, ConsistItem + + +class ConsistItemInline(SortableInlineAdminMixin, admin.TabularInline): + model = ConsistItem + min_num = 1 + extra = 0 + readonly_fields = ('address', 'company', 'epoch') + + +@admin.register(Consist) +class ConsistAdmin(admin.ModelAdmin): + inlines = (ConsistItemInline,) + readonly_fields = ('creation_time', 'updated_time',) + list_display = ('identifier', 'company', 'epoch') + list_filter = list_display + search_fields = list_display + + fieldsets = ( + (None, { + 'fields': ('identifier', + 'address', + 'tags', + 'company', + 'epoch', + 'notes') + }), + ('Audit', { + 'classes': ('collapse',), + 'fields': ('creation_time', 'updated_time',) + }), + ) diff --git a/dcc/consist/apps.py b/dcc/consist/apps.py new file mode 100644 index 0000000..5f3aa65 --- /dev/null +++ b/dcc/consist/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ConsistConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'consist' diff --git a/dcc/consist/migrations/0001_initial.py b/dcc/consist/migrations/0001_initial.py new file mode 100644 index 0000000..5501547 --- /dev/null +++ b/dcc/consist/migrations/0001_initial.py @@ -0,0 +1,39 @@ +# Generated by Django 4.0.2 on 2022-04-02 09:22 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('metadata', '0001_initial'), + ('roster', '0005_remove_consistitem_consist_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Consist', + fields=[ + ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('identifier', models.CharField(max_length=128)), + ('epoch', models.CharField(blank=True, max_length=32)), + ('notes', models.TextField(blank=True)), + ('creation_time', models.DateTimeField(auto_now_add=True)), + ('updated_time', models.DateTimeField(auto_now=True)), + ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='metadata.company')), + ('tags', models.ManyToManyField(blank=True, related_name='consist', to='metadata.Tag')), + ], + ), + migrations.CreateModel( + name='ConsistItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('consist', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='consist.consist')), + ('rolling_stock', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='roster.rollingstock')), + ], + ), + ] diff --git a/dcc/consist/migrations/0002_alter_consistitem_options_consistitem_order.py b/dcc/consist/migrations/0002_alter_consistitem_options_consistitem_order.py new file mode 100644 index 0000000..3f60510 --- /dev/null +++ b/dcc/consist/migrations/0002_alter_consistitem_options_consistitem_order.py @@ -0,0 +1,22 @@ +# Generated by Django 4.0.2 on 2022-04-02 09:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('consist', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='consistitem', + options={'ordering': ['order']}, + ), + migrations.AddField( + model_name='consistitem', + name='order', + field=models.PositiveIntegerField(default=0), + ), + ] diff --git a/dcc/consist/migrations/0003_consist_address.py b/dcc/consist/migrations/0003_consist_address.py new file mode 100644 index 0000000..cabd1e8 --- /dev/null +++ b/dcc/consist/migrations/0003_consist_address.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.2 on 2022-04-02 10:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('consist', '0002_alter_consistitem_options_consistitem_order'), + ] + + operations = [ + migrations.AddField( + model_name='consist', + name='address', + field=models.SmallIntegerField(blank=True, default=None, null=True), + ), + ] diff --git a/dcc/consist/migrations/__init__.py b/dcc/consist/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dcc/consist/models.py b/dcc/consist/models.py new file mode 100644 index 0000000..d45fb9a --- /dev/null +++ b/dcc/consist/models.py @@ -0,0 +1,53 @@ +from uuid import uuid4 +from django.db import models + +from metadata.models import Company, Tag +from roster.models import RollingStock + + +class Consist(models.Model): + uuid = models.UUIDField( + primary_key=True, default=uuid4, + editable=False) + identifier = models.CharField(max_length=128, unique=False) + tags = models.ManyToManyField( + Tag, + related_name='consist', + blank=True) + address = models.SmallIntegerField(default=None, null=True, blank=True) + company = models.ForeignKey( + Company, on_delete=models.CASCADE, + null=True, blank=True) + epoch = models.CharField(max_length=32, blank=True) + notes = models.TextField(blank=True) + creation_time = models.DateTimeField(auto_now_add=True) + updated_time = models.DateTimeField(auto_now=True) + + def __str__(self): + return "{0}".format(self.identifier) + + +class ConsistItem(models.Model): + consist = models.ForeignKey( + Consist, on_delete=models.CASCADE) + rolling_stock = models.ForeignKey( + RollingStock, on_delete=models.CASCADE) + order = models.PositiveIntegerField(default=0, blank=False, null=False) + + class Meta(object): + ordering = ['order'] + + def __str__(self): + return "{0}".format(self.rolling_stock.identifier) + + # def type(self): + # return self.rolling_stock.type + + def address(self): + return self.rolling_stock.address + + def company(self): + return self.rolling_stock.company + + def epoch(self): + return self.rolling_stock.epoch diff --git a/dcc/consist/tests.py b/dcc/consist/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/dcc/consist/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/dcc/consist/views.py b/dcc/consist/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/dcc/consist/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/dcc/dcc/settings.py b/dcc/dcc/settings.py index 6eaa721..bb9408c 100644 --- a/dcc/dcc/settings.py +++ b/dcc/dcc/settings.py @@ -43,10 +43,12 @@ INSTALLED_APPS = [ 'django_countries', 'solo', 'rest_framework', + 'adminsortable2', 'dcc', 'driver', 'metadata', 'roster', + 'consist', ] MIDDLEWARE = [ diff --git a/dcc/roster/admin.py b/dcc/roster/admin.py index 40766c4..cada57d 100644 --- a/dcc/roster/admin.py +++ b/dcc/roster/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin from roster.models import ( - RollingStock, RollingStockImage, RollingStockDocument, Engine, Car, + RollingStockImage, RollingStockDocument, Engine, Car, Equipment, Other) diff --git a/dcc/roster/migrations/0003_consistitem_consist.py b/dcc/roster/migrations/0003_consistitem_consist.py new file mode 100644 index 0000000..6017596 --- /dev/null +++ b/dcc/roster/migrations/0003_consistitem_consist.py @@ -0,0 +1,36 @@ +# Generated by Django 4.0.2 on 2022-04-02 09:09 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('metadata', '0001_initial'), + ('roster', '0002_alter_rollingstock_address'), + ] + + operations = [ + migrations.CreateModel( + name='ConsistItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('rolling_stock', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='roster.rollingstock')), + ], + ), + migrations.CreateModel( + name='Consist', + fields=[ + ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('identifier', models.CharField(max_length=128)), + ('epoch', models.CharField(blank=True, max_length=32)), + ('notes', models.TextField(blank=True)), + ('creation_time', models.DateTimeField(auto_now_add=True)), + ('updated_time', models.DateTimeField(auto_now=True)), + ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='metadata.company')), + ('tags', models.ManyToManyField(blank=True, related_name='consist', to='metadata.Tag')), + ], + ), + ] diff --git a/dcc/roster/migrations/0004_consistitem_consist.py b/dcc/roster/migrations/0004_consistitem_consist.py new file mode 100644 index 0000000..2cf1d18 --- /dev/null +++ b/dcc/roster/migrations/0004_consistitem_consist.py @@ -0,0 +1,20 @@ +# Generated by Django 4.0.2 on 2022-04-02 09:13 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('roster', '0003_consistitem_consist'), + ] + + operations = [ + migrations.AddField( + model_name='consistitem', + name='consist', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='roster.consist'), + preserve_default=False, + ), + ] diff --git a/dcc/roster/migrations/0005_remove_consistitem_consist_and_more.py b/dcc/roster/migrations/0005_remove_consistitem_consist_and_more.py new file mode 100644 index 0000000..d4be8cc --- /dev/null +++ b/dcc/roster/migrations/0005_remove_consistitem_consist_and_more.py @@ -0,0 +1,27 @@ +# Generated by Django 4.0.2 on 2022-04-02 09:21 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('roster', '0004_consistitem_consist'), + ] + + operations = [ + migrations.RemoveField( + model_name='consistitem', + name='consist', + ), + migrations.RemoveField( + model_name='consistitem', + name='rolling_stock', + ), + migrations.DeleteModel( + name='Consist', + ), + migrations.DeleteModel( + name='ConsistItem', + ), + ] diff --git a/dcc/roster/models.py b/dcc/roster/models.py index 5a07d44..fd062f1 100644 --- a/dcc/roster/models.py +++ b/dcc/roster/models.py @@ -37,9 +37,7 @@ class RollingStock(models.Model): epoch = models.CharField(max_length=32, blank=True) production_year = models.SmallIntegerField(null=True, blank=True) purchase_date = models.DateField(null=True, blank=True) - notes = models.TextField(blank=True) - creation_time = models.DateTimeField(auto_now_add=True) updated_time = models.DateTimeField(auto_now=True) diff --git a/requirements.txt b/requirements.txt index 3c71f53..bf774ee 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,7 @@ djangorestframework django-solo django-countries django-health-check +django-admin-sortable2 # psycopg2-binary # paho-mqtt # asyncio-mqtt