public void buscarProductoConNombreDescripcion(ActionEvent e) {
   logger.debug(
       "################################ >> productoConNombreDescripcion: nombreDescripcion="
           + nombreDescripcion);
   productoConNombreDescripcion = new ArrayList<SelectItem>();
   if (nombreDescripcion.trim().length() >= 3) {
     List<Producto> listResultOriginal = productoJpaController.findProductoEntities();
     for (Producto productoOriginal : listResultOriginal) {
       String nombreDescripcionOriginal =
           productoOriginal.getNombre() + "/" + productoOriginal.getPresentacion();
       if (nombreDescripcionOriginal.toLowerCase().contains(nombreDescripcion.toLowerCase())) {
         SelectItem productoSI =
             new SelectItem(productoOriginal.getId(), nombreDescripcionOriginal);
         productoConNombreDescripcion.add(productoSI);
       }
     }
   }
 }
 public void nombreDescripcionChanged(ValueChangeEvent e) {
   String newValue = (String) e.getNewValue();
   logger.debug(
       "################################ >> nombreDescripcionChanged: newValue=" + newValue);
   productoConNombreDescripcion = new ArrayList<SelectItem>();
   if (newValue.trim().length() >= 3) {
     List<Producto> listResultOriginal = productoJpaController.findProductoEntities();
     for (Producto productoOriginal : listResultOriginal) {
       String nombreDescripcionOriginal =
           productoOriginal.getNombre() + "/" + productoOriginal.getPresentacion();
       if (nombreDescripcionOriginal.toLowerCase().contains(newValue.toLowerCase())) {
         SelectItem productoSI =
             new SelectItem(productoOriginal.getId(), nombreDescripcionOriginal);
         productoConNombreDescripcion.add(productoSI);
       }
     }
   }
 }
  public List<Producto> autocompletarProductoConNombreDescripcion(Object suggest) {
    List<Producto> listResult = null;
    nombreDescripcion = (String) suggest;
    logger.debug(
        "################################ >> autocompletarProductoConNombreDescripcion: nombreDescripcion="
            + nombreDescripcion);

    if (nombreDescripcion.trim().length() >= 3) {
      listResult = new ArrayList<Producto>();
      List<Producto> listResultOriginal = productoJpaController.findProductoEntities();
      for (Producto productoOriginal : listResultOriginal) {
        String nombreDescripcionOriginal =
            productoOriginal.getNombre() + "/" + productoOriginal.getPresentacion();
        if (nombreDescripcionOriginal.toLowerCase().contains(nombreDescripcion.toLowerCase())) {
          listResult.add(productoOriginal);
        }
      }
    }
    return listResult;
  }
  private void agregarProductoADetalle(Integer productoIdAgregar) {
    PedidoVentaDetalleWrapper detalleVentaPedidoAgregar = null;
    logger.debug(
        "################################ >> agregarProductoADetalle: productoIdAgregar="
            + productoIdAgregar);
    for (PedidoVentaDetalleWrapper dvp : pedidoVentaDetalleList) {
      if (dvp.getProducto().getId() == productoIdAgregar) {
        detalleVentaPedidoAgregar = dvp;
        break;
      }
    }
    try {
      if (detalleVentaPedidoAgregar != null) {
        if (detalleVentaPedidoAgregar.getCantidad() >= detalleVentaPedidoAgregar.getCantMax()) {
          logger.warn(
              "################################ >> agregarProductoADetalle: Cantidad Exedida, no se agregara");

          throw new ValidatorException(
              new FacesMessage(
                  FacesMessage.SEVERITY_ERROR,
                  "Sobrepasa cantidad Maxima de existencia en Almacenes",
                  "Sobrepasa cantidad Maxima de existencia en Almacenes"));
        } else {
          detalleVentaPedidoAgregar.setCantidad(detalleVentaPedidoAgregar.getCantidad() + 1);
          logger.debug("################################ >> agregarProductoADetalle: \t Ok, edit");
        }
      } else {
        detalleVentaPedidoAgregar = new PedidoVentaDetalleWrapper(new PedidoVentaDetalle());
        detalleVentaPedidoAgregar.setCantidad(1);

        Producto producto = productoJpaController.findProducto(productoIdAgregar);
        Collection<AlmacenProducto> almacenProductoCollection =
            producto.getAlmacenProductoCollection();
        int cantMaxAlmacenes = 0;
        for (AlmacenProducto almacenProducto : almacenProductoCollection) {
          cantMaxAlmacenes += almacenProducto.getCantidadActual();
        }

        if (cantMaxAlmacenes <= 0) {
          logger.warn(
              "################################ >> agregarProductoADetalle: Cantidad Exedida, No hay existencia en Almacenes");

          throw new ValidatorException(
              new FacesMessage(
                  FacesMessage.SEVERITY_ERROR,
                  "No hay existencia en Almacenes",
                  "No hay existencia en Almacenes"));
        }

        detalleVentaPedidoAgregar.setCantMax(cantMaxAlmacenes);
        detalleVentaPedidoAgregar.setProducto(producto);
        detalleVentaPedidoAgregar.setDescuentoAplicado(0.0);

        detalleVentaPedidoAgregar.setPrecioVenta(
            detalleVentaPedidoAgregar.getProducto().getPrecioBase()
                * (1.0 + LogicaFinaciera.getImpuestoIVA()));

        pedidoVentaDetalleList.add(detalleVentaPedidoAgregar);
        logger.debug("################################ >> agregarProductoADetalle: \t Ok, Add new");
      }
    } catch (ValidatorException ve) {
      logger.debug("<<!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
      FacesContext.getCurrentInstance().addMessage(null, ve.getFacesMessage());
    }
  }