Olá , Boa Tarde
Eu estou com a seguinte dúvida,
Eu tenho duas tabelas : Pedido de Compra e outra Compra.
Em Tela de Compra, tenho um ComboBox que pega o Pedido de Compra, eu gostaria que quando eu selecionasse esse Pedido de Compra, preenchesse a Tabela de Compra com os Itens do Pedido de Compra, pois não faz sentido eu ter um Pedido de Compra e Compra com Itens diferentes.
Minha dúvida seria, como transferir os Itens do Pedido de Compra para Compra?
Eu não tenho nenhuma noção de como fazer isso, qualquer coisa eu vou postando aos poucos os códigos.
Tabela de Itens Pedido de Compra:
Seria a mesma coisa da Tabela Itens Compra, mudando pouca coisa como :
private TableItensPedidoDeCompra ipc = new TableItensPedidoDeCompra();
@Override
public void setValor(Object valor) {
ipc.setDados((List<ItensPedidoDeCompra>) valor);
}
Table de Itens Pedido de Compra
Seria a mesma coisa da Table Itens Compra, mudando pouca coisa como :
private List<ItensPedidoDeCompra> dados = new ArrayList();
Tabela de Itens Compra
public class TabelaItensCompra extends JPanel implements MeuComponente {
private JScrollPane jsp = new JScrollPane();
private TableItensCompra ic = new TableItensCompra();
private Icon iconIncluir = new ImageIcon("src/imagens/add.png");
private Icon iconExcluir = new ImageIcon("src/imagens/remove.png");
private JTable tabela = new JTable(ic) {
@Override
public Component prepareRenderer(TableCellRenderer renderer,
int linha, int coluna) {
Component c = super.prepareRenderer(renderer, linha, coluna);
if (linha % 2 == 0) {
c.setBackground(Color.LIGHT_GRAY);
} else {
c.setBackground(getBackground());
}
if (isCellSelected(linha, coluna)) {
c.setBackground(new Color(27, 215, 252));
}
return c;
}
};
private JButton botaoAdicionar = new JButton(iconIncluir);
private JButton botaoRemover = new JButton(iconExcluir);
public TabelaItensCompra() {
jsp.setViewportView(tabela);
jsp.setPreferredSize(new Dimension(600,200));
add(jsp);
add(botaoAdicionar);
add(botaoRemover);
botaoAdicionar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
// if(ic.getRowCount() >= 0) {
//if(ic.getRowCount() > 0) {
ic.adicionaLinha();
tabela.addRowSelectionInterval(ic.getRowCount() - 1,ic.getRowCount() - 1);
// }
}
});
botaoRemover.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
if (tabela.getSelectedRow() >= 0) {
if (ic.getRowCount() > 1) {
ic.removeLinha(tabela.getSelectedRow());
tabela.addRowSelectionInterval(ic.getRowCount() - 1,ic.getRowCount() - 1);
}
} else {
JOptionPane.showMessageDialog(null,
"Selecione uma linha para poder excluí-la.");
}
}
});
tabela.getColumnModel().getColumn(1).setCellRenderer(new RenderizadorInteiro());
tabela.getColumnModel().getColumn(2).setCellRenderer(new RenderizadorMonetario());
tabela.getColumnModel().getColumn(3).setCellRenderer(new RenderizadorMonetario());
tabela.getColumnModel().getColumn(4).setCellRenderer(new RenderizadorMonetario());
}
@Override
public boolean eObrigatorio() {
return true;
}
@Override
public boolean eValido() {
return true;
}
@Override
public boolean eVazio() {
return ic.getRowCount() == 0;
}
@Override
public void limpar() {
ic.limparDados();
tabela.addRowSelectionInterval(0, 0);
}
@Override
public void habilitar(boolean status) {
tabela.setEnabled(status);
botaoAdicionar.setEnabled(status);
botaoRemover.setEnabled(status);
}
@Override
public Object getValor() {
return ic.getDados();
}
@Override
public void setValor(Object valor) {
ic.setDados((List<ItensCompra>) valor);
}
@Override
public String getNome() {
return "Itens";
}
public TableItensCompra getTableItensCompra() {
return ic;
}
public int getLinhaSelecionada() {
return tabela.getSelectedRow();
}
public JTable getTabela() {
return tabela;
}
}
Table Itens Compra
public class TableItensCompra extends AbstractTableModel {
private List<ItensCompra> dados = new ArrayList();
private String[] colunas = {"Materia-Prima", "Quantidade",
"Valor Unitário", "Desconto", "Valor Total"};
public TableItensCompra() {
dados.add(new ItensCompra());
}
@Override
public int getRowCount() {
return dados.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public String getColumnName(int coluna) {
return colunas[coluna];
}
public void adicionaLinha() {
dados.add(new ItensCompra());
fireTableDataChanged();
}
public void removeLinha(int linha) {
dados.remove(linha);
fireTableDataChanged();
}
public void limparDados() {
dados = new ArrayList();
dados.add(new ItensCompra());
;
fireTableDataChanged();
}
public List<ItensCompra> getDados() {
return dados;
}
public void setDados(List<ItensCompra> dados) {
this.dados = dados;
fireTableDataChanged();
}
@Override
public Object getValueAt(int linha, int coluna) {
switch (coluna) {
case 0: return dados.get(linha).getMateriaprima().getNome();
case 1: return dados.get(linha).getQuantidade();
case 2: return dados.get(linha).getValorunitario();
case 3: return dados.get(linha).getDesconto();
case 4: return dados.get(linha).getValortotal();
default: JOptionPane.showMessageDialog(null,
"Coluna não tratada em TableItensCompra (getValueAt).");
return null;
}
}
@Override
public void setValueAt(Object valor, int linha, int coluna) {
switch (coluna) {
case 0: dados.get(linha).getMateriaprima().setId((Integer) valor);
case 1: dados.get(linha).setQuantidade((Integer) valor);
case 2: dados.get(linha).setValorunitario((BigDecimal) valor);
case 3: dados.get(linha).setDesconto((BigDecimal) valor);
case 4: dados.get(linha).setValortotal((BigDecimal) valor);
default: JOptionPane.showMessageDialog(null,
"Coluna não tratada em TableItensCompra (setValueAt).");
}
}
public ItensCompra getItensCompra(int linha) {
return dados.get(linha);
}
public void alteraMateriaPrima(Object valor, int linha) {
MateriaPrima materiaprima = dados.get(linha).getMateriaprima();
DaoMateriaPrima daoMateriaPrima = new DaoMateriaPrima(materiaprima);
materiaprima.setId((int) valor);
daoMateriaPrima.consultar();
fireTableRowsUpdated(linha, linha);
}
public void alteraValorUnitario(Object valor, int linha) {
dados.get(linha).setValorunitario((BigDecimal) valor);
fireTableRowsUpdated(linha, linha);
}
public void alteraValorTotal(Object valor, int linha) {
dados.get(linha).setValortotal((BigDecimal) valor);
fireTableRowsUpdated(linha, linha);
}
public MateriaPrima getMateriaPrima(int linha) {
return dados.get(linha).getMateriaprima();
}
public void alteraQuantidade(Object valor, int linha) {
dados.get(linha).setQuantidade((int) valor);
fireTableRowsUpdated(linha, linha);
}
public void alteraDesconto(Object valor, int linha) {
dados.get(linha).setDesconto((BigDecimal) valor);
fireTableRowsUpdated(linha, linha);
}
}
Tela de Compra
public class TelaCompra extends TelaCadastro {
public static TelaCompra tela;
public static TelaCadastroLote tela2;
private JPanel painel = new JPanel();
public Compra compra = new Compra();
public DaoCompra daoCompra = new DaoCompra(compra);
public ItensCompra itensCompra = new ItensCompra();
private JButton botaoLote = new JButton("Lote");
public MeuCampoInteiro campoCodigo = new MeuCampoInteiro(5, true, false, "Código");
public MeuCampoData campoData = new MeuCampoData(10, true, "Data");
public MeuCampoMonetario campoValortotal = new MeuCampoMonetario(15, false, false, true, "Valor Total");
public MeuCampoMonetario campoDesconto = new MeuCampoMonetario(15, false, true, true, "Valor Desconto");
public MeuCampoMonetario campoValorliquido = new MeuCampoMonetario(15, false, false, true, "Valor Líquido");
public MeuCampoComboBox campoStatus = new MeuCampoComboBox(true, true, new String[][] {{"CA", "Compra Aberta"}, {"CF", "Compra Fechada"}}, "Status");
public MeuCampoDBComboBox campoFornecedor = new MeuCampoDBComboBox(TelaCadastroFornecedor.class, DaoFornecedor.SQL_COMBOBOX,true, true, "Fornecedor");
public MeuCampoDBComboBox campoCondicaoDePagamento = new MeuCampoDBComboBox(TelaCadastroCondicaoDePagamento.class, DaoCondicaoDePagamento.SQL_COMBOBOX,false, true, "Condição de Pagamento");
public MeuCampoDBComboBox campoPedidoDeCompra = new MeuCampoDBComboBox(TelaPedidoDeCompra.class, DaoPedidoDeCompra.SQL_COMBOBOX, false, true, "Pedido De Compra");
public MeuCampoDBComboBox campoItensMateriaPrima = new MeuCampoDBComboBox(TelaCadastroMateriaPrima.class,DaoMateriaPrima.SQL_COMBOBOX, true, true, "Matéria-Prima");
public MeuCampoInteiro campoQuantidadeItens = new MeuCampoInteiro(5, true, true, "Quantidade");
public MeuCampoMonetario campoValorunitarioItens = new MeuCampoMonetario(15, false, false, true, "Valor unitário");
public MeuCampoMonetario campoDescontoItens = new MeuCampoMonetario(15, false, true, true, "Desconto");
public MeuCampoMonetario campoValortotalItens = new MeuCampoMonetario(15, false, false, true, "Valor total");
public TabelaItensCompra tabelaItensCompra = new TabelaItensCompra();
public static TelaCadastro getTela() {
if (tela == null) {
tela = new TelaCompra();
TelaSistema.meuJDesktopPane.add(tela);
tela.addInternalFrameListener(new InternalFrameAdapter() {
@Override
public void internalFrameClosed(InternalFrameEvent e) {
TelaSistema.meuJDesktopPane.remove(tela);
tela = null;
}
});
}
TelaSistema.meuJDesktopPane.moveToFront(tela);
return tela;
}
public TelaCompra() {
super("Cadastro de Compra ");
adicionarComponente(1, 1, 1, 1, campoCodigo,ESQUERDA);
adicionarComponente(2, 1, 1, 1, campoData,ESQUERDA);
adicionarComponente(5, 1, 1, 1, campoFornecedor,ESQUERDA);
adicionarComponente(7, 1, 1, 1, campoValortotal,ESQUERDA);
adicionarComponente(8, 1, 1, 1, campoDesconto,ESQUERDA);
adicionarComponente(9, 1, 1, 1, campoValorliquido,ESQUERDA);
adicionarComponente(11, 1, 1, 1, campoStatus,ESQUERDA);
adicionarComponente(10, 1, 1, 1, campoCondicaoDePagamento,ESQUERDA);
adicionarComponente(4, 1, 1, 1, campoPedidoDeCompra,ESQUERDA);
adicionarComponente(13, 1, 2, 2, tabelaItensCompra,ESQUERDA);
adicionarComponente(4, 3, 1, 1, campoItensMateriaPrima,ESQUERDA);
adicionarComponente(7, 3, 1, 1, campoQuantidadeItens,ESQUERDA);
adicionarComponente(8, 3, 1, 1, campoValorunitarioItens,ESQUERDA);
adicionarComponente(9, 3, 1, 1, campoDescontoItens,ESQUERDA);
adicionarComponente(10, 3, 1, 1, campoValortotalItens, ESQUERDA);
add(botaoLote).setEnabled(false);
habilitarCampos(false);
pack();
adicionaListeners();
campoItensMateriaPrima.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent ie) {
if (ie.getStateChange() == ItemEvent.SELECTED) {
MateriaPrima materiaprima = new MateriaPrima();
DaoMateriaPrima daoMateriaPrima = new DaoMateriaPrima(materiaprima);
materiaprima.setId((int) campoItensMateriaPrima.getValor());
daoMateriaPrima.consultar();
botaoLote.setEnabled(materiaprima.isElote());
}
}
});
botaoLote.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TelaCadastroLote telaLote = new TelaCadastroLote();
getDesktopPane().add(telaLote);
telaLote.moveToFront();
}
});
}
public void setPersistencia() {
compra.setId((int) campoCodigo.getValor());
compra.setData((Date) campoData.getValor());
compra.setValortotal(campoValortotal.getValor());
compra.setDesconto(campoDesconto.getValor());
compra.setValorliquido(campoValorliquido.getValor());
compra.setStatus((String) campoStatus.getValor());
compra.getFornecedor().setId((int) campoFornecedor.getValor());
compra.getCondicaodepagamento().setId((int) campoCondicaoDePagamento.getValor());
compra.getPedidodecompra().setId((int) campoPedidoDeCompra.getValor());
compra.setItensCompra(((TableItensCompra)tabelaItensCompra.getTabela().getModel()).getDados());
}
public void getPersistencia() {
campoCodigo.setValor(compra.getId());
campoData.setValor(compra.getData());
campoValortotal.setValor(compra.getValortotal());
campoDesconto.setValor(compra.getDesconto());
campoValorliquido.setValor(compra.getValorliquido());
campoStatus.setValor(compra.getStatus());
campoFornecedor.setValor(compra.getFornecedor().getId());
campoCondicaoDePagamento.setValor(compra.getCondicaodepagamento().getId());
campoPedidoDeCompra.setValor(compra.getPedidodecompra().getId());
((TableItensCompra) tabelaItensCompra.getTabela().getModel()).setDados(compra.getItensCompra());
}
@Override
public void incluir() {
super.incluir();
campoData.setValor(new Date());
}
@Override
public boolean incluirBD() {
setPersistencia();
return daoCompra.incluir();
}
@Override
public boolean alterarBD() {
setPersistencia();
return daoCompra.alterar();
}
@Override
public boolean excluirBD() {
setPersistencia();
return daoCompra.excluir();
}
@Override
public void consultarBD(int pk) {
super.consultarBD(pk);
compra.setId(pk);
daoCompra.consultar();
getPersistencia();
}
@Override
public void consultar() {
FiltroPesquisa[] filtros = new FiltroPesquisa[]{
new FiltroPesquisa("CÓDIGO", "ID", Integer.class),
new FiltroPesquisa("DATA", "DATA", String.class),
new FiltroPesquisa("FORNECEDOR", "PDC_FORNECEDOR", String.class),
new FiltroPesquisa("CONDIÇÃO DE PAGAMENTO", "PDC_CONDICAODEPAGAMENTO", String.class),
};
new TelaConsulta("Pesquisa de Compra",
daoCompra.SQL_PESQUISAR,
new String[]{"CÓDIGO", "DATA", "VALOR LÍQUIDO", "STATUS", "FORNECEDOR", "CONDIÇÃO DE PAGAMENTO"}, filtros, this);
}
@Override
public void preencherDados(int pk) {
compra.setId(pk);
daoCompra.consultar();
getPersistencia();
super.preencherDados(pk);
}
public void adicionaListeners() {
campoItensMateriaPrima.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent ie) {
if (ie.getStateChange() == ItemEvent.SELECTED) {
tabelaItensCompra.getTableItensCompra().alteraMateriaPrima(campoItensMateriaPrima.getValor(), tabelaItensCompra.getLinhaSelecionada());
MateriaPrima materiaprima = tabelaItensCompra.getTableItensCompra().getMateriaPrima(tabelaItensCompra.getLinhaSelecionada());
campoValorunitarioItens.setValor(materiaprima.getValorunitario()); //*checar
//campoQuantidadeItens.setValor(materiaprima.getQuantidade()); //*
atualizaCamposTotal(null);
}
}
});
campoPedidoDeCompra.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent ie) {
if (ie.getStateChange() == ItemEvent.SELECTED) {
}
}
});
campoQuantidadeItens.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent fe) {
tabelaItensCompra.getTableItensCompra().alteraQuantidade(campoQuantidadeItens.getValor(), tabelaItensCompra.getLinhaSelecionada());
campoQuantidadeItens.setBackground(Color.WHITE);
atualizaCamposTotal(null);
}
@Override
public void focusGained(FocusEvent fe) {
campoQuantidadeItens.setBackground(new Color(27, 215, 252));
}
});
campoValorunitarioItens.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent fe) {
tabelaItensCompra.getTableItensCompra().alteraValorUnitario(campoValorunitarioItens.getValor(), tabelaItensCompra.getLinhaSelecionada());
campoValorunitarioItens.setBackground(Color.WHITE);
atualizaCamposTotal(null);
}
@Override
public void focusGained(FocusEvent fe) {
campoValorunitarioItens.setBackground(new Color(27, 215, 252));
}
});
campoDescontoItens.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent fe) {
tabelaItensCompra.getTableItensCompra().alteraDesconto(campoDescontoItens.getValor(), tabelaItensCompra.getLinhaSelecionada());
campoDescontoItens.setBackground(Color.WHITE);
atualizaCamposTotal(campoDescontoItens);
}
@Override
public void focusGained(FocusEvent fe) {
campoDescontoItens.setBackground(new Color(27, 215, 252));
}
});
campoDesconto.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent fe) {
campoDesconto.setBackground(Color.WHITE);
atualizaCamposTotal(campoDesconto);
}
@Override
public void focusGained(FocusEvent fe) {
campoDesconto.setBackground(new Color(27, 215, 252));
}
});
tabelaItensCompra.getTabela().getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent lse) {
if (!lse.getValueIsAdjusting() && tabelaItensCompra.getTabela().getSelectedRow() >= 0) {
ItensCompra itensCompra = tabelaItensCompra.getTableItensCompra().getItensCompra(tabelaItensCompra.getTabela().getSelectedRow());
campoItensMateriaPrima.setValor(itensCompra.getMateriaprima().getId());
campoQuantidadeItens.setValor(itensCompra.getQuantidade());
campoValorunitarioItens.setValor(itensCompra.getValorunitario());
campoDescontoItens.setValor(itensCompra.getDesconto());
campoValortotalItens.setValor(itensCompra.getValortotal());
}
}
});
}
public void atualizaCamposTotal(JComponent quemChamou) {
BigDecimal quantidadeItem = BigDecimal.valueOf(new Double((int) campoQuantidadeItens.getValor()));
BigDecimal valorUnitarioItem = (BigDecimal) campoValorunitarioItens.getValor();
BigDecimal descontoItem = (BigDecimal) campoDescontoItens.getValor();
BigDecimal valorTotalItem = quantidadeItem.multiply(valorUnitarioItem.subtract(descontoItem));
if (quemChamou != null && valorTotalItem.compareTo(BigDecimal.ZERO) == -1) {
JOptionPane.showMessageDialog(null, "Valor negativo, verifique!!!");
quemChamou.requestFocus();
} else {
campoValortotalItens.setValor(valorTotalItem);
tabelaItensCompra.getTableItensCompra().alteraValorUnitario(campoValorunitarioItens.getValor(), tabelaItensCompra.getLinhaSelecionada());
tabelaItensCompra.getTableItensCompra().alteraValorTotal(campoValortotalItens.getValor(), tabelaItensCompra.getLinhaSelecionada());
}
List<ItensCompra> itens = tabelaItensCompra.getTableItensCompra().getDados();
BigDecimal valorTotal = BigDecimal.ZERO;
for (int i = 0; i < itens.size(); i++) {
valorTotal = valorTotal.add(itens.get(i).getValortotal());
}
campoValortotal.setValor(valorTotal);
campoValorliquido.setValor(valorTotal.subtract((BigDecimal) campoDesconto.getValor()));
}
@Override
public boolean verificarCampos() {
// if (super.verificarCampos() == false) { //Esta linha faz exatamente o mesmo do que a linha abaixo.
if (!super.verificarCampos()) {
return false;
}
List<ItensCompra> itens = ((TableItensCompra) tabelaItensCompra.getTabela().getModel()).getDados();
for (int i = 0; i < itens.size(); i++) {
if (itens.get(i).getMateriaprima().getId() == 0) {
JOptionPane.showMessageDialog(null,
"Exite(m) produto(s) não selecionado(s).");
return false;
}
if (itens.get(i).getQuantidade() <= 0) {
JOptionPane.showMessageDialog(null,
"Existe(m) produto(s) com quantidade inválida(s).");
return false;
}
if (itens.get(i).getValorunitario().compareTo(BigDecimal.ZERO) <= 0 ) {
JOptionPane.showMessageDialog(null,
"Existe(m) produto(s) com valor unitário invalido(s).");
return false;
}
}
return true;
}
@Override
public void habilitarBotoes() {
super.habilitarBotoes();
if (campoStatus != null && campoStatus.getValor().equals("CF")) {
jbAlterar.setEnabled(false);
jbExcluir.setEnabled(false);
}
}
}
Desde já Agradeço.