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): ...@@ -267,8 +267,8 @@ class PersonSerializer(serializers.ModelSerializer):
class Meta(object): class Meta(object):
model = Person model = Person
fields = ( fields = (
'uuid', 'given_name', 'family_name', 'bio', 'slug', 'position', 'profile_image', 'uuid', 'salutation', 'given_name', 'family_name', 'bio', 'slug', 'position',
'partner', 'works', 'urls', 'email', 'profile_image_url', 'profile_image', 'partner', 'works', 'urls', 'email', 'profile_image_url',
) )
extra_kwargs = { extra_kwargs = {
'partner': {'write_only': True} 'partner': {'write_only': True}
......
...@@ -1133,8 +1133,10 @@ class PersonSerializerTests(TestCase): ...@@ -1133,8 +1133,10 @@ class PersonSerializerTests(TestCase):
position = PositionFactory() position = PositionFactory()
self.person = position.person self.person = position.person
self.person.salutation = 'Dr.'
self.expected = { self.expected = {
'uuid': str(self.person.uuid), 'uuid': str(self.person.uuid),
'salutation': self.person.salutation,
'given_name': self.person.given_name, 'given_name': self.person.given_name,
'family_name': self.person.family_name, 'family_name': self.person.family_name,
'bio': self.person.bio, 'bio': self.person.bio,
......
...@@ -246,11 +246,11 @@ class TopicAdmin(TranslatableAdmin): ...@@ -246,11 +246,11 @@ class TopicAdmin(TranslatableAdmin):
@admin.register(Person) @admin.register(Person)
class PersonAdmin(admin.ModelAdmin): class PersonAdmin(admin.ModelAdmin):
inlines = (PositionInline, PersonWorkInline, PersonSocialNetworkInline) inlines = (PositionInline, PersonWorkInline, PersonSocialNetworkInline)
list_display = ('uuid', 'family_name', 'given_name', 'slug',) list_display = ('uuid', 'salutation', 'family_name', 'given_name', 'slug',)
list_filter = ('partner',) list_filter = ('partner',)
ordering = ('family_name', 'given_name', 'uuid',) ordering = ('salutation', 'family_name', 'given_name', 'uuid',)
readonly_fields = ('uuid',) readonly_fields = ('uuid',)
search_fields = ('uuid', 'family_name', 'given_name', 'slug',) search_fields = ('uuid', 'salutation', 'family_name', 'given_name', 'slug',)
@admin.register(Position) @admin.register(Position)
......
...@@ -262,6 +262,7 @@ class PersonMarketingSiteDataLoader(AbstractMarketingSiteDataLoader): ...@@ -262,6 +262,7 @@ class PersonMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
uuid = UUID(data['uuid']) uuid = UUID(data['uuid'])
slug = data['url'].split('/')[-1] slug = data['url'].split('/')[-1]
defaults = { defaults = {
'salutation': data['field_person_salutation'],
'given_name': data['field_person_first_middle_name'], 'given_name': data['field_person_first_middle_name'],
'family_name': data['field_person_last_name'], 'family_name': data['field_person_last_name'],
'bio': self.clean_html(data['field_person_resume']['value']), 'bio': self.clean_html(data['field_person_resume']['value']),
...@@ -274,11 +275,13 @@ class PersonMarketingSiteDataLoader(AbstractMarketingSiteDataLoader): ...@@ -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 # NOTE (CCB): The AutoSlug field kicks in at creation time. We need to apply overrides in a separate
# operation. # operation.
if created: if created:
person_salutation = data['field_person_salutation']
person_given_name = data['field_person_first_middle_name'] person_given_name = data['field_person_first_middle_name']
person_family_name = data['field_person_last_name'] person_family_name = data['field_person_last_name']
logger.info( 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_family_name,
person_given_name, person_given_name,
uuid, 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): ...@@ -260,6 +260,7 @@ class Person(TimeStampedModel):
""" Person model. """ """ Person model. """
uuid = models.UUIDField(blank=False, null=False, default=uuid4, editable=False, verbose_name=_('UUID')) uuid = models.UUIDField(blank=False, null=False, default=uuid4, editable=False, verbose_name=_('UUID'))
partner = models.ForeignKey(Partner, null=True, blank=False) 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) given_name = models.CharField(max_length=255)
family_name = models.CharField(max_length=255, null=True, blank=True) family_name = models.CharField(max_length=255, null=True, blank=True)
bio = models.TextField(null=True, blank=True) bio = models.TextField(null=True, blank=True)
...@@ -292,7 +293,11 @@ class Person(TimeStampedModel): ...@@ -292,7 +293,11 @@ class Person(TimeStampedModel):
@property @property
def full_name(self): def full_name(self):
if self.family_name: 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: else:
return self.given_name return self.given_name
......
...@@ -431,6 +431,14 @@ class PersonTests(TestCase): ...@@ -431,6 +431,14 @@ class PersonTests(TestCase):
expected = self.person.given_name + ' ' + self.person.family_name expected = self.person.given_name + ' ' + self.person.family_name
self.assertEqual(self.person.full_name, expected) 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): def test_empty_family_name(self):
""" Verify the property returns the person's given name when family name is set None. """ """ Verify the property returns the person's given name when family name is set None. """
self.person.family_name = 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