def alta_direccion(cls, calle, altura, ciudad, provincia, pais, validar=False): """ Añade una dirección a la BD. """ #Conexión con el motor de BD. try: if validar: if NegocioDireccion.valida_direccion(calle, altura, ciudad, provincia, pais): return DatosDireccion.alta_direccion( Direccion(None, calle, altura, ciudad, provincia, pais)) else: return DatosDireccion.alta_direccion( Direccion(None, calle, altura, ciudad, provincia, pais)) except custom_exceptions.ErrorDeConexion as e: raise e except Exception as e: raise custom_exceptions.ErrorDeNegocio( origen="negocio_direccion.alta_direccion()", msj=str(e), msj_adicional= "Error en la capa de Negocio dando de alta una direccion.")
def get_by_id(cls, id): """ Obtiene un Punto de Depósito de la BD segun su ID. """ try: cls.abrir_conexion() sql = ( "select * from puntosDeposito where estadoEliminacion = 'disponible' AND idPunto={} order by nombre ASC" ).format(id) cls.cursor.execute(sql) punto = cls.cursor.fetchall()[0] #Se instancia sin los horarios ya que no se muestran, para no generar tráfico de datos innecesario. direccion = DatosDireccion.get_one_id(punto[4]) materiales_ = DatosMaterial.get_all_byIdPuntoDep(punto[0], True) materiales = [] for mat in materiales_: materiales.append(mat.id) pd = PuntoDeposito(punto[0], direccion, punto[1], punto[2], materiales, None) return pd except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data.get_by_id()", msj=str(e), msj_adicional= "Error obteniendo un Punto de Depósito desde la BD.") finally: cls.cerrar_conexion()
def get_all_sin_filtro(cls, noClose=False): """ Obtiene todos los Puntos de Depósito de la BD. """ try: cls.abrir_conexion() sql = ("select * from puntosDeposito order by nombre ASC") cls.cursor.execute(sql) puntosDeposito = cls.cursor.fetchall() puntosDeposito_ = [] for punto in puntosDeposito: #Se instancia sin los horarios ya que no se muestran, para no generar tráfico de datos innecesario. if punto[3] == 'eliminado': direccion = None else: direccion = DatosDireccion.get_one_id(punto[4]) materiales_ = DatosMaterial.get_all_byIdPuntoDep( punto[0], True) materiales = [] for mat in materiales_: materiales.append(mat.id) puntosDeposito_.append( PuntoDeposito(punto[0], direccion, punto[1], punto[2], materiales, None)) return puntosDeposito_ except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data.get_all()", msj=str(e), msj_adicional="Error otodos los Puntos de Depósito desde la BD." ) finally: if not (noClose): cls.cerrar_conexion()
def get_by_id(cls,id): """ Obtiene un punto de retiro de la BD a partir de su id. """ try: cls.abrir_conexion() sql = ("SELECT idPunto, \ estadoEliminacion, \ demoraFija, \ nombre, \ idDireccion, \ estado \ FROM puntosRetiro WHERE idPunto = {} AND estadoEliminacion != \"eliminado\";".format(id)) cls.cursor.execute(sql) pr = cls.cursor.fetchall()[0] direccion = DatosDireccion.get_one_id(pr[4]) horarios = DatosHorario.get_horariosPR_id(pr[0]) puntoRetiro = PuntoRetiro(pr[0],direccion,pr[3],pr[1],horarios,pr[2],bool(pr[5])) return puntoRetiro except Exception as e: raise custom_exceptions.ErrorDeConexion(origen="data_punto_retiro.get_by_id()", msj=str(e), msj_adicional="Error obtieniendo un punto de retiro desde la BD.") finally: cls.cerrar_conexion()
def get_all(cls,noFilter, filterInactivos): """ Obtiene todos los puntos de retiro de la BD. """ try: cls.abrir_conexion() if noFilter and filterInactivos == False: sql = ("SELECT idPunto, \ estadoEliminacion, \ demoraFija, \ nombre, \ idDireccion, \ estado \ FROM puntosRetiro order by nombre ASC;") elif noFilter == False and filterInactivos == False: sql = ("SELECT idPunto, \ estadoEliminacion, \ demoraFija, \ nombre, \ idDireccion, \ estado \ FROM puntosRetiro WHERE estadoEliminacion != \"eliminado\" order by nombre ASC;") elif noFilter and filterInactivos: sql = ("SELECT idPunto, \ estadoEliminacion, \ demoraFija, \ nombre, \ idDireccion, \ estado \ FROM puntosRetiro where estado=1 order by nombre ASC;") elif noFilter == False and filterInactivos: sql = ("SELECT idPunto, \ estadoEliminacion, \ demoraFija, \ nombre, \ idDireccion, \ estado \ FROM puntosRetiro WHERE estadoEliminacion != \"eliminado\" and estado=1 order by nombre ASC;") cls.cursor.execute(sql) puntos = cls.cursor.fetchall() puntosRetiro = [] for pr in puntos: if pr[4] == None: direccion = None else: direccion = DatosDireccion.get_one_id(pr[4]) horarios = DatosHorario.get_horariosPR_id(pr[0]) puntoRetiro = PuntoRetiro(pr[0],direccion,pr[3],pr[1],horarios,pr[2],bool(pr[5])) puntosRetiro.append(puntoRetiro) return puntosRetiro except Exception as e: raise custom_exceptions.ErrorDeConexion(origen="data_punto_retiro.get_all()", msj=str(e), msj_adicional="Error obtieniendo los puntos de retiro desde la BD.") finally: cls.cerrar_conexion()
def get_by_id(cls, id, noClose=False): """ Busca un usuario en la BD segun su id. """ try: cls.abrir_conexion() sql = ("SELECT usuarios.idUsuario, \ usuarios.nroDoc, \ usuarios.nombre, \ usuarios.apellido, \ usuarios.email, \ usuarios.password, \ usuarios.idTipoUsuario, \ usuarios.idTipoDoc, \ usuarios.idDireccion, \ usuarios.idNivel, \ usuarios.img \ from usuarios where usuarios.idUsuario = {}").format(id) cls.cursor.execute(sql) usuarios = cls.cursor.fetchall() if len(usuarios) > 0: usu = usuarios[0] direc = DatosDireccion.get_one_id(usu[8]) depositos = DatosDeposito.get_by_id_usuario(usu[0]) ped = DatosPedido.get_by_user_id(usu[0]) usuario = Usuario(usu[0], usu[1], usu[7], usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10]) usuario.calcularTotalEcopuntos() return usuario else: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.get_by_id()", msj_adicional="Usuario inexistente") except custom_exceptions.ErrorDeConexion as e: raise e except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.get_by_id()", msj=str(e), msj_adicional="Error buscando usuario en la BD.") finally: if not (noClose): cls.cerrar_conexion()
def buscar_info_user(cls, busqueda): """ Obtiene todos los usuarios según su ID, nombre completo, email, o documento """ try: cls.abrir_conexion() sql = ("SELECT usuarios.idUsuario, \ usuarios.nroDoc, \ usuarios.nombre, \ usuarios.apellido, \ usuarios.email, \ usuarios.password, \ usuarios.idTipoUsuario, \ usuarios.idTipoDoc, \ usuarios.idDireccion, \ usuarios.idNivel, \ usuarios.img \ from usuarios WHERE estado = \"habilitado\" AND (idUsuario=\"{}\" OR email=\"{}\" OR nroDOC=\"{}\")" ).format(busqueda, busqueda, busqueda) cls.cursor.execute(sql) usuarios = cls.cursor.fetchall() users = [] for usu in usuarios: direc = DatosDireccion.get_one_id(usu[8]) depositos = DatosDeposito.get_by_id_usuario(usu[0]) ped = DatosPedido.get_by_user_id(usu[0]) tipo_doc = DatosTipoDocumento.get_by_id(usu[7]) usuario = Usuario(usu[0], usu[1], tipo_doc, usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10]) usuario.calcularTotalEcopuntos() users.append(usuario) return users except custom_exceptions.ErrorDeConexion as e: raise e except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.buscar_info_user()", msj=str(e), msj_adicional="Error buscando usuarios.") finally: cls.cerrar_conexion()
def get_all(cls, noFilter=False): """ Obtiene todos los usuarios. El No filter solamente filtra los no-activos y los no-verificados, no se incluyen nunca los eliminados. """ try: cls.abrir_conexion() if noFilter: sql = ("SELECT usuarios.idUsuario, \ usuarios.nroDoc, \ usuarios.nombre, \ usuarios.apellido, \ usuarios.email, \ usuarios.password, \ usuarios.idTipoUsuario, \ usuarios.idTipoDoc, \ usuarios.idDireccion, \ usuarios.idNivel, \ usuarios.img, \ usuarios.estado \ from usuarios where estado != 'eliminado' order by nombre IS NULL, nombre,estado ASC" ) else: sql = ("SELECT usuarios.idUsuario, \ usuarios.nroDoc, \ usuarios.nombre, \ usuarios.apellido, \ usuarios.email, \ usuarios.password, \ usuarios.idTipoUsuario, \ usuarios.idTipoDoc, \ usuarios.idDireccion, \ usuarios.idNivel, \ usuarios.img, \ usuarios.estado \ from usuarios WHERE estado = \"habilitado\" order by nombre ASC" ) cls.cursor.execute(sql) usuarios = cls.cursor.fetchall() users = [] if noFilter: for usu in usuarios: print(usu[0]) print(usu[11]) if usu[11] != 'habilitado': direc = None depositos = None ped = None usuario = Usuario(usu[0], usu[1], usu[7], usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10], usu[11]) users.append(usuario) else: direc = DatosDireccion.get_one_id(usu[8]) depositos = DatosDeposito.get_by_id_usuario(usu[0]) ped = DatosPedido.get_by_user_id(usu[0]) usuario = Usuario(usu[0], usu[1], usu[7], usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10], usu[11]) usuario.calcularTotalEcopuntos() users.append(usuario) else: for usu in usuarios: direc = DatosDireccion.get_one_id(usu[8]) depositos = DatosDeposito.get_by_id_usuario(usu[0]) ped = DatosPedido.get_by_user_id(usu[0]) usuario = Usuario(usu[0], usu[1], usu[7], usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10], usu[11]) usuario.calcularTotalEcopuntos() users.append(usuario) return users except custom_exceptions.ErrorDeConexion as e: raise e except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.get_all()", msj=str(e), msj_adicional="Error obteniendo todos los usuarios.") finally: cls.cerrar_conexion()
def login(cls, email, password, noClose=False): """ Busca un usuario en la BD que tenga el email y la contraseña que recibe como parámetro. Si no hay ninguno, devuelve False. """ try: cls.abrir_conexion() sql = ("SELECT usuarios.idUsuario, \ usuarios.nroDoc, \ usuarios.nombre, \ usuarios.apellido, \ usuarios.email, \ usuarios.password, \ usuarios.idTipoUsuario, \ usuarios.idTipoDoc, \ usuarios.idDireccion, \ usuarios.idNivel, \ usuarios.img, \ usuarios.estado \ from usuarios where email = %s and password = %s and estado != 'eliminado'" ) values = (email, password) cls.cursor.execute(sql, values) usuarios = cls.cursor.fetchall() if len(usuarios) > 0: usu = usuarios[0] if usu[11] != "habilitado": usuario = Usuario(usu[0], None, None, None, None, usu[5], None, None, email=usu[4], estado=usu[11]) else: direc = DatosDireccion.get_one_id(usu[8]) depositos = DatosDeposito.get_by_id_usuario(usu[0]) ped = DatosPedido.get_by_user_id(usu[0]) usuario = Usuario(usu[0], usu[1], usu[7], usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10], usu[11]) usuario.calcularTotalEcopuntos() return usuario else: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.login()", msj_adicional="Usuario inexistente") except custom_exceptions.ErrorDeConexion as e: raise e except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.login()", msj=str(e), msj_adicional= "Error buscando usuario en la BD para realizar el login.") finally: if not (noClose): cls.cerrar_conexion()