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 %}
@@ -277,6 +278,23 @@
+
{% 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: