From 1e7ed8b92a172244394f1c3aeceac3233bb11561 Mon Sep 17 00:00:00 2001
From: Dan Braghis <dan.braghis@torchbox.com>
Date: Wed, 28 Feb 2018 15:35:34 +0000
Subject: [PATCH] Add and map Drupal uid

---
 .../management/commands/migrate_users.py      | 14 +++++++++----
 .../users/migrations/0005_user_drupal_id.py   | 20 +++++++++++++++++++
 opentech/apply/users/models.py                |  3 +++
 3 files changed, 33 insertions(+), 4 deletions(-)
 create mode 100644 opentech/apply/users/migrations/0005_user_drupal_id.py

diff --git a/opentech/apply/users/management/commands/migrate_users.py b/opentech/apply/users/management/commands/migrate_users.py
index 16057bb91..934d67d4d 100644
--- a/opentech/apply/users/management/commands/migrate_users.py
+++ b/opentech/apply/users/management/commands/migrate_users.py
@@ -29,16 +29,23 @@ class Command(BaseCommand):
                 full_name = self.get_full_name(user)
                 user_object, created = User.objects.get_or_create(
                     email=user.get('mail'),
-                    defaults={'full_name': full_name}
+                    defaults={
+                        'full_name': full_name,
+                        'drupal_id': uid,
+                    }
                 )
 
-                if created:
-                    print("Imported user %s (%s)" % (uid, full_name))
+                operation = "Imported" if created else "Processed"
 
                 for group in self.get_user_groups(user):
                     user_object.groups.add(group)
+
+                # Ensure uid is set
+                user_object.drupal_id = uid
                 user_object.save()
 
+                print(f"{operation} user {uid} ({full_name})")
+
     def get_full_name(self, user):
         full_name = user.get('field_otf_real_name', None)
         try:
@@ -48,7 +55,6 @@ class Command(BaseCommand):
 
         return full_name
 
-
     def get_user_groups(self, user):
         groups = []
         role_map = {
diff --git a/opentech/apply/users/migrations/0005_user_drupal_id.py b/opentech/apply/users/migrations/0005_user_drupal_id.py
new file mode 100644
index 000000000..662c55217
--- /dev/null
+++ b/opentech/apply/users/migrations/0005_user_drupal_id.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.8 on 2018-02-28 15:21
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('users', '0004_drop_first_last_names'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='user',
+            name='drupal_id',
+            field=models.IntegerField(blank=True, editable=False, null=True),
+        ),
+    ]
diff --git a/opentech/apply/users/models.py b/opentech/apply/users/models.py
index 9e867ab9b..f4d226660 100644
--- a/opentech/apply/users/models.py
+++ b/opentech/apply/users/models.py
@@ -48,6 +48,9 @@ class User(AbstractUser):
     email = models.EmailField(_('email address'), unique=True)
     full_name = models.CharField(verbose_name='Full name', max_length=255, blank=True)
 
+    # Meta: used for migration purposes only
+    drupal_id = models.IntegerField(null=True, blank=True, editable=False)
+
     USERNAME_FIELD = 'email'
     REQUIRED_FIELDS = []
 
-- 
GitLab