Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Atualizar campos automático em cálculos Olá a todos. Eu criei um formulário de vendas, fiz os cálculos tudo certinho, e esta funcionando tudo de boa. Porem eu preciso ficar clicando várias vezes nos campos onde são calculados para ir atualizando o até chegar no valor correto. Teria alguma forma de fazer esta atualização automática sem precisar ficar indo e voltando clicando nos campos várias vezes, ou mesmo um botão ...
VE
Atualizar campos automático em cálculos  
Olá a todos.

Eu criei um formulário de vendas, fiz os cálculos tudo certinho, e esta funcionando tudo de boa.

Porem eu preciso ficar clicando várias vezes nos campos onde são calculados para ir atualizando o até chegar no valor correto.

Teria alguma forma de fazer esta atualização automática sem precisar ficar indo e voltando clicando nos campos várias vezes, ou mesmo um botão para depois do formulário preenchido ele atualizar todos os campos, antes de salvar.

Desde já agradeço a atenção de todos que puderem me ajudar

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (3)


FP

Amigo sempre faco assim
  1. <?php
  2.   public static function onExitmil($param)
  3.     {                   
  4.         $valor   = (double) PMaskFormate::reais_to_decimal($param['valor']);
  5.         $bruto   = (double) PMaskFormate::reais_to_decimal($param['bruto']);
  6.         $teor    = (double) PMaskFormate::reais_to_decimal($param['teor']);
  7.         $mil     = (double) PMaskFormate::reais_to_decimal($param['mil']);
  8.         $fino    0;
  9.         if ($param['tipomoeda'] == 'D')
  10.         {
  11.             if (($valor 0) and ($mil 0))
  12.             {
  13.                 $fino  $valor $mil;//number_format(($valor / $mil), 2, ',', '.');
  14.                 $teor  0;
  15.                 $bruto 0;                
  16.                 $fino  PMaskFormate::formata_valor($fino);
  17.                 $obj = new StdClass//esse camarada aqui e o segredo
  18.                 $obj->fino $fino//aqui passo os dados para o objeto tentry
  19.                 TForm::sendData('form_LancamentoCliente'$obj); //aqui devolve os dados para o formulario
  20.             }
  21.             else exit;
  22.             
  23.         }
  24.         else
  25.         {      
  26.             if (($bruto 0) and ($teor 0) and ($mil 0))
  27.             {
  28.                 $fino  = ($bruto $teor) / 100;
  29.                 $valor = ($fino $mil);    
  30.                 $valor PMaskFormate::formata_valor($valor); 
  31.                 $fino  PMaskFormate::formata_valor($fino);                                
  32.                 $obj = new StdClass;   //esse camarada aqui e o segredo           
  33.                 $obj->valor $valor;  //alimenta o tentry
  34.                 $obj->fino $fino//alimenta o tentry
  35.                 TForm::sendData('form_LancamentoCliente'$obj);  //atualiza os componentes no formulario
  36.             }
  37.             else exit;  
  38.         }             
  39.     }    
  40. ?>
VE

Olha o meu código como está! os calculos estão tudo certo, mais tenho que ficar clicando em todos os campos um monte de vez para atualizar os valores, queria criar um botão, ou algo do tipo para atualizar só colocando os valores para ser cálculado, e não precisar ficar clicando nos campos dos resultados.

  1. <?php
  2. /**
  3.  * VendasForm Form
  4.  * @author  <your name here>
  5.  */
  6. class VendasForm extends TPage
  7. {
  8.     protected $form// form
  9.     
  10.     /**
  11.      * Form constructor
  12.      * @param $param Request
  13.      */
  14.     public function __construct$param )
  15.     {
  16.         parent::__construct();
  17.         
  18.         // creates the form
  19.         $this->form = new TQuickForm('form_Vendas');
  20.         $this->form->class 'tform'// change CSS class
  21.         
  22.         $this->form->style 'display: table;width:100%'// change style
  23.         
  24.         // define the form title
  25.         $this->form->setFormTitle('Vendas');
  26.         
  27.         // create the form fields
  28.         $id = new TEntry('id');
  29.         $data_venda = new TDate('data_venda');
  30.         $plp = new TEntry('plp');
  31.         $codigo = new TEntry('codigo');
  32.         $produto = new TEntry('produto');
  33.         $valor = new TEntry('valor');
  34.         $tipo_anuncio = new TCombo('tipo_anuncio');
  35.         $frete = new TEntry('frete');
  36.         $taxa_ml = new TEntry('taxa_ml');
  37.         $restante = new TEntry('restante');
  38.         $custo = new TEntry('custo');
  39.         $lucro_bruto = new TEntry('lucro_bruto');
  40.         $lucro_dividido = new TEntry('lucro_dividido');
  41.         $pagar = new TEntry('pagar');
  42.         $dividido = new TEntry('dividido');
  43.         
  44.          // Atualiza os Valores
  45.         $valor->setExitAction(new TAction(array($this'onUpdateTotal')));
  46.         
  47.         $taxa_ml->setExitAction(new TAction(array($this'onUpdateTotal')));
  48.         $frete->setExitAction(new TAction(array($this'onUpdateTotal')));
  49.         $restante->setExitAction(new TAction(array($this'onUpdateTotal')));
  50.         $custo->setExitAction(new TAction(array($this'onUpdateTotal')));
  51.         $lucro_bruto->setExitAction(new TAction(array($this'onUpdateTotal')));
  52.         $lucro_dividido->setExitAction(new TAction(array($this'onUpdateTotal')));
  53.         
  54.         $valor->setNumericMask(2',','.'); 
  55.         $frete->setNumericMask(2',','.'); 
  56.         $taxa_ml->setNumericMask(2',','.'); 
  57.         $restante->setNumericMask(2',','.'); 
  58.         $custo->setNumericMask(2',','.'); 
  59.         $lucro_bruto->setNumericMask(2',','.'); 
  60.         $lucro_dividido->setNumericMask(2',','.'); 
  61.         $pagar->setNumericMask(2',','.');         
  62.         
  63.         $taxa_ml->setEditable(FALSE);
  64.         $restante->setEditable(FALSE);
  65.         $lucro_bruto->setEditable(FALSE);
  66.         $lucro_dividido->setEditable(FALSE);
  67.         $pagar->setEditable(FALSE); 
  68.         
  69.         $id->setSize(100);
  70.         $data_venda->setSize(150);
  71.         $data_venda->setSize(150);
  72.         $plp->setSize(150);
  73.         $codigo->setSize(150);
  74.         $produto->setSize(400);
  75.         $valor->setSize(150);
  76.         $tipo_anuncio->setSize(100);
  77.         $frete->setSize(80);
  78.         $taxa_ml->setSize(80);
  79.         $restante->setSize(80);
  80.         $custo->setSize(80);
  81.         $lucro_bruto->setSize(80);
  82.         $lucro_dividido->setSize(80);
  83.         $pagar->setSize(150);
  84.         
  85.         $tipo_anuncio->addItems(array('0.16'=> 'Premium''0.10'=> 'Classico'));       
  86.        $tipo_anuncio->setDefaultOption(FALSE);
  87.         // add the fields
  88.        $this->form->addQuickFields('ID', array($id, new TLabel('Data') ,$data_venda, new TLabel('PLP') ,$plp, new TLabel('Código') ,$codigo));
  89.       
  90.        $this->form->addQuickFields('Produto', array($produto, new TLabel('Valor') ,$valor));
  91.        $this->form->addQuickFields('Tipo Anuncio', array($tipo_anuncio, new TLabel('Frete') ,$frete, new TLabel('Taxa ML') ,$taxa_ml, new TLabel('Restante') ,$restante));
  92.        $this->form->addQuickFields('Custo', array($custo, new TLabel('Lucro Bruto') ,$lucro_bruto, new TLabel('Lucro Liquido') ,$lucro_dividido));
  93.         
  94.         
  95.         
  96.         
  97.         
  98.         $this->form->addQuickField('Pagar'$pagar,  200 );
  99.         if (!empty($id))
  100.         {
  101.             $id->setEditable(FALSE);
  102.         }
  103.         
  104.         /** samples
  105.          $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  106.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  107.          $fieldX->setSize( 100, 40 ); // set size
  108.          **/
  109.          
  110.         // create the form actions
  111.         $this->form->addQuickAction(_t('Save'), new TAction(array($this'onSave')), 'fa:floppy-o');
  112.         $this->form->addQuickAction(_t('New'),  new TAction(array($this'onClear')), 'bs:plus-sign green');
  113.         
  114.         // vertical box container
  115.         $container = new TVBox;
  116.         $container->style 'width: 90%';
  117.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  118.         $container->add($this->form);
  119.         
  120.         parent::add($container);
  121.     }
  122.     /**
  123.      * Save form data
  124.      * @param $param Request
  125.      */
  126.     public function onSave$param )
  127.     {
  128.         try
  129.         {
  130.             TTransaction::open('base'); // open a transaction
  131.             
  132.             /**
  133.             // Enable Debug logger for SQL operations inside the transaction
  134.             TTransaction::setLogger(new TLoggerSTD); // standard output
  135.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  136.             **/
  137.             
  138.             $this->form->validate(); // validate form data
  139.             
  140.             $object = new Vendas;  // create an empty object
  141.             $data $this->form->getData(); // get form data as array
  142.             $object->fromArray( (array) $data); // load the object with data
  143.            
  144.             $object->store(); // save the object
  145.             
  146.             // get the generated id
  147.             $data->id $object->id;
  148.             
  149.             $this->form->setData($data); // fill form data
  150.             TTransaction::close(); // close the transaction
  151.             
  152.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  153.         }
  154.         catch (Exception $e// in case of exception
  155.         {
  156.             new TMessage('error'$e->getMessage()); // shows the exception error message
  157.             $this->form->setData$this->form->getData() ); // keep form data
  158.             TTransaction::rollback(); // undo all pending operations
  159.         }
  160.     }
  161.     
  162.     public static function onUpdateTotal($param)
  163.     {
  164.         $valor   Utils::to_number($param['valor']);
  165.         $tipo_anuncio Utils::to_number($param['tipo_anuncio']);
  166.         
  167.         $frete   Utils::to_number($param['frete']);
  168.         $taxa_ml Utils::to_number($param['taxa_ml']);
  169.         
  170.         $restante   Utils::to_number($param['restante']);
  171.         $custo Utils::to_number($param['custo']);
  172.         
  173.         $lucro_bruto Utils::to_number($param['lucro_bruto']);    
  174.         $lucro_dividido Utils::to_number($param['lucro_dividido']);    
  175.                        
  176.         $obj = new StdClass;
  177.         
  178.     $restante $valor - ($frete $taxa_ml);
  179.     $taxa_ml $valor $tipo_anuncio;
  180.     $lb $restante $custo;
  181.     $ld $lucro_bruto 2;
  182.     $pagar $lucro_dividido $custo;
  183.         $obj->restante Utils::formatar_valor($restante);
  184.         $obj->taxa_ml   Utils::formatar_valor($taxa_ml);
  185.         $obj->lucro_bruto   Utils::formatar_valor($lb);
  186.         $obj->lucro_dividido   Utils::formatar_valor($ld);
  187.         $obj->pagar   Utils::formatar_valor($pagar);
  188.         TForm::sendData('form_Vendas'$obj);
  189.     }
  190.     
  191.     /**
  192.      * Clear form data
  193.      * @param $param Request
  194.      */
  195.     public function onClear$param )
  196.     {
  197.         $this->form->clear();
  198.     }
  199.     
  200.     /**
  201.      * Load object to form data
  202.      * @param $param Request
  203.      */
  204.     public function onEdit$param )
  205.     {
  206.         try
  207.         {
  208.             if (isset($param['key']))
  209.             {
  210.                 $key $param['key'];  // get the parameter $key
  211.                 TTransaction::open('base'); // open a transaction
  212.                 $object = new Vendas($key); // instantiates the Active Record
  213.                 $this->form->setData($object); // fill the form
  214.                 TTransaction::close(); // close the transaction
  215.             }
  216.             else
  217.             {
  218.                 $this->form->clear();
  219.             }
  220.         }
  221.         catch (Exception $e// in case of exception
  222.         {
  223.             new TMessage('error'$e->getMessage()); // shows the exception error message
  224.             TTransaction::rollback(); // undo all pending operations
  225.         }
  226.     }
  227.     
  228. }
  229. </code>
</your>
NR

Vagner, pegue do formulário($param) somente os valores dos campos que podem ser modificados(valor,frete e custo). Os demais devem ser recalculados toda vez com base nesses 3 campos.

Veja:
  1. <?php
  2.  public static function onUpdateTotal($param)
  3.  {
  4.         $valor   Utils::to_number($param['valor']);
  5.         $tipo_anuncio Utils::to_number($param['tipo_anuncio']);
  6.         $frete   Utils::to_number($param['frete']);
  7.         $custo Utils::to_number($param['custo']);
  8.         // nao precisa
  9.         $taxa_ml Utils::to_number($param['taxa_ml']);
  10.         $restante   Utils::to_number($param['restante']);      
  11.         $lucro_bruto Utils::to_number($param['lucro_bruto']);    
  12.         $lucro_dividido Utils::to_number($param['lucro_dividido']);    
  13.                        
  14.         $obj = new StdClass;
  15.          
  16.         // $taxa_ml está vindo do form, mas deveria ser recalculada
  17.         $restante $valor - ($frete $taxa_ml);
  18.         // essa linha deveria ser definida antes da linha acima
  19.         $taxa_ml $valor $tipo_anuncio
  20.        
  21.        // lucro_bruto tb está vindo do form(pode usar $lb no lugar)
  22.        $ld $lucro_bruto 2
  23. ?>