serializers.py 2.93 KB
from rest_framework import serializers

from usuario.serializers import UsuarioListaSerializer
from .constants import EXTENSIONES_VALIDAS
from .models import Edicto, Precio, ComprobantePago
from .utils import contador
from .precio import calculadora


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

    class Meta:
        model = Edicto
        fields = (
            'uuid',
            'creado_por',
            'modificado_por',
            'estado',
            'cuerpo_edicto',
            'cantidad_palabras',
            'dias_publicar',
            'cantidad_sellos',
            'cantidad_copias',
            'archivo',
            'fecha_creacion',
            'observaciones',
            'fecha_publicacion',
            'fecha_modificacion',
            'tiene_descuento',
        )

        read_only_fields = ('fecha_publicacion',)

    def validate(self, data):
        request = self.context['request']
        data['cantidad_palabras'] = contador(data.get('cuerpo_edicto', ''))

        if request.method == 'POST':
            data['creado_por'] = request.user

            if data['creado_por'].organismo and data['creado_por'].organismo.es_publico:
                data['tiene_descuento'] = True

            else:
                data['tiene_descuento'] = False

        data['modificado_por'] = request.user
        return data

    def create(self, validated_data):
        edicto = Edicto.objects.create(**validated_data)

        precio = Precio.objects.latest('id')
        calculadora(edicto, precio)

        edicto.save()
        return edicto

    @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',
            'precio_ejemplar',
            'vigencia_desde',
            'vigencia_hasta',
        )

    included_serializers = {'usuario': UsuarioListaSerializer
                            }


class ComprobanteSerializer(serializers.ModelSerializer):
    class Meta:
        model = ComprobantePago
        fields = (
            'edicto',
            'monto_subtotal',
            'monto_total',
            'monto_descuento',
            'numero_comprobante',
            'fecha_pago',
            'archivo',
        )

    included_serializers = {'edicto': EdictoSerializer}

    @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