serializer.py 2.63 KB
from rest_framework import serializers


from .constants import EXTENSIONES_VALIDAS

from .models import Edicto, Precio, ComprobantePago
from usuario.serializers import UsuarioListaSerializer


class EdictoSerializer(serializers.ModelSerializer):
    included_serializers = {
        'usuario': UsuarioListaSerializer,
    }

    class Meta:
        model = Edicto
        fields = ('usuario',
                  'estado',
                  'cuerpo_edicto',
                  'cantidad_palabras',
                  'dias_publicar',
                  'cantidad_sellos',
                  'cantidad_copias',
                  'archivo',
                  'fecha_creacion',
                  'observaciones',
                  'fecha_publicacion',

                  )

        read_only_fields = ('usuario', 'fecha_publicacion', 'cantidad_palabras', 'fecha_creacion')

    def to_representation(self, instance):
        data = super().to_representation(instance)
        user = self.context['request'].user
        if not user.is_staff:
            data['fecha_publicacion'] = instance.fecha_publicacion
        return data

    @staticmethod
    def validate_archivo(value):
        filename, extension = value.name.rsplit(".", 1)
        if extension.lower() not in EXTENSIONES_VALIDAS:
            raise serializers.ValidationError("Archivos permitidos: .pdf")
        return value


class PrecioSerializer(serializers.ModelSerializer):

    class Meta:
        model = Precio
        fields = ('usuario',
                  'moneda',
                  'precio_palabra',
                  'precio_ejemplar',
                  'vigencia_desde',
                  'vigencia_hasta',
                  )

    included_serializers = {
        'usuario': UsuarioListaSerializer
    }


class PagoSerializer(serializers.ModelSerializer):
    class Meta:
        model = ComprobantePago
        fields = ('monto',
                  'edicto',
                  )
        read_only_fields = ('monto', )

    included_serializers = {
        'edicto': EdictoSerializer,
      }

    def validate(self, data):
        edicto = data.get('edicto')
        if edicto and edicto.estado != 'pendiente_de_pago':
            raise serializers.ValidationError(
                "El edicto debe estar en estado 'pendiente de pago' para visualizar el monto a pagar.")

        return data


class ComprobanteSerializer(serializers.ModelSerializer):

    class Meta:
        model = ComprobantePago
        fields = ('numero_comprobante',
                  'fecha_pago',
                  )

    included_serializers = {
        'edicto': EdictoSerializer,
        'monto': 'monto.serializers.PagoSerialzer',
    }