From 2fec140211bbdc760fd3b730a7dda2f3529800f8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?=
 <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de>
Date: Thu, 12 May 2022 19:27:05 +0200
Subject: [PATCH] Add event reference to AKOrgaMessage

Add a new mandatory event reference to the model
Add a migration that makes sure all existing messages are updated accordingly
Adapt the frontend view that sends the message to fill the event field
---
 .../0050_message_event_reference.py           | 41 +++++++++++++++++++
 AKModel/models.py                             |  2 +
 AKSubmission/forms.py                         |  3 +-
 AKSubmission/views.py                         |  1 +
 4 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 AKModel/migrations/0050_message_event_reference.py

diff --git a/AKModel/migrations/0050_message_event_reference.py b/AKModel/migrations/0050_message_event_reference.py
new file mode 100644
index 00000000..704d91a7
--- /dev/null
+++ b/AKModel/migrations/0050_message_event_reference.py
@@ -0,0 +1,41 @@
+# Generated by Django 3.1.8 on 2022-05-12 16:57
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+def forwards_func(apps, schema_editor):
+    # Set event to the corresponding even (from the AK) each
+    AKOrgaMessage = apps.get_model("AKModel", "AKOrgaMessage")
+    for message in AKOrgaMessage.objects.all():
+        message.event = message.ak.event
+        message.save()
+
+
+def reverse_func(apps, schema_editor):
+    # No need to do something here, field will be deleted anyway
+    pass
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('AKModel', '0049_interest_window'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='akorgamessage',
+            name='event',
+            field=models.ForeignKey(blank=True, help_text='Associated event', null=True,
+                                    on_delete=django.db.models.deletion.CASCADE, to='AKModel.event',
+                                    verbose_name='Event'),
+        ),
+        migrations.RunPython(forwards_func, reverse_func),
+        migrations.AlterField(
+            model_name='akorgamessage',
+            name='event',
+            field=models.ForeignKey(help_text='Associated event', on_delete=django.db.models.deletion.CASCADE,
+                                    to='AKModel.event', verbose_name='Event'),
+        ),
+    ]
diff --git a/AKModel/models.py b/AKModel/models.py
index 2767effb..979f005f 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -443,6 +443,8 @@ class AKOrgaMessage(models.Model):
     text = models.TextField(verbose_name=_("Message text"),
                             help_text=_("Message to the organizers. This is not publicly visible."))
     timestamp = models.DateTimeField(auto_now_add=True)
+    event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name=_('Event'),
+                              help_text=_('Associated event'))
 
     class Meta:
         verbose_name = _('AK Orga Message')
diff --git a/AKSubmission/forms.py b/AKSubmission/forms.py
index b75f8803..41cebfca 100644
--- a/AKSubmission/forms.py
+++ b/AKSubmission/forms.py
@@ -175,8 +175,9 @@ class AKDurationForm(forms.ModelForm):
 class AKOrgaMessageForm(forms.ModelForm):
     class Meta:
         model = AKOrgaMessage
-        fields = ['ak', 'text']
+        fields = ['ak', 'text', 'event']
         widgets = {
             'ak': forms.HiddenInput,
+            'event': forms.HiddenInput,
             'text': forms.Textarea,
         }
diff --git a/AKSubmission/views.py b/AKSubmission/views.py
index 077005e2..3f438546 100644
--- a/AKSubmission/views.py
+++ b/AKSubmission/views.py
@@ -437,6 +437,7 @@ class AKAddOrgaMessageView(EventSlugMixin, CreateView):
     def get_initial(self):
         initials = super(AKAddOrgaMessageView, self).get_initial()
         initials['ak'] = get_object_or_404(AK, pk=self.kwargs['pk'])
+        initials['event'] = initials['ak'].event
         return initials
 
     def get_context_data(self, *, object_list=None, **kwargs):
-- 
GitLab