Ir ao conteúdo
  • Cadastre-se

Como fazer para dar baixa no estoque ao gerar venda?


Posts recomendados

Boa Noite.

Galera estou com problema em um trabalho que preciso entregar para nota na faculdade.

Estou fazendo um sistema de venda de livros em Java web mas não sei fazer a parte de baixa no estoque quando gero a venda.

tentei criar uma variável que pegasse a quantidade que tem no estoque e tirasse da quantidade digita na tela de Itensvenda mas toda hora da problema no código ou erro na compilação..

Procurei sobre triggers mas e muito complexo e ainda não tive essa matéria na facul então fiquei meio perdido.

Se alguém conseguisse me ajudar ficaria mt grato

Deixarei alguns exemplos.

Parte de venda dos Itens

public class ItensVendaDao {
	  private Connection connection;

	    public ItensVendaDao() {
	        this.connection = new ConnectionFactory().getConnetion();
	    }
	    public void novoItemVenda(ItensVendaModel itensVendaModel) throws SQLException {
	        String sql = "insert into itensvenda (procodigo, vencodigo, venquantidade) values (?,?,?)";
	        PreparedStatement ps = null;
	        try {
	            ps = connection.prepareStatement(sql);
	            ps.setInt(1, itensVendaModel.getProcodigo());
	            ps.setInt(2, itensVendaModel.getVencodigo());
	            ps.setInt(3, itensVendaModel.getVenquantidade());
	            //ps.setDouble(4, itensVendaModel.getVentotal());
	            System.out.println("sql novo registro = "+ps.toString());
	            ps.execute();
	        } catch (SQLException ex) {
	            Logger.getLogger(ItensVendaDao.class.getName()).log(Level.SEVERE, null, ex);
	        } finally {
	            //connection.close();
	            //ps.close();
	        }
	    }
	    
	    public List getListaItensVenda(int codigoVenda) throws SQLException {
	        String sql = "select * from itensvenda, produtos where vencodigo = "+ codigoVenda + " and itensvenda.procodigo = produtos.procodigo ";
	        PreparedStatement ps = null;
	        ResultSet resultSet = null;
	        List<ItensVendaModel> listaItensVenda = new ArrayList<ItensVendaModel>();
	        try {
	            ps = connection.prepareStatement(sql);
	            resultSet = ps.executeQuery();
	            while (resultSet.next()) {
	               ItensVendaModel itensVendaMovel = new ItensVendaModel();
	               itensVendaMovel.setVentotal(resultSet.getDouble("ventotal"));
	               itensVendaMovel.setProcodigo(resultSet.getInt("procodigo"));
	               itensVendaMovel.setVencodigo(resultSet.getInt("vencodigo"));
	               itensVendaMovel.setVenquantidade(resultSet.getInt("venquantidade"));
	               itensVendaMovel.setProdescricao(resultSet.getString("prodescricao"));
	               itensVendaMovel.setPrecounitario(resultSet.getDouble("proprecovenda"));
	               listaItensVenda.add(itensVendaMovel);
	            }
	            return listaItensVenda;
	        } catch (SQLException ex) {
	            Logger.getLogger(ItensVendaDao.class.getName()).log(Level.SEVERE, null, ex);
	        } finally {
	            connection.close();
	            ps.close();
	            resultSet.close();
	        }
	        return null;
	    }

}

Outra Parte de inserção de Produtos

 

public void alteraProduto(ProdutoModel produtoModel) throws SQLException {
    String sql = "UPDATE produtos SET catcodigo=?,prodescricao=?,proqtdestoque=?,proprecocusto=?,properclucro=?,proprecovenda=?,prodatacadastro=?  where procodigo=?";
    PreparedStatement ps = null;
    try {
        ps = connection.prepareStatement(sql);
        ps.setInt(1, produtoModel.getCatCodigo());
        ps.setString(2, produtoModel.getProDescricao());
        ps.setInt(3, produtoModel.getProQtdEstoque());
        ps.setDouble(4, produtoModel.getProPrecoCusto());
        ps.setInt(5, produtoModel.getProPercLucro());
        ps.setDouble(6, produtoModel.getProPrecoVenda());
        ps.setDate(7, new java.sql.Date(produtoModel.getProDataCadastro().getTime()));
        ps.setInt(8, produtoModel.getProCodigo());
        System.out.println("sql alterar= "+ps.toString());
        ps.execute();
    } catch (SQLException ex) {
        Logger.getLogger(ClienteDao.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        connection.close();
        ps.close();
    }
}

public void novoProduto(ProdutoModel produtoModel) throws SQLException {
    String sql = "insert into produtos (catcodigo,prodescricao,proqtdestoque,proprecocusto,properclucro,proprecovenda,prodatacadastro) values (?,?,?,?,?,?,?)";
    PreparedStatement ps = null;
    try {
        ps = connection.prepareStatement(sql);
        ps.setInt(1, produtoModel.getCatCodigo());
        ps.setString(2, produtoModel.getProDescricao());
        ps.setInt(3, produtoModel.getProQtdEstoque());
        ps.setDouble(4, produtoModel.getProPrecoCusto());
        ps.setInt(5, produtoModel.getProPercLucro());
        ps.setDouble(6, produtoModel.getProPrecoVenda());
        ps.setDate(7, new java.sql.Date(produtoModel.getProDataCadastro().getTime()));  
        System.out.println("sql = "+ps.toString());
        ps.execute();
    } catch (SQLException ex) {
        Logger.getLogger(ClienteDao.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        connection.close();
        ps.close();
    }
}

A parte da Venda.java

} else if (acao.equals("Novo")) {
            vendaDao.novaVenda(vendaModel);
            request.setAttribute("sessaoTotalRegistroVenda",  vendaDao.totalRegistros());
            rd = request.getRequestDispatcher("/venda.jsp");
        } 
        else if (acao.equals("novoItemVenda")) {
            itensVendaDao.novoItemVenda(itensVendaModel);
            List listaItensVenda = itensVendaDao.getListaItensVenda(Integer.parseInt(codigoVenda));
            
            ### quando FIZESSE A VENDA DO PRODUTO já EXECUTASSE UM COMANDO PARA RETIRAR DO ESTOQUE DE PRODUTOS ###
            
            
            request.setAttribute("sessaolistaItensVenda", listaItensVenda);
            //request.setAttribute("sessaoTotalRegistroVenda",  vendaDao.totalRegistros());
            
            rd = request.getRequestDispatcher("/venda.jsp");
        } 

        rd.forward(request, response);

    }

 

Link para o comentário
Compartilhar em outros sites

@Luiz Felipe do Vale Boa noite. 

 

Não sei se já resolveu isso, mas a maneira mais simples de fazer é, ao gravar a venda, apenas faça um método que remove do estoque, alterando a quantidade diretamente no banco.

 

NUNCA remova um item do estoque enquanto a venda é feita. E se o cliente resolve cancelar a venda antes de concluir? Você teria o trabalho de recolocar em estoque.

 

Para facilitar as coisas, execute a chamada de remoção de estoque no método em que você grava a venda, passando a lista de itens como parâmetro.

Link para o comentário
Compartilhar em outros sites

@Luiz Felipe do Vale porque fazer via trigger? Não tem sentido.

 

Inicie uma transaction

 

- Finalize a venda e registre os itens da venda em banco

SE retornou um OK

- Atualize os movimentos de caixa efetuando a chamada de outro método que executa suas gravações em banco

SE retornou OK

- Faça a chamada do método que executa a gravação em banco para atualizar a quantidade de itens em estoque.

TUDO deu certo? Commit.

ALGO deu errado? Rollback.

 

Faça as operações independentes. Faça seu software modularizado. Faça uma model especializada em cada função do seu software. Se tentar fazer tudo de uma vez no mesmo lugar, a manutenção começa a ficar onerosa e o código extremamente complicado de expandir/refatorar/corrigir.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...