Evitar produtos duplicados em master detail

1 resposta
Vanilson

Pessoal é o seguinte, eu tenho um formulario com estrutura do tipo master/detail eu consigo adicionar os dados na jtable sem problemas, so que ao adicionar os dados jtable eu devo verificar se o mesmo produto foi adicionado a um mesmo cliente mais do que uma vez, do tipo:

Cliente - Produto
Vanilson Arroz
Vanilson Arroz

Essa situação não deve acontecer, eu tento fazer essa verificar e ela não funciona n sei pq, dos dados nem são adicionados a jtable, eis o codigo:
public void verificarProdutoAdicionado() {
        if(tmVenda.getRowCount() < 0)
            adicionarProduto();
        else if (tmVenda.getRowCount() > 0) {
            int j = 1;
            for (int i = 0; i < tmVenda.getRowCount(); i++) {
                //JOptionPane.showMessageDialog(null, i);
                if (cboNomeProduto.getSelectedItem().equals(tmVenda.getValueAt(i, j))) {
                    JOptionPane.showMessageDialog(null, tmVenda.getValueAt(i, j));
                    j++;
                }
                else
                    adicionarProduto();
            }
        }
    }
    public void adicionarProduto() {
        if (valida() && verificarQuantidade()) {
            Venda v = new Venda();
            v.setCodigoCliente(lc.get(cboNomeCliente.getSelectedIndex()).getCodigoCliente());
            v.setCodigoProduto(lp.get(cboNomeProduto.getSelectedIndex()).getCodigoProduto());
            v.setQuantidade(Integer.parseInt(txtQuantidadeVendida.getText()));
            v.setValor(Double.parseDouble(txtPreco.getText()) * Integer.parseInt(txtQuantidadeVendida.getText()));
            lv.add(v);
            //JOptionPane.showMessageDialog(null,tmVenda.getColumnCount()); 

            String nomeCliente = lc.get(cboNomeCliente.getSelectedIndex()).getNomeCliente();
            String nomeProduto = lp.get(cboNomeProduto.getSelectedIndex()).getNomeProduto();
            String data = txtData.getText();
            String hora = txtHora.getText();
            String quantidade = txtQuantidadeVendida.getText();
            String valor = "" + Double.parseDouble(txtPreco.getText()) * Integer.parseInt(txtQuantidadeVendida.getText());
            String[] dados = new String[]{nomeCliente, nomeProduto, data, hora, quantidade, valor};

            tmVenda.addRow(dados);
            valorTotal += Double.parseDouble(txtPreco.getText()) * Integer.parseInt(txtQuantidadeVendida.getText());
            NumberFormat nf = NumberFormat.getInstance();
            String valorTotalFormatado = nf.format(valorTotal);
            txtTotal.setText(valorTotalFormatado);
            //JOptionPane.showMessageDialog(null, tmVenda.getValueAt(0, 0));

        } else {
            JOptionPane.showMessageDialog(null, "Insira uma quantidade de venda válida", "Venda", JOptionPane.ERROR_MESSAGE);
        }
    }

1 Resposta

Vanilson

Consegui resolver o problema, eis o codigo:

public void verificarProdutoAdicionado() {
        if (tmVenda.getRowCount() == 0) {
            adicionarProduto();
        } else if (tmVenda.getRowCount() > 0) {
            String nomeCliente = "";
            String nomeProduto = "";
            int colunaProduto = 1, colunaNome = 0, y = 0, j = 0;
            for (int i = 0; i < tmVenda.getRowCount(); i++) {
                if (cboNomeProduto.getSelectedItem().equals(tmVenda.getValueAt(i, colunaProduto))) {
                    nomeCliente = (String) cboNomeCliente.getSelectedItem();
                    nomeProduto = (String) tmVenda.getValueAt(i, colunaProduto);
                    y++;
                }
                else if (!cboNomeCliente.getSelectedItem().equals(tmVenda.getValueAt(i, colunaNome))) {
                    nomeCliente = (String) cboNomeCliente.getSelectedItem();
                    j++;
                }
            }
            if (y != 0) {
                JOptionPane.showMessageDialog(null, "O produto " + nomeProduto + " já se encontra na lista de compras", "Venda", JOptionPane.INFORMATION_MESSAGE);
            }
            else if (j != 0)
                JOptionPane.showMessageDialog(null, "O cliente " + nomeCliente + " não pode ser adicionado a essa venda", "Venda", JOptionPane.INFORMATION_MESSAGE);
            else {
                adicionarProduto();
            }
        }
    }

    public void adicionarProduto() {
        if (valida() && verificarQuantidade()) {
            Venda v = new Venda();
            v.setCodigoCliente(lc.get(cboNomeCliente.getSelectedIndex()).getCodigoCliente());
            v.setCodigoProduto(lp.get(cboNomeProduto.getSelectedIndex()).getCodigoProduto());
            v.setQuantidade(Integer.parseInt(txtQuantidadeVendida.getText()));
            v.setValor(Double.parseDouble(txtPreco.getText()) * Integer.parseInt(txtQuantidadeVendida.getText()));
            lv.add(v);
            //JOptionPane.showMessageDialog(null,tmVenda.getColumnCount()); 

            String nomeCliente = lc.get(cboNomeCliente.getSelectedIndex()).getNomeCliente();
            String nomeProduto = lp.get(cboNomeProduto.getSelectedIndex()).getNomeProduto();
            String data = txtData.getText();
            String hora = txtHora.getText();
            String quantidade = txtQuantidadeVendida.getText();
            String valor = "" + Double.parseDouble(txtPreco.getText()) * Integer.parseInt(txtQuantidadeVendida.getText());
            String[] dados = new String[]{nomeCliente, nomeProduto, data, hora, quantidade, valor};

            tmVenda.addRow(dados);
            valorTotal += Double.parseDouble(txtPreco.getText()) * Integer.parseInt(txtQuantidadeVendida.getText());
            NumberFormat nf = NumberFormat.getInstance();
            String valorTotalFormatado = nf.format(valorTotal);
            txtTotal.setText(valorTotalFormatado);
            //JOptionPane.showMessageDialog(null, tmVenda.getValueAt(0, 0));

        } else {
            JOptionPane.showMessageDialog(null, "Insira uma quantidade de venda válida", "Venda", JOptionPane.ERROR_MESSAGE);
        }
    }
Criado 15 de dezembro de 2011
Ultima resposta 16 de dez. de 2011
Respostas 1
Participantes 1