Пример #1
0
    def test_get_attribute(self, mock_super):
        field = PaymentTypeField(choices=Payment.PAYMENT_TYPE)

        obj = Payment()
        obj.payment = False

        self.assertEqual(field.get_attribute(obj), PaymentTypeField.NO_PAYMENT)

        obj.payment = True

        field.get_attribute(obj)
        mock_super.assert_called()
Пример #2
0
class AdminOrderSerializer(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = ("pk", "payment", "product", "name", "member", "display_name")

    payment = PaymentTypeField(source="payment.type",
                               choices=Payment.PAYMENT_TYPE,
                               required=False)
    display_name = serializers.SerializerMethodField("_display_name")

    def _display_name(self, instance):
        if instance.member:
            return instance.member.get_full_name()
        return instance.name

    def validate(self, attrs):
        if attrs.get("member") and attrs.get("name"):
            raise ValidationError({
                "member":
                _("Either specify a member or a name"),
                "name":
                _("Either specify a member or a name"),
            })
        if not (attrs.get("member") or attrs.get("name")) and not self.partial:
            attrs["member"] = self.context["request"].member
        return super().validate(attrs)

    def create(self, validated_data: Any) -> Any:
        del validated_data["payment"]
        return super().create(validated_data)

    def update(self, instance: Model, validated_data: Any) -> Any:
        del validated_data["payment"]
        return super().update(instance, validated_data)
Пример #3
0
class OrderSerializer(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = ("pk", "payment", "product", "name", "member")
        read_only_fields = ("pk", "payment", "name", "member")

    payment = PaymentTypeField(source="payment.type",
                               choices=Payment.PAYMENT_TYPE,
                               read_only=True)
Пример #4
0
class EventRegistrationAdminListSerializer(EventRegistrationListSerializer):
    """Custom registration admin list serializer"""

    class Meta:
        model = EventRegistration
        fields = (
            "pk",
            "member",
            "name",
            "registered_on",
            "is_cancelled",
            "is_late_cancellation",
            "queue_position",
            "payment",
            "present",
            "avatar",
        )

    registered_on = serializers.DateTimeField(source="date")
    is_cancelled = serializers.SerializerMethodField("_is_cancelled")
    is_late_cancellation = serializers.SerializerMethodField("_is_late_cancellation")
    queue_position = serializers.SerializerMethodField("_queue_position")
    payment = PaymentTypeField(source="payment.type", choices=Payment.PAYMENT_TYPE)

    def _is_late_cancellation(self, instance):
        return instance.is_late_cancellation()

    def _queue_position(self, instance):
        pos = instance.queue_position
        return pos if pos > 0 else None

    def _is_cancelled(self, instance):
        return instance.date_cancelled is not None

    def _name(self, instance):
        if instance.member:
            return instance.member.get_full_name()
        return instance.name
Пример #5
0
class EventRegistrationSerializer(serializers.ModelSerializer):
    """Registration serializer"""

    information_fields = None

    class Meta:
        model = EventRegistration
        fields = (
            "pk",
            "member",
            "name",
            "photo",
            "avatar",
            "registered_on",
            "is_late_cancellation",
            "is_cancelled",
            "queue_position",
            "fields",
            "payment",
            "present",
        )

    name = serializers.SerializerMethodField("_name")
    photo = serializers.SerializerMethodField("_photo")
    avatar = serializers.SerializerMethodField("_avatar")
    member = serializers.SerializerMethodField("_member")
    payment = PaymentTypeField(source="payment.type", choices=Payment.PAYMENT_TYPE)
    registered_on = serializers.DateTimeField(source="date", read_only=True)
    is_cancelled = serializers.SerializerMethodField("_is_cancelled")
    is_late_cancellation = serializers.SerializerMethodField("_is_late_cancellation")
    queue_position = serializers.SerializerMethodField(
        "_queue_position", read_only=False
    )
    fields = serializers.HiddenField(default="")

    def _is_late_cancellation(self, instance):
        val = instance.is_late_cancellation()
        return False if val is None else val

    def _is_cancelled(self, instance):
        return instance.date_cancelled is not None

    def _queue_position(self, instance):
        pos = instance.queue_position
        return pos if pos > 0 else None

    def _member(self, instance):
        if instance.member:
            return instance.member.pk
        return None

    def _name(self, instance):
        if instance.member:
            return instance.member.profile.display_name()
        return instance.name

    def _photo(self, instance):
        if instance.member and instance.member.profile.photo:
            return self.context["request"].build_absolute_uri(
                f"{settings.MEDIA_URL}{instance.member.profile.photo}"
            )
        return self.context["request"].build_absolute_uri(
            static("members/images/default-avatar.jpg")
        )

    def _avatar(self, instance):
        placeholder = self.context["request"].build_absolute_uri(
            static("members/images/default-avatar.jpg")
        )
        file = None
        if instance.member and instance.member.profile.photo:
            file = instance.member.profile.photo
        return create_image_thumbnail_dict(
            self.context["request"], file, placeholder=placeholder, size_large="800x800"
        )

    def __init__(self, instance=None, data=empty, **kwargs):
        super().__init__(instance, data, **kwargs)
        try:
            if instance:
                self.information_fields = services.registration_fields(
                    kwargs["context"]["request"], registration=instance
                )
        except RegistrationError:
            pass

    def get_fields(self):
        fields = super().get_fields()

        if self.information_fields:
            for key, field in self.information_fields.items():
                key = "fields[{}]".format(key)
                field_type = field["type"]

                if field_type == RegistrationInformationField.BOOLEAN_FIELD:
                    fields[key] = serializers.BooleanField(
                        required=False, write_only=True
                    )
                elif field_type == RegistrationInformationField.INTEGER_FIELD:
                    fields[key] = serializers.IntegerField(
                        required=field["required"],
                        write_only=True,
                        allow_null=not field["required"],
                    )
                elif field_type == RegistrationInformationField.TEXT_FIELD:
                    fields[key] = serializers.CharField(
                        required=field["required"],
                        write_only=True,
                        allow_blank=not field["required"],
                        allow_null=not field["required"],
                    )

                fields[key].label = field["label"]
                fields[key].help_text = field["description"]
                fields[key].initial = field["value"]
                fields[key].default = field["value"]

                try:
                    if key in self.information_fields:
                        fields[key].initial = self.validated_data[key]
                except AssertionError:
                    pass

        return fields

    def to_representation(self, instance):
        data = super().to_representation(instance)
        data["fields"] = self.information_fields
        return data

    def field_values(self):
        return (
            (name[7 : len(name) - 1], value)
            for name, value in self.validated_data.items()
            if "info_field" in name
        )