precio.py
1.5 KB
from django.utils import timezone
from datetime import datetime, time
def calculadora(edicto, precio):
try:
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.")
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))