Ir para conteúdo
Fórum Script Brasil
  • 0

calculando o total da nota


Carlos Rocha

Pergunta

Olá pessoal.

Boa noite.

Tenho um form

e dentro desse form tenho um while php que vai adicionando campos ao form conforme for o numero de registros de uma consulta sql.

Bom, tenho uma função que , ao passo que preenchemos o value do campo quantidade por exemplo, é feito um calculo para saber quanto daria o valor total do preço desse produto vezes a quantidade colocada sem submeter o form e colocar esse valor em um label.

// JavaScript Document
function calculo(qtde, vl, quant, quan, label)
    {      
          total = qtde * vl;
          total = format_number(total,2);
          document.getElementById(quan).value=qtde;
          document.getElementById(label).innerHTML=total;
    }
Agora gostaria de montar um função que, ao deixar o campo (após colocar a quantidade), faz uma varrida por todos os labeis om seus respectivos valores e dê um valor total para todos os ítens que os valores das suas quantidades forma alteras de 0 (padrão). Preciso da ajuda de vocês. Segue meu codigo
<table border=1 width=800 align=center>
            <tr><td colspan=11 align=center><h4>Para comprar o produto, informe a quantidade de ítens na coluna Quantidade<br>e clicke no botão "Enviar todos os ítens" no final da lista.<br>Para NÃO comprar o produto, deixar a coluna Quantidade com o valor 0 (zero).
<br> Caso quera adicionar alguma observação do produto, preencha o campo Observaçao Cliente.</td><tr>
            <tr>
              <td colspan='11' align='center'>O valor total da nota até agora é de R$0.00</td>
            </tr>
            <tr>
              <td align=center>Lista</td>
              <td align=center>Condição</td>
              <td align=center>Produto</td>
              <td align=center>Qtde.<br>na caixa</td>
              <td align=center>Preço por<br>unidade<br>na caixa</td>
              <td align=center>Preço Caixa</td>              
              <td align=center>Quantidade</td>
              <td align=center>Sub Total</td>
              <td align=center>Observação<br>Empresa</td>
             </tr>
          <form action="carrinho.php?op=adicionar" method="post" name="envia_tudo"><tr><td align=left colspan=6>Fornecedor: &nbsp;&nbsp;Malta S/A - CNPJ=  11.111.111/1111-11</td>  
                   <td align=left colspan=5><font color="red">Condição de pagamento:</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                  <input type="radio" name="0[radio_pgto]" id="0[radio_pgto]" value="1" checked="checked" onclick="fecha('0[div_pgto_prazo]'); entrega_valores(2,0, this.value,'radio_pgto' )""> À vista
                  <input type="radio" name="0[radio_pgto]" id="0[radio_pgto]" value="2" onclick="abre('0[div_pgto_prazo]'); entrega_valores(2,0, this.value,'radio_pgto' )""> À prazo
                  <div id="0[div_pgto_prazo]" style="display:none">
                     Prazos para pagamento para produtos deste fornecedor: <label id="label_prazo">30 dias</label>
                  </div>
                    </td></tr><input type="hidden" name="1[radio_pgto]" id="1[radio_pgto]" value="1"><input type="hidden" name="0[label_prazo]" id="0[label_prazo]" value="30 dias"><input type="hidden" name="1[label_prazo]" id="1[label_prazo]" value="30 dias">
              <tr><td align=left colspan=11><font color="red">Observação do cliente para o fornecedor:</font>&nbsp;&nbsp;&nbsp;&nbsp;
                 <input type="text" onBlur="entrega_valores(2,0, this.value,'observa_cli' )"\ name="0[observa_cli]"  id="0[observa_cli]" value="" style="border-color:black">
               </td></tr><input type="hidden" name="1[observa_cli]" id="1[observa_cli]" value=""><input type="hidden" name="0[id_prod]"  id="0[id_prod]" value="3">
                         <input type="hidden" name="0[quan]" id="0[quan]" value="">    
                         <input type="hidden" name="0[id_lista]" name="0[id_lista]" value="1">           
                         <input type="hidden" name="0[imposto]" name="0[imposto]" value="10.00">           
                        <tr>
                            <td align=center>1</td>
                            <td align=letf>Encarte</td>
                            <td align=let>Cevada</td>
                            <td align=center>15</td>
                            <td align=right>R$ 0.24</td>
                            <td align=right>R$ 3.63</td>
                            <td align=right>
              <input type=text id=0[quant] value=0 size=2 style="text-align: center;" 
              onKeyPress="BloqueiaLetras();" 
              onchange="calculo(this.value, 3.63,'0[quant]','0[quan]','0[label_preco]');" >
                            </td>              
                            <td align=right>R$ <label id="0[label_preco]">0.00</label></td>              
                            <td align=left>Sem observação</td>
                          </tr><input type="hidden" name="1[id_prod]"  id="1[id_prod]" value="6">
                         <input type="hidden" name="1[quan]" id="1[quan]" value="">    
                         <input type="hidden" name="1[id_lista]" name="1[id_lista]" value="1">           
                         <input type="hidden" name="1[imposto]" name="1[imposto]" value="20.00">           
                        <tr>
                            <td align=center>1</td>
                            <td align=letf>Complemento</td>
                            <td align=let>Pão</td>
                            <td align=center>12</td>
                            <td align=right>R$ 0.32</td>
                            <td align=right>R$ 3.84</td>
                            <td align=right>
              <input type=text id=1[quant] value=0 size=2 style="text-align: center;" 
              onKeyPress="BloqueiaLetras();" 
              onchange="calculo(this.value, 3.84,'1[quant]','1[quan]','1[label_preco]');" >
                            </td>              
                            <td align=right>R$ <label id="1[label_preco]">0.00</label></td>              
                            <td align=left>Sem observação</td>
                          </tr>
                 <tr>
                     <td align=center valign="middle" colspan=11 height=50>
                       <input type="submit" value="Enviar todos os ítens">
                      </form>
                     </td>
                 </tr> 
                 <tr>
                     <td align=center valign="middle" colspan=11 height=50>
                       <a href="java script:history.go(-1);">Voltar</a>
                     </td>
                 </tr>  </form></table>
Olá Pessoal. Talvez vocês não tenham me entendido muito bem. A função que eu tenho, calcula o valor Quant X preço, quando digito a quantidade de produtos (no produto daquela linha). Porem, são vários os produtos que aparecem no form. Na verdade, é um while php para listar os produtos dentro d form. Então eu terei no form n produtos para eu escolher e colocar a quantidade. O que eu queria era saber como que eu vou, após colocar a quantidade em um campo, varrer todos os outros campos e ver seu valor para somar e informar o valor total da nota. Resumindo o form, Seria mais ou menos assim:
<form action="carrinho.php?op=adicionar" method="post" name="envia_tudo">
<input type=text id=1[quant] value="0" onchange="calculo(this.value, 3.84,'1[quant]','1[quan]','1[label_preco]');" >
<input type=text id=2[quant] value="0" onchange="calculo(this.value, 3.84,'2[quant]','2[quan]','2[label_preco]');" >
<input type=text id=3[quant] value="0" onchange="calculo(this.value, 3.84,'3[quant]','3[quan]','3[label_preco]');" >
<input type=text id=4[quant] value="0" onchange="calculo(this.value, 3.84,'4[quant]','4[quan]','4[label_preco]');" >
<input type=text id=5[quant] value="0" onchange="calculo(this.value, 3.84,'5[quant]','5[quan]','5[label_preco]');" >
.............
<input type=text id=n[quant] value="0" onchange="calculo(this.value, 3.84,'n[quant]','n[quan]','n[label_preco]');" >
<input type="submit">
</form>

Aqui, a cada vez que eu uso a função calculo, ele calculo ptecoXQuantidade, para o produto daquel textbox. Preciso agora pega esse valor somar aos demais texbox

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde.

Fiz este modelo, não é bom usar, é só pra você entender como funciona e te ajudar

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Calcula Total</title>

<script>
var d = document;

function $(bloco){
    return document.getElementById(bloco);
}

// Não é o melhor modo, mas fiz simples para você entender
function calcula(oObj){
    // separando para pegar a chave
    var aDados  = oObj.id.split('_');
    var iChave  = aDados[1];
    var iQtde   = $('txtQtd_' + iChave ).value;
    var fUnit   = $('txtUnit_' + iChave ).value;
    // Não estou fazendo validação nenhuma, só mesmo mostrando um modo de resolver seu problema    
    $('txtTotalLinha_' + iChave ).value = parseFloat( (iQtde * fUnit) );
    // chamo a função que faz o calculo do total
    totalGeral();
}

function totalGeral(){
    
    var iTotQtde = 0;
    var fTotalPedido = 0.00;

    var oElementosTotal = d.getElementsByName('txtTotalLinha[]');
    var oElementosQtde = d.getElementsByName('txtQtd[]');
    
    for( var i = 0; i < oElementosTotal.length; i++){
        if( oElementosTotal[i].value != '' ) {
            iTotQtde += parseFloat( oElementosQtde[i].value );
            fTotalPedido += parseFloat( oElementosTotal[i].value );
        }
    }
    
    $('totQtde').innerHTML = iTotQtde;
    $('totTotal').innerHTML = fTotalPedido;
}
</script>

</head>

<body>
<table width="100%"  border="1">
  <tr>
    <td><div align="center">Descri&ccedil;&atilde;o</div></td>
    <td width="10%"><div align="center">Qtde</div></td>
    <td width="10%"><div align="center">Unit&aacute;rio</div></td>
    <td width="10%"><div align="center">Total</div></td>
  </tr>
  <tr>
    <td><div align="left">aaaaa</div></td>
    <td align="center" valign="middle"><input name="txtQtd[]" type="text" id="txtQtd_1" size="5" maxlength="5" onChange="calcula(this);"></td>
    <td align="center" valign="middle"><input name="txtUnit[]" type="text" id="txtUnit_1" size="10" maxlength="10" value="10.25"></td>
    <td align="center" valign="middle"><input name="txtTotalLinha[]" type="text" id="txtTotalLinha_1" size="10" maxlength="10"></td>
  </tr>
  <tr>
    <td><div align="left">bbbbb</div></td>
    <td align="center" valign="middle"><input name="txtQtd[]" type="text" id="txtQtd_2" size="5" maxlength="5" onChange="calcula(this);"></td>
    <td align="center" valign="middle"><input name="txtUnit[]" type="text" id="txtUnit_2" size="10" maxlength="10" value="12.25"></td>
    <td align="center" valign="middle"><input name="txtTotalLinha[]" type="text" id="txtTotalLinha_2" size="10" maxlength="10"></td>
  </tr>
  <tr>
    <td><div align="left">ccccc</div></td>
    <td align="center" valign="middle"><input name="txtQtd[]" type="text" id="txtQtd_3" size="5" maxlength="5" onChange="calcula(this);"></td>
    <td align="center" valign="middle"><input name="txtUnit[]" type="text" id="txtUnit_3" size="10" maxlength="10" value="15.25"></td>
    <td align="center" valign="middle"><input name="txtTotalLinha[]" type="text" id="txtTotalLinha_3" size="10" maxlength="10"></td>
  </tr>
  <tr>
    <td align="right">Total</td>
    <td align="center"><span id="totQtde"></span></td>
    <td align="center"></td>
    <td align="right">R$ <span id="totTotal"></span></td>
  </tr>
</table>

</body>
</html>

Editado por fercosmig
add tags
Link para o comentário
Compartilhar em outros sites

  • 0

Bom, estou quase conseguindo:

<form action="carrinho.php?op=adicionar" method="post" name="envia_tudo">
<input type="text" id="1[quant]" value="0" onblur="calcula(this.value)"><br>
<input type="text" id="2[quant]" value="0" onblur="calcula(this.value)"><br>
<input type="text" id="3[quant]" value="0" onblur="calcula(this.value)"><br>
<input type="text" id="4[quant]" value="0" onblur="calcula(this.value)"><br>
<input type="text" id="5[quant]" value="0" onblur="calcula(this.value)"><br>
<input type="submit"><p><p>
</form>

<script>
function calcula()
{
  for (i=0;i<4;i++)
  {
    //valor_total=+eval(document.form.i[quant].value);
    campo = 'document.getElementById('+i+'[quant]).value';
    valor_total=+eval(campo);
  }
  valor_nota = valor_total;
  document.getElementById('labeltotal').innerHTML = valor_nota
}
</script>

<label id="labeltotal"></label>
Aqui anda teem alguns problemas: No caso dos imnputs assim:
<input type="text" id="1[quant]" value="0" onblur="calcula(this.value)"><br>
<input type="text" id="2[quant]" value="0" onblur="calcula(this.value)"><br>
<input type="text" id="3[quant]" value="0" onblur="calcula(this.value)"><br>
<input type="text" id="4[quant]" value="0" onblur="calcula(this.value)"><br>
<input type="text" id="5[quant]" value="0" onblur="calcula(this.value)"><br>
Como é que eu vou, uma vez que eles são gerads dinamicamente pelo php, transformar isso em uma array para calcular seu tamanho e fazer o proximo passo:
..
for (i=0;i<4;i++) => No caso esse 4 seria o tamanho do array;

..
Outro dilema é como é que vou somar acumulativamente os valores dos inputs:
//valor_total=+eval(document.form.i[quant].value);
    campo = 'document.getElementById('+i+'[quant]).value';
    valor_total=+eval(campo);
Seria assim mesmo? No caso, isso esta retornando assim:
document.getElementById(0[quant]).value
E não:
document.getElementById('0[quant]').value

Como arrumar isso?

Grato a quem puder ajudar.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...