Commit 795147e6 by Waheed Ahmed

Add salutation field in person model.

Added salutation field in person model, also updated
refresh course metadata command and API to map this
new field.

LEARNER-4000
parent 7ab3ff28
......@@ -267,8 +267,8 @@ class PersonSerializer(serializers.ModelSerializer):
class Meta(object):
model = Person
fields = (
'uuid', 'given_name', 'family_name', 'bio', 'slug', 'position', 'profile_image',
'partner', 'works', 'urls', 'email', 'profile_image_url',
'uuid', 'salutation', 'given_name', 'family_name', 'bio', 'slug', 'position',
'profile_image', 'partner', 'works', 'urls', 'email', 'profile_image_url',
)
extra_kwargs = {
'partner': {'write_only': True}
......
......@@ -1133,8 +1133,10 @@ class PersonSerializerTests(TestCase):
position = PositionFactory()
self.person = position.person
self.person.salutation = 'Dr.'
self.expected = {
'uuid': str(self.person.uuid),
'salutation': self.person.salutation,
'given_name': self.person.given_name,
'family_name': self.person.family_name,
'bio': self.person.bio,
......
......@@ -246,11 +246,11 @@ class TopicAdmin(TranslatableAdmin):
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
inlines = (PositionInline, PersonWorkInline, PersonSocialNetworkInline)
list_display = ('uuid', 'family_name', 'given_name', 'slug',)
list_display = ('uuid', 'salutation', 'family_name', 'given_name', 'slug',)
list_filter = ('partner',)
ordering = ('family_name', 'given_name', 'uuid',)
ordering = ('salutation', 'family_name', 'given_name', 'uuid',)
readonly_fields = ('uuid',)
search_fields = ('uuid', 'family_name', 'given_name', 'slug',)
search_fields = ('uuid', 'salutation', 'family_name', 'given_name', 'slug',)
@admin.register(Position)
......
......@@ -262,6 +262,7 @@ class PersonMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
uuid = UUID(data['uuid'])
slug = data['url'].split('/')[-1]
defaults = {
'salutation': data['field_person_salutation'],
'given_name': data['field_person_first_middle_name'],
'family_name': data['field_person_last_name'],
'bio': self.clean_html(data['field_person_resume']['value']),
......@@ -274,11 +275,13 @@ class PersonMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
# NOTE (CCB): The AutoSlug field kicks in at creation time. We need to apply overrides in a separate
# operation.
if created:
person_salutation = data['field_person_salutation']
person_given_name = data['field_person_first_middle_name']
person_family_name = data['field_person_last_name']
logger.info(
u'Person created in marketing data loader, %s %s with uuid: %s and slug: %s',
u'Person created in marketing data loader, %s %s %s with uuid: %s and slug: %s',
person_salutation,
person_family_name,
person_given_name,
uuid,
......
# -*- coding: utf-8 -*-
# Generated by Django 1.11.3 on 2018-03-30 12:18
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('course_metadata', '0081_auto_20180329_0718'),
]
operations = [
migrations.AddField(
model_name='person',
name='salutation',
field=models.CharField(blank=True, max_length=10, null=True),
),
]
......@@ -260,6 +260,7 @@ class Person(TimeStampedModel):
""" Person model. """
uuid = models.UUIDField(blank=False, null=False, default=uuid4, editable=False, verbose_name=_('UUID'))
partner = models.ForeignKey(Partner, null=True, blank=False)
salutation = models.CharField(max_length=10, null=True, blank=True)
given_name = models.CharField(max_length=255)
family_name = models.CharField(max_length=255, null=True, blank=True)
bio = models.TextField(null=True, blank=True)
......@@ -292,7 +293,11 @@ class Person(TimeStampedModel):
@property
def full_name(self):
if self.family_name:
return ' '.join((self.given_name, self.family_name,))
full_name = ' '.join((self.given_name, self.family_name,))
if self.salutation:
return ' '.join((self.salutation, full_name,))
return full_name
else:
return self.given_name
......
......@@ -431,6 +431,14 @@ class PersonTests(TestCase):
expected = self.person.given_name + ' ' + self.person.family_name
self.assertEqual(self.person.full_name, expected)
def test_full_name_with_salutation(self):
""" Verify the property returns the person's full name
with salutation.
"""
self.person = factories.PersonFactory(salutation='Dr.')
expected = ' '.join((self.person.salutation, self.person.given_name, self.person.family_name))
self.assertEqual(self.person.full_name, expected)
def test_empty_family_name(self):
""" Verify the property returns the person's given name when family name is set None. """
self.person.family_name = None
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment