Enzo Yair

correcion de errores

... ... @@ -9,9 +9,9 @@ from .models import Edicto, Precio
class PrecioAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
precios_activos = Precio.objects.filter(vigencia_hasta__gte=timezone.now().date())
today = timezone.now().date()
precios_activos = Precio.objects.filter(vigencia_hasta__gte=today)
if not change:
today = timezone.now().date()
if obj.vigencia_desde <= today and not precios_activos.exists():
obj.save()
else:
... ...
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
... ... @@ -10,6 +9,7 @@ from .models import Edicto, Precio, ComprobantePago
from .serializer import EdictoSerializer, PrecioSerializer, PagoSerializer, ComprobanteSerializer
from .filters import EdictoFilter, PrecioFilter
from .permissions import IsAdminOrAuthorized
from .exceptions import UsuarioNoAuthorizedException, EdictoNotFoundException,PrecioNotFoundException
from .utils import contador
from .precio import calculadora
... ... @@ -67,15 +67,17 @@ class PagoViewSets(viewsets.ModelViewSet):
try:
edicto = Edicto.objects.get(estado='pendiente_de_pago')
if edicto.usuario != self.request.user:
raise UsuarioNoAutorizado
raise UsuarioNoAuthorizedException
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
except Edicto.DoesNotExist:
raise EdictoNotFoundException
except Precio.DoesNotExist:
raise PrecioNotFoundException
class ComprobanteViewSets(mixins.CreateModelMixin,
... ...
from django.utils.translation import gettext_lazy as _
INICIADO = 'iniciado'
PENDIENTE_DE_PAGO = 'pendiente_de_pago'
PENDIENTE_REVISION = 'pendiente_revision'
PENDIENTE_PAGO = 'pendiente_de_pago'
PENDIENTE_PAGO_REVISION = 'pendiente_pago_revision'
PUBLICADO = 'publicado'
APROBADO = 'aprobado'
RECHAZADO = 'rechazado'
... ... @@ -9,13 +11,14 @@ RECHAZADO = 'rechazado'
STATUS_CHOICE = [
(INICIADO, _('iniciado')),
(PENDIENTE_DE_PAGO, _('pendiente_de_pago')),
(PENDIENTE_REVISION, _('pendiente_revision')),
(PENDIENTE_PAGO, _('pendiente_pago')),
(PENDIENTE_PAGO_REVISION, _('pendiente_pago_revision')),
(PUBLICADO, _('publicado')),
(APROBADO, _('aprobado')),
(RECHAZADO, _('rechazado')),
]
EXTENSIONES_VALIDAS = "pdf",
... ...
from rest_framework.exceptions import APIException
class EdictoNotFoundException(APIException):
status_code = 404
default_detail = "El edicto no se encontró."
class PrecioNotFoundException(APIException):
status_code = 404
default_detail = "El precio más reciente no se encontró."
class UsuarioNoAuthorizedException(APIException):
status_code = 403
default_detail = "el usuario no posee permiso para crear un pago para este edicto."
... ...
... ... @@ -5,35 +5,33 @@ from datetime import datetime, time
def calculadora(edicto, precio):
try:
with transaction.atomic():
organismo = edicto.usuario.organismo
es_publico = organismo.es_publico if organismo else False
sellos = edicto.cantidad_sellos
palabras = edicto.cantidad_palabras
copias = edicto.cantidad_copias
publicar = edicto.dias_publicar
precio_valores = {
'precio_palabra': precio.precio,
'precio_ejemplar': precio.precio_ejemplar,
'vigencia_desde': precio.vigencia_desde,
'vigencia_hasta': precio.vigencia_hasta,
}
current_datetime = timezone.now().replace(tzinfo=None)
vigencia_desde = datetime.combine(precio_valores['vigencia_desde'], time.min)
vigencia_hasta = datetime.combine(precio_valores['vigencia_hasta'], time.max)
if not (vigencia_desde <= current_datetime <= vigencia_hasta):
raise ValueError("El precio seleccionado no se encuentra dentro de las fechas permitidas.")
organismo = edicto.usuario.organismo
es_publico = organismo.es_publico if organismo else False
sellos = edicto.cantidad_sellos
palabras = edicto.cantidad_palabras
copias = edicto.cantidad_copias
publicar = edicto.dias_publicar
precio_valores = {
'precio_palabra': precio.precio,
'precio_ejemplar': precio.precio_ejemplar,
'vigencia_desde': precio.vigencia_desde,
'vigencia_hasta': precio.vigencia_hasta,
}
current_datetime = timezone.now().replace(tzinfo=None)
vigencia_desde = datetime.combine(precio_valores['vigencia_desde'], time.min)
vigencia_hasta = datetime.combine(precio_valores['vigencia_hasta'], time.max)
result_palabra = (sellos + palabras) * precio_valores['precio']
result_ejemplar = \
(copias * precio_valores['precio_ejemplar']) + (publicar * precio_valores['precio_ejemplar'])
if not (vigencia_desde <= current_datetime <= vigencia_hasta):
raise ValueError("El precio seleccionado no se encuentra dentro de las fechas permitidas.")
if es_publico:
resultado = result_ejemplar + result_palabra / 2
else:
resultado = result_ejemplar + result_palabra
result_palabra = (sellos + palabras) * precio_valores['precio']
result_ejemplar = (copias * precio_valores['precio_ejemplar']) + (publicar * precio_valores['precio_ejemplar'])
if es_publico:
resultado = result_ejemplar + result_palabra / 2
else:
resultado = result_ejemplar + result_palabra
return resultado
except ValueError as values:
raise ValueError("Los valores proporcionados son incorrectos: " + str(values))
\ No newline at end of file
raise ValueError("Los valores proporcionados son incorrectos: " + str(values))
... ...