public ArticulosControlador(
      AbmProductoGui apg,
      VentaControlador vc,
      CompraControlador cc,
      VentasRealizadasControlador vrc,
      ComprasRealizadasControlador crc) {

    // Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/sexshop", "root", "root");
    pl = new LinkedList<Producto>();
    pb = new busqueda();
    abmProd = new ABMProducto();
    this.prodGui = apg;
    this.vc = vc;
    this.cc = cc;
    this.vrc = vrc;
    this.crc = crc;
    nuevoPulsado = false;
    modificarPulsado = false;
    apg.setActionListener(this);
    bn = prodGui.getBusquedaNombre();
    mpp = new modificarPrecios1(apgui, true);
    bn.addKeyListener(
        new java.awt.event.KeyAdapter() {
          @Override
          public void keyReleased(java.awt.event.KeyEvent evt) {
            busquedaNombreKeyReleased(evt);
          }
        });
    bc = prodGui.getBusquedaCodigo();
    bc.addKeyListener(
        new java.awt.event.KeyAdapter() {
          @Override
          public void keyReleased(java.awt.event.KeyEvent evt) {
            busquedaCodigoKeyReleased(evt);
          }
        });
    tabla = prodGui.getTabla();
    tabla.addMouseListener(
        new java.awt.event.MouseAdapter() {
          @Override
          public void mouseClicked(java.awt.event.MouseEvent evt) {
            tablaMouseClicked(evt);
          }
        });

    bm = prodGui.getBusquedaMarca();
    bm.addKeyListener(
        new java.awt.event.KeyAdapter() {
          @Override
          public void keyReleased(java.awt.event.KeyEvent evt) {
            busquedaMarcaKeyReleased(evt);
          }
        });

    tablaProductos = prodGui.getTablaArticulos();
    pl = pb.filtroProducto("", "", "");
    actualizarLista();
  }
 public void actualizarListaProd() {
   abrirBase();
   tablaProd.setRowCount(0);
   prodlista =
       busqueda.filtroProducto(textcodprod.getText(), textnom.getText(), textmarca.getText());
   Iterator<Producto> it = prodlista.iterator();
   while (it.hasNext()) {
     Producto a = it.next();
     String row[] = new String[3];
     row[0] = a.getString("numero_producto");
     row[1] = a.getString("nombre");
     row[2] = a.getString("marca");
     tablaProd.addRow(row);
   }
   if (Base.hasConnection()) {
     Base.close();
   }
 }
 public void actualizarListaCliente() {
   abrirBase();
   tablaClientes.setRowCount(0);
   clientelista =
       busqueda.filtroCliente(textnom.getText(), textap.getText(), textcodcli.getText());
   Iterator<Cliente> it = clientelista.iterator();
   while (it.hasNext()) {
     Cliente a = it.next();
     String row[] = new String[3];
     row[0] = a.getId().toString();
     row[1] = a.getString("nombre");
     row[2] = a.getString("apellido");
     tablaClientes.addRow(row);
   }
   if (Base.hasConnection()) {
     Base.close();
   }
 }
  public VentaControlador(VentaGui ventaGui, VentasRealizadasControlador ventasControlador)
      throws JRException, ClassNotFoundException, SQLException {

    // Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/sexshop", "root", "root");
    prodlista = new LinkedList<Producto>();
    clientelista = new LinkedList<Cliente>();
    busqueda = new busqueda();
    abmVenta = new ABMVenta();
    this.ventaGui = ventaGui;
    this.ventasControlador = ventasControlador;
    ventaGui.setActionListener(this);
    tablap = ventaGui.getTablaArticulos();

    textap = ventaGui.getBusquedaApellido();
    textap.addKeyListener(
        new java.awt.event.KeyAdapter() {
          @Override
          public void keyReleased(java.awt.event.KeyEvent evt) {
            busquedaClienteKeyReleased(evt);
          }
        });
    textcodcli = ventaGui.getBusquedaCodigoCliente();
    textcodcli.addKeyListener(
        new java.awt.event.KeyAdapter() {
          @Override
          public void keyReleased(java.awt.event.KeyEvent evt) {
            busquedaClienteKeyReleased(evt);
          }
        });
    tablafac = ventaGui.getTablaFactura();

    textnom = ventaGui.getBusquedaNombre();
    textnom.addKeyListener(
        new java.awt.event.KeyAdapter() {
          @Override
          public void keyReleased(java.awt.event.KeyEvent evt) {
            busquedaProductoKeyReleased(evt);
          }
        });

    textcodprod = ventaGui.getBusquedaCodigoArticulo();
    textcodprod.addKeyListener(
        new java.awt.event.KeyAdapter() {
          @Override
          public void keyReleased(java.awt.event.KeyEvent evt) {
            busquedaProductoKeyReleased(evt);
          }
        });
    textmarca = ventaGui.getBusquedaMarca();
    textmarca.addKeyListener(
        new java.awt.event.KeyAdapter() {
          public void keyReleased(java.awt.event.KeyEvent evt) {
            busquedaProductoKeyReleased(evt);
          }
        });
    tablaClientes = ventaGui.getTablaClientesDefault();
    tablaProd = ventaGui.getTablaArticulosDefault();
    clientelista = busqueda.filtroCliente("", "", "");
    prodlista = busqueda.filtroProducto("", "", "");
    actualizarListaCliente();
    actualizarListaProd();
    reporteFactura = new ControladorJReport(("factura.jasper"));
  }
  @Override
  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == prodGui.getModificar()) { // Modificar producto
      prodGui.getGuardar().setEnabled(true);
      modificarPulsado = true;
      nuevoPulsado = false;
      prodGui.habilitarCampos(true);
      prodGui.getIdArticulo().setEditable(false);
      prodGui.getProveedores().removeAllItems();
      abrirBase();
      int r = tabla.getSelectedRow();
      if (r > -1) {
        Producto p = Producto.first("numero_producto = ?", tabla.getValueAt(r, 0));

        LazyList<Proveedor> l = Proveedor.findAll();
        Iterator<Proveedor> it = l.iterator();
        while (it.hasNext()) {
          Proveedor prov = it.next();
          String nom = prov.getString("nombre");
          String cuil = prov.getString("cuil");
          String prove = nom + ";" + cuil;
          prodGui.getProveedores().addItem(prove);
        }
        if (p != null) {
          prodGui.CargarCampos(p);
          Proveedor prov = Proveedor.findById(p.getInteger("proveedor_id"));
          if (prov != null) {
            String nom = prov.getString("nombre");
            String cuil = prov.getString("cuil");
            String pr = nom + ";" + cuil;
            prodGui.getProveedores().setSelectedItem(pr);
          }
        }
      }
      if (Base.hasConnection()) Base.close();

      // Agregar al combo todos los proveedores!
    }
    if (e.getSource() == prodGui.getNuevo()) { // Producto nuevo
      prodGui.getGuardar().setEnabled(true);
      nuevoPulsado = true;
      modificarPulsado = false;
      prodGui.getModificar().setEnabled(false);
      prodGui.getBorrar().setEnabled(false);
      prodGui.limpiarCampos();
      prodGui.habilitarCampos(true);
      prodGui.getProveedores().removeAllItems();
      abrirBase();
      LazyList<Proveedor> l = Proveedor.findAll();
      Iterator<Proveedor> it = l.iterator();
      while (it.hasNext()) {
        Proveedor prov = it.next();
        String nom = prov.getString("nombre");
        String cuil = prov.getString("cuil");
        String prove = nom + ";" + cuil;
        prodGui.getProveedores().addItem(prove);
      }
      if (Base.hasConnection()) Base.close();
      // Agregar al combo todos los proveedores
    }
    if (e.getSource() == prodGui.getGuardar() && modificarPulsado) {
      String id = prodGui.getIdArticulo().getText();
      abrirBase();
      Producto p = Producto.first("numero_producto = ?", id);
      cargarDatosProd(p, false);
      if (Base.hasConnection()) Base.close();
      String prov = (String) prodGui.getProveedores().getSelectedItem();
      String[] proveedor = prov.split(";");
      p.setCuilProveedor(proveedor[1]);
      // p.set("priveedor_id");
      abrirBase();
      Proveedor proveed = Proveedor.first("cuil = ?", proveedor[1]);
      p.set("proveedor_id", proveed.get("id"));
      if (abmProd.modificar(p)) {
        JOptionPane.showMessageDialog(apgui, "Producto modificado exitosamente.");
        pl = pb.filtroProducto("", "", "");
        actualizarLista();
        modificarPulsado = false;
        prodGui.habilitarCampos(false);
        prodGui.getModificar().setEnabled(false);
        prodGui.getGuardar().setEnabled(false);
      } else {
        JOptionPane.showMessageDialog(prodGui, "El número de producto ya existe");
      }
    }
    if (e.getSource() == prodGui.getGuardar() && nuevoPulsado) {
      Producto p = new Producto();
      cargarDatosProd(p, false);
      String prov = (String) prodGui.getProveedores().getSelectedItem();
      String[] proveedor = prov.split(";");
      p.setCuilProveedor(proveedor[1]);
      if (p.getString("nombre").equals("") || p.getString("marca").equals("")) {
        JOptionPane.showMessageDialog(prodGui, "Un producto debe tener nombre y marca");
      }
      abrirBase();
      if (abmProd.alta(p)) {
        JOptionPane.showMessageDialog(prodGui, "Producto registrado exitosamente");
        p = abmProd.getProducto(p);
        agregarFila(p);
        nuevoPulsado = false;
        prodGui.habilitarCampos(false);
        prodGui.getGuardar().setEnabled(false);
      } else {
        JOptionPane.showMessageDialog(prodGui, "Producto existente");
      }
      vc.actualizarListaProd();
      if (Base.hasConnection()) Base.close();
    }

    if (e.getSource() == prodGui.getBorrar()) {
      confirmarBorrar =
          JOptionPane.showConfirmDialog(
              prodGui, "¿borrar producto?", "Confirmar Borrado", JOptionPane.YES_NO_OPTION);
      if (JOptionPane.OK_OPTION == confirmarBorrar) {
        abrirBase();
        Producto p = Producto.first("numero_producto = ?", prodGui.getIdArticulo().getText());
        if (abmProd.baja(p)) {
          JOptionPane.showMessageDialog(prodGui, "Producto borrado exitosamente");
          pl = pb.filtroProducto("", "", "");
          actualizarLista();
          prodGui.limpiarCampos();
          prodGui.getBorrar().setEnabled(false);
          prodGui.getModificar().setEnabled(false);
          prodGui.getGuardar().setEnabled(false);
        } else {
          JOptionPane.showMessageDialog(prodGui, "No se ha borrado el producto");
        }
      }
    }
    if (e.getSource() == prodGui.getAnterior()) {
      prodGui.getProveedores().removeAllItems();
      int r = tabla.getSelectedRow();
      if (r > 0) {
        tabla.changeSelection(tabla.getSelectedRow() - 1, 0, false, false);
        r--;
        abrirBase();
        Producto c = Producto.first("numero_producto =?", tabla.getValueAt(r, 0));
        Proveedor p = Proveedor.first("id = ?", c.getString("proveedor_id"));
        if (Base.hasConnection()) Base.close();

        prodGui.CargarCampos(c);
        String nom = p.getString("nombre");
        String cuil = p.getString("cuil");
        String pr = nom + ";" + cuil;
        prodGui.getProveedores().addItem(pr);
        prodGui.repaint();
      }
    }

    if (e.getSource()
        == prodGui.getSiguiente()) { // permite avanzar al siguiente cliente de la lista
      prodGui.getProveedores().removeAllItems();
      int r = tabla.getSelectedRow();
      if (tablaProductos.getRowCount() - 1 > r) {
        tabla.changeSelection(r + 1, 0, false, false);
        r++;
        abrirBase();
        Producto c = Producto.first("numero_producto =?", tabla.getValueAt(r, 0));
        Proveedor p = Proveedor.first("id = ?", c.getString("proveedor_id"));
        if (Base.hasConnection()) Base.close();
        prodGui.CargarCampos(c);
        String nom = p.getString("nombre");
        String cuil = p.getString("cuil");
        String pr = nom + ";" + cuil;
        prodGui.getProveedores().addItem(pr);
      }
    }

    if (e.getSource() == prodGui.getModificarPrecios()) {
      DefaultTableModel t = mpp.getTablaArticulos();
      t.setRowCount(0);
      abrirBase();
      LazyList<Producto> prod = Producto.findAll();
      Iterator<Producto> it = prod.iterator();
      while (it.hasNext()) {
        Producto a = it.next();
        Object row[] = new Object[7];
        row[0] = a.getString("numero_producto");
        row[1] = a.getString("nombre");
        row[2] = a.getString("marca");
        row[3] = a.getString("tipo");
        row[4] = a.getString("precio_compra");
        row[5] = BigDecimal.valueOf(Double.valueOf(a.getString("precio_venta")));
        row[6] = BigDecimal.valueOf(Double.valueOf(a.getString("precio_venta")));
        t.addRow(row);
      }
      if (Base.hasConnection()) Base.close();
      mpp.setLocationRelativeTo(prodGui);
      mpp.setVisible(true);
      if (mpp.getReturnStatus() == 1) {
        Iterator<Pair> list = mpp.getProductosModificados().iterator();
        while (list.hasNext()) {
          Pair par = list.next();
          abrirBase();
          Producto p = Producto.findFirst("numero_producto =?", (String) par.first());
          p.set("precio_venta", par.second());
          if (p.saveIt()) {
            JOptionPane.showMessageDialog(
                prodGui,
                "Precios modificados exitosamente",
                "Precios modificados",
                JOptionPane.INFORMATION_MESSAGE);
          }
          if (Base.hasConnection()) Base.close();
        }
      }
    }
    vc.actualizarListaProd();
    cc.actualizarListaProd();
    vrc.actualizarListaFacturas();
    crc.actualizarListaCompras();
    /*if(e.getSource() == mpp.getAceptar()){
    int srow = prodGui.getTabla().getSelectedRow();
    Object id = prodGui.getTablaArticulos().getValueAt(srow, 0);
    Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/sexshop", "root", "root");
    Producto p = Producto.first("id = ?", id);
    p.set("precio_venta", mpp.getPesos().getText());
    p.saveIt();
    if (Base.hasConnection())
    Base.close();
    mpp.dispose();
    JOptionPane.showMessageDialog(apgui, "Precio modificado exitosamente.");

    }
    if(e.getSource() == mpp.getCancelar()){
    mpp.dispose();
    }
    */
  }
  public void busquedaCodigoKeyReleased(java.awt.event.KeyEvent evt) {

    pl = pb.filtroProducto(bc.getText(), bn.getText(), bm.getText());
    actualizarLista();
  }