package com.jdenner.dao; import com.jdenner.to.Compra; import com.jdenner.to.ItemCompra; import com.jdenner.to.enums.Situacao; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; /** * Classe de acesso a dados da compra * * @author Juliano */ public class CompraDAO implements IDAO<Compra> { @Override public void inserir(Compra compra) throws Exception { Conexao c = new Conexao(); String sql = "INSERT INTO TBCOMPRA (CODIGOFORNECEDOR, DATACOMPRA, VALORTOTAL, SITUACAO) VALUES (?, ?, ?, ?)"; PreparedStatement ps = c.getConexao().prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); ps.setInt(1, compra.getFornecedor().getCodigo()); ps.setDate(2, new Date(compra.getDataCompra().getTime())); ps.setDouble(3, compra.getValorTotal()); ps.setInt(4, compra.getSituacao().getId()); ps.execute(); ResultSet rs = ps.getGeneratedKeys(); rs.next(); int idCompra = rs.getInt(1); for (ItemCompra iv : compra.getItens()) { sql = "INSERT INTO TBITEMCOMPRA (CODIGOPRODUTO, CODIGOCOMPRA, QUANTIDADE, VALORUNITARIO) VALUES (?, ?, ?, ?)"; ps = c.getConexao().prepareStatement(sql); ps.setInt(1, iv.getProduto().getCodigo()); ps.setInt(2, idCompra); ps.setInt(3, iv.getQuantidade()); ps.setDouble(4, iv.getValorUnitario()); ps.execute(); if (compra.getSituacao() == Situacao.FINALIZADA) { ProdutoDAO produtoDAO = new ProdutoDAO(); produtoDAO.entradaEstoque(c, iv.getProduto().getCodigo(), iv.getQuantidade()); } } c.confirmar(); } @Override public void alterar(Compra compra) throws Exception { Conexao c = new Conexao(); String sql = "UPDATE TBCOMPRA SET CODIGOFORNECEDOR=?, DATACOMPRA=?, VALORTOTAL=?, SITUACAO=? WHERE CODIGO=?"; PreparedStatement ps = c.getConexao().prepareStatement(sql); ps.setInt(1, compra.getFornecedor().getCodigo()); ps.setDate(2, new Date(compra.getDataCompra().getTime())); ps.setDouble(3, compra.getValorTotal()); ps.setInt(4, compra.getSituacao().getId()); ps.setInt(5, compra.getCodigo()); ps.execute(); for (ItemCompra iv : compra.getItensRemover()) { sql = "DELETE FROM TBITEMCOMPRA WHERE CODIGO=?"; ps = c.getConexao().prepareStatement(sql); ps.setInt(1, iv.getCodigo()); ps.execute(); } for (ItemCompra iv : compra.getItens()) { if (iv.getCodigo() == 0) { sql = "INSERT INTO TBITEMCOMPRA (CODIGOPRODUTO, CODIGOCOMPRA, QUANTIDADE, VALORUNITARIO) VALUES (?, ?, ?, ?)"; ps = c.getConexao().prepareStatement(sql); ps.setInt(1, iv.getProduto().getCodigo()); ps.setInt(2, iv.getCompra().getCodigo()); ps.setInt(3, iv.getQuantidade()); ps.setDouble(4, iv.getValorUnitario()); ps.execute(); } else { sql = "UPDATE TBITEMCOMPRA SET CODIGOPRODUTO=?, CODIGOCOMPRA=?, QUANTIDADE=?, VALORUNITARIO=? WHERE CODIGO=?"; ps = c.getConexao().prepareStatement(sql); ps.setInt(1, iv.getProduto().getCodigo()); ps.setInt(2, iv.getCompra().getCodigo()); ps.setInt(3, iv.getQuantidade()); ps.setDouble(4, iv.getValorUnitario()); ps.setInt(5, iv.getCodigo()); ps.execute(); } if (compra.getSituacao() == Situacao.FINALIZADA) { ProdutoDAO produtoDAO = new ProdutoDAO(); produtoDAO.entradaEstoque(c, iv.getProduto().getCodigo(), iv.getQuantidade()); } } c.confirmar(); } @Override public void excluir(Compra compra) throws Exception { Conexao c = new Conexao(); String sql = "UPDATE TBCOMPRA SET CODIGOFORNECEDOR=?, DATACOMPRA=?, VALORTOTAL=?, SITUACAO=? WHERE CODIGO=?"; PreparedStatement ps = c.getConexao().prepareStatement(sql); ps.setInt(1, compra.getFornecedor().getCodigo()); ps.setDate(2, new Date(compra.getDataCompra().getTime())); ps.setDouble(3, compra.getValorTotal()); ps.setInt(4, Situacao.CANCELADA.getId()); ps.setInt(5, compra.getCodigo()); ps.execute(); c.confirmar(); } @Override public ArrayList<Compra> listarTodos() throws Exception { Conexao c = new Conexao(); FornecedorDAO fornecedorDAO = new FornecedorDAO(); ProdutoDAO produtoDAO = new ProdutoDAO(); String sql = "SELECT * FROM TBCOMPRA ORDER BY DATACOMPRA DESC"; PreparedStatement ps = c.getConexao().prepareStatement(sql); ResultSet rs = ps.executeQuery(); ArrayList listaCompras = new ArrayList(); while (rs.next()) { Compra compra = new Compra(); compra.setCodigo(rs.getInt("CODIGO")); compra.setFornecedor(fornecedorDAO.recuperar(rs.getInt("CODIGOFORNECEDOR"))); compra.setDataCompra(rs.getDate("DATACOMPRA")); compra.setSituacao(rs.getInt("SITUACAO")); String sqlItem = "SELECT * FROM TBITEMCOMPRA WHERE CODIGOCOMPRA=?"; PreparedStatement psItem = c.getConexao().prepareStatement(sqlItem); psItem.setInt(1, compra.getCodigo()); ResultSet rsItem = psItem.executeQuery(); while (rsItem.next()) { ItemCompra iv = new ItemCompra(); iv.setCodigo(rsItem.getInt("CODIGO")); iv.setProduto(produtoDAO.recuperar(rsItem.getInt("CODIGOPRODUTO"))); iv.setCompra(compra); iv.setQuantidade(rsItem.getInt("QUANTIDADE")); iv.setValorUnitario(rsItem.getDouble("VALORUNITARIO")); compra.addItem(iv); } listaCompras.add(compra); } return listaCompras; } @Override public Compra recuperar(int codigo) throws Exception { Conexao c = new Conexao(); FornecedorDAO fornecedorDAO = new FornecedorDAO(); ProdutoDAO produtoDAO = new ProdutoDAO(); String sql = "SELECT * FROM TBCOMPRA ORDER BY DATACOMPRA DESC"; PreparedStatement ps = c.getConexao().prepareStatement(sql); ResultSet rs = ps.executeQuery(); Compra compra = new Compra(); if (rs.next()) { compra.setCodigo(rs.getInt("CODIGO")); compra.setFornecedor(fornecedorDAO.recuperar(rs.getInt("CODIGOFORNECEDOR"))); compra.setDataCompra(rs.getDate("DATACOMPRA")); compra.setSituacao(rs.getInt("SITUACAO")); String sqlItem = "SELECT * FROM TBITEMCOMPRA WHERE CODIGOCOMPRA=?"; PreparedStatement psItem = c.getConexao().prepareStatement(sqlItem); psItem.setInt(1, compra.getCodigo()); ResultSet rsItem = psItem.executeQuery(); while (rsItem.next()) { ItemCompra iv = new ItemCompra(); iv.setCodigo(rsItem.getInt("CODIGO")); iv.setProduto(produtoDAO.recuperar(rsItem.getInt("CODIGOPRODUTO"))); iv.setCompra(compra); iv.setQuantidade(rsItem.getInt("QUANTIDADE")); iv.setValorUnitario(rsItem.getDouble("VALORUNITARIO")); compra.addItem(iv); } } return compra; } }