Enzo Yair

correcion de errores

@@ -9,9 +9,9 @@ from .models import Edicto, Precio @@ -9,9 +9,9 @@ from .models import Edicto, Precio
9 9
10 class PrecioAdmin(admin.ModelAdmin): 10 class PrecioAdmin(admin.ModelAdmin):
11 def save_model(self, request, obj, form, change): 11 def save_model(self, request, obj, form, change):
12 - precios_activos = Precio.objects.filter(vigencia_hasta__gte=timezone.now().date()) 12 + today = timezone.now().date()
  13 + precios_activos = Precio.objects.filter(vigencia_hasta__gte=today)
13 if not change: 14 if not change:
14 - today = timezone.now().date()  
15 if obj.vigencia_desde <= today and not precios_activos.exists(): 15 if obj.vigencia_desde <= today and not precios_activos.exists():
16 obj.save() 16 obj.save()
17 else: 17 else:
1 from rest_framework import viewsets, filters, mixins, status 1 from rest_framework import viewsets, filters, mixins, status
2 -from django.shortcuts import get_object_or_404  
3 from django_filters.rest_framework import DjangoFilterBackend 2 from django_filters.rest_framework import DjangoFilterBackend
4 from rest_framework.response import Response 3 from rest_framework.response import Response
5 from rest_framework.permissions import IsAuthenticated 4 from rest_framework.permissions import IsAuthenticated
@@ -10,6 +9,7 @@ from .models import Edicto, Precio, ComprobantePago @@ -10,6 +9,7 @@ from .models import Edicto, Precio, ComprobantePago
10 from .serializer import EdictoSerializer, PrecioSerializer, PagoSerializer, ComprobanteSerializer 9 from .serializer import EdictoSerializer, PrecioSerializer, PagoSerializer, ComprobanteSerializer
11 from .filters import EdictoFilter, PrecioFilter 10 from .filters import EdictoFilter, PrecioFilter
12 from .permissions import IsAdminOrAuthorized 11 from .permissions import IsAdminOrAuthorized
  12 +from .exceptions import UsuarioNoAuthorizedException, EdictoNotFoundException,PrecioNotFoundException
13 from .utils import contador 13 from .utils import contador
14 from .precio import calculadora 14 from .precio import calculadora
15 15
@@ -67,15 +67,17 @@ class PagoViewSets(viewsets.ModelViewSet): @@ -67,15 +67,17 @@ class PagoViewSets(viewsets.ModelViewSet):
67 try: 67 try:
68 edicto = Edicto.objects.get(estado='pendiente_de_pago') 68 edicto = Edicto.objects.get(estado='pendiente_de_pago')
69 if edicto.usuario != self.request.user: 69 if edicto.usuario != self.request.user:
70 - raise UsuarioNoAutorizado 70 + raise UsuarioNoAuthorizedException
71 71
72 precio = Precio.objects.latest('id') 72 precio = Precio.objects.latest('id')
73 monto = calculadora(edicto, precio) 73 monto = calculadora(edicto, precio)
74 74
75 serializer.validated_data.update({'monto': monto, 'edicto': edicto}) 75 serializer.validated_data.update({'monto': monto, 'edicto': edicto})
76 serializer.save() 76 serializer.save()
77 - except (Edicto.DoesNotExist, Precio.DoesNotExist):  
78 - raise EdictoOPrecioNoEncontrado 77 + except Edicto.DoesNotExist:
  78 + raise EdictoNotFoundException
  79 + except Precio.DoesNotExist:
  80 + raise PrecioNotFoundException
79 81
80 82
81 class ComprobanteViewSets(mixins.CreateModelMixin, 83 class ComprobanteViewSets(mixins.CreateModelMixin,
1 from django.utils.translation import gettext_lazy as _ 1 from django.utils.translation import gettext_lazy as _
2 2
3 INICIADO = 'iniciado' 3 INICIADO = 'iniciado'
4 -PENDIENTE_DE_PAGO = 'pendiente_de_pago' 4 +PENDIENTE_REVISION = 'pendiente_revision'
  5 +PENDIENTE_PAGO = 'pendiente_de_pago'
  6 +PENDIENTE_PAGO_REVISION = 'pendiente_pago_revision'
5 PUBLICADO = 'publicado' 7 PUBLICADO = 'publicado'
6 APROBADO = 'aprobado' 8 APROBADO = 'aprobado'
7 RECHAZADO = 'rechazado' 9 RECHAZADO = 'rechazado'
@@ -9,13 +11,14 @@ RECHAZADO = 'rechazado' @@ -9,13 +11,14 @@ RECHAZADO = 'rechazado'
9 11
10 STATUS_CHOICE = [ 12 STATUS_CHOICE = [
11 (INICIADO, _('iniciado')), 13 (INICIADO, _('iniciado')),
12 - (PENDIENTE_DE_PAGO, _('pendiente_de_pago')), 14 + (PENDIENTE_REVISION, _('pendiente_revision')),
  15 + (PENDIENTE_PAGO, _('pendiente_pago')),
  16 + (PENDIENTE_PAGO_REVISION, _('pendiente_pago_revision')),
13 (PUBLICADO, _('publicado')), 17 (PUBLICADO, _('publicado')),
14 (APROBADO, _('aprobado')), 18 (APROBADO, _('aprobado')),
15 (RECHAZADO, _('rechazado')), 19 (RECHAZADO, _('rechazado')),
16 ] 20 ]
17 21
18 -  
19 EXTENSIONES_VALIDAS = "pdf", 22 EXTENSIONES_VALIDAS = "pdf",
20 23
21 24
  1 +from rest_framework.exceptions import APIException
  2 +
  3 +
  4 +class EdictoNotFoundException(APIException):
  5 + status_code = 404
  6 + default_detail = "El edicto no se encontró."
  7 +
  8 +
  9 +class PrecioNotFoundException(APIException):
  10 + status_code = 404
  11 + default_detail = "El precio más reciente no se encontró."
  12 +
  13 +
  14 +class UsuarioNoAuthorizedException(APIException):
  15 + status_code = 403
  16 + default_detail = "el usuario no posee permiso para crear un pago para este edicto."
@@ -5,35 +5,33 @@ from datetime import datetime, time @@ -5,35 +5,33 @@ from datetime import datetime, time
5 5
6 def calculadora(edicto, precio): 6 def calculadora(edicto, precio):
7 try: 7 try:
8 - with transaction.atomic():  
9 - organismo = edicto.usuario.organismo  
10 - es_publico = organismo.es_publico if organismo else False  
11 - sellos = edicto.cantidad_sellos  
12 - palabras = edicto.cantidad_palabras  
13 - copias = edicto.cantidad_copias  
14 - publicar = edicto.dias_publicar  
15 - precio_valores = {  
16 - 'precio_palabra': precio.precio,  
17 - 'precio_ejemplar': precio.precio_ejemplar,  
18 - 'vigencia_desde': precio.vigencia_desde,  
19 - 'vigencia_hasta': precio.vigencia_hasta,  
20 - }  
21 - current_datetime = timezone.now().replace(tzinfo=None)  
22 - vigencia_desde = datetime.combine(precio_valores['vigencia_desde'], time.min)  
23 - vigencia_hasta = datetime.combine(precio_valores['vigencia_hasta'], time.max)  
24 - if not (vigencia_desde <= current_datetime <= vigencia_hasta):  
25 - raise ValueError("El precio seleccionado no se encuentra dentro de las fechas permitidas.") 8 + organismo = edicto.usuario.organismo
  9 + es_publico = organismo.es_publico if organismo else False
  10 + sellos = edicto.cantidad_sellos
  11 + palabras = edicto.cantidad_palabras
  12 + copias = edicto.cantidad_copias
  13 + publicar = edicto.dias_publicar
  14 + precio_valores = {
  15 + 'precio_palabra': precio.precio,
  16 + 'precio_ejemplar': precio.precio_ejemplar,
  17 + 'vigencia_desde': precio.vigencia_desde,
  18 + 'vigencia_hasta': precio.vigencia_hasta,
  19 + }
  20 + current_datetime = timezone.now().replace(tzinfo=None)
  21 + vigencia_desde = datetime.combine(precio_valores['vigencia_desde'], time.min)
  22 + vigencia_hasta = datetime.combine(precio_valores['vigencia_hasta'], time.max)
26 23
27 - result_palabra = (sellos + palabras) * precio_valores['precio']  
28 - result_ejemplar = \  
29 - (copias * precio_valores['precio_ejemplar']) + (publicar * precio_valores['precio_ejemplar']) 24 + if not (vigencia_desde <= current_datetime <= vigencia_hasta):
  25 + raise ValueError("El precio seleccionado no se encuentra dentro de las fechas permitidas.")
30 26
31 - if es_publico:  
32 - resultado = result_ejemplar + result_palabra / 2  
33 - else:  
34 - resultado = result_ejemplar + result_palabra 27 + result_palabra = (sellos + palabras) * precio_valores['precio']
  28 + result_ejemplar = (copias * precio_valores['precio_ejemplar']) + (publicar * precio_valores['precio_ejemplar'])
  29 +
  30 + if es_publico:
  31 + resultado = result_ejemplar + result_palabra / 2
  32 + else:
  33 + resultado = result_ejemplar + result_palabra
35 34
36 return resultado 35 return resultado
37 except ValueError as values: 36 except ValueError as values:
38 -  
39 - raise ValueError("Los valores proporcionados son incorrectos: " + str(values))  
  37 + raise ValueError("Los valores proporcionados son incorrectos: " + str(values))