Ir para o conteúdo

 Voltar a Fórum do For...
Tela cheia

Tratamento formulário

25 de Julho de 2013, 15:44 , por Desconhecido - | 1 Pessoa seguindo este artigo.
Visualizado 4 vezes

Boa tarde!

Gostaria de saber se alguem pode me dar duas dicas:

1. Em um form tenho uma aba "Materiais" e outra aba "financeiro".
O usuário informa, entre varias informações o campo "Kg" da aba "Materiais". É possível, quando o usuário acessar a aba "financeiro" (que também terá o campo " Kg" vir preenchido com o valor do campo "materiais"?

2. No formulário "Financeiro", há o campo "Kg" e o campo "Preço". Gostaria que após o preço ser informado (supondo que o campo "Kg" ja esteja preenchido) ao tirar o cursos desse campo, o campo "Total" ja seja automaticamente calculado (Kg X Preço). É possivel no formDin?

Se alguem tiver algumas dicas....

Obrigado.

 

Autor: Fabricio Malvezzi


55 comentários

  • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
    25 de Julho de 2013, 21:25

     

    Fabrício,

    para esta implementação, será necessário algum javascript, a parte do FormDin é tranquila.

    Primeiro não pode haver dois campos com mesmo nome, então o campo kg da aba Materiais dever ter o nome diferente da aba Financeiro, no exemplo eu chamei de val_kg e calc_kg.

    Depois adicionei eventos javascript na mudança de aba e no keyup do campo preço para já ir mostrando o total calculado.

    Segue o código completo, deve haver forma mais fácil de fazer, mas já dá para você ter noção de como trabalhar com eventos no FormDin.

    Abraço.

    <?php
    // criar o formulário
    $frm = new TForm('Cadastro de Materiais',200,400);

    // criar o controle de abas
    $pc = $frm->addPageControl('pc',null,null,'antesMudarAba','depoisMudarAba');

    // cria a aba Materiais
    $pc->addPage('Materiais',true,null,'abaMateriais');
        $frm->addNumberField('val_kg','Kg:',3,true,0);

    // criar a aba Financeiro
    $pc->addPage('Financeiro',false,null,'abaFinanceiro');
        $frm->addTextField('calc_kg','Kg:',10)->setReadOnly(true)->setCss(array('text-align'=>'center','color'=>'blue','font-weight'=>'bold'));
        $frm->addNumberField('val_preco','Preço:',10,true,2)->addEvent('keyup','atualizarTotal()')->setExampleText('R$');
        $frm->addNumberField('calc_total','Total:',10,true,2)->setReadOnly(true)->setCss(array('color'=>'blue','font-weight'=>'bold') );

    $frm->setAction('Gravar');
    $frm->show();
    ?>
    <script>
    function antesMudarAba(aba,pc,id)
    {
        if( id == 'abafinanceiro' )   // id da aba é passado sempre em caixa baixa
        {
            if( jQuery("#val_kg").val() == '')
            {
                fwAlert('Informe o KG');
                return false;
            }
        }
        return true;
    }
    function depoisMudarAba(aba,pc,id)
    {
        if( id == 'abafinanceiro' )
        {
            jQuery("#calc_kg").val(jQuery("#val_kg").val())
            atualizarTotal();
            jQuery("#val_preco").focus();

        }
    }
    function atualizarTotal()
    {
        var kg         = removerVirgula( jQuery("#val_kg").val() );
        var preco     = removerVirgula( jQuery("#val_preco").val() );
        var campo    = jQuery("#calc_total");
        var total    = kg*preco;
        campo.val('0');
        if( ! isNaN( total ) )
        {
            total = fwRoundNumber(total,2);
            total = String(total).replace(/\./,',')
            if( total.indexOf(',') > -1 )
            {
                total = total.pad(4,'0',1);
            }
            campo.val( total );
            fwFormatarDecimal(campo.get(0),2);

        }
    }
    function removerVirgula(v)
    {
        v = parseFloat( v.replace(/\./,'').replace(/\,/,'.') );
        return v;
    }
    </script>

    • Dbf6879e6b529e4e1a2de8e7a9bd12ae?only path=false&size=50&d=404Fabricio Malvezzi(usuário não autenticado)
      26 de Julho de 2013, 8:46

       

      Luis, bom dia!

      Perfeito! Exatamente o que preciso, muito obrigado. Vou ter vários assim no meu form, esse exemplo me ajudou em todos!

      Obrigado pela ajuda!

       Fabricio

       

    • 8232f093b28c8aa4ff5c12b6e9546631?only path=false&size=50&d=404mauricio pessoa(usuário não autenticado)
      26 de Julho de 2013, 14:24

       

      Luis, você tá de parabéns.

      Seus exemplos são ótimos não só prá quem postou a dúvida, mas também prá quem acompanha o fórum e, como eu, com certeza também tem dúvidas parecidas.

       Muito obrigado. 

      • Dbf6879e6b529e4e1a2de8e7a9bd12ae?only path=false&size=50&d=404Fabricio Malvezzi(usuário não autenticado)
        26 de Julho de 2013, 16:20

         

        Luis, boa tarde!

        Veja se pode me dar mais essa ajuda...

        No codigo que me enviou, esta com erro na formatação de decimal. Veja a imagem desse link http://logicacriativa.com.br/teste/cadastro.jpg

        Veja que o resultado seria 148,80. Sei que deve ser algo simples, mas fique a manha toda alterando seu código e não cheguei no resultado.

        Obrigado.

         

        • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
          26 de Julho de 2013, 20:35

           

          Fabrício,

          é devido a quantidade de casas depois da virgula, o javascript remove o Zero do final quando o numero termina com zero ex: 148,80 ele calcula com float 148.8 e então a função de formatação se perde. 

          Como não sou um expert em expressão regular, fiz a solução utilizando a lógica mesmo.

          veja ai como deve ficar a função atualizarTotal()

          function atualizarTotal()
          {
              var kg         = removerVirgula( jQuery("#val_kg").val() );
              var preco     = removerVirgula( jQuery("#val_preco").val() );
              var campo    = jQuery("#calc_total");
              var total    = kg*preco;
              var posVirgula;
              campo.val('0');
              if( ! isNaN( total ) )
              {
                  total = fwRoundNumber(total,2);
                  total = String(total).replace(/\./,',')
                  posVirgula = total.indexOf(',');
                  if( posVirgula > -1 )
                  {
                      if( total.length-posVirgula == 2 )
                      {
                          total+='0';
                      }
                  }
                  campo.val( total );
                  fwFormatarDecimal(campo.get(0),2);
              }
          }

          Abraço.

Essa comunidade não possui posts nesse blog