Jump to content
Fórum Script Brasil
  • 0

calculando o total da nota


Carlos Rocha

Question

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

Edited by Carlos Rocha
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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>

Edited by fercosmig
add tags
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...