Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Luiz Felipe do Vale

Como fazer para dar baixa no estoque ao gerar venda?

Recommended Posts

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);

    }

 

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@TwistedSoul Boa noite.

 

Ainda estou com o problema da baixa do estoque. Tentei fazer de vários modos a baixa.

Uma delas pro trigger mas nao deu muito certo kkk.

Tu acha que conseguiria me dar uma ajudinha nessa parte?

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×