@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();
    }
    */
  }
  @Override
  public void actionPerformed(ActionEvent ae) {
    if (!Base.hasConnection()) {
      Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/quiniela", "tecpro", "tecpro");
      if (ae.getActionCommand().equals("Actualizar")) { // si presiono actualizar
        cargarProductos(); // actualizo la tabla de productos
      }
      if (ae.getActionCommand().equals("Quitar")) { // si presiono quitar
        abmp.bajaFecha(
            (int) tablaProducto.getValueAt(getView().getTablaProductos().getSelectedRow(), 0),
            (String) tablaFecha.getValueAt(getView().getTablaStockFecha().getSelectedRow(), 0));
        cargarFecha(
            (int) tablaProducto.getValueAt(getView().getTablaProductos().getSelectedRow(), 0));
      }
      if (ae.getActionCommand().equals("Eliminar")) { // si presiono eliminar
        abmp.bajaProducto(
            (int)
                tablaProducto.getValueAt(
                    getView().getTablaProductos().getSelectedRow(),
                    0)); // saco el id de la fila en la primer columna
        cargarProductos();
      }
      if (ae.getActionCommand().equals("Nuevo")) { // si presiono nuevo
        Object row[] = new Object[6]; // creo una fila nueva vacia
        getView().getProdModificar().setEnabled(true);
        tablaProducto.addRow(row);
      }
      if (ae.getActionCommand().equals("Modificar")) { // si presiono guardar cambios en una fila
        BigDecimal b1, b2;
        String nombre;
        int hayStock;
        int stock;
        for (int j = 0; j < tablaProducto.getRowCount(); j++) {
          // tomo el nombre de la tabla
          if (tablaProducto.getValueAt(j, 1) != null) {
            nombre = (String) tablaProducto.getValueAt(j, 1);
          } else {
            nombre = "";
            System.out.println("El nombre no puede ser vacio");
          }
          // tomo el precio de la tabla
          if (tablaProducto.getValueAt(j, 2) != null) {
            b1 = new BigDecimal((Double) tablaProducto.getValueAt(j, 2));
          } else {
            b1 = new BigDecimal(0);
          }
          // tomo la comision de la tabla
          if (tablaProducto.getValueAt(j, 3) != null) {
            b2 = new BigDecimal((Double) tablaProducto.getValueAt(j, 3));
          } else {
            b2 = new BigDecimal(0);
          }
          // tomo el valor del checkbox de la tabla(si hay o no stock)
          if (tablaProducto.getValueAt(j, 4) == null
              || (boolean) tablaProducto.getValueAt(j, 4) == false) {
            hayStock = 0;
          } else {
            hayStock = 1;
          }
          if (tablaProducto.getValueAt(j, 5) != null) {
            stock = new Integer((Integer) tablaProducto.getValueAt(j, 5));
          } else {
            stock = new Integer(0);
          }
          // Si el producto es nuevo(no tiene id)
          if (tablaProducto.getValueAt(j, 0) == null) {
            abmp.altaProducto(nombre, b1, b2, hayStock, stock);
          } else { // si el producto existe y solo sera modificado
            int id = (int) tablaProducto.getValueAt(j, 0);
            abmp.modificarProducto(id, nombre, b1, b2, hayStock, stock);
          }
        }
        cargarProductos(); // actualizo la tabla de productos
        JOptionPane.showMessageDialog(getView(), "Cambios guardados con exito!");
      }
      if (ae.getActionCommand().equals("Insertar")) { // si presiono insertar
        // cargo stock y fecha de la tabla junto con el id del producto
        String diaDepo =
            (String) tablaFecha.getValueAt(getView().getTablaStockFecha().getSelectedRow(), 0);
        diaDepo = diaDepo.toLowerCase();
        if ("lunes".equals(diaDepo)
            || "martes".equals(diaDepo)
            || "miercoles".equals(diaDepo)
            || "jueves".equals(diaDepo)
            || "viernes".equals(diaDepo)
            || "sabado".equals(diaDepo)
            || "domingo".equals(diaDepo)) {
          abmp.altaFecha(
              (int) tablaProducto.getValueAt(getView().getTablaProductos().getSelectedRow(), 0),
              (String) tablaFecha.getValueAt(getView().getTablaStockFecha().getSelectedRow(), 0));
          cargarFecha(
              (int) tablaProducto.getValueAt(getView().getTablaProductos().getSelectedRow(), 0));
          JOptionPane.showMessageDialog(getView(), "Dia cargado con exito!");
        } else {
          cargarFecha(
              (int) tablaProducto.getValueAt(getView().getTablaProductos().getSelectedRow(), 0));
          JOptionPane.showMessageDialog(getView(), "El dia esta mal escrito!");
        }
      }
    }

    if (Base.hasConnection()) {
      Base.close();
    }
    cc.cargarProductos();
  }