class AreaCoordinatorListSerializer(serializers.Serializer):
    type_of = serializers.IntegerField(
        source="user.member.type_of",
        read_only=True,
    )
    organization_name = serializers.CharField(
        allow_blank=False,
        validators=[],
        source="user.member.contact.organization_name",
        read_only=True,
    )
    organization_type_of = serializers.IntegerField(
        read_only=True,
        allow_null=True,
        source="user.member.contact.organization_type_of",
    )
    first_name = serializers.CharField(
        read_only=True,
        allow_blank=False,
        validators=[],
        source="user.member.contact.first_name",
    )
    last_name = serializers.CharField(
        read_only=True,
        allow_blank=False,
        validators=[],
        source="user.member.contact.last_name",
    )
    primary_phone_e164 = E164PhoneNumberField(
        allow_null=False,
        read_only=True,
        source="user.member.contact.primary_phone",
    )
    primary_phone_national = NationalPhoneNumberField(
        allow_null=False,
        read_only=True,
        source="user.member.contact.primary_phone",
    )
    email = serializers.EmailField(
        read_only=True,
        allow_blank=False,
        validators=[],
        source="user.member.contact.email",
    )
    slug = serializers.SlugField(
        read_only=True,
        allow_blank=False,
        validators=[],
        source="user.slug",
    )
    street_address = serializers.CharField(
        read_only=True,
        allow_blank=False,
        validators=[],
        source="user.member.address.street_address",
    )
    country = serializers.CharField(
        read_only=True,
        allow_blank=False,
        validators=[],
        source="user.member.address.country",
    )
    province = serializers.CharField(
        read_only=True,
        allow_blank=False,
        validators=[],
        source="user.member.address.province",
    )
    city = serializers.CharField(
        read_only=True,
        allow_blank=False,
        validators=[],
        source="user.member.address.city",
    )
    postal_code = serializers.CharField(
        read_only=True,
        allow_blank=False,
        validators=[],
        source="user.member.address.postal_code",
    )
    state = serializers.CharField(
        read_only=True,
        source="user.member.state",
    )
    position = serializers.SerializerMethodField()

    def setup_eager_loading(cls, queryset):
        """ Perform necessary eager loading of data. """
        queryset = queryset.prefetch_related('user', 'user__groups',
                                             'user__member__contact',
                                             'user__member__address',
                                             'user__member__metric',
                                             'created_by', 'last_modified_by')
        return queryset

    def get_position(self, obj):
        return get_arr_from_point(obj.user.member.address.position)
class AreaCoordinatorRetrieveSerializer(serializers.Serializer):
    # ------ MEMBER ------ #

    slug = serializers.SlugField(
        source="user.slug",
        read_only=True,
    )
    type_of = serializers.IntegerField(
        source="user.member.type_of",
        read_only=True,
    )
    type_of_label = serializers.CharField(
        source="user.member.get_pretty_type_of",
        read_only=True,
        allow_null=True,
    )
    avatar_url = serializers.SerializerMethodField()
    state = serializers.CharField(
        source="user.member.state",
        read_only=True,
    )

    # ------ MEMBER CONTACT ------ #

    is_ok_to_email = serializers.IntegerField(
        source="user.member.contact.is_ok_to_email",
        read_only=True,
    )
    is_ok_to_text = serializers.IntegerField(
        source="user.member.contact.is_ok_to_text",
        read_only=True,
    )
    organization_name = serializers.CharField(
        source="user.member.contact.organization_name",
        read_only=True,
        allow_null=True,
    )
    organization_type_of = serializers.IntegerField(
        source="user.member.contact.organization_type_of",
        read_only=True,
    )
    first_name = serializers.CharField(
        source="user.member.contact.first_name",
        read_only=True,
        allow_null=True,
    )
    last_name = serializers.CharField(
        source="user.member.contact.last_name",
        read_only=True,
        allow_null=True,
    )
    full_name = serializers.SerializerMethodField()
    email = serializers.EmailField(
        source="user.member.contact.email",
        read_only=True,
    )
    primary_phone_e164 = E164PhoneNumberField(
        source="user.member.contact.primary_phone",
        read_only=True,
    )
    primary_phone_national = NationalPhoneNumberField(
        source="user.member.contact.primary_phone",
        read_only=True,
    )
    secondary_phone_e164 = E164PhoneNumberField(
        source="user.member.contact.secondary_phone",
        read_only=True,
    )
    secondary_phone_national = NationalPhoneNumberField(
        source="user.member.contact.secondary_phone",
        read_only=True,
    )

    # ------ MEMBER ADDRESS ------ #

    country = serializers.CharField(
        source="user.member.address.country",
        read_only=True,
    )
    province = serializers.CharField(
        source="user.member.address.province",
        read_only=True,
    )
    city = serializers.CharField(
        source="user.member.address.city",
        read_only=True,
    )
    street_number = serializers.CharField(
        source="user.member.address.street_number",
        read_only=True,
    )
    street_name = serializers.CharField(
        source="user.member.address.street_name",
        read_only=True,
    )
    apartment_unit = serializers.CharField(
        source="user.member.address.apartment_unit",
        read_only=True,
    )
    street_type = serializers.IntegerField(
        source="user.member.address.street_type",
        read_only=True,
    )
    street_type_other = serializers.CharField(
        source="user.member.address.street_type_other",
        read_only=True,
    )
    street_direction = serializers.IntegerField(
        source="user.member.address.street_direction",
        read_only=True,
    )
    postal_code = serializers.CharField(
        source="user.member.address.postal_code",
        read_only=True,
    )
    address = serializers.CharField(
        source="user.member.address.street_address",
        read_only=True,
    )
    google_maps_url = serializers.URLField(
        source="user.member.address.google_maps_url",
        read_only=True,
    )
    position = serializers.SerializerMethodField()

    # ------ MEMBER WATCH ------ #

    #TODO: IMPLEMENT FIELDS.

    # ------ MEMBER METRICS ------ #

    tags = TagListCreateSerializer(
        source="user.member.metric.tags",
        many=True,
        read_only=True,
    )
    how_did_you_hear = serializers.PrimaryKeyRelatedField(
        source="user.member.metric.how_did_you_hear",
        many=False,
        read_only=True,
        allow_null=False,
    )
    how_did_you_hear_other = serializers.CharField(
        source="user.member.metric.how_did_you_hear_other",
        allow_null=True,
        allow_blank=True,
        read_only=True,
    )
    how_did_you_hear_label = serializers.CharField(
        source="user.member.metric.how_did_you_hear.text",
        read_only=True,
        allow_null=True,
    )
    expectation = serializers.PrimaryKeyRelatedField(
        source="user.member.metric.expectation",
        many=False,
        read_only=True,
        allow_null=False,
    )
    expectation_other = serializers.CharField(
        source="user.member.metric.expectation_other",
        allow_null=True,
        allow_blank=True,
        read_only=True,
    )
    expectation_label = serializers.CharField(
        source="user.member.metric.expectation.text",
        read_only=True,
        allow_null=True,
    )
    meaning = serializers.PrimaryKeyRelatedField(
        source="user.member.metric.meaning",
        many=False,
        read_only=True,
        allow_null=False,
    )
    meaning_other = serializers.CharField(
        source="user.member.metric.meaning_other",
        allow_null=True,
        allow_blank=True,
        read_only=True,
    )
    meaning_label = serializers.CharField(
        source="user.member.metric.meaning.text",
        read_only=True,
        allow_null=True,
    )
    gender = serializers.IntegerField(
        source="user.member.metric.gender",
        read_only=True,
    )
    gender_label = serializers.CharField(
        source="user.member.metric.get_pretty_gender",
        read_only=True,
        allow_null=True,
    )
    willing_to_volunteer = serializers.IntegerField(
        source="user.member.metric.willing_to_volunteer",
        read_only=True,
    )
    willing_to_volunteer_label = serializers.CharField(
        source="user.member.metric.get_pretty_willing_to_volunteer",
        read_only=True,
        allow_null=True,
    )
    another_household_member_registered = serializers.BooleanField(
        source="user.member.metric.another_household_member_registered",
        read_only=True,
    )
    year_of_birth = serializers.IntegerField(
        source="user.member.metric.year_of_birth",
        read_only=True,
    )
    total_household_count = serializers.IntegerField(
        source="user.member.metric.total_household_count",
        read_only=True,
    )
    over_18_years_household_count = serializers.IntegerField(
        source="user.member.metric.over_18_years_household_count",
        read_only=True,
    )
    organization_employee_count = serializers.IntegerField(
        source="user.member.metric.organization_employee_count",
        read_only=True,
    )
    organization_founding_year = serializers.IntegerField(
        source="user.member.metric.organization_founding_year",
        read_only=True,
    )

    # ------ AUDITING ------ #

    created_by = serializers.CharField(
        source="created_by.get_full_name",
        allow_null=True,
        read_only=True,
    )
    last_modified_by = serializers.CharField(
        source="last_modified_by.get_full_name",
        allow_null=True,
        read_only=True,
    )

    # ------ FUNCTIONS ------ #

    def get_full_name(self, obj):
        try:
            return obj.user.member.contact.first_name + " " + obj.user.member.contact.last_name
        except Exception as e:
            print(e)
            return None

    def get_avatar_url(self, obj):
        try:
            return obj.user.member.avatar_image.image_file.url
        except Exception as e:
            return None

    def get_position(self, obj):
        return get_arr_from_point(obj.user.member.address.position)
class MemberListSerializer(serializers.Serializer):
    type_of = serializers.IntegerField()
    organization_name = serializers.CharField(
        required=True,
        allow_blank=False,
        validators=[],
        source="contact.organization_name",
    )
    organization_type_of = serializers.IntegerField(
        required=False,
        allow_null=True,
        source="contact.organization_type_of",
    )
    first_name = serializers.CharField(
        required=True,
        allow_blank=False,
        validators=[],
        source="contact.first_name",
    )
    last_name = serializers.CharField(
        required=True,
        allow_blank=False,
        validators=[],
        source="contact.last_name",
    )
    primary_phone_e164 = E164PhoneNumberField(
        allow_null=False,
        required=True,
        source="contact.primary_phone",
    )
    primary_phone_national = NationalPhoneNumberField(
        allow_null=False,
        required=True,
        source="contact.primary_phone",
    )
    email = serializers.EmailField(
        required=True,
        allow_blank=False,
        validators=[],
        source="contact.email",
    )
    slug = serializers.SlugField(
        required=True,
        allow_blank=False,
        validators=[],
        source="user.slug",
    )
    street_address = serializers.CharField(
        required=True,
        allow_blank=False,
        validators=[],
        source="address.street_address",
    )
    country = serializers.CharField(
        required=True,
        allow_blank=False,
        validators=[],
        source="address.country",
    )
    province = serializers.CharField(
        required=True,
        allow_blank=False,
        validators=[],
        source="address.province",
    )
    city = serializers.CharField(
        required=True,
        allow_blank=False,
        validators=[],
        source="address.city",
    )
    postal_code = serializers.CharField(
        required=True,
        allow_blank=False,
        validators=[],
        source="address.postal_code",
    )
    state = serializers.CharField(read_only=True, )
    role_id = serializers.IntegerField(read_only=True, source="user.role_id")

    def setup_eager_loading(cls, queryset):
        """ Perform necessary eager loading of data. """
        queryset = queryset.prefetch_related('user', 'user__groups', 'contact',
                                             'address', 'metric', 'created_by',
                                             'last_modified_by')
        return queryset
Beispiel #4
0
class MemberRetrieveSerializer(serializers.Serializer):
    # ------ MEMBER ------ #

    slug = serializers.SlugField(source="user.slug", read_only=True,)
    type_of = serializers.IntegerField(read_only=True,)
    type_of_label = serializers.CharField(source="get_pretty_type_of", read_only=True,)
    avatar_url = serializers.SerializerMethodField()
    state = serializers.CharField(read_only=True,)
    role_id = serializers.IntegerField(source="user.role_id", read_only=True,)
    role_label = serializers.CharField(source="get_role_label", read_only=True,)

    # ------ MEMBER CONTACT ------ #

    is_ok_to_email = serializers.IntegerField(source="contact.is_ok_to_email", read_only=True,)
    is_ok_to_text = serializers.IntegerField(source="contact.is_ok_to_text", read_only=True,)
    organization_name = serializers.CharField(source="contact.organization_name", read_only=True,)
    organization_type_of = serializers.IntegerField(source="contact.organization_type_of", read_only=True,)
    first_name = serializers.CharField(source="contact.first_name", read_only=True,)
    last_name = serializers.CharField(source="contact.last_name", read_only=True,)
    full_name = serializers.SerializerMethodField()
    email = serializers.EmailField(source="contact.email", read_only=True,)
    primary_phone_e164 = E164PhoneNumberField(source="contact.primary_phone", read_only=True,)
    primary_phone_national = NationalPhoneNumberField(source="contact.primary_phone", read_only=True,)
    secondary_phone_e164 = E164PhoneNumberField(source="contact.secondary_phone", read_only=True,)
    secondary_phone_national = NationalPhoneNumberField(source="contact.secondary_phone", read_only=True,)

    # ------ MEMBER ADDRESS ------ #

    country = serializers.CharField(source="address.country", read_only=True,)
    province = serializers.CharField(source="address.province", read_only=True,)
    city = serializers.CharField(source="address.city", read_only=True,)
    street_number = serializers.CharField(source="address.street_number", read_only=True,)
    street_name =serializers.CharField(source="address.street_name", read_only=True,)
    apartment_unit = serializers.CharField(source="address.apartment_unit", read_only=True,)
    street_type = serializers.IntegerField(source="address.street_type", read_only=True,)
    street_type_other = serializers.CharField(source="address.street_type_other", read_only=True,)
    street_direction = serializers.IntegerField(source="address.street_direction", read_only=True,)
    postal_code = serializers.CharField(source="address.postal_code", read_only=True,)
    address = serializers.CharField(source="address.street_address", read_only=True,)
    google_maps_url = serializers.URLField(source="address.google_maps_url", read_only=True,)
    position = serializers.SerializerMethodField()

    # ------ MEMBER WATCH ------ #

    watch_name = serializers.CharField(source="watch.name", read_only=True,)
    watch_slug = serializers.SlugField(source="watch.slug", read_only=True,)
    watch_type_of = serializers.IntegerField(source="watch.type_of", read_only=True,)
    watch_is_virtual = serializers.BooleanField(source="watch.is_virtual", read_only=True,)

    # ------ MEMBER METRICS ------ #

    tags = TagListCreateSerializer(source="metric.tags", many=True, read_only=True,)
    how_did_you_hear = serializers.PrimaryKeyRelatedField(
        source="metric.how_did_you_hear",
        many=False,
        required=True,
        allow_null=False,
        queryset=HowHearAboutUsItem.objects.all()
    )
    how_did_you_hear_other = serializers.CharField(
        source="metric.how_did_you_hear_other", required=False, allow_null=True, allow_blank=True,)
    how_did_you_hear_label = serializers.CharField(
        source="metric.how_did_you_hear.text", allow_null=True, read_only=True,)
    expectation = serializers.PrimaryKeyRelatedField(
        source="metric.expectation",
        many=False,
        required=True,
        allow_null=False,
        queryset=ExpectationItem.objects.all()
    )
    expectation_other = serializers.CharField(
        source="metric.expectation_other", required=False, allow_null=True, allow_blank=True,)
    expectation_label = serializers.CharField(
        source="metric.expectation.text", allow_null=True, read_only=True,)
    meaning = serializers.PrimaryKeyRelatedField(
        source="metric.meaning",
        many=False,
        required=True,
        allow_null=False,
        queryset=MeaningItem.objects.all()
    )
    meaning_other = serializers.CharField(source="metric.meaning_other", allow_null=True, allow_blank=True, read_only=True,)
    meaning_label = serializers.CharField(source="metric.meaning.text", allow_null=True, read_only=True,)
    gender = serializers.IntegerField(source="metric.gender", read_only=True,)
    gender_label = serializers.CharField(source="metric.get_pretty_gender", read_only=True,)
    willing_to_volunteer = serializers.IntegerField(source="metric.willing_to_volunteer", read_only=True,)
    willing_to_volunteer_label = serializers.CharField(source="metric.get_pretty_willing_to_volunteer", read_only=True,)
    another_household_member_registered = serializers.BooleanField(source="metric.another_household_member_registered", read_only=True,)
    year_of_birth = serializers.IntegerField(source="metric.year_of_birth", read_only=True,)
    total_household_count = serializers.IntegerField(source="metric.total_household_count", read_only=True,)
    over_18_years_household_count = serializers.IntegerField(source="metric.over_18_years_household_count", read_only=True,)
    organization_employee_count = serializers.IntegerField(source="metric.organization_employee_count", read_only=True,)
    organization_founding_year = serializers.IntegerField(source="metric.organization_founding_year", read_only=True,)
    is_aboriginal = serializers.BooleanField(allow_null=True, read_only=True, source="metric.is_aboriginal",)
    is_transgender = serializers.BooleanField(allow_null=True, read_only=True, source="metric.is_transgender",)
    is_visible_minority = serializers.BooleanField(allow_null=True, read_only=True, source="metric.is_visible_minority",)
    is_disabled_or_has_barriers = serializers.BooleanField(allow_null=True, read_only=True, source="metric.is_disabled_or_has_barriers",)
    is_over_fifty_five = serializers.BooleanField(allow_null=True, read_only=True, source="metric.is_over_fifty_five",)

    # ------ AUDITING ------ #

    created_by = serializers.CharField(source="created_by.get_full_name", allow_null=True, read_only=True,)
    last_modified_by = serializers.CharField(source="last_modified_by.get_full_name", allow_null=True, read_only=True,)

    # ------ OPERATIONS ------ #

    badges = BadgeRetrieveSerializer(source="user.badges", read_only=True, many=True,)

    # ------ FUNCTIONS ------ #

    def get_full_name(self, obj):
        try:
            return obj.contact.first_name + " " + obj.contact.last_name
        except Exception as e:
            print(e)
            return None

    def get_avatar_url(self, obj):
        try:
            return obj.avatar_image.image_file.url
        except Exception as e:
            return None

    def get_position(self, obj):
        return get_arr_from_point(obj.address.position)