def get_by_id_usuario(cls,uid, limit=False):
     """
     Busca los depósitos que correspondan a un usuario en base a su ID.
     """
     try:
         return DatosDeposito.get_by_id_usuario(uid, limit)
     except Exception as e:
         raise e
    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()