/** * 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."); } }
/** * Devuelve la cantidad de productos que existen en el almacen especificado. * * @param almacen el <code>Almacen</code> donde se buscará el producto. * @param producto el <code>Producto</code> que se buscará. * @return cantidad. */ public Double cantidadDeProductosEnAlmacen(Almacen almacen, Producto producto) { Iterator<Lote> i = loteJpaController.obtenerLotesPorProducto(producto).iterator(); Double cantidad = 0.0; while (i.hasNext()) { LoteAlmacenado loteAlmacenado = loteJpaController.buscarLoteAlmacenado(almacen, i.next()); if (loteAlmacenado != null) cantidad += loteAlmacenado.getCantidad(); } return cantidad; }
/** * Devuelve una lista con todos los lotes que están próximos a vencer en un almacén especificado. * * @param almacen el <code>Almacen</code> donde se buscarán los lotes. * @return lotesProximosAVencer. */ public ArrayList<LoteAlmacenado> obtenerLotesProximosAVencerDeAlmacen(Almacen almacen) { ArrayList<LoteAlmacenado> lotesAlmacenados = new ArrayList(); Iterator<Lote> i = loteJpaController.obtenerLotesProximosAVencer().iterator(); while (i.hasNext()) { LoteAlmacenado loteAlmacenado = loteJpaController.buscarLoteAlmacenado(almacen, i.next()); if (loteAlmacenado != null) { lotesAlmacenados.add(loteAlmacenado); } } return lotesAlmacenados; }
/** * 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); } }
/** * 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."); } }