Showing
5 changed files
with
32 additions
and
13 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()) | ||
13 | - if not change: | ||
14 | today = timezone.now().date() | 12 | today = timezone.now().date() |
13 | + precios_activos = Precio.objects.filter(vigencia_hasta__gte=today) | ||
14 | + if not change: | ||
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,7 +5,6 @@ from datetime import datetime, time | @@ -5,7 +5,6 @@ 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 | 8 | organismo = edicto.usuario.organismo |
10 | es_publico = organismo.es_publico if organismo else False | 9 | es_publico = organismo.es_publico if organismo else False |
11 | sellos = edicto.cantidad_sellos | 10 | sellos = edicto.cantidad_sellos |
@@ -21,12 +20,12 @@ def calculadora(edicto, precio): | @@ -21,12 +20,12 @@ def calculadora(edicto, precio): | ||
21 | current_datetime = timezone.now().replace(tzinfo=None) | 20 | current_datetime = timezone.now().replace(tzinfo=None) |
22 | vigencia_desde = datetime.combine(precio_valores['vigencia_desde'], time.min) | 21 | vigencia_desde = datetime.combine(precio_valores['vigencia_desde'], time.min) |
23 | vigencia_hasta = datetime.combine(precio_valores['vigencia_hasta'], time.max) | 22 | vigencia_hasta = datetime.combine(precio_valores['vigencia_hasta'], time.max) |
23 | + | ||
24 | if not (vigencia_desde <= current_datetime <= vigencia_hasta): | 24 | if not (vigencia_desde <= current_datetime <= vigencia_hasta): |
25 | raise ValueError("El precio seleccionado no se encuentra dentro de las fechas permitidas.") | 25 | raise ValueError("El precio seleccionado no se encuentra dentro de las fechas permitidas.") |
26 | 26 | ||
27 | result_palabra = (sellos + palabras) * precio_valores['precio'] | 27 | result_palabra = (sellos + palabras) * precio_valores['precio'] |
28 | - result_ejemplar = \ | ||
29 | - (copias * precio_valores['precio_ejemplar']) + (publicar * precio_valores['precio_ejemplar']) | 28 | + result_ejemplar = (copias * precio_valores['precio_ejemplar']) + (publicar * precio_valores['precio_ejemplar']) |
30 | 29 | ||
31 | if es_publico: | 30 | if es_publico: |
32 | resultado = result_ejemplar + result_palabra / 2 | 31 | resultado = result_ejemplar + result_palabra / 2 |
@@ -35,5 +34,4 @@ def calculadora(edicto, precio): | @@ -35,5 +34,4 @@ def calculadora(edicto, precio): | ||
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