Created
September 7, 2016 14:01
-
-
Save loic/73702350ba5cea8935edfaece39739b9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/scope/foodnet/apps/mobile/importer.py b/scope/foodnet/apps/mobile/importer.py | |
index 2ce4f0e..c1a8c0c 100644 | |
--- a/scope/foodnet/apps/mobile/importer.py | |
+++ b/scope/foodnet/apps/mobile/importer.py | |
@@ -76,18 +76,22 @@ class MobileHouseholdImporter(object): | |
member = Person(uuid=member_uuid) | |
created = True | |
- member.last_name = member_data.get('lastName', '') | |
- member.first_name = member_data.get('firstName', '') | |
- member.middle_name = member_data.get('middleName', '') | |
+ | |
+ # Previous to 1.0.3 "info" wasn't a subdict of member. | |
+ info = member_data.get('info', member_data) | |
+ | |
+ member.last_name = info.get('lastName', '') | |
+ member.first_name = info.get('firstName', '') | |
+ member.middle_name = info.get('middleName', '') | |
member.location = household.location | |
- member.phone_number = self.get_phone_number(member_data.get('homePhone', '')) | |
- member.mobile_number = self.get_phone_number(member_data.get('mobilePhone', '')) | |
+ member.phone_number = self.get_phone_number(info.get('homePhone', '')) | |
+ member.mobile_number = self.get_phone_number(info.get('mobilePhone', '')) | |
member.office = household.office | |
member.household = household | |
- member.household_role = self.get_role(member_data.get('role')) | |
- member.gender = self.get_gender(member_data.get('gender')) | |
- member.date_of_birth_is_exact = member_data.get('dateOfBirthExact', False) | |
- member.date_of_birth = self.get_date_from_iso(member_data.get('dateOfBirth')) | |
+ member.household_role = self.get_role(info.get('role')) | |
+ member.gender = self.get_gender(info.get('gender')) | |
+ member.date_of_birth_is_exact = info.get('dateOfBirthExact', False) | |
+ member.date_of_birth = self.get_date_from_iso(info.get('dateOfBirth')) | |
member.full_clean() | |
member.save() | |
@@ -132,7 +136,7 @@ class MobileHouseholdImporter(object): | |
# TODO: md5 digest | |
# Bio data | |
- if 'height' in member_data: # Hack! To detect if we have bio data! | |
+ if 'height' in info: # Hack! To detect if we have bio data! | |
# TODO: We need to support time series, | |
# get_or_create() will blow up if there | |
# is more than one. | |
@@ -144,13 +148,13 @@ class MobileHouseholdImporter(object): | |
# Registrar can use 0 to opt out of a field, | |
# so we cast it to None (i.e. no value). | |
- bio_data.height = member_data.get('height') or None | |
- bio_data.weight = member_data.get('weight') or None | |
- bio_data.muac = member_data.get('muac') or None | |
+ bio_data.height = info.get('height') or None | |
+ bio_data.weight = info.get('weight') or None | |
+ bio_data.muac = info.get('muac') or None | |
- bio_data.breastfeeding = member_data.get('breastfeeding', False) | |
- bio_data.malnourished = member_data.get('malnourished', False) | |
- bio_data.pregnant = member_data.get('pregnant', False) | |
+ bio_data.breastfeeding = info.get('breastfeeding', False) | |
+ bio_data.malnourished = info.get('malnourished', False) | |
+ bio_data.pregnant = info.get('pregnant', False) | |
bio_data.save() | |
@@ -158,24 +162,24 @@ class MobileHouseholdImporter(object): | |
@transaction.atomic | |
def import_household(self): | |
+ info = self.source['info'] | |
household = None | |
household_uuid = None | |
- household_name = None | |
cycle_subscription = None | |
if self.token_mapping == 'UUID': | |
- household_uuid = uuid.UUID(self.source['info']['token']) | |
+ household_uuid = uuid.UUID(info['token']) | |
if self.token_mapping == 'HOUSEHOLD_NAME': | |
- household_name = self.source['info']['token'] | |
+ household_name = info['token'] | |
else: | |
- household_name = self.source['info'].get('name', '') | |
+ household_name = info.get('name', '') | |
if self.token_mapping == 'DELIVERY_MECHANISM': | |
cycle_subscription = ( | |
CycleSubscription.objects | |
.select_related('enrolment__household') | |
- .filter(token_num=self.source['info']['token']) | |
+ .filter(token_num=info['token']) | |
.first() | |
) | |
if cycle_subscription: | |
@@ -196,9 +200,9 @@ class MobileHouseholdImporter(object): | |
) | |
household.name = household_name | |
- household.refugee_status = self.get_beneficiary_type(self.source['info'].get('beneficiaryType')) | |
- household.location = self.get_location(self.source['info'].get('location')) | |
- household.address = self.source['info'].get('address') | |
+ household.refugee_status = self.get_beneficiary_type(info.get('beneficiaryType')) | |
+ household.location = self.get_location(info.get('location')) | |
+ household.address = info.get('address') | |
household.claimed_member_count = len(self.source['members']) | |
household.full_clean() | |
household.save() | |
diff --git a/scope/foodnet/apps/mobile/serializers.py b/scope/foodnet/apps/mobile/serializers.py | |
index 88eaf1e..3744f0a 100644 | |
--- a/scope/foodnet/apps/mobile/serializers.py | |
+++ b/scope/foodnet/apps/mobile/serializers.py | |
@@ -72,10 +72,7 @@ def get_attachment_key_for_fingerprint_template(person, fingerprint): | |
to_mobile_choice(FINGERPRINT_FINGER_MAPPING, fingerprint.finger), | |
) | |
- | |
-class PersonSerializer(serializers.Serializer): | |
- | |
- id = UUIDField(source='uuid') | |
+class PersonInfoSerializer(serializers.Serializer): | |
firstName = serializers.CharField(source='first_name') | |
middleName = serializers.CharField(source='middle_name') | |
@@ -114,6 +111,13 @@ class PersonSerializer(serializers.Serializer): | |
homePhone = serializers.CharField(source='phone_number') | |
mobilePhone = serializers.CharField(source='mobile_number') | |
+ | |
+class PersonSerializer(serializers.Serializer): | |
+ | |
+ id = UUIDField(source='uuid') | |
+ | |
+ info = PersonInfoSerializer(source='*') | |
+ | |
photo = serializers.SerializerMethodField() | |
def get_photo(self, obj): | |
diff --git a/scope/foodnet/apps/mobile/tests.py b/scope/foodnet/apps/mobile/tests.py | |
index 0f0ccbe..022c9b8 100644 | |
--- a/scope/foodnet/apps/mobile/tests.py | |
+++ b/scope/foodnet/apps/mobile/tests.py | |
@@ -6,7 +6,7 @@ from rest_framework.renderers import JSONRenderer | |
from foodnet.apps.mobile.constants import BENEFICIARY_TYPE_MAPPING, GENDER_MAPPING, ROLE_MAPPING, to_mobile_choice | |
from foodnet.apps.mobile.serializers import PersonSerializer, HouseholdSerializer, format_uuid, \ | |
- get_attachment_key_for_photo | |
+ get_attachment_key_for_photo, PersonInfoSerializer | |
from foodnet.apps.registration.factories import person_factory, household_factory | |
from foodnet.apps.wfp.factories import office_factory | |
@@ -25,18 +25,20 @@ class TestSerializers(TestCase): | |
def _get_control_data_for_person(self, person): | |
return { | |
'id': format_uuid(person.uuid), | |
- 'firstName': person.first_name, | |
- 'middleName': person.middle_name, | |
- 'lastName': person.last_name, | |
- 'gender': to_mobile_choice(GENDER_MAPPING, person.gender), | |
- 'dateOfBirth': str(person.date_of_birth), | |
- 'dateOfBirthExact': person.date_of_birth_is_exact, | |
- 'role': to_mobile_choice(ROLE_MAPPING, person.household_role), | |
- 'recipient': PersonSerializer().get_recipient(person), | |
- 'documentType': PersonSerializer().get_document_type(person), | |
- 'documentNumber': PersonSerializer().get_document_number(person), | |
- 'homePhone': person.phone_number, | |
- 'mobilePhone': person.mobile_number, | |
+ 'info': { | |
+ 'firstName': person.first_name, | |
+ 'middleName': person.middle_name, | |
+ 'lastName': person.last_name, | |
+ 'gender': to_mobile_choice(GENDER_MAPPING, person.gender), | |
+ 'dateOfBirth': str(person.date_of_birth), | |
+ 'dateOfBirthExact': person.date_of_birth_is_exact, | |
+ 'role': to_mobile_choice(ROLE_MAPPING, person.household_role), | |
+ 'recipient': PersonInfoSerializer().get_recipient(person), | |
+ 'documentType': PersonInfoSerializer().get_document_type(person), | |
+ 'documentNumber': PersonInfoSerializer().get_document_number(person), | |
+ 'homePhone': person.phone_number, | |
+ 'mobilePhone': person.mobile_number, | |
+ }, | |
'photo': get_attachment_key_for_photo(person), | |
'fingerprints': PersonSerializer().get_fingerprints(person), | |
'meta': {}, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment