Dar baixa no Estoque(Resolvido)

83 respostas
java
D

Ola tudo bom? gostaria de uma ajuda como faço para poder dar baixa no estoque
ja tenho o seguinte código

Produto pa = new Produto();
        VendaProduto vp = new VendaProduto();
        estoque = pa.getQuantidade() - vp.getQtde();
       JOptionPane.showMessageDialog(null,  
             "O estoque é "+estoque);

só que o estoque neste código só aparece zerado
estou usando a tabela produto e a tabela venda produto

alguem da uma luz?

83 Respostas

J

Você está inicializando o valor que o método “getQuantidade()”/“getQtde” retorna em algum lugar ?
Por que se não o estiver os mesmos inicializam com valor zero se for do tipo int é claro e se for um objeto é o valor null

D

é do tipo int eles nao retornam em lugar nenhum so que me explica melhor que nao entendi rsrs

D

na tela venda eu só digito a quantidade de venda produto sera que tenho que digitar a quantidade do produto essa eu pego de outra tela estou pensando aqui como poderia pegar esse valor da quantidade de produto do banco acho que vou ter que pegar para diminuir ? nao seria isso?

J

A desculpe às vezes eu me expresso mal rsrs

tipo o método get que vc está usando retorna o valor de um atributo. Se o atributo for do tipo primitivo, no caso do int, não for inicializado ele começa com um valor default, que no caso do int é zero. Vc pode inicializa-lo através do construtor ou de um método setter

J

Isso pegar o valor do banco e através desse valor setar ele no atributo quantidade do seu produto, utilizando construtor ou método setQuantidade(valorEstoque). Para isso vc pode utilizar o padrão DAO e uma classe para criar a conexão com o banco de dados

J

Se você quiser ser hard pesquisa como usar um framework ORM, como hibernate, ele auxilia muito e é bem eficaz

D
Produto pa = new Produto();
                VendaProduto vp = new VendaProduto();
                quantidade=Double.parseDouble(caixa7.getText()); 
                pa = 
						 gerenciador.find(Produto.class,pa.getCodproduto());
                estoque = pa.getQuantidade() - quantidade;
               JOptionPane.showMessageDialog(null,  
                     "O estoque é "+estoque);

fiz mais ou menos assim mas esta errado ainda rs

agora ele pega o valor digitado na quantidade rs

D

codigo do salvar venda esta assim

botao2.addActionListener(new ActionListener() {       
            public void actionPerformed(ActionEvent e) {       
				// TODO add your handling code here: 
            	VendaProduto v = new VendaProduto();

            	v.setValorrecebido(Double.parseDouble(caixa1.getText().replace(",", ".")));
    	    	v.setTotal(Double.parseDouble(caixa9.getText().replace(",", ".")));
    	    	res = v.getValorrecebido() - v.getTotal();
            do 
            	    if(v.getValorrecebido() > v.getTotal()) {
            	          //TODO calcular diferença
            	          //TODO apresentar troco
            	    	 JOptionPane.showMessageDialog(null,  
                                 "o Troco é: " + res);
            	    	  JOptionPane.showMessageDialog(null,  
                                  "Compra Finalizada com Sucesso");
            	        compraEncerrada = true;
            	      } else if(v.getValorrecebido() == v.getTotal()) {
            	    	  JOptionPane.showMessageDialog(null,  
                                  "Compra Finalizada com Sucesso");
            	           compraEncerrada = true;
            	    }else if(v.getValorrecebido() < v.getTotal()) {
            	  	    //TODO calcula diferença
            	  	    //TODO apresenta mensagem de valor faltante 
            	    	JOptionPane.showMessageDialog(null,  
                                "Falta o Valor de: " + res);
            	        v.setValorrecebido(Double.parseDouble(JOptionPane.showInputDialog(null, "Digite o Valor Faltante").replace(",", ".")));
            	        JOptionPane.showMessageDialog(null,  
                                "Venda Efetuada com Sucesso");
            	        compraEncerrada = true;
            	    }else {
            	    	JOptionPane.showMessageDialog(null,  
                                "A Compra Não Pode Ser Finalizada");
                      compraEncerrada = false;
            	 }
                  while(!compraEncerrada);
                for (int i = 0; i < modelo.getRowCount(); i ++ )
                {
                    VendaProduto it = new VendaProduto();
                    Produto p = new Produto();
                    p.setCodproduto(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                    it.setProduto(p);
                    it.setData(f.getSelectedDate());
                    Funcionario fu = (Funcionario) resultList.get(comboBox.getSelectedIndex());
                    it.setFuncionario(fu);
                    it.setNomevendedor((String) comboBox.getSelectedItem());
                    it.setDescricao(String.valueOf(modelo.getValueAt( i ,3)));
                    it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                    it.setValor(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,5))));
                    it.setTotal(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,6))));

                    gerenciador.getTransaction().begin();
                    gerenciador.persist(it);
                    gerenciador.getTransaction().commit();
                    
                   

                }
                Produto pa = new Produto();
                VendaProduto vp = new VendaProduto();
                quantidade=Double.parseDouble(caixa7.getText()); 
                pa = 
						 gerenciador.find(Produto.class,pa.getCodproduto());
                estoque = pa.getQuantidade() - quantidade;
               JOptionPane.showMessageDialog(null,  
                     "O estoque é "+estoque);
                    }

    });
D

dei mais uma modificada agora nao aparece nem a mensagem de estoque

Produto pa = new Produto();
VendaProduto vp = new VendaProduto();

vp.setQtde(Integer.parseInt(caixa7.getText().replace(",", ".")));
            pa = 
					 gerenciador.find(Produto.class,pa.getQuantidade());
            estoque = pa.getQuantidade() - vp.getQtde();
           JOptionPane.showMessageDialog(null,  
                 "O estoque é "+estoque);
J

Ah vc tá usando JPA legal…

Então geralmente a gente passa ou o id ou o objeto por essa função find

Tenta alterar isso…

D

Alterei pra isso

Produto pa = new Produto();
                VendaProduto vp = new VendaProduto();

                        	vp.setQtde(Integer.parseInt(caixa7.getText().replace(",", ".")));
                            pa = 
                					 gerenciador.find(Produto.class,pa.getCodBarras());
                            estoque = pa.getQuantidade() - vp.getQtde();
                           JOptionPane.showMessageDialog(null,  
                                 "O estoque é "+estoque);

deu esse erro aqui

Exception in thread AWT-EventQueue-0 java.lang.NumberFormatException: For input string: “”

at java.lang.NumberFormatException.forInputString(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at EfetuarVenda$3.actionPerformed(EfetuarVenda.java:350)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)
J

É assim msm rsrs

Essa exception tá dizendo que a String que vc passou, através do método getCodBarras(), não pode ser convertida para inteiro. E se vc analisar bem esse método está passando um valor “”, uma string vazia.

Isso é porque vc criou a variável pa e não atribuiu valor algum para seus atributos aí por sorte veio uma “”, geralmente vem null

Pega o id do produto que vc quer e coloca nesse find aí ele vai te trazer o registro do banco. Porém o id tem que ser válido

Vai dar td certo !

D

o quantidade eu digitei um numero pq esta falando que é string sera que vou ter que converter?

D

a variavel pa vem da instancia de produto

D

ele aponta como erro esse input string nesta linha

vp.setQtde(Integer.parseInt(caixa7.getText().replace(",", “.”)));

J

Sim

J

Mas vc usa ela para carregar ela rsrs

Vc está usando pa.getCodBarras() , mas vc acabou de instanciar ela e não setou nenhum valor com setCodBarras()

J

Vc não tá passando número com virgula não né, falo isso por causa do replace ele é desnecessário. Então naquela hora tava passando um valor de String vazia coloca essa linha antes dessa aqui de cima.

System.out.println(caixa7.getText().equals("")?“String está vazia”:“String tem alguma coisa”);

Se devolver “String está vazia” deve ter algum problema na hora de capturar o valor.

Nossa agora que eu vi, eu blefei com aquela Exception que você me passou, mas aquela linha é suspeita para dar erro :wink:

D

Alterei a queury mas nao adiantou mto
coloquei pra ver se aparecia o valor digitado nao foi

VendaProduto vp = new VendaProduto();
                          vp.setQtde(Integer.parseInt(caixa7.getText()));
                          System.out.println(caixa7.getText().equals(""));
                          System.out.println(caixa7);
                          pa = 
  								(Produto) gerenciador.createQuery(  
  				                "from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto", Busca.getText()).getSingleResult();
                            estoque = pa.getEstoque() - vp.getQtde();
                           JOptionPane.showMessageDialog(null,  
                                 "O estoque é "+estoque);
J

Vê o nome do campo certinho talvez esteja pegando de outro lugar ou modificando ele

mais o println que eu disse para vc era antes dessa linha:

Pq se der um erro nela o programa para por não conseguir converter

D

consegui aqui nao esta capturando valor é zero :confused: o resultado pior que é do venda produto que preciso da quantidade :confused:

D
0

Exception in thread AWT-EventQueue-0 java.lang.NumberFormatException: For input string: “”

at java.lang.NumberFormatException.forInputString(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at EfetuarVenda$3.actionPerformed(EfetuarVenda.java:351)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
D

duro por que sera que nao esta capturando?

D
VendaProduto vp = new VendaProduto();

System.out.println(vp.getQtde());

vp.setQtde(Integer.parseInt(caixa7.getText()));

pa =

(Produto) gerenciador.createQuery(

from Produto pr WHERE pr.codproduto = :codproduto).setParameter(codproduto, Busca.getText()).getSingleResult();

estoque = pa.getEstoque() - vp.getQtde();

JOptionPane.showMessageDialog(null,

"O estoque é "+estoque);
J

Aí vc me pegou rsrsrs

Mas o certo é vc colocar caixa7.getText() em ves de vp.getQtde(), mas se o erro é nessa linha ele está devolvendo uma String vazia msm

D

consegui pegar o valor digitado so que esta dando erro na query agora hahaha

System.out.println(String.valueOf(modelo.getValueAt( i ,4)));
                    it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                              pa = 
      								(Produto) gerenciador.createQuery(  
      				                "from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto", Busca.getText()).getSingleResult();
                                estoque = pa.getEstoque() - it.getQtde();
                               JOptionPane.showMessageDialog(null,  
                                     "O estoque é "+estoque);
D

erro

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at EfetuarVenda$3.actionPerformed(EfetuarVenda.java:350)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

at java.awt.EventQueue.access$500(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)
D

e o unico codigo que estou usando para dar baixa de estoque é esse
usando duas tabelas a tabela produto e venda produto

System.out.println(String.valueOf(modelo.getValueAt( i ,4)));

it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));

pa =

(Produto) gerenciador.createQuery(

from Produto pr WHERE pr.codproduto = :codproduto).setParameter(codproduto, Busca.getText()).getSingleResult();

estoque = pa.getEstoque() - it.getQtde();

JOptionPane.showMessageDialog(null,

"O estoque é "+estoque);
J

Então geralmente esse erro é que o objeto não foi instanciado

D
System.out.println(String.valueOf(modelo.getValueAt( i ,4)));
            it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
            p.setEstoque(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
            it.setProduto(p);
                     p = 
						(Produto) gerenciador.createQuery(  
			               "from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto", Busca.getText()).getSingleResult();
                   System.out.println(p);
                         estoque = p.getEstoque() - it.getQtde();

       		        gerenciador.getTransaction().begin();
       		        gerenciador.merge(p.getEstoque());
       		        gerenciador.getTransaction().commit();
       		        
       		     JOptionPane.showMessageDialog(null,  
                         "O estoque é "+p.getEstoque());
D

so que o erro é na query

p = 
						(Produto) gerenciador.createQuery(  
			               "from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto", Busca.getText()).getSingleResult();
D

Acredito que a logica é essa mas falta alguma coisa rsrs agora coloquei pra atualizar o merge alterar mas vou pesquisando se vc puder ir me ajudando rs

o produto foi instanciado :confused:

D

agradeco vc rs

J

Ah sim a lógica tá certa, mas sabe como é né rsrsrs

J

Olha quando eu não acho o erro eu vou mexendo até entender sei lá as vezes é uma coisa que a gente nem imagina.

tipo se eu fosse mexer aí eu ia converter Busca.getText() para um inteiro

setParameter(“codproduto”, Integer.parseInt(Busca.getText())).getSingleResult();

J

Ia me esquecendo. Tenta melhorar a estrutura do seu projeto. Adicionar Classes e mais métodos. Por exemplo, um método exibeEstoque(), outo método gerarVenda() e por aí vai, dessa maneira vc deixa td mais organizado e não condença td em um lugar só, que fica mais difícil.

@Dfodani manda um feedback se deu certo

D

sim eu te aviso nao criei um metodo ainda pq ainda tenho que organizar o sistema todo aprendi errado na faculdade enfim mas seria bom funcionar assim pra mim entender rs pq ai fica mais facil de criar o metodo

D

erro

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at EfetuarVenda$3.actionPerformed(EfetuarVenda.java:352)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

at java.awt.EventQueue.access$500(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

na linha

"from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto",Integer.parseInt(Busca.getText())).getSingleResult();
D

parece que ele nao esta fazendo essa busca no estoque e nem atualizando.

D

estou fazendo assim os valores digitados estou jogando em uma tabela e dessa tabela esta salvando
consegui pegar o valor digitado da quantidade que seria

it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));

o estoque nao esta nessa tabela

p.setEstoque(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));

esta na tabela produto so que inseri ai

ai estou buscando pelo produto e diminuindo da quantidade acho que nessa parte deve ter algo errado

p = 
						(Produto) gerenciador.createQuery(  
			               "from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto", Busca.getText()).getSingleResult();
                   System.out.println(p);
                         estoque = p.getEstoque() - it.getQtde();

aqui seria a atualização do estoque

gerenciador.getTransaction().begin();
       		        gerenciador.merge(p.getEstoque());
       		        gerenciador.getTransaction().commit();

e aqui qtos que tem

JOptionPane.showMessageDialog(null,  
                         "O estoque é "+p.getEstoque());
R

Dani, vc já é usuaria antiga e frequente no forum, quando for postar código, seleciona ele e clica em </>

image

D

ta bem vou tentar editar aqui

D

será que não deveria ter tipo uma comparação com banco da qtde digitada com o estoque? e não deixar efetuar a venda se for menor deixa e se for maior nao deixa se for igual deixar? e nesses ifs
ter o código de atualizar o banco após efetuar a venda só que de qualquer forma ia ter que fazer um select la ne?

D

acho que não estou sabendo fazer o select ou tem alguma coisa errada com ele rs

J

Olá ! Desculpe pela demorá

Vamos ver…

Acho que sua query não está muito correta faltou o ‘SELECT’:
“SELECT pr from Produto pr WHERE pr.codproduto = :codproduto”

E na parte de atualizar vc tem que passar o objeto e não o valor do estoque apenas:
gerenciador.merge(p);

J

Você disse que o estoque não está sendo mostrado, blz!
Porém, você deseja fazer uma verificação para que a quantidade comprada seja sempre menor ou igual ao estoque. Vc poderia ter um objeto desse produto que carrega-se todos os valores dele. Você pode também criar um campo “estoque” na tabela e pegar o valor nessa, para que o campo estoque não seje mostrado pode setar a largura dele como sendo ‘0’.

seujtable.getColumnModel().getColumn(suacoluna).setMinWidth(0);
seujtable.getColumnModel().getColumn(suacoluna).setMaxWidth(0);

Desse jeito sua coluna fica ‘escondida’, mas vc pode pegar o valor dela como qualquer outra coluna. Eu fiz isso no meu projeto final rsrssr, não queria mostrar o ‘id’ só que precisava dele rsrsrs

D

minha parte do salvar venda é essa só que to pensando onde posso fazer essa verificação aqui no meio

botao2.addActionListener(new ActionListener() {       
            public void actionPerformed(ActionEvent e) {       
				// TODO add your handling code here: 
            	VendaProduto v = new VendaProduto();

            	v.setValorrecebido(Double.parseDouble(caixa1.getText().replace(",", ".")));
    	    	v.setTotal(Double.parseDouble(caixa9.getText().replace(",", ".")));
    	    	res = v.getValorrecebido() - v.getTotal();
            do 
            	    if(v.getValorrecebido() > v.getTotal()) {
            	          //TODO calcular diferença
            	          //TODO apresentar troco
            	    	 JOptionPane.showMessageDialog(null,  
                                 "o Troco é: " + res);
            	    	  JOptionPane.showMessageDialog(null,  
                                  "Compra Finalizada com Sucesso");
            	        compraEncerrada = true;
            	      } else if(v.getValorrecebido() == v.getTotal()) {
            	    	  JOptionPane.showMessageDialog(null,  
                                  "Compra Finalizada com Sucesso");
            	           compraEncerrada = true;
            	    }else if(v.getValorrecebido() < v.getTotal()) {
            	  	    //TODO calcula diferença
            	  	    //TODO apresenta mensagem de valor faltante 
            	    	JOptionPane.showMessageDialog(null,  
                                "Falta o Valor de: " + res);
            	        v.setValorrecebido(Double.parseDouble(JOptionPane.showInputDialog(null, "Digite o Valor Faltante").replace(",", ".")));
            	        JOptionPane.showMessageDialog(null,  
                                "Venda Efetuada com Sucesso");
            	        compraEncerrada = true;
            	    }else {
            	    	JOptionPane.showMessageDialog(null,  
                                "A Compra Não Pode Ser Finalizada");
                      compraEncerrada = false;
            	 }
                  while(!compraEncerrada);
                for (int i = 0; i < modelo.getRowCount(); i ++ )
                {
                    VendaProduto it = new VendaProduto();
                    Produto p = new Produto();
                    p.setCodproduto(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                    it.setProduto(p);
                    it.setData(f.getSelectedDate());
                    Funcionario fu = (Funcionario) resultList.get(comboBox.getSelectedIndex());
                    it.setFuncionario(fu);
                    it.setNomevendedor((String) comboBox.getSelectedItem());
                    it.setDescricao(String.valueOf(modelo.getValueAt( i ,3)));
                    it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                    it.setValor(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,5))));
                    it.setTotal(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,6))));

                    gerenciador.getTransaction().begin();
                    gerenciador.persist(it);
                    gerenciador.getTransaction().commit();
                    
                    System.out.println(String.valueOf(modelo.getValueAt( i ,4)));
                    it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                    p.setEstoque(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                    it.setProduto(p);
                             p = 
      							(Produto) gerenciador.createQuery(  
      				               "from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto",Integer.parseInt(Busca.getText())).getSingleResult();
                           System.out.println(p);
                                 estoque = p.getEstoque() - it.getQtde();

               		       gerenciador.getTransaction().begin();
               		       gerenciador.merge(p.getEstoque());
               		       gerenciador.getTransaction().commit();
               		        
               		     JOptionPane.showMessageDialog(null,  
                                 "O estoque é "+p.getEstoque());

                }
                    }

    });
J

Imagino que antes do “do While”

D

alterei o que voce me disse deu pau de nvoo rsrs

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at EfetuarVenda$3.actionPerformed(EfetuarVenda.java:352)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)


código esta assim

botao2.addActionListener(new ActionListener() {       
            public void actionPerformed(ActionEvent e) {       
				// TODO add your handling code here: 
            	VendaProduto v = new VendaProduto();

            	v.setValorrecebido(Double.parseDouble(caixa1.getText().replace(",", ".")));
    	    	v.setTotal(Double.parseDouble(caixa9.getText().replace(",", ".")));
    	    	res = v.getValorrecebido() - v.getTotal();
            do 
            	    if(v.getValorrecebido() > v.getTotal()) {
            	          //TODO calcular diferença
            	          //TODO apresentar troco
            	    	 JOptionPane.showMessageDialog(null,  
                                 "o Troco é: " + res);
            	    	  JOptionPane.showMessageDialog(null,  
                                  "Compra Finalizada com Sucesso");
            	        compraEncerrada = true;
            	      } else if(v.getValorrecebido() == v.getTotal()) {
            	    	  JOptionPane.showMessageDialog(null,  
                                  "Compra Finalizada com Sucesso");
            	           compraEncerrada = true;
            	    }else if(v.getValorrecebido() < v.getTotal()) {
            	  	    //TODO calcula diferença
            	  	    //TODO apresenta mensagem de valor faltante 
            	    	JOptionPane.showMessageDialog(null,  
                                "Falta o Valor de: " + res);
            	        v.setValorrecebido(Double.parseDouble(JOptionPane.showInputDialog(null, "Digite o Valor Faltante").replace(",", ".")));
            	        JOptionPane.showMessageDialog(null,  
                                "Venda Efetuada com Sucesso");
            	        compraEncerrada = true;
            	    }else {
            	    	JOptionPane.showMessageDialog(null,  
                                "A Compra Não Pode Ser Finalizada");
                      compraEncerrada = false;
            	 }
                  while(!compraEncerrada);
                for (int i = 0; i < modelo.getRowCount(); i ++ )
                {
                    VendaProduto it = new VendaProduto();
                    Produto p = new Produto();
                    p.setCodproduto(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                    it.setProduto(p);
                    it.setData(f.getSelectedDate());
                    Funcionario fu = (Funcionario) resultList.get(comboBox.getSelectedIndex());
                    it.setFuncionario(fu);
                    it.setNomevendedor((String) comboBox.getSelectedItem());
                    it.setDescricao(String.valueOf(modelo.getValueAt( i ,3)));
                    it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                    it.setValor(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,5))));
                    it.setTotal(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,6))));

                    gerenciador.getTransaction().begin();
                    gerenciador.persist(it);
                    gerenciador.getTransaction().commit();
                    
                    System.out.println(String.valueOf(modelo.getValueAt( i ,4)));
                    it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                    p.setEstoque(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                    it.setProduto(p);
                             p = 
      							(Produto) gerenciador.createQuery(  
      									"SELECT pr from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto",Integer.parseInt(Busca.getText())).getSingleResult();
                           System.out.println(p);
                                 estoque = p.getEstoque() - it.getQtde();

               		       gerenciador.getTransaction().begin();
               		       gerenciador.merge(p);
               		       gerenciador.getTransaction().commit();
               		        
               		     JOptionPane.showMessageDialog(null,  
                                 "O estoque é "+p.getEstoque());

                }
                    }

    });
D

ainda aponta o erro na query pra variar rs

D

sera q tem que buscar pelo estoque em vez do código?

J

Então esse erro acontece pq vc está tentando fazer algo com um dado nulo, ou seja um objeto nulo ou não instanciado. e está proximo a linha 352

D

a parte do estoque é só essa , a variável p é que instanciei o produto tipo

Produto p = new Produto();um campo de la da tabela produto

nao sei o que esta nulo ai :confused:

System.out.println(String.valueOf(modelo.getValueAt( i ,4)));
                    it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                    p.setEstoque(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                    it.setProduto(p);
                             p = 
      							(Produto) gerenciador.createQuery(  
      									"SELECT pr from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto",Integer.parseInt(Busca.getText())).getSingleResult();
                           System.out.println(p);
                                 estoque = p.getEstoque() - it.getQtde();

               		       gerenciador.getTransaction().begin();
               		       gerenciador.merge(p);
               		       gerenciador.getTransaction().commit();
               		        
               		     JOptionPane.showMessageDialog(null,  
                                 "O estoque é "+p.getEstoque());
J

Então os únicos que podem ser nulos são ‘Busca.getText()’ e o próprio gerenciador

D

p.setEstoque(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
it.setProduto§;

sera q tem erro nessa linha? pq na tabela zero é o codproduto ne?

D

acho que o busca é nulo sim pq so esta como variavel local

J

Então vc só está setando um valor que não é o correspondente da sua entidade no banco, mas acho que isso não iria gerar uma Exception

D

eu apaguei o busca e mesmo assim deu pau

p =
(Produto) gerenciador.createQuery(
“SELECT pr from Produto pr WHERE pr.codproduto = :codproduto”)
;

deu erro na linha do gerenciador mas como o gerenciador seria nulo se ele salva a venda nao sei mais hahah

D

sera que teria outro modo de fazer query nesse caso rs

J

Mas sabe se o busca fosse nulo o Integer.parseInt() iria devolver uma outra Exception, essa que não seria posssível converter nulo para int

J

p =
(Produto) gerenciador.createQuery(
“Select pr from Produto pr WHERE pr.codproduto = :codproduto”)
.setParameter(“codproduto”,Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0)))).getSingleResult();

Tenta desse jeito

J

Ochi verdade rsrs

D
fiz  a query de outro modo funcionou mass ele agora esta apagando o produto rsrsrs ai no banco aparece zero o produto rs pq sera
System.out.println(String.valueOf(modelo.getValueAt( i ,4)));

it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));

p.setEstoque(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));

it.setProduto§;

System.out.println§;

Query consulta =

gerenciador.createQuery(SELECT pr from Produto pr WHERE pr.codproduto = :codproduto);
System.out.println(p);
                                 estoque = p.getEstoque() - it.getQtde();

               		       gerenciador.getTransaction().begin();
               		       gerenciador.merge(p);
               		       gerenciador.getTransaction().commit();
               		        
               		     JOptionPane.showMessageDialog(null,  
                                 "O estoque é "+p.getEstoque());
D

ta zerando a quantidade kkkkk ele mostra o estoque nao da baixa mostra o que tem e zera o banco rs

J

É que vc pegou a query mas não fez nada com ela. Vc deveria fazer ela retornar o objeto Produto. Tá vindo quantidade 0 para o banco pq o atributo quantidade não foi setado na variável p

D

esta apagando o produto

D

vou alterar aqui

J
consulta.setParameter(codproduto,Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
p=(Produto)consulta.list.get(0);

Dessa maneira vc carrega tds os dados do produto e quando passar pelo persist vai acabar salvando e não apagando os campos que não estão setados

D

p=(Produto)consulta.list.get(0);

aqui no caso tenho que criar uma lista ne?

D

até criei mas ainda continua pagando os campos nao setados

System.out.println(String.valueOf(modelo.getValueAt( i ,4)));
                    it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                    p.setEstoque(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                    it.setProduto(p);
                    System.out.println(p);
                    List <Produto> list = null;
                    final List resultList;
                    Query consulta = 
            				gerenciador.createQuery("SELECT pr from Produto pr WHERE pr.codproduto = :codproduto");
                             consulta.setParameter("codproduto",Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                             resultList= consulta.getResultList();
                 			list = resultList;

                           System.out.println(p);
                                 estoque = p.getEstoque() - it.getQtde();

               		       gerenciador.getTransaction().begin();
               		       gerenciador.merge(p);
               		       gerenciador.getTransaction().commit();
               		        
               		     JOptionPane.showMessageDialog(null,  
                                 "O estoque é "+p.getEstoque());

                }
                    }

    });
J

Desculpe é esse método o certo:
p=(Produto)consulta.getResultList().get(0);

É que eu tava sem IDE aqui :smiley:

Mas a ideia é pegar o peimeiro valor

J

Pega o primeiro valor dessa lista e seta em p
p=(Produto)resultList.get(0);

D

Assim passou sem apagar só que o problema é que não da baixa no estoque a quantidade e estoque continuam iguais :confused:

System.out.println(String.valueOf(modelo.getValueAt( i ,4)));
                        it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                        p.setEstoque(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                        it.setProduto(p);
                        System.out.println(p);
                       // List <Produto> list = null;
                       // final List resultList;
                        Query consulta = 
                				gerenciador.createQuery("SELECT pr from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto",Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                        p=(Produto)consulta.getResultList().get(0);
                               //  resultList= consulta.getResultList();
                     			//list = resultList;

                               System.out.println(p);
                                     estoque = p.getEstoque() - it.getQtde();

                   		       gerenciador.getTransaction().begin();
                   		       gerenciador.merge(p);
                   		       gerenciador.getTransaction().commit();
                   		        
                   		     JOptionPane.showMessageDialog(null,  
                                     "O estoque é "+p.getEstoque());
J

O pior ja passou rsrs

É só alterar o valor de estoque
p.setEstoque(estoque)

coloca isso depois da linha que vc tira a diferença entre estoque e quantidade e antes de começar a transação com o banco

N

Boa noite, estou com dúvida no exercício bem parecido, só que ai é no Jcombox, pode me ajudar ai ?

J

@Nivaldo_Reis2019 Cara a gente faz o que pode rsrs

Mas acho melhor criar um outro tópico pois aqui tá bem cheio e tb para ficar bem organizado
Aí coloca o código e o erro da saída

D

top deu baixa agora só preciso fazer as verificaçoes rsssss obrigada viu

N

Obrigado ai por responder, eu tenho o tópico postado, se der, me ajude lá , fazendo favor.

D

vou postar o código final aqui pra ajudar o pessoal

que precisa rs

System.out.println(String.valueOf(modelo.getValueAt( i ,4)));
                    it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                    p.setEstoque(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                    it.setProduto(p);
                    System.out.println(p);

                    Query consulta = 
            				gerenciador.createQuery("SELECT pr from Produto pr WHERE pr.codproduto = :codproduto").setParameter("codproduto",Integer.parseInt(String.valueOf(modelo.getValueAt( i ,0))));
                            p=(Produto)consulta.getResultList().get(0);


                           System.out.println(p);
                                 estoque = p.getEstoque() - it.getQtde();
                                 p.setEstoque((int) estoque);

               		       gerenciador.getTransaction().begin();
               		       gerenciador.merge(p);
               		       gerenciador.getTransaction().commit();
               		        
               		     JOptionPane.showMessageDialog(null,  
                                 "O estoque é "+p.getEstoque());
J

Falei que no fim ia dar td certo :smiley:

É muito gostoso quando o código funciona bem !

D

é verdade agora vou apanhar para fazer as verificações acho rsrs ja tentei aqui antes do do igual voce me disse nao deu certo rs só que depoois me liguei que aquele codigo todo esta dentro de um for…se pah as verificações tem que ficar dentro dele tbm

J

Essa é a ideia. Eu faria métodos que isolem as regras de validação e que depois sejam chamados em contextos apropiados.

D

é melhor rs

Criado 7 de junho de 2020
Ultima resposta 11 de jun. de 2020
Respostas 83
Participantes 4