From 29180572c1a171cc3247d348346d38313a44d2a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniele=20Vigan=C3=B2?= Date: Sat, 27 Aug 2022 14:57:26 +0200 Subject: [PATCH] Add a journal for rolling stock --- ram/portal/templates/page.html | 18 ++++++++ ram/portal/views.py | 7 +++ ram/roster/admin.py | 31 +++++++++++++ .../migrations/0012_rollingstockjournal.py | 45 +++++++++++++++++++ ram/roster/models.py | 21 +++++++++ 5 files changed, 122 insertions(+) create mode 100644 ram/roster/migrations/0012_rollingstockjournal.py diff --git a/ram/portal/templates/page.html b/ram/portal/templates/page.html index c5751ca..807d41b 100644 --- a/ram/portal/templates/page.html +++ b/ram/portal/templates/page.html @@ -47,6 +47,7 @@ {% if rolling_stock.decoder %}{% endif %} {% if rolling_stock.notes %}{% endif %} {% if rolling_stock.document.count > 0 %}{% endif %} + {% if rolling_stock_journal.count > 0 %}{% endif %} +
{% if request.user.is_staff %}Edit{% endif %} diff --git a/ram/portal/views.py b/ram/portal/views.py index 027ad3d..4d4c868 100644 --- a/ram/portal/views.py +++ b/ram/portal/views.py @@ -154,6 +154,12 @@ class GetRollingStock(View): else rolling_stock.property.filter(property__private=False) ) + rolling_stock_journal = ( + rolling_stock.journal.all() + if request.user.is_authenticated + else rolling_stock.journal.filter(private=False) + ) + return render( request, "page.html", @@ -161,6 +167,7 @@ class GetRollingStock(View): "rolling_stock": rolling_stock, "class_properties": class_properties, "rolling_stock_properties": rolling_stock_properties, + "rolling_stock_journal": rolling_stock_journal, }, ) diff --git a/ram/roster/admin.py b/ram/roster/admin.py index 2dde810..a12ce43 100644 --- a/ram/roster/admin.py +++ b/ram/roster/admin.py @@ -6,6 +6,7 @@ from roster.models import ( RollingStockImage, RollingStockDocument, RollingStockProperty, + RollingStockJournal, ) @@ -31,6 +32,7 @@ class RollingStockDocInline(admin.TabularInline): model = RollingStockDocument min_num = 0 extra = 0 + classes = ["collapse"] class RollingStockImageInline(admin.TabularInline): @@ -38,6 +40,7 @@ class RollingStockImageInline(admin.TabularInline): min_num = 0 extra = 0 readonly_fields = ("image_thumbnail",) + classes = ["collapse"] class RollingStockPropertyInline(admin.TabularInline): @@ -46,6 +49,13 @@ class RollingStockPropertyInline(admin.TabularInline): extra = 0 +class RollingStockJournalInline(admin.TabularInline): + model = RollingStockJournal + min_num = 0 + extra = 0 + classes = ["collapse"] + + @admin.register(RollingStockDocument) class RollingStockDocumentAdmin(admin.ModelAdmin): list_display = ( @@ -62,12 +72,33 @@ class RollingStockDocumentAdmin(admin.ModelAdmin): ) +@admin.register(RollingStockJournal) +class RollingJournalDocumentAdmin(admin.ModelAdmin): + list_display = ( + "__str__", + "date", + "rolling_stock", + "private", + ) + list_filter = ( + "date", + "private", + ) + search_fields = ( + "rolling_stock__rolling_class__identifier", + "rolling_stock__road_number", + "rolling_stock__sku", + "log", + ) + + @admin.register(RollingStock) class RollingStockAdmin(admin.ModelAdmin): inlines = ( RollingStockPropertyInline, RollingStockImageInline, RollingStockDocInline, + RollingStockJournalInline, ) readonly_fields = ("creation_time", "updated_time") list_display = ( diff --git a/ram/roster/migrations/0012_rollingstockjournal.py b/ram/roster/migrations/0012_rollingstockjournal.py new file mode 100644 index 0000000..98e013b --- /dev/null +++ b/ram/roster/migrations/0012_rollingstockjournal.py @@ -0,0 +1,45 @@ +# Generated by Django 4.1 on 2022-08-27 12:43 + +import ckeditor_uploader.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("roster", "0011_md_to_html"), + ] + + operations = [ + migrations.CreateModel( + name="RollingStockJournal", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("date", models.DateField()), + ("log", ckeditor_uploader.fields.RichTextUploadingField()), + ("private", models.BooleanField(default=False)), + ("creation_time", models.DateTimeField(auto_now_add=True)), + ("updated_time", models.DateTimeField(auto_now=True)), + ( + "rolling_stock", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="journal", + to="roster.rollingstock", + ), + ), + ], + options={ + "ordering": ["date", "rolling_stock"], + }, + ), + ] diff --git a/ram/roster/models.py b/ram/roster/models.py index d5ed89a..dae9663 100644 --- a/ram/roster/models.py +++ b/ram/roster/models.py @@ -191,6 +191,27 @@ class RollingStockProperty(models.Model): verbose_name_plural = "Properties" +class RollingStockJournal(models.Model): + rolling_stock = models.ForeignKey( + RollingStock, + on_delete=models.CASCADE, + related_name="journal", + null=False, + blank=False, + ) + date = models.DateField() + log = RichTextUploadingField() + private = models.BooleanField(default=False) + creation_time = models.DateTimeField(auto_now_add=True) + updated_time = models.DateTimeField(auto_now=True) + + def __str__(self): + return "{0} - {1}".format(self.rolling_stock, self.date) + + class Meta: + ordering = ["date", "rolling_stock"] + + # @receiver(models.signals.post_delete, sender=Cab) # def post_save_image(sender, instance, *args, **kwargs): # try: