Showing
5 changed files
with
55 additions
and
36 deletions
@@ -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 |
project/apps/edicto/exceptions.py
0 → 100644
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)) |
-
Please register or login to post a comment