def get_max_descuento(cls): """ Obtiene el máximo descuento asignado a un nivel. """ try: max_descuento = DatosNivel.get_max_descuento() return Utils.replace_dots(max_descuento, 1) except custom_exceptions.ErrorDeConexion as e: raise e except Exception as e: raise custom_exceptions.ErrorDeNegocio( origen="negocio.get_max_descuento()", msj=str(e), msj_adicional= "Error en la capa de Negocio obtieniendo el máximo descuento de la capa de Datos." )
def alta_nivel(cls, numeroNivel, descuento, minEcoPuntos, maxEcoPuntos): """ Realiza las validaciones de negocio de un nivel, y si no hay errores, instancia el nuevo nivel y llama al método de la Capa de Datos que lo registra en la BD. """ try: #Reestructuración de los datos: max_nivel = int(cls.get_min_max_niveles()[1]) max_level = DatosNivel.get_nivel_nombre(max_nivel) maxDescuento = Utils.round_float(DatosNivel.get_max_descuento(), 2) maxEP = Utils.round_float(DatosNivel.get_max_ecoPuntos(), 1) minEcoPuntos = int(Utils.round_float(minEcoPuntos, 0)) maxEcoPuntos = int(Utils.round_float(maxEcoPuntos, 0)) descuento = Utils.round_float(descuento, 2) #Validación de Reglas de Negocio: if max_level.descuento == 100: #Valida regla RN06 raise custom_exceptions.ErrorDeNegocio( origen="negocio_nivel.alta_nivel()", msj_adicional= "Error al añadir el nivel. No se pueden añadir más niveles ya que hay uno con un descuento del 100%. Para añadir otro nivel, modifique primero el descuento del último nivel existente." ) elif int(numeroNivel) != int(max_nivel + 1): #Valida regla RN01 raise custom_exceptions.ErrorDeNegocio( origen="negocio_nivel.alta_nivel()", msj_adicional= "Error al añadir el nivel. El número de nivel no es correcto." ) elif Utils.round_float(minEcoPuntos, 2) >= Utils.round_float( maxEcoPuntos, 2): #Valida regla RN02 raise custom_exceptions.ErrorDeNegocio( origen="negocio_nivel.alta_nivel()", msj_adicional= "Error al añadir el nivel. El mínimo de EcoPuntos no puede ser menor al máximo de EcoPuntos del máximo nivel." ) elif descuento < maxDescuento: #Valida regla RN03 raise custom_exceptions.ErrorDeNegocio( origen="negocio_nivel.alta_nivel()", msj_adicional= "Error al añadir el nivel. El descuento no puede ser menor al máximo descuento asignado (" + str(maxDescuento) + "%).") elif descuento < 0 or descuento > 100: #Valida regla RN04 raise custom_exceptions.ErrorDeNegocio( origen="negocio_nivel.alta_nivel()", msj_adicional= "Error al añadir el nivel. El descuento debe estar entre 0% y 100%." ) elif minEcoPuntos != (int(Utils.round_float(maxEP, 0)) + 1): #Valida regla RN05 raise custom_exceptions.ErrorDeNegocio( origen="negocio_nivel.alta_nivel()", msj_adicional= "Error al añadir nivel. El mínimo de EcoPuntos debe ser " + str(int(Utils.round_float(maxEP, 0))) + " EcoPuntos.") else: nivel = Nivel(None, numeroNivel, minEcoPuntos, maxEcoPuntos, descuento) DatosNivel.alta_nivel(nivel) cls.actualiza_nivel_all() except custom_exceptions.ErrorDeConexion as e: raise e except custom_exceptions.ErrorDeNegocio as e: raise e except Exception as e: raise custom_exceptions.ErrorDeNegocio( origen="negocio.alta_nivel()", msj=str(e), msj_adicional= "Error en la capa de Negocio dando de alta un nuevo nivel.")