From a28de9de86815014c2d8b446239db48cd8fae256 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Tue, 20 Feb 2018 12:06:43 +0100
Subject: [PATCH] Add data migration

---
 .../migrations/0011_auto_20180220_1139.py     | 94 +++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100644 invitations/migrations/0011_auto_20180220_1139.py

diff --git a/invitations/migrations/0011_auto_20180220_1139.py b/invitations/migrations/0011_auto_20180220_1139.py
new file mode 100644
index 000000000..dc988e8fb
--- /dev/null
+++ b/invitations/migrations/0011_auto_20180220_1139.py
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-20 10:39
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+# Hack
+from django.contrib.auth import get_user_model
+
+
+def transfer_old_invitations_to_new_tables(apps, schema_editor):
+    OldRegistrationInvitation = apps.get_model('scipost', 'RegistrationInvitation')
+    OldCitationNotification = apps.get_model('scipost', 'CitationNotification')
+    NewRegistrationInvitation = apps.get_model('invitations', 'RegistrationInvitation')
+    NewCitationNotification = apps.get_model('invitations', 'CitationNotification')
+
+    random_user = get_user_model().objects.filter(is_superuser=True).first()
+    if not random_user:
+        random_user = get_user_model().objects.first()
+
+    # Registration Invitations first
+    for invitation in OldRegistrationInvitation.objects.all():
+        new_inv = NewRegistrationInvitation(
+            title=invitation.title,
+            first_name=invitation.first_name,
+            last_name=invitation.last_name,
+            email=invitation.email,
+            invitation_type=invitation.invitation_type,
+            created_by_id=invitation.invited_by.user.id if invitation.invited_by else random_user.id,
+            invited_by_id=invitation.invited_by.user.id if invitation.invited_by else None,
+            message_style=invitation.message_style,
+            personal_message=invitation.personal_message,
+            times_sent=invitation.nr_reminders + 1,
+            date_sent_first=invitation.date_sent,
+            date_sent_last=invitation.date_last_reminded,
+            created=invitation.date_sent,
+            modified=invitation.date_sent,
+            key_expires=invitation.key_expires,
+            invitation_key=invitation.invitation_key,
+        )
+        if new_inv.invitation_type in ['ci', 'cp']:
+            new_inv.invitation_type = 'C'
+
+        if not invitation.responded:
+            new_inv.status = 'sent'
+        elif invitation.declined:
+            new_inv.status = 'declined'
+        elif invitation.responded and not invitation.declined:
+            new_inv.status = 'register'
+        else:
+            new_inv.status = 'draft'
+        new_inv.save()
+
+        if invitation.cited_in_submission:
+            NewCitationNotification.objects.create(
+                invitation_id=new_inv.id,
+                created_by_id=invitation.invited_by.user.id if invitation.invited_by else random_user.id,
+                created=new_inv.created,
+                modified=new_inv.modified,
+                submission_id=invitation.cited_in_submission.id,
+                date_sent=invitation.date_sent_first,
+                processed=(new_inv.status in ['declined', 'register', 'sent']),
+            )
+        if invitation.cited_in_publication:
+            NewCitationNotification.objects.create(
+                invitation_id=new_inv.id,
+                created_by_id=invitation.invited_by.user.id if invitation.invited_by else random_user.id,
+                created=new_inv.created,
+                modified=new_inv.modified,
+                publication_id=invitation.cited_in_publication.id,
+                date_sent=invitation.date_sent_first,
+                processed=(new_inv.status in ['declined', 'register', 'sent']),
+            )
+
+    # Old CitationNotifications
+    for notification in OldCitationNotification.objects.all():
+        NewCitationNotification.objects.create(
+            contributor_id=notification.contributor.id if notification.contributor else None,
+            created_by_id=random_user.id,
+            submission_id=notification.cited_in_submission.id if notification.cited_in_submission else None,
+            publication_id=notification.cited_in_publication.id if notification.cited_in_publication else None,
+            processed=notification.processed,
+        )
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('invitations', '0010_auto_20180218_1613'),
+    ]
+
+    operations = [
+        migrations.RunPython(transfer_old_invitations_to_new_tables),
+    ]
-- 
GitLab