/**
  * Incrementa la cantidad de lote en el almacen especificado. Si el lote no está en el almacen, se
  * agrega.
  *
  * @param almacen el <code>Almacen</code> donde se modificará el inventario.
  * @param lote el <code>Lote</code> donde se incrementará.
  * @param cantidad la cantidad que se requiere incrementar.
  * @throws Exception Se lanza si ocurre un error en la base de datos.
  */
 public void aumentarStockEnAlmacen(Almacen almacen, Lote lote, Double cantidad) throws Exception {
   LoteAlmacenado loteAlmacenado = loteJpaController.buscarLoteAlmacenado(almacen, lote);
   if (loteAlmacenado != null) {
     Double cantidadNueva = loteAlmacenado.getCantidad() + cantidad;
     loteAlmacenado.setCantidad(cantidadNueva);
     loteJpaController.editarLoteAlmacenado(loteAlmacenado);
   } else {
     LoteAlmacenado nuevoLoteAlmacenado = new LoteAlmacenado();
     nuevoLoteAlmacenado.setAlmacen(almacen);
     nuevoLoteAlmacenado.setLote(lote);
     nuevoLoteAlmacenado.setCantidad(cantidad);
     loteJpaController.crearLoteAlmacenado(nuevoLoteAlmacenado);
   }
 }
 /**
  * Modifica la cantidad del lote en el almacen especificado.
  *
  * @param almacen el <code>Almacen</code> donde se modificará el inventario.
  * @param codigoLote es el codigo del lote para buscar en la base de datos.
  * @param cantidad es la cantidad con la que se quiere reemplazar al viejo valor.
  * @throws Exception Se lanza si el codigo del lote no está registrado en la base de datos, o si
  *     el almacen no contiene al lote especificado.
  */
 public void corregirLoteAlmacenado(Almacen almacen, String codigoLote, Double cantidad)
     throws Exception {
   Lote lote = loteJpaController.buscarLotePorCodigo(codigoLote);
   LoteAlmacenado loteAlmacenado = loteJpaController.buscarLoteAlmacenado(almacen, lote);
   if (loteAlmacenado != null) {
     String msg =
         "El punto de venta tiene una cantidad de "
             + loteAlmacenado.getCantidad()
             + " del producto "
             + codigoLote.toUpperCase()
             + "."
             + "\n¿Desea reemplazar por la cantidad "
             + cantidad
             + "?";
     int showOptionDialog =
         JOptionPane.showOptionDialog(
             null,
             msg,
             "Corregir Inventario",
             JOptionPane.YES_OPTION,
             JOptionPane.QUESTION_MESSAGE,
             null,
             null,
             null);
     if (showOptionDialog == 0) {
       loteAlmacenado.setCantidad(cantidad);
       loteJpaController.editarLoteAlmacenado(loteAlmacenado);
       operacionJpaController.registrarOperacionCorreccionDeInventario(
           ControllerSingleton.getEmpleadoJpaController().getEmpleadoQueInicioSesion(),
           loteAlmacenado);
     }
   } else {
     throw new Exception("El almacén no contiene este lote.");
   }
 }
 /**
  * Descuenta de un lote de un almacen la cantidad indicada. Si el almacén no contiene el lote,
  * lanza una excepción. Si el almacen si contiene el lote pero la cantidad que se requiere
  * transferir es mayor al contenido en el lote, lanza una excepción.
  *
  * @param almacen el <code>Almacen</code> donde se modificará el inventario.
  * @param lote el <code>Lote</code> de donde se descontará.
  * @param cantidad la cantidad que se descontará.
  * @throws Exception Se lanza si no hay cantidad suficiente para descontar o si el almacen no
  *     contiene al lote especificado.
  */
 public void descontarDeAlmacen(Almacen almacen, Lote lote, Double cantidad) throws Exception {
   LoteAlmacenado loteAlmacenado = loteJpaController.buscarLoteAlmacenado(almacen, lote);
   if (loteAlmacenado != null) {
     if (loteAlmacenado.getCantidad() >= cantidad) {
       Double cantidadNueva = loteAlmacenado.getCantidad() - cantidad;
       loteAlmacenado.setCantidad(cantidadNueva);
       loteJpaController.editarLoteAlmacenado(loteAlmacenado);
     } else {
       throw new Exception("No hay cantidad suficiente para satisfacer la transferencia.");
     }
   } else {
     throw new Exception("El almacén no contienen ningun lote con el código de lote ingresado.");
   }
 }