package labsis.logistica.servlets;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import labsis.DataBase;
import labsis.financeiro.dao.DaoFornecedor;
import labsis.financeiro.model.Fornecedor;
import labsis.logistica.dao.DaoCotacao;
import labsis.logistica.dao.DaoPedidoCompra;
import labsis.logistica.dao.DaoProduto;
import labsis.logistica.dao.DaoTipo;
import labsis.logistica.model.Cotacao;
import labsis.logistica.model.PedidoCompra;
import labsis.logistica.model.Produto;
import labsis.vendas.dao.DaoPedidoVenda;
import labsis.vendas.model.PedidoVenda;
public class ControllerLogistica extends HttpServlet {
private void refreshProdutoFornecedor(HttpServletRequest request) throws SQLException {
DaoProduto daoProduto = new DaoProduto();
DaoFornecedor daoFornecedor = new DaoFornecedor();
request.setAttribute("listaFornecedor", daoFornecedor.listarfornecedores());
request.setAttribute("listaProduto", daoProduto.listaProdutos());
}
private void refreshPedidoVenda(HttpServletRequest request) throws ClassNotFoundException, SQLException {
DaoPedidoVenda daoPedidoVenda = new DaoPedidoVenda();
ArrayList<PedidoVenda> listaPedidoVendas;
listaPedidoVendas = daoPedidoVenda.listaPedidoVenda(1); //status == pendente
request.setAttribute("listaPedidoVendas", listaPedidoVendas);
}
private ArrayList<PedidoCompra> refreshPedidoCompra(HttpServletRequest request, int status) throws SQLException, ServletException, IOException {
DaoPedidoCompra daoPedidoCompra = new DaoPedidoCompra();
ArrayList<PedidoCompra> listaPedidoCompra;
listaPedidoCompra = daoPedidoCompra.listaPedidosCompra(status);
for(PedidoCompra pc : listaPedidoCompra) {
HashMap<Produto, Integer> produtos = pc.getProdutos();
}
request.setAttribute("listaPedidoCompras", listaPedidoCompra);
return listaPedidoCompra;
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher rd = null;
String jspName = null;
String message = "";
if (request.getParameter("comm") != null) {
jspName = request.getParameter("comm");
// Cadastro do Produto
if (jspName.equals("cadastroProduto")) {
try {
DaoTipo daoTipo = new DaoTipo();
request.setAttribute("tiposProduto", daoTipo.listaTipos());
String action = request.getParameter("action");
if( action != null && action.equals("salvar")) {
DaoProduto dProd = new DaoProduto();
Produto produto = new Produto();
// produto.setId(Integer.parseInt(request.getParameter("id")));
produto.setTipoProduto(Integer.parseInt(request.getParameter("tipoProduto")));
produto.setNome(request.getParameter("nome"));
produto.setDescricao(request.getParameter("descricao"));
produto.setFabricante(request.getParameter("fabricante"));
if (!request.getParameter("pesoLiq").equals(""))
produto.setPesoLiq(Float.parseFloat(request.getParameter("pesoLiq")));
if (!request.getParameter("dimensao").equals(""))
produto.setDimensao(Float.parseFloat(request.getParameter("dimensao")));
if (!request.getParameter("precoDeVenda").equals(""))
produto.setPrecoDeVenda(Float.parseFloat(request.getParameter("precoDeVenda")));
produto.setCor(request.getParameter("cor"));
produto.setTamanho(request.getParameter("tamanho"));
if (dProd.insereProduto(produto) > 0) {
message = "Produto: \"" + request.getParameter("nome") + "\" gravado";
}
else {
message = "Erro na inser��o";
}
}
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("message", message);
rd = request.getRequestDispatcher("/logistica/jsp/cad_produto.jsp");
rd.forward(request, response);
}
// Avaliar Pedido de Compra
if (jspName.equals("avaliarPedidoCompra")) {
try{
String pedidoId = request.getParameter("id");
String action = request.getParameter("action");
if (pedidoId == null) { //nenhum pedido foi selecionado
refreshPedidoCompra(request, 1);
rd = request.getRequestDispatcher("/logistica/jsp/avaliar_pedido_compra.jsp");
rd.forward(request, response);
}
else if(action.equals("aprovar")) {
DataBase db = DataBase.getDb();
Connection conn = db.getConnection();
CallableStatement ct = conn.prepareCall("exec updateStatusPedidoCompra @pedidoid=?, @statusid=?");
ct.setInt(1, Integer.valueOf(pedidoId));
ct.setInt(2, 2);
ct.executeUpdate();
message = "Pedido " + Integer.valueOf(pedidoId) + " aprovado";
request.setAttribute("message", message);
refreshPedidoCompra(request, 1);
rd = request.getRequestDispatcher("/logistica/jsp/avaliar_pedido_compra.jsp");
rd.forward(request, response);
}
else if(action.equals("rejeitar")) {
DataBase db = DataBase.getDb();
Connection conn = db.getConnection();
CallableStatement ct = conn.prepareCall("exec updateStatusPedidoCompra @pedidoid=?, @statusid=?");
ct.setInt(1, Integer.valueOf(pedidoId));
ct.setInt(2, 4);
ct.executeUpdate();
message = "Pedido " + Integer.valueOf(pedidoId) + " rejeitado";
request.setAttribute("message", message);
refreshPedidoCompra(request, 1);
rd = request.getRequestDispatcher("/logistica/jsp/avaliar_pedido_compra.jsp");
rd.forward(request, response);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// Avaliar Pedido de Venda
if (jspName.equals("avaliarPedidoVenda")) {
try {//iniciar a pagina com os pedidos pendentes
String pedidoId = request.getParameter("id");
String action = request.getParameter("action");
if(pedidoId == null) {
refreshPedidoVenda(request);
rd = request.getRequestDispatcher("/logistica/jsp/avaliar_pedido_venda.jsp");
rd.forward(request, response);
}
else if(action.equals("aprovar")) {
HashMap<Produto, Integer> produtos;
DaoProduto daoP = new DaoProduto();
PedidoVenda pv = new PedidoVenda();
pv.setId(Integer.valueOf(pedidoId));
pv.setStatuid(2);
DaoPedidoVenda daoPv = new DaoPedidoVenda();
daoPv.updateStatus(pv);
produtos = daoPv.listaProdutosVenda(Integer.valueOf(pedidoId));
for(Entry e : produtos.entrySet()) {
Produto p = (Produto)e.getKey();
daoP.subtractQuantidade(p.getId(), (Integer)e.getValue());
}
message = "Pedido " + Integer.valueOf(pedidoId) + " aprovado";
request.setAttribute("message", message);
refreshPedidoVenda(request);
rd = request.getRequestDispatcher("/logistica/jsp/avaliar_pedido_venda.jsp");
rd.forward(request, response);
}
else if(action.equals("rejeitar")) {
PedidoVenda pv = new PedidoVenda();
pv.setId(Integer.valueOf(pedidoId));
pv.setStatuid(4);
DaoPedidoVenda daoPv = new DaoPedidoVenda();
daoPv.updateStatus(pv);
message = "Pedido " + Integer.valueOf(pedidoId) + " rejeitado";
request.setAttribute("message", message);
refreshPedidoVenda(request);
rd = request.getRequestDispatcher("/logistica/jsp/avaliar_pedido_venda.jsp");
rd.forward(request, response);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
// Criar Cota��o
if (jspName.equals("cotacaoProduto")) {
if(request.getParameter("listarFornecedores") != null &&
request.getParameter("listarFornecedores").equals("true")) {
try {
DaoFornecedor daoFornecedor = new DaoFornecedor();
request.setAttribute("listaFornecedor", daoFornecedor.listarfornecedores());
} catch (SQLException e) {
e.printStackTrace();
}
rd = request.getRequestDispatcher("/logistica/jsp/criar_cotacao.jsp");
rd.forward(request, response);
}
else if(request.getParameter("listaProdutos") != null){
try {
DaoFornecedor daoFornecedor = new DaoFornecedor();
DaoCotacao daoCotacao = new DaoCotacao();
String cnpj = request.getParameter("fornecedor");
ArrayList<Fornecedor> fornecedores = daoFornecedor.listarfornecedores();
Fornecedor fornecedorDosProdutos = new Fornecedor();
for (Fornecedor fornecedor: fornecedores){
if (fornecedor.getCnpj().equals(cnpj))
fornecedorDosProdutos = fornecedor;
}
request.setAttribute("fornecedorDosProdutos", fornecedorDosProdutos);
request.setAttribute("listaCotacao", daoCotacao.listaCotacao(fornecedorDosProdutos.getCnpj()));
} catch (SQLException e) {
e.printStackTrace();
}
rd = request.getRequestDispatcher("/logistica/jsp/criar_cotacao.jsp");
rd.forward(request, response);
}
else if (request.getParameter("salvarCotacao") != null){
try {
DaoCotacao daoCotacao = new DaoCotacao();
Cotacao cotacao = new Cotacao();
java.util.Date dataAtual = new java.util.Date();
Date dateSql = new Date(dataAtual.getTime());
DaoProduto daoProduto = new DaoProduto();
ArrayList<Produto> produtos = (ArrayList<Produto>) daoProduto.listaProdutos();
for (int i = 0; i < produtos.size(); i++){
String precoDoProduto = request.getParameter("precoProduto"+produtos.get(i).getId());
if (precoDoProduto != null && !precoDoProduto.equals("")){
cotacao.setDataCotacao(dateSql);
cotacao.setFornecedorCNPJ((request.getParameter("fornecedorCnpj")));
cotacao.setProdutoId(produtos.get(i).getId());
cotacao.setPreco(Float.parseFloat(request.getParameter("precoProduto"+produtos.get(i).getId())));
daoCotacao.salvaCotacao(cotacao);
}
}
message = "Dados gravados";
request.setAttribute("message", message);
rd = request.getRequestDispatcher("/logistica/jsp/criar_cotacao.jsp");
rd.forward(request, response);
} catch (SQLException e) {
e.printStackTrace();
}
}
else {
rd = request.getRequestDispatcher("/logistica/jsp/cotacao.jsp");
rd.forward(request, response);
}
}
// Listar Cota��o
if (jspName.equals("listaCotacao")) {
String inicio = request.getParameter("inicio");
String fim = request.getParameter("fim");
try {
DaoCotacao daoCotacao = new DaoCotacao();
request.setAttribute("listaCotacao", daoCotacao.listaCotacao(inicio, fim));
DaoFornecedor daoFornecedor = new DaoFornecedor();
DaoProduto daoProduto = new DaoProduto();
request.setAttribute("listaFornecedor", daoFornecedor.listarfornecedores());
request.setAttribute("listaProduto", daoProduto.listaProdutos());
} catch (SQLException e) {
e.printStackTrace();
}
rd = request.getRequestDispatcher("/logistica/jsp/listar_cotacao.jsp");
rd.forward(request, response);
}
}
// Pedido de Compra
if (jspName.equals("pedidoCompra")){
try {
DaoFornecedor daoFornecedor = new DaoFornecedor();
request.setAttribute("listaFornecedor", daoFornecedor.listarfornecedores());
} catch (Exception e) {
e.printStackTrace();
}
if(request.getParameter("listaProdutos") != null){
try {
DaoFornecedor daoFornecedor = new DaoFornecedor();
String cnpj = request.getParameter("fornecedor");
ArrayList<Fornecedor> fornecedores = daoFornecedor.listarfornecedores();
Fornecedor fornecedorDosProdutos = new Fornecedor();
for (Fornecedor fornecedor: fornecedores){
if (fornecedor.getCnpj().equals(cnpj))
fornecedorDosProdutos = fornecedor;
}
request.setAttribute("fornecedorDosProdutos", fornecedorDosProdutos);
request.setAttribute("listaProdutosFornecedor", daoFornecedor.listaProdutosDeFornecedores(cnpj));
} catch (SQLException e) {
e.printStackTrace();
}
}
else if (request.getParameter("salvarPedido") != null){
try {
DaoPedidoCompra daoPedidoCompra = new DaoPedidoCompra();
DaoProduto daoProduto = new DaoProduto();
PedidoCompra pedidoCompra = new PedidoCompra();
ArrayList<Produto> produtos = (ArrayList<Produto>) daoProduto.listaProdutos();
HashMap<Produto, Integer> produtosDaCompra = new HashMap<Produto, Integer>();
pedidoCompra.setFornecedorCnpj(request.getParameter("fornecedorCnpj"));
pedidoCompra.setValorTotal(Float.parseFloat("0"));
java.util.Date dataAtual = new java.util.Date();
Date dateSql = new Date(dataAtual.getTime());
pedidoCompra.setDataCompra(dateSql);
pedidoCompra.setStatusPedido(1);
for (int i = 0; i < produtos.size(); i++){
String quantidadeProduto = request.getParameter("quantidadeProduto"+produtos.get(i).getId());
if (quantidadeProduto != null && !quantidadeProduto.equals("")){
int qtd = Integer.parseInt(quantidadeProduto);
Produto produto = new Produto();
produto.setId(produtos.get(i).getId());
produtosDaCompra.put(produto, qtd);
}
}
pedidoCompra.setProdutos(produtosDaCompra);
daoPedidoCompra.salvarPedidoDeCompra(pedidoCompra);
} catch (SQLException e) {
e.printStackTrace();
}
message = "Pedido de compra efetuado";
request.setAttribute("message", message);
}
rd = request.getRequestDispatcher("/logistica/jsp/pedido_compra.jsp");
rd.forward(request, response);
}
if (jspName.equals("produtoFornecedor")) {
try {
refreshProdutoFornecedor(request);
} catch (SQLException e) {
e.printStackTrace();
}
rd = request.getRequestDispatcher("/logistica/jsp/produto_fornecedor.jsp");
rd.forward(request, response);
}
// Salvar produto do fornecedor
if (jspName.equals("salvarProdutoFornecedor")) {
try {
DaoProduto daoProduto = new DaoProduto();
String fornecedorCNPJ = request.getParameter("fornecedor");
float produtoId = Float.parseFloat(request.getParameter("produto"));
daoProduto.salvarProdutoDoFornecedor(fornecedorCNPJ, produtoId);
message = "Dados gravados";
request.setAttribute("message", message);
refreshProdutoFornecedor(request);
rd = request.getRequestDispatcher("/logistica/jsp/produto_fornecedor.jsp");
rd.forward(request, response);
} catch (SQLException e) {
e.printStackTrace();
}
}
//Confirmar Recebimento do produto
if (jspName.equals("confirmarRecebimentoProduto")) {
String action = request.getParameter("action");
String produtoId = request.getParameter("id");
ArrayList<PedidoCompra> listaPedidoCompra;
if (produtoId == null) { //nenhum pedido foi selecionado
try{
listaPedidoCompra = refreshPedidoCompra(request, 2);
}
catch(SQLException e) {
e.printStackTrace();
}
}
else if(action != null && action.equals("aprovar")) {
int pId = Integer.parseInt(produtoId);
try{
DataBase db = DataBase.getDb();
Connection conn = db.getConnection();
listaPedidoCompra = refreshPedidoCompra(request, 2);
CallableStatement ct = conn.prepareCall("exec updateStatusPedidoCompra @pedidoid=?, @statusid=?");
ct.setInt(1, pId);
ct.setInt(2, 3);
ct.executeUpdate();
for(PedidoCompra pc : listaPedidoCompra) {
HashMap<Produto, Integer> listaProduto = pc.getProdutos();
for(Entry e : listaProduto.entrySet()) {
DaoProduto daoP = new DaoProduto();
Produto p = (Produto)e.getKey();
daoP.addQuantidade(p.getId(), (Integer)e.getValue());
}
}
listaPedidoCompra = refreshPedidoCompra(request, 2);
message = "Pedido de id: " + pId + " aprovado";
request.setAttribute("message", message);
}
catch(SQLException e) {
e.printStackTrace();
}
}
else if(action != null && action.equals("rejeitar")) {
int pId = Integer.parseInt(produtoId);
try{
DataBase db = DataBase.getDb();
Connection conn = db.getConnection();
CallableStatement ct = conn.prepareCall("exec updateStatusPedidoCompra @pedidoid=?, @statusid=?");
ct.setInt(1, pId);
ct.setInt(2, 6);
ct.executeUpdate();
listaPedidoCompra = refreshPedidoCompra(request, 2);
message = "Pedido de id: " + pId + " rejeitado";
request.setAttribute("message", message);
}
catch(SQLException e) {
e.printStackTrace();
}
}
rd = request.getRequestDispatcher("/logistica/jsp/confirmar_recebimento_produto.jsp");
rd.forward(request, response);
}
//Reavaliar Recebimento do produto
if (jspName.equals("reavaliarRecebimentoProduto")) {
String action = request.getParameter("action");
String produtoId = request.getParameter("id");
ArrayList<PedidoCompra> listaPedidoCompra;
if (produtoId == null) { //nenhum pedido foi selecionado
try{
listaPedidoCompra = refreshPedidoCompra(request, 6);
}
catch(SQLException e) {
e.printStackTrace();
}
}
else if(action != null && action.equals("aprovar")) {
int pId = Integer.parseInt(produtoId);
try{
DataBase db = DataBase.getDb();
Connection conn = db.getConnection();
listaPedidoCompra = refreshPedidoCompra(request, 6);
CallableStatement ct = conn.prepareCall("exec updateStatusPedidoCompra @pedidoid=?, @statusid=?");
ct.setInt(1, pId);
ct.setInt(2, 3);
ct.executeUpdate();
for(PedidoCompra pc : listaPedidoCompra) {
HashMap<Produto, Integer> listaProduto = pc.getProdutos();
for(Entry e : listaProduto.entrySet()) {
DaoProduto daoP = new DaoProduto();
Produto p = (Produto)e.getKey();
daoP.addQuantidade(p.getId(), (Integer)e.getValue());
}
}
listaPedidoCompra = refreshPedidoCompra(request, 6);
message = "Pedido de id: " + pId + " aprovado";
request.setAttribute("message", message);
}
catch(SQLException e) {
e.printStackTrace();
}
}
else if(action != null && action.equals("cancelar")) {
int pId = Integer.parseInt(produtoId);
try{
DataBase db = DataBase.getDb();
Connection conn = db.getConnection();
CallableStatement ct = conn.prepareCall("exec updateStatusPedidoCompra @pedidoid=?, @statusid=?");
ct.setInt(1, pId);
ct.setInt(2, 5);
ct.executeUpdate();
listaPedidoCompra = refreshPedidoCompra(request, 6);
message = "Pedido de id: " + pId + " cancelado";
request.setAttribute("message", message);
}
catch(SQLException e) {
e.printStackTrace();
}
}
rd = request.getRequestDispatcher("/logistica/jsp/reavaliar_recebimento_produto.jsp");
rd.forward(request, response);
}
}
}