def get_by_id(cls,id):
     """
     Busca un depósito según su ID de la BD.
     """
     try:
         return DatosDeposito.get_by_id(id)
     except Exception as e:
         raise e
 def get_info_cancelar(cls, id):
     errores = {"EP":-1,"Stock":0}
     dep = DatosDeposito.get_by_id(id)
     if dep.isAcreditado():
         errores["EP"] = 0
         user_id = cls.get_user_id(id)
         user = NegocioUsuario.get_by_id(user_id)
         if user.totalEcopuntos < dep.ecoPuntos.cantidad:
             errores["EP"] = dep.ecoPuntos.cantidad-user.totalEcopuntos 
     
     material = DatosMaterial.get_by_id(dep.material.idMaterial)
     if material.stock < dep.material.cantidad:
         errores["Stock"] = dep.material.cantidad-material.stock
     return errores
 def cancelar(cls,id):
     """
     Cancela un depósito. Si el depósito ha sido acreditado, los EP se le restan al
     usuario. Si el usuario no tiene suficientes EP para restar, se lo deja en 0 EP.
     Se descuenta, asimismo, el stock de materiales generado por el deposito. Si no
     hay suficiente stock para restar, se genera una entrada correspondiente al
     stock faltante
     """
     try:
         dep = DatosDeposito.get_by_id(id)
         DatosDeposito.update_estado(id,"cancelado")
         if dep.isAcreditado():
             user_id = cls.get_user_id(id)
             NegocioUsuario.descontarEPDeposito(user_id,dep.ecoPuntos.cantidad)
         
         material = DatosMaterial.get_by_id(dep.material.idMaterial)
         if material.stock >= dep.material.cantidad:
             DatosMaterial.updateStock(material.id,material.stock - dep.material.cantidad)
         else:
             DatosMaterial.updateStock(material.id,0)
             restante = dep.material.cantidad-material.stock
             DatosEntradaExterna.add_one(material.id,restante,"Compensación por cancelación de depósito número "+str(id)+".",datetime.now())         
     except Exception as e:
         raise e