Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Iterar duas Listas

Estou com uma pequena dúvida, tenho duas listas vinda do banco, uma retorna a nota fiscal e outra retorna os itens dessas notas.. Mais como faço pra pegar os itens correspondente a nota que eu selecionar num jTable?

7 respostas

Oi Williams, tudo bem ?

Cara imagino que sua nota fiscal tenha uma lista de itens, ou cada item saiba de qual nota fiscal é.

Caso não tenha, acho que vai ser bem difícil fazermos isso.

Consegue confirmar isso para podermos dar continuidade ?

Eu tenho uma Nota que contém uma lista de itens, todos vindo de um banco de dados. Para uma Nota XXXXX eu queria iterar os Itens que nele estão.

Não sei se fui muito claro Instrutor! Sou ruim nas palavras

Consegue mostrar mais ou menos como está fazendo hoje?

Método que retorna as Notas do Banco

public ArrayList<NotaFiscal> listarNotas() throws Exception {

        List<NotaFiscal> retorno = new ArrayList<>();

        String sql = "SELECT ";
        sql += "MOVIMENTO.CODIGOFILIALCONTABIL, ";
        sql += "MOVIMENTO.NUMEROMOVIMENTO, ";
        sql += "MOVIMENTO.DATA, ";
        sql += "CADPARCEIRO.DESCRICAO AS A_DESCRICAO, ";
        sql += "MOVIMENTO.TOTALLIQUIDO, ";
        sql += "MOVIMENTO.ORDEMMOVIMENTO, ";
        sql += "MOVIMENTO.CODIGOALMOXARIFADO, ";
        sql += "MOVIMENTO.CODIGOOPERACAO ";

        sql += "FROM ";
        sql += "MOVIMENTO ";
        sql += "WITH(NOLOCK) ";
        sql += "INNER JOIN CADPARCEIRO ";
        sql += "ON MOVIMENTO.CODIGOPARCEIRO = CADPARCEIRO.CODIGOPARCEIRO ";
        sql += "INNER JOIN CADOPERACAO ";
        sql += "ON MOVIMENTO.CODIGOOPERACAO = CADOPERACAO.CODIGOOPERACAO ";
        sql += "INNER JOIN CADFILIALCONTABIL ";
        sql += "ON MOVIMENTO.CODIGOFILIALCONTABIL = CADFILIALCONTABIL.CODIGOFILIALCONTABIL ";

        sql += "WHERE MOVIMENTO.CODIGOOPERACAO IN('0101022') ";
        sql += "AND MOVIMENTO.STATUS <> 'X' ";
        sql += "AND MOVIMENTO.CODIGOFILIALCONTABIL = '00001' ";
        //sql += "AND MOVIMENTO.DATAEMISSAO  BETWEEN '10/12/2017' AND '10/13/2017'";

        PreparedStatement pst = this.conectarComParametros(sql);
        ResultSet resultado = pst.executeQuery();
        while (resultado.next()) {
            NotaFiscal nf = new NotaFiscal();
            //nf.setDataEntrada(resultado.getDate("DATA"));
            nf.setDescricao(resultado.getString("A_DESCRICAO"));
            nf.setNumeroMovimento(resultado.getString("NUMEROMOVIMENTO"));
            nf.setOrdemMovimento(resultado.getString("ORDEMMOVIMENTO"));
            nf.setTotalLiquido(resultado.getDouble("TOTALLIQUIDO"));

            retorno.add(nf);
        }
        desconectar();
        return (ArrayList<NotaFiscal>) retorno;
    }

Método que retorna os Itens da Nota

public ArrayList<ItensNota> listarItens() throws Exception {

        List<ItensNota> retorno = new ArrayList<>();
        ItensNota itens = new ItensNota();

        String sql = "SELECT ";
        sql += "MOVIMENTO.ORDEMMOVIMENTO, ";
        sql += "MOVIMENTOITEM.ORDEMMOVIMENTO, ";
        sql += "MOVIMENTO.NUMEROMOVIMENTO, ";
        sql += "MOVIMENTOITEM.CODIGOMATERIAL, ";
        sql += "CADMATERIAL.DESCRICAO, ";
        sql += "CADMATERIAL.CODIGOAUXILIAR, ";
        sql += "MOVIMENTOITEM.CUSTO, ";
        sql += "MOVIMENTOITEM.QUANTIDADE, ";
        sql += "MATERIALALMOXARIFADO.LOCAL, ";
        sql += "MATERIALALMOXARIFADO.CODIGOALMOXARIFADO ";

        sql += "FROM ";
        sql += "MOVIMENTO ";
        sql += "WITH(NOLOCK) ";
        sql += "INNER JOIN MOVIMENTOITEM ";
        sql += "ON MOVIMENTO.ORDEMMOVIMENTO = MOVIMENTOITEM.ORDEMMOVIMENTO ";
        sql += "INNER JOIN CADMATERIAL ";
        sql += "ON MOVIMENTOITEM.CODIGOMATERIAL = CADMATERIAL.CODIGOMATERIAL ";
        sql += "INNER JOIN MATERIALALMOXARIFADO ";
        sql += "ON MOVIMENTOITEM.CODIGOMATERIAL = MATERIALALMOXARIFADO.CODIGOMATERIAL AND MATERIALALMOXARIFADO.CODIGOALMOXARIFADO = '01003' ";
        sql += "WHERE MOVIMENTO.NUMEROMOVIMENTO= '15959'";
        //if (itens.getNotaFiscal().getNumeroMovimento()!=null && itens.getNotaFiscal().getNumeroMovimento().equals("")== false) {
       //    sql += " WHERE MOVIMENTO.NUMEROMOVIMENTO= '"+itens.getNotaFiscal().getNumeroMovimento().trim()+"'";
       // }

        PreparedStatement pst = this.conectarComParametros(sql);
        ResultSet resultado = pst.executeQuery();
        while (resultado.next()) {

            //nf.setDataEntrada(resultado.getDate("DATA"));
            itens.setCodigo(resultado.getString("CODIGOAUXILIAR"));
            itens.setCusto(resultado.getDouble("CUSTO"));
            itens.setDescricao(resultado.getString("DESCRICAO"));
            itens.setLocal(resultado.getString("LOCAL"));
            itens.setQuantidade(resultado.getDouble("QUANTIDADE"));
            itens.getNotaFiscal().setNumeroMovimento("NUMEROMOVIMENTO");

            retorno.add(itens);
        }
        desconectar();
        return (ArrayList<ItensNota>) retorno;
    }

Exibindo Notas na jTable tabelaNotasFiscais

private void pesquisarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:

        try {
            NotaFiscalDAO dao = new NotaFiscalDAO();
            listaNotasFiscais = dao.listarNotas();
            DefaultTableModel modelo = new DefaultTableModel(){
                @Override
                public boolean isCellEditable(int row, int column) {
                    return false;
                }                
            };
            modelo.setColumnIdentifiers(new String[] {"Ordem", "Nº Movimento", "Descrição", "Total Líquido"});
            for (NotaFiscal nota : listaNotasFiscais) {
                modelo.addRow(new String[]{"" + nota.getOrdemMovimento(), nota.getNumeroMovimento(), 
                    nota.getDescricao(), Double.toString(nota.getTotalLiquido())});
            }
            tabelaNotasFiscais.setModel(modelo);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(rootPane, e.getMessage());
        }
    }

Exibindo Itens das Notas no jTable tabelaItensNota

private void tabelaNotasFiscaisMouseClicked(java.awt.event.MouseEvent evt) {                                                
        // TODO add your handling code here:
        try {

            NotaFiscalDAO dao = new NotaFiscalDAO();
            listaItensNotaFiscal = dao.listarItens();
            DefaultTableModel modelo = new DefaultTableModel(); 
            modelo.setColumnIdentifiers(new String[] {"Codigo", "Descricao", "Quantidade", "Local", "Custo"});

                for (ItensNota itens : listaItensNotaFiscal) {
                    modelo.addRow(new String[] {"" + itens.getCodigo(), itens.getDescricao(), 
                        Double.toString(itens.getQuantidade()), itens.getLocal(), Double.toString(itens.getCusto())});
                }
                tabelaItensNota.setModel(modelo);



        } catch (Exception e) {
            JOptionPane.showMessageDialog(rootPane, e.getMessage());
        }
    }
solução!

Cara você consegue fazer um filtro baseado na propriedade NUMEROMOVIMENTO que ambos tem, imagino que seja importante isso.

Para cada nota fiscal você pode fazer uma busca na lista de itens e setar item a item nela.

Algo assim :

class NotaFiscal {
    List<Itens> itens =new ArrayList();


}
for (NotaFiscal nota : notas){

    for(ItensNota item : itens){

        if(item.getMovimentacao().equals(nota.getMovimentacao())){
        nota.add(item);
        }
    }

}

`

Demorei muito mais cheguei pra marcar a solução; Funcionou aqui num teste, testei nesse projeto que estava fazendo e mesmo assim não ia, ficava retornando null, depois de muita dor de cabeça a empresa responsavel por este software no qual eu estava fazendo uma implementação a parte na minha empresa, disse que é por as chave primaria das tabelas que eu estva acessando retornam o mesmo valor, e disseram que seria mais facil eu criar um select a parte dos itens, funcionou, mais , não sei a questão das chaves retornarem o mesmo valor iria interfirir... Valeu meu querido, isso ai me ajudou já em outro projeto.. Abraços

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software