precio.py 1.54 KB
from django.db import transaction
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))