From f0927315c3a0d80d5a7a78eeaffb6993b44ace6a Mon Sep 17 00:00:00 2001
From: florimondmanca <florimond.manca@gmail.com>
Date: Thu, 20 Sep 2018 10:15:10 +0200
Subject: [PATCH] add phone number to user and student registration api

---
 register/factory.py                            |  2 ++
 .../0002_registration_phone_number.py          | 18 ++++++++++++++++++
 register/models.py                             |  5 +++++
 register/serializers.py                        |  2 +-
 register/signals.py                            |  1 +
 tests/test_users/test_user.py                  |  4 ++++
 users/admin.py                                 |  2 +-
 users/migrations/0003_user_phone_number.py     | 18 ++++++++++++++++++
 users/models.py                                |  3 +++
 users/serializers.py                           |  2 +-
 10 files changed, 54 insertions(+), 3 deletions(-)
 create mode 100644 register/migrations/0002_registration_phone_number.py
 create mode 100644 users/migrations/0003_user_phone_number.py

diff --git a/register/factory.py b/register/factory.py
index a035972..973d6e7 100644
--- a/register/factory.py
+++ b/register/factory.py
@@ -23,3 +23,5 @@ class RegistrationFactory(factory.DjangoModelFactory):
         return '{}.{}@example.net'.format(
             printable_only(self.first_name.lower()),
             printable_only(self.last_name.lower()))
+
+    phone_number = factory.Faker('phone_number', locale='fr')
diff --git a/register/migrations/0002_registration_phone_number.py b/register/migrations/0002_registration_phone_number.py
new file mode 100644
index 0000000..14f20a9
--- /dev/null
+++ b/register/migrations/0002_registration_phone_number.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.1.1 on 2018-09-20 08:11
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('register', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='registration',
+            name='phone_number',
+            field=models.CharField(default='', help_text='Numéro de téléphone du lycéen (20 caractères max)', max_length=20, verbose_name='téléphone'),
+        ),
+    ]
diff --git a/register/models.py b/register/models.py
index c1b13bb..d4966c4 100644
--- a/register/models.py
+++ b/register/models.py
@@ -20,6 +20,11 @@ class Registration(models.Model):
             'Adresse email personnelle du lycéen. '
             'Note : doit être une adresse mail valide.'
         ))
+    phone_number = models.CharField(
+        max_length=20, verbose_name='téléphone',
+        help_text='Numéro de téléphone du lycéen (20 caractères max)',
+        blank=False, default='',
+    )
     submitted = models.DateTimeField(
         auto_now_add=True, verbose_name='envoyé le',
         help_text="Date d'envoi du dossier d'inscription")
diff --git a/register/serializers.py b/register/serializers.py
index 5fd7190..01cea36 100644
--- a/register/serializers.py
+++ b/register/serializers.py
@@ -23,7 +23,7 @@ class RegistrationSerializer(serializers.ModelSerializer):
     class Meta:  # noqa
         model = Registration
         fields = ('id', 'email', 'password',
-                  'first_name', 'last_name',
+                  'first_name', 'last_name', 'phone_number',
                   'submitted', 'validated',)
 
         extra_kwargs = {
diff --git a/register/signals.py b/register/signals.py
index a5bd237..0572391 100644
--- a/register/signals.py
+++ b/register/signals.py
@@ -22,6 +22,7 @@ def create_user_and_student(sender, instance: Registration,
         password=password,
         first_name=instance.first_name,
         last_name=instance.last_name,
+        phone_number=instance.phone_number,
     )
 
     Student.objects.create(
diff --git a/tests/test_users/test_user.py b/tests/test_users/test_user.py
index d51091b..79a56fc 100644
--- a/tests/test_users/test_user.py
+++ b/tests/test_users/test_user.py
@@ -64,6 +64,10 @@ class UserModelTest(ModelTestCase):
                 (User.PROFILE_STUDENT, 'Lycéen'),
                 (User.PROFILE_TUTOR, 'Tuteur'),
             )
+        },
+        'phone_number': {
+            'blank': True,
+            'null': True,
         }
     }
     model_tests = {
diff --git a/users/admin.py b/users/admin.py
index 3f51c65..5131546 100644
--- a/users/admin.py
+++ b/users/admin.py
@@ -40,7 +40,7 @@ class CustomUserAdmin(UserAdmin):
     fieldsets = (
         (None, {'fields': ('email', 'password')}),
         (_('Personal info'), {'fields': (
-            'first_name', 'last_name',
+            'first_name', 'last_name', 'phone_number',
         )}),
         (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                        'groups', 'user_permissions')}),
diff --git a/users/migrations/0003_user_phone_number.py b/users/migrations/0003_user_phone_number.py
new file mode 100644
index 0000000..e21f92f
--- /dev/null
+++ b/users/migrations/0003_user_phone_number.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.1.1 on 2018-09-20 07:50
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('users', '0002_auto_20180911_2223'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='user',
+            name='phone_number',
+            field=models.CharField(blank=True, max_length=20, null=True, verbose_name='téléphone'),
+        ),
+    ]
diff --git a/users/models.py b/users/models.py
index 5831b58..264547d 100644
--- a/users/models.py
+++ b/users/models.py
@@ -77,6 +77,9 @@ class User(AbstractUser):
                                     choices=PROFILE_CHOICES,
                                     verbose_name='type de profil')
 
+    phone_number = models.CharField('téléphone',
+                                    max_length=20, null=True, blank=True)
+
     @property
     def student(self):
         return getattr(self, 'student', None)
diff --git a/users/serializers.py b/users/serializers.py
index 8064360..fa0d945 100644
--- a/users/serializers.py
+++ b/users/serializers.py
@@ -12,7 +12,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer):
     class Meta:  # noqa
         model = User
         fields = ('id', 'email', 'profile_type',
-                  'first_name', 'last_name', 'url',)
+                  'first_name', 'last_name', 'phone_number', 'url',)
         extra_kwargs = {
             'email': {'read_only': True},
             'url': {'view_name': 'api:user-detail'},
-- 
GitLab