package labsis.vendas.dao;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import labsis.DataBase;
import labsis.logistica.dao.DaoProduto;
import labsis.logistica.model.Produto;
import labsis.vendas.model.PedidoVenda;
public class DaoPedidoVenda {
private Connection conn;
public DaoPedidoVenda() throws ClassNotFoundException, SQLException {
DataBase db = DataBase.getDb();
Class.forName(db.getDriver());
conn = DriverManager.getConnection(db.getUrl(), db.getUser(), db
.getPassword());
}
public String novoPedido(String cpf, Float valorTotal,
HashMap<Produto, Integer> produtos) throws SQLException {
CallableStatement c = conn.prepareCall("listarCliente null,?");
c.setString(1, cpf);
ResultSet r = c.executeQuery();
if (!r.next())//apeas valida se o cliente existe
return "CPF inv�lido!";
c = conn.prepareCall("exec InserirPedidoVenda ?, ?, ? ");
c.setString(1, cpf);
c.setTimestamp(2,new Timestamp(new java.util.Date().getTime()) );
c.setFloat(3, valorTotal);
c.executeUpdate();
c = conn.prepareCall("exec listarPedidosVenda ?, null ");
c.setString(1, cpf);
r = c.executeQuery();
Integer pedidoid = null;
if (r.next())
pedidoid = r.getInt(1);
Iterator<Entry<Produto, Integer>> it = produtos.entrySet().iterator();
c = conn.prepareCall("inserirPedidoVendaItem ?, ?, ?");
while (it.hasNext()) {
Entry<Produto, Integer> e = it.next();
c.setInt(1, pedidoid);
c.setInt(2, e.getKey().getId());
c.setInt(3, e.getValue());
c.executeUpdate();
}
return "Pedido Realizado com Sucesso!";
}
public List<PedidoVenda> listarPedidos(String cpf) throws SQLException {
CallableStatement consultaPedido = null;
List resultado = new ArrayList();
try {
consultaPedido = conn.prepareCall("exec listarPedidosVenda @CPF = ?");
consultaPedido.setString(1, cpf);
ResultSet result = consultaPedido.executeQuery();
PedidoVenda pv = null;
while (result.next()) {
pv = new PedidoVenda();
pv.setId(result.getInt("id"));
pv.setCpf(result.getString("clienteCpf"));
pv.setDataVenda(Date.valueOf(result.getString("dataVenda")
.substring(0, 10)));
pv.setValorTotal(Float.parseFloat(result
.getString("valorTotal")));
pv.setStatus(result.getString("statusid"));
resultado.add(pv);
}
} catch (SQLException e) {
e.printStackTrace();
}
return resultado;
}
public HashMap<Produto, Integer> listaProdutosVenda(int idVenda) throws SQLException {
CallableStatement ct1 = conn.prepareCall("exec listarProdutosVenda ? ");
ct1.setInt(1, idVenda);
ResultSet rs = ct1.executeQuery();
HashMap<Produto, Integer> produtos = new HashMap<Produto, Integer>();
while(rs.next()) {
Produto p = new Produto();
p.setId(rs.getInt(1));
p.setTipoProduto(rs.getInt(2));
p.setNome(rs.getString(3));
p.setDescricao(rs.getString(4));
p.setFabricante(rs.getString(5));
p.setPesoLiq(rs.getInt(6));
p.setDimensao(rs.getFloat(7));
p.setPrecoDeVenda(rs.getFloat(8));
p.setQuantidade(rs.getInt(9));
p.setCor(rs.getString(10));
p.setTamanho(rs.getString(11));
produtos.put(p, rs.getInt(12));
}
return produtos;
}
public ArrayList<PedidoVenda> listaPedidoVenda(int statusId) throws SQLException {
CallableStatement ct = conn.prepareCall("exec listarPedidosVenda @statusid=?");
ct.setInt(1, statusId);
ResultSet rs = ct.executeQuery();
ArrayList<PedidoVenda> listaPedidoVenda = new ArrayList<PedidoVenda>();
while(rs.next()) {
PedidoVenda pv = new PedidoVenda();
pv.setId(rs.getInt("id"));
pv.setCpf(rs.getString("clienteCpf"));
pv.setDataVenda(Date.valueOf(rs.getString("dataVenda").substring(0, 10)));
pv.setProdutos(this.listaProdutosVenda(rs.getInt("id")));
pv.setStatuid(rs.getInt("statusid"));
pv.setValorTotal(rs.getFloat("valorTotal"));
listaPedidoVenda.add(pv);
}
return listaPedidoVenda;
}
//fun��o que atualiza o status de um pedido de venda p
public boolean updateStatus(PedidoVenda p)throws SQLException{
//prepara a proc para se executada
CallableStatement ct, ct2 = null;
ct= conn.prepareCall("exec updateStatusPedidoVenda @pedidoid=?, @statusid=?");
ct.setInt(1, p.getId());
ct.setInt(2, p.getStatuid());
// dao de inser��o no contas a paga e receber
if(ct.executeUpdate() > 0){
return true;
}
return false;
}
}