Array
(
)

Soma Dinamica não esta somando

PHP
Mario Costa
   - 26 ago 2014

Pessoal estou com um problema já algum tempo, ja coloquei de varias formas e diversos forums inclusive nesse aqui,
tenho a resenha de um sistema de PDV mal programado, e eu fiquei com a "bronca" do programa já que o antigo programador saiu, eu tive que ficar responsável pela manutenção do sistema, o caso é que eu sou novato em desenvolvimento...
Consigo me virar com sistemas de baixa complexidade e desenvolvimentos baixos, mas o sistema utiliza de ajax para poder estar fazendo suas buscas, além de que antes era um problema que eu consegui resolver trocando de script para uma outra busca dinâmica. O caso é que essa busca não soma os valores automaticamente quando eu os trago para serem exibidos

Deem uma olhada no código.
Esse é o código para poder trazer os itens e assim passar os valores quando eu o seleciono,
o problema na real é que ele so faz a soma quando o input perde o foco, o que não poderia estar acontecendo, se não ele insere vazio no banco de dados.
#Código<?php
if(!empty($_GET["valor"])){
$valor=$_GET['valor'];
//selecionar os valores do banco
$sql = mysql_query("SELECT * FROM produtos WHERE descricao LIKE '".$valor."%' OR gtin_ean LIKE '".$valor."%' LIMIT 5");
//while para trazer todos os valores do banco
while ($noticias = mysql_fetch_array($sql)) {
echo ("<div class='exibir_res'>");
echo ('<a href="javascript:func();" onclick=\"passar_1()\" onclick="exibirConteudo('.$noticias['codigo'].');">'.$noticias['descricao'].'</a><br />');
echo ("</div>");
}
}
?>

codigo para poder exibir os itens quando selecionado
#Código<?php
//conexao com o banco
#######################
include('conn.php');
#######################
// Variaveis
$id = $_GET['id'];
$qnt = '1';
#######################

$sql = mysql_query("SELECT * FROM produtos WHERE codigo = '".$id."'");
$prod = mysql_fetch_array($sql);
#######################
echo('<tr>');
echo('<td><div style="width:165px; float:left;">Item<input type="text" value="'.$prod['descricao'].'" name="item_1" style="width:150px "></div></td>');
echo('<td><div style="width:113px; float:left;">Quantidade<input type="text" onclick="passar_1();" onblur="calcula_1();" value="'.$qnt.'" name="qnt_1" id="qnt_1" style="width:100px "></div></td>');
echo('<td><div style="width:113px; float:left;">Preço<input type="text" onclick="passar_1();" onblur="calcula_1();" value="'.$prod['preco_v'].'" name="vlr_1" id="vlr_1" style="width:100px "></div></td>');
echo('<td><div style="width:113px; float:left;">Valor Total<input type="text" value="'.number_format($qnt*$prod['preco_v'],2,",",".").'" onclick="passar_1();" onblur="calcula_1();" name="vlritem_1" id="vlritem_1" style="width:100px "></div></td>');
echo('</tr>');
?>

Código que faz a "[DES]graça" do Ajax acontecer
#Códigovar req;
function buscarNoticias(valor) {
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
else if(window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}

var url = "pdv_busca.php?valor="+valor;

req.open("Get", url, true);

req.onreadystatechange = function() {
if(req.readyState == 1) {
document.getElementById('resultado').innerHTML = 'Buscando Produtos...';
}
if(req.readyState == 4 && req.status == 200) {
// Resposta retornada pelo busca.php
var resposta = req.responseText;
// Abaixo colocamos a(s) resposta(s) na div resultado
document.getElementById('resultado').innerHTML = resposta;

}
}
req.send(null);
}
//função para exibir noticias
function exibirConteudo(id) {
// Verificando Browser
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
else if(window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}

// Arquivo PHP juntamento com a id da noticia (método GET)
var url = "pdv_exibir.php?id="+id;
// Chamada do método open para processar a requisição
req.open("Get", url, true);
// Quando o objeto recebe o retorno, chamamos a seguinte função;
req.onreadystatechange = function() {
// Exibe a mensagem "Aguarde..." enquanto carrega
if(req.readyState == 1) {
document.getElementById('conteudo').innerHTML = 'Aguarde...';
}
// Verifica se o Ajax realizou todas as operações corretamente
if(req.readyState == 4 && req.status == 200) {
// Resposta retornada pelo exibir.php
var resposta = req.responseText;
// Abaixo colocamos a resposta na div conteudo
document.getElementById('conteudo').innerHTML = resposta;
document.getElementById('resultado').innerHTML = "";

}
}
req.send(null);
}

Burg
   - 27 ago 2014

Boa tarde amigo, da onde vem esses caras aqui >>> "number_format($qnt*$prod['preco_v'],2,",",".")." a quantidade esta definida como 1 >>> "$qnt = '1';"

seria pelo ajax a alteração da quantidade ?

Ronaldo Lanhellas
   - 27 ago 2014

Bom, pelo que você disse na frase abaixo:

"o problema na real é que ele so faz a soma quando o input perde o foco, o que não poderia estar acontecendo"

Imagino que o problema não esteja no código mostrado acima pois você mesmo disse que a soma está sendo feito. O problema é que o evento está errado, procure mudar para onFocus em vez de onBlur. O onBlur executa o código quando o componente perde o foco, então faça o contrário, execute quando ele "ganha" o foco (onFocus)

Mario Costa
   - 28 ago 2014

Burg, O "number_format($qnt*$prod['preco_v'],2,",",".").", é utilizado para mostrar em formato de moeda no input, para ser exibido como por exemplo : 3,50

A alteração de quantidade é feita direta no input de quantidade, e o resultado é calculado pelo javascript.

Ronaldo, o que eu gostaria que o código fizesse era somar sem ter que perder ou ganhar o foco, ele somar ao apertar clica no botão de escolher o produto, mandando o valor ao total.

Burg
   - 28 ago 2014

Beleza se eu entendi o case, e o seguinte >>> escolhe os produtos e a quantidade o sistema gera e mostra e calculo, depois pega cada calculo e realizar o total.

o teu problema e que esse total não gera ?

se não for isso descreva o teu case, que vai facilitar bastante.

abraço

Mario Costa
   - 28 ago 2014

Cara da uma olhada no codigo javascript que era para estar realizando a soma do total
#Código////////////////////////// ITEM 1
function passar_1(){
var bitem_1 = document.getElementById("bitem_1");
var item_1 = document.getElementById("item_1");
item_1.value = bitem_1.value;

var bqnt_1 = document.getElementById("bqnt_1");
var qnt_1 = document.getElementById("qnt_1");
qnt_1.value = bqnt_1.value;

var bvlr_1 = document.getElementById("bvlr_1");
var vlr_1 = document.getElementById("vlr_1");
var vlritem_1 = document.getElementById("vlritem_1");
var vlr_pedido = document.getElementById("vlr_pedido");
var total = document.getElementById("total");
vlr_1.value = bvlr_1.value;
vlritem_1.value = bvlr_1.value;
vlr_pedido.value = bvlr_1.value;
total.value = bvlr_1.value;
};

function calcula_1() {
//Pega novamente as variaveis para um novo calculo
var tqnt_1 = document.getElementById("qnt_1").value;
var tvlr_1 = document.getElementById("vlr_1").value;

if((tqnt_1 == "" || tqnt_1 == null) && (tvlr_1 == "" || tvlr_1 == null))
return false;

//retira caracteres especiais do campo
while(tqnt_1.indexOf(',') != -1)
tqnt_1 = tqnt_1.replace(',','.');
//retira caracteres especiais do campo
while(tvlr_1.indexOf(',') != -1)
tvlr_1 = tvlr_1.replace(',','.');

// multiplica os 2 campos
t_vlritem_1 = parseFloat(tqnt_1*tvlr_1);
// passa o valor para o campo total
document.form1.vlritem_1.value = t_vlritem_1;

//valor do pedido
document.form1.vlr_pedido.value = t_vlritem_1;
//valor total
document.form1.total.value = t_vlritem_1;

} //fecha function calcula

////////////////////////// ITEM 2
function passar_2(){
var bitem_2 = document.getElementById("bitem_2");
var item_2 = document.getElementById("item_2");
item_2.value = bitem_2.value;

var bqnt_2 = document.getElementById("bqnt_2");
var qnt_2 = document.getElementById("qnt_2");
qnt_2.value = bqnt_2.value;

var bvlr_2 = document.getElementById("bvlr_2");
var vlr_2 = document.getElementById("vlr_2");
var vlritem_2 = document.getElementById("vlritem_2");
var vlr_pedido = document.getElementById("vlr_pedido");
var total = document.getElementById("total");
vlr_2.value = bvlr_2.value;
vlritem_2.value = bvlr_2.value;

var vlr_pedidoc = document.getElementById("vlr_pedido").value;
var vlritem_2c = document.getElementById("vlritem_2").value;

if((vlr_pedidoc == "" || vlr_pedidoc == null) && (vlritem_2c == "" || vlritem_2c == null))
return false;

//retira caracteres especiais do campo
while(vlr_pedidoc.indexOf(',') != -1)
vlr_pedidoc = vlr_pedidoc.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_2c.indexOf(',') != -1)
vlritem_2c = vlritem_2c.replace(',','.');

gu = parseFloat(vlr_pedidoc) + parseFloat(vlritem_2c);

document.form1.vlr_pedido.value = gu;
document.form1.total.value = gu;
};

// aqui começa o srcipt da quantidade
function calcula_2() {
//Pega novamente as variaveis para um novo calculo
var tqnt_2 = document.getElementById("qnt_2").value;
var tvlr_2 = document.getElementById("vlr_2").value;

if((tqnt_2 == "" || tqnt_2 == null) && (tvlr_2 == "" || tvlr_2 == null))
return false;

//retira caracteres especiais do campo
while(tqnt_2.indexOf(',') != -1)
tqnt_2 = tqnt_2.replace(',','.');
//retira caracteres especiais do campo
while(tvlr_2.indexOf(',') != -1)
tvlr_2 = tvlr_2.replace(',','.');

// multiplica os 2 campos
t_vlritem_2 = parseFloat(tqnt_2*tvlr_2);
// passa o valor para o campo total
document.form1.vlritem_2.value = t_vlritem_2;

var vlr_pedidoc = document.getElementById("vlritem_1").value;
var vlritem_2c = document.getElementById("vlritem_2").value;

if((vlr_pedidoc == "" || vlr_pedidoc == null) && (vlritem_2c == "" || vlritem_2c == null))
return false;

//retira caracteres especiais do campo
while(vlr_pedidoc.indexOf(',') != -1)
vlr_pedidoc = vlr_pedidoc.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_2c.indexOf(',') != -1)
vlritem_2c = vlritem_2c.replace(',','.');

gu2 = parseFloat(vlr_pedidoc) + parseFloat(vlritem_2c);

//valor do pedido
document.form1.vlr_pedido.value = gu2;

//valor total
document.form1.total.value = gu2;

} //fecha function calcula

////////////////////////// ITEM 3
function passar_3(){
var bitem_3 = document.getElementById("bitem_3");
var item_3 = document.getElementById("item_3");
item_3.value = bitem_3.value;

var bqnt_3 = document.getElementById("bqnt_3");
var qnt_3 = document.getElementById("qnt_3");
qnt_3.value = bqnt_3.value;

var bvlr_3 = document.getElementById("bvlr_3");
var vlr_3 = document.getElementById("vlr_3");
var vlritem_3 = document.getElementById("vlritem_3");
var vlr_pedido = document.getElementById("vlr_pedido");
var total = document.getElementById("total");
vlr_3.value = bvlr_3.value;
vlritem_3.value = bvlr_3.value;

var vlr_pedidoc = document.getElementById("vlr_pedido").value;
var vlritem_3c = document.getElementById("vlritem_3").value;

if((vlr_pedidoc == "" || vlr_pedidoc == null) && (vlritem_3c == "" || vlritem_3c == null))
return false;

//retira caracteres especiais do campo
while(vlr_pedidoc.indexOf(',') != -1)
vlr_pedidoc = vlr_pedidoc.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_3c.indexOf(',') != -1)
vlritem_3c = vlritem_3c.replace(',','.');

gu = parseFloat(vlr_pedidoc) + parseFloat(vlritem_3c);

document.form1.vlr_pedido.value = gu;
document.form1.total.value = gu;
};

// aqui começa o srcipt da quantidade
function calcula_3() {
//Pega novamente as variaveis para um novo calculo
var tqnt_3 = document.getElementById("qnt_3").value;
var tvlr_3 = document.getElementById("vlr_3").value;

if((tqnt_3 == "" || tqnt_3 == null) && (tvlr_3 == "" || tvlr_3 == null))
return false;

//retira caracteres especiais do campo
while(tqnt_3.indexOf(',') != -1)
tqnt_3 = tqnt_3.replace(',','.');
//retira caracteres especiais do campo
while(tvlr_3.indexOf(',') != -1)
tvlr_3 = tvlr_3.replace(',','.');

// multiplica os 2 campos
t_vlritem_3 = parseFloat(tqnt_3*tvlr_3);
// passa o valor para o campo total
document.form1.vlritem_3.value = t_vlritem_3;

var vlritem_1c = document.getElementById("vlritem_1").value;
var vlritem_2c = document.getElementById("vlritem_2").value;
var vlritem_3c = document.getElementById("vlritem_3").value;

if((vlritem_1c == "" || vlritem_1c == null) && (vlritem_2c == "" || vlritem_2c == null) && (vlritem_3c == "" || vlritem_3c == null))
return false;

//retira caracteres especiais do campo
while(vlritem_1c.indexOf(',') != -1)
vlritem_1c = vlritem_1c.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_2c.indexOf(',') != -1)
vlritem_2c = vlritem_2c.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_3c.indexOf(',') != -1)
vlritem_3c = vlritem_3c.replace(',','.');

gu2 = parseFloat(vlritem_1c) + parseFloat(vlritem_2c) + parseFloat(vlritem_3c);

//valor do pedido
document.form1.vlr_pedido.value = gu2;

//valor total
document.form1.total.value = gu2;

} //fecha function calcula

////////////////////////// ITEM 4
function passar_4(){
var bitem_4 = document.getElementById("bitem_4");
var item_4 = document.getElementById("item_4");
item_4.value = bitem_4.value;

var bqnt_4 = document.getElementById("bqnt_4");
var qnt_4 = document.getElementById("qnt_4");
qnt_4.value = bqnt_4.value;

var bvlr_4 = document.getElementById("bvlr_4");
var vlr_4 = document.getElementById("vlr_4");
var vlritem_4 = document.getElementById("vlritem_4");
var vlr_pedido = document.getElementById("vlr_pedido");
var total = document.getElementById("total");
vlr_4.value = bvlr_4.value;
vlritem_4.value = bvlr_4.value;

var vlr_pedidoc = document.getElementById("vlr_pedido").value;
var vlritem_4c = document.getElementById("vlritem_4").value;

if((vlr_pedidoc == "" || vlr_pedidoc == null) && (vlritem_4c == "" || vlritem_4c == null))
return false;

//retira caracteres especiais do campo
while(vlr_pedidoc.indexOf(',') != -1)
vlr_pedidoc = vlr_pedidoc.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_4c.indexOf(',') != -1)
vlritem_4c = vlritem_4c.replace(',','.');

gu = parseFloat(vlr_pedidoc) + parseFloat(vlritem_4c);

document.form1.vlr_pedido.value = gu;
document.form1.total.value = gu;
};

// aqui começa o srcipt da quantidade
function calcula_4() {
//Pega novamente as variaveis para um novo calculo
var tqnt_4 = document.getElementById("qnt_4").value;
var tvlr_4 = document.getElementById("vlr_4").value;

if((tqnt_4 == "" || tqnt_4 == null) && (tvlr_4 == "" || tvlr_4 == null))
return false;

//retira caracteres especiais do campo
while(tqnt_4.indexOf(',') != -1)
tqnt_4 = tqnt_4.replace(',','.');
//retira caracteres especiais do campo
while(tvlr_4.indexOf(',') != -1)
tvlr_4 = tvlr_4.replace(',','.');

// multiplica os 2 campos
t_vlritem_4 = parseFloat(tqnt_4*tvlr_4);
// passa o valor para o campo total
document.form1.vlritem_4.value = t_vlritem_4;

var vlritem_1c = document.getElementById("vlritem_1").value;
var vlritem_2c = document.getElementById("vlritem_2").value;
var vlritem_3c = document.getElementById("vlritem_3").value;
var vlritem_4c = document.getElementById("vlritem_4").value;

if((vlritem_1c == "" || vlritem_1c == null) && (vlritem_2c == "" || vlritem_2c == null) && (vlritem_3c == "" || vlritem_3c == null) && (vlritem_4c == "" || vlritem_4c == null))
return false;

//retira caracteres especiais do campo
while(vlritem_1c.indexOf(',') != -1)
vlritem_1c = vlritem_1c.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_2c.indexOf(',') != -1)
vlritem_2c = vlritem_2c.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_3c.indexOf(',') != -1)
vlritem_3c = vlritem_3c.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_4c.indexOf(',') != -1)
vlritem_4c = vlritem_4c.replace(',','.');

gu2 = parseFloat(vlritem_1c) + parseFloat(vlritem_2c) + parseFloat(vlritem_3c) + parseFloat(vlritem_4c);

//valor do pedido
document.form1.vlr_pedido.value = gu2;
//valor total
document.form1.total.value = gu2;

} //fecha function calcula

////////////////////////// ITEM 5
function passar_5(){
var bitem_5 = document.getElementById("bitem_5");
var item_5 = document.getElementById("item_5");
item_5.value = bitem_5.value;

var bqnt_5 = document.getElementById("bqnt_5");
var qnt_5 = document.getElementById("qnt_5");
qnt_5.value = bqnt_5.value;

var bvlr_5 = document.getElementById("bvlr_5");
var vlr_5 = document.getElementById("vlr_5");
var vlritem_5 = document.getElementById("vlritem_5");
var vlr_pedido = document.getElementById("vlr_pedido");
var total = document.getElementById("total");
vlr_5.value = bvlr_5.value;
vlritem_5.value = bvlr_5.value;

var vlr_pedidoc = document.getElementById("vlr_pedido").value;
var vlritem_5c = document.getElementById("vlritem_5").value;

if((vlr_pedidoc == "" || vlr_pedidoc == null) && (vlritem_5c == "" || vlritem_5c == null))
return false;

//retira caracteres especiais do campo
while(vlr_pedidoc.indexOf(',') != -1)
vlr_pedidoc = vlr_pedidoc.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_5c.indexOf(',') != -1)
vlritem_5c = vlritem_5c.replace(',','.');

gu = parseFloat(vlr_pedidoc) + parseFloat(vlritem_5c);

document.form1.vlr_pedido.value = gu;
document.form1.total.value = gu;
};

// aqui começa o srcipt da quantidade
function calcula_5() {
//Pega novamente as variaveis para um novo calculo
var tqnt_5 = document.getElementById("qnt_5").value;
var tvlr_5 = document.getElementById("vlr_5").value;

if((tqnt_5 == "" || tqnt_5 == null) && (tvlr_5 == "" || tvlr_5 == null))
return false;

//retira caracteres especiais do campo
while(tqnt_5.indexOf(',') != -1)
tqnt_5 = tqnt_5.replace(',','.');
//retira caracteres especiais do campo
while(tvlr_5.indexOf(',') != -1)
tvlr_5 = tvlr_5.replace(',','.');

// multiplica os 2 campos
t_vlritem_5 = parseFloat(tqnt_5*tvlr_5);
// passa o valor para o campo total
document.form1.vlritem_5.value = t_vlritem_5;

var vlritem_1c = document.getElementById("vlritem_1").value;
var vlritem_2c = document.getElementById("vlritem_2").value;
var vlritem_3c = document.getElementById("vlritem_3").value;
var vlritem_4c = document.getElementById("vlritem_4").value;
var vlritem_5c = document.getElementById("vlritem_5").value;

if((vlritem_1c == "" || vlritem_1c == null) && (vlritem_2c == "" || vlritem_2c == null) && (vlritem_3c == "" || vlritem_3c == null) && (vlritem_4c == "" || vlritem_4c == null) && (vlritem_5c == "" || vlritem_5c == null))
return false;

//retira caracteres especiais do campo
while(vlritem_1c.indexOf(',') != -1)
vlritem_1c = vlritem_1c.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_2c.indexOf(',') != -1)
vlritem_2c = vlritem_2c.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_3c.indexOf(',') != -1)
vlritem_3c = vlritem_3c.replace(',','.');
//retira caracteres especiais do campo
while(vlritem_4c.indexOf(',') != -1)
vlritem_4c = vlritem_4c.replace(',','.');
while(vlritem_5c.indexOf(',') != -1)
vlritem_5c = vlritem_5c.replace(',','.');

gu2 = parseFloat(vlritem_1c) + parseFloat(vlritem_2c) + parseFloat(vlritem_3c) + parseFloat(vlritem_4c) + parseFloat(vlritem_5c);

//valor do pedido
document.form1.vlr_pedido.value = gu2;

//valor total
document.form1.total.value = gu2;

} //fecha function calcula

////////////////////DESCONTO
function calcula_desc() {
//Pega novamente as variaveis para um novo calculo
var tdesconto = document.getElementById("desconto").value;
var ttotal = document.getElementById("vlr_pedido").value;

if((tdesconto == "" || tdesconto == null) && (ttotal == "" || ttotal == null))
return false;

//retira caracteres especiais do campo
while(tdesconto.indexOf(',') != -1)
tdesconto = tdesconto.replace(',','.');
//retira caracteres especiais do campo
while(ttotal.indexOf(',') != -1)
ttotal = ttotal.replace(',','.');

// Subtrai os 2 campos
tt = parseFloat(ttotal-(tdesconto));
// passa o valor para o campo total
document.form1.total.value = tt;
document.getElementById("vlr_pedido").innerHTML = tt;
}

////////////////////////////////////PARCELA
function calcula_par() {
//Pega novamente as variaveis para um novo calculo
var ttotal = document.getElementById("total").value;
var tvezes = document.getElementById("n_par").value;

if((ttotal == "" || ttotal == null) && (tvezes == "" || tvezes == null))
return false;

//retira caracteres especiais do campo
while(ttotal.indexOf(',') != -1)
ttotal = ttotal.replace(',','.');
//retira caracteres especiais do campo
while(tvezes.indexOf(',') != -1)
tvezes = tvezes.replace(',','.');

// Subtrai os 2 campos
tz = parseFloat(ttotal/tvezes);
// passa o valor para o campo total
document.form1.vlr_par.value = tz;

}