api.py
3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from rest_framework import viewsets, filters, mixins, status
from django.shortcuts import get_object_or_404
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import action
from datetime import datetime
from .models import Edicto, Precio, ComprobantePago
from .serializer import EdictoSerializer, PrecioSerializer, PagoSerializer, ComprobanteSerializer
from .filters import EdictoFilter, PrecioFilter
from .permissions import IsAdminOrAuthorized
from .utils import contador
from .precio import calculadora
class EdictoViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
serializer_class = EdictoSerializer
permission_classes = [IsAuthenticated, ]
filter_backends = (DjangoFilterBackend, filters.OrderingFilter)
filterset_class = EdictoFilter
queryset = Edicto.objects.all()
ordering_fields = ('usuario',)
ordering = ('fecha_creacion', 'id',)
lookup_field = 'uuid'
def perform_create(self, serializer):
edicto = self.request.data.get('cuerpo_edicto')
cantidad_palabras = contador(edicto)
usuario = self.request.user
serializer.save(cantidad_palabras=cantidad_palabras, usuario=usuario)
@action(detail=True, methods=['put', 'patch'])
def custom_update(self, request):
edicto = request.data.get('cuerpo_edicto')
cantidad_palabras = contador(edicto)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save(cantidad_palabras=cantidad_palabras, fecha_actualizacion=datetime.now())
return Response(serializer.data, status=status.HTTP_200_OK)
class PrecioViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = PrecioSerializer
permission_classes = [IsAuthenticated, IsAdminOrAuthorized]
filter_backends = (DjangoFilterBackend, filters.OrderingFilter)
filterset_class = PrecioFilter
ordering_fields = ('usuario', )
ordering = 'usuario'
queryset = Precio.objects.all()
class PagoViewSets(viewsets.ModelViewSet):
serializer_class = PagoSerializer
permission_classes = [IsAuthenticated, IsAdminOrAuthorized]
queryset = ComprobantePago.objects.all()
def perform_create(self, serializer):
try:
edicto = Edicto.objects.get(estado='pendiente_de_pago')
if edicto.usuario != self.request.user:
raise UsuarioNoAutorizado
precio = Precio.objects.latest('id')
monto = calculadora(edicto, precio)
serializer.validated_data.update({'monto': monto, 'edicto': edicto})
serializer.save()
except (Edicto.DoesNotExist, Precio.DoesNotExist):
raise EdictoOPrecioNoEncontrado
class ComprobanteViewSets(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
serializer_class = ComprobanteSerializer
queryset = ComprobantePago.objects.all()
permission_classes = [IsAuthenticated, ]