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_materialesPd_by_id(cls, idPunto, json_return=True):
     """
     Obtiene los materiales que acepta un punto de depósito en base al ID que recibe como parámetro.
     """
     #Conexión con el motor de BD.
     try:
         materiales = DatosMaterial.get_all_byIdPuntoDep(idPunto)
         materiales_ = []
         if json_return == False:
             return materiales
         else:
             for material in materiales:
                 materiales_.append({
                     "id": material.id,
                     "nombre": material.nombre,
                     "unidadMedida": material.unidadMedida,
                     "color": material.color,
                     "estado": material.estado
                 })
             return materiales_
     except custom_exceptions.ErrorDeConexion as e:
         raise e
     except Exception as e:
         raise custom_exceptions.ErrorDeNegocio(
             origen="negocio.get_materialesPd_by_id()",
             msj=str(e),
             msj_adicional=
             "Error en la capa de Negocio obtieniendo los materiales que acepta un PD de la capa de Datos."
         )
    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()