예제 #1
0
    def get_attributes(
            self, mapper: event_models.AttributeEventModuleMapper) -> dict:
        event_id = self.context['view'].kwargs.get("event_pk", None)
        registrations: QuerySet[
            event_models.
            Registration] = event_models.Registration.objects.filter(
                event=event_id)

        registration_tags = []
        attribute_sum = 0
        for registration in registrations.all():
            tags = registration.tags.filter(template=False,
                                            template_id=mapper.attribute.id)

            if mapper.attribute.polymorphic_ctype.app_labeled_name == 'basic | integer attribute':
                attribute_sum += tags.aggregate(
                    sum=Sum('integerattribute__integer_field'))['sum'] or 0
            elif mapper.attribute.polymorphic_ctype.app_labeled_name == 'basic | float attribute':
                attribute_sum += tags.aggregate(
                    sum=Sum('floatattribute__integer_field'))['sum'] or 0

            serialized_registration = RegistrationAttributeGetSerializer(
                registration, many=False).data
            for tag in tags.all():
                serialized_tag = basic_serializers.AbstractAttributeGetPolymorphicSerializer(
                    tag, many=False).data
                result = {
                    'registration': serialized_registration,
                    'tag': serialized_tag,
                }
                registration_tags.append(result)

        return {'data': registration_tags, 'sum': attribute_sum}
예제 #2
0
    def create(self, request, *args, **kwargs) -> Response:
        serializer: basic_serializers.AbstractAttributePutPolymorphicSerializer = self.get_serializer(
            data=request.data)
        serializer.is_valid(raise_exception=True)

        registration_id = self.kwargs.get("registration_pk", None)
        registration: event_models.Registration = get_object_or_404(
            event_models.Registration, id=registration_id)

        template_attribute: basic_models.AbstractAttribute = \
            get_object_or_404(basic_models.AbstractAttribute, pk=serializer.data.get('template_id', -1))

        new_attribute = add_event_attribute(template_attribute)

        serializer.update(new_attribute, serializer.validated_data)

        registration.tags.add(new_attribute.id)

        json = basic_serializers.AbstractAttributeGetPolymorphicSerializer(
            new_attribute)
        return Response(json.data, status=status.HTTP_201_CREATED)
예제 #3
0
 def update(self, request, *args, **kwargs) -> Response:
     super().update(request, *args, **kwargs)
     json = basic_serializers.AbstractAttributeGetPolymorphicSerializer(
         self.get_object())
     return Response(json.data, status=status.HTTP_200_OK)
예제 #4
0
class AttributeEventModuleMapperSerializer(serializers.ModelSerializer):
    attribute = basic_serializers.AbstractAttributeGetPolymorphicSerializer(many=False, read_only=False)

    class Meta:
        model = event_models.AttributeEventModuleMapper
        fields = '__all__'
예제 #5
0
 def get_tags(self, registration: event_models.Registration) -> []:
     queryset = registration.tags.filter(in_summary=True)
     serializer = basic_serializers.AbstractAttributeGetPolymorphicSerializer(
         queryset, many=True)
     return serializer.data