Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Calcular idade em OnExitAction Boa noite pessoal, Estou com um probleminha que acredito ser coisa simples, mas confesso não estar conseguindo evoluir. É o seguinte, preciso que calcular a idade de acordo com a data informada em um campo. Assim que o usuário selecionar a data de nascimento por exemplo o campo em questão é preenchido automaticamente com a idade. Pesquisei aqui no forum e encontrei algo que quase seria o qu...
JP
Calcular idade em OnExitAction  
Boa noite pessoal,
Estou com um probleminha que acredito ser coisa simples, mas confesso não estar conseguindo evoluir. É o seguinte, preciso que calcular a idade de acordo com a data informada em um campo. Assim que o usuário selecionar a data de nascimento por exemplo o campo em questão é preenchido automaticamente com a idade.
Pesquisei aqui no forum e encontrei algo que quase seria o que eu preciso, também tentei me basear na classe "FormInteractionsView" do tutor, mas nada.
Abaixo deixo o ultimo codigo testado, se alguém puder ajudar, ficaria agradecido.

  1. <?php
  2. /**
  3.  * Idadeform Form
  4.  * @author  <your name here>
  5.  */
  6. class IdadeForm extends TStandardForm
  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.         
  19.         // creates the form
  20.         $this->form = new BootstrapFormBuilder('form_nasc');
  21.         $this->form->setFormTitle('Teste Idade');
  22.         $nasc                    = new TDate('nasc');
  23.         $idade                   = new TEntry('idade');
  24.         
  25.         $nasc->setSize(120);
  26.         $nasc->setMask('dd/mm/yyyy');
  27.         $idade->setSize(120);
  28.         $idade->setEditable(FALSE);
  29.         
  30.         $input_exit = new TAction(array($this'onExitAction'));
  31.         $nasc->setExitAction($input_exit);
  32.         
  33.         $this->form->addFields([new TLabel('Nascimento:')],[$nasc]);
  34.         $this->form->addFields([new TLabel('Idade:')],[$idade]);
  35.                 
  36.      
  37.         // vertical box container
  38.         $container = new TVBox;
  39.         $container->style 'wnascth: 100%';
  40.         $container->class 'form-container';
  41.         $container->add($this->form);
  42.         parent::add($container);
  43.     } 
  44.     
  45.     public static function onExitAction($param)
  46.     {
  47.         $hoje = new TDateTime();
  48.         
  49.         $obj = new StdClass;
  50.         $obj->idade $hoje->diff$obj->nasc);
  51.         TForm::sendData('form_nasc'$obj);
  52.        
  53.     }
  54.     
  55. }</code>

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (5)


JP

Post que acredito ter o caminho: https://www.adianti.com.br/forum/pt/view_4124?calculo-entre-duas-datas
ER

uso assim:

$DTA_NASCIMENTO = new TDate('DTA_NASCIMENTO');
$IDADE_ATUAL = new TEntry('IDADE_ATUAL');

$DTA_NASCIMENTO->setExitAction(new TAction([$this,'onVerDtaNascimento']));



public static function onVerDtaNascimento($param = null)
{
try
{
//code here
//////////////////////////////////////////////////////////////////////////////////
//--- Vericar data de hoje com data de nascimento e calcular idade atual.
//////////////////////////////////////////////////////////////////////////////////
$idade = 0;
$nascimento = ($param['DTA_NASCIMENTO']);
if ($nascimento)
{
$nascimento = explode('/', $nascimento); //Cria um array com os campos da data de nascimento
$data = date('d/m/Y');
$data = explode('/', $data); //Cria um array com os campos da data atual
$idade = ($data[2] - $nascimento[2]); //ano atual - ano de nascimento
if ($nascimento[1] > $data[1]) $idade = $idade; //Se o mês de nascimento for maior que o mês atual, diminui um ano
//se o mês de nascimento for igual ao mês atual, precisamos ver os dias
if ($nascimento[1] == $data[1])
{
if ($nascimento[0] <= $data[0]) $idade = $idade;
else $idade = ($idade-1);
}
}
//--- Monta um objecto de preenchimento para o formulário principal ($fill_data)
//---------------------------------------------------
$fill_data = new StdClass;
$fill_data->IDADE_ATUAL = $idade;
//--- Envia um objecto com os dados acima selecionados para o formulário principal.
TForm::SendData((self::$formName), $fill_data);
//////////////////////////////////////////////////////////////////////////////////
//Fim-Vericar data de hoje com data de nascimento e calcular idade atual.
//////////////////////////////////////////////////////////////////////////////////

//</autoCode>
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
}
}
JP

Bom dia! Puts Carlos Roberto!
Fiz a adaptação aqui e foi perfeito. Exatamente o que eu precisava. Ajudou demais cara! Só ficou uma duvida. Sou novo no uso do framework, mas ja é a segunda ajuda que recebo que para enviar os dados para o formulário a linha do "TForm" tem o parametro "self". Este deveria capturar o nome do formulário em questão? Porque comigo não funciona se eu não informar o nome do formulário ao invés de usar a váriavel $formName.
Saberia dizer porque? É só uma curiosidade mesmo, ja fez muito por mim. Agradeço demais o apoio!
ER

Olá Jussimar, vi sua mensagem agora!

Olha como é definido no meu codigo abaixo e coloca no seu para ver se resolve,

Na Class em TPage tem:

private static $formName = 'form_Cfcweb20';

Que é declarada no inicio do formulario, cada formulário tem essa declaração com nome diferente, olha como está na sua e coloca mais ou menos igual!


  1. <?php
  2. // Mostra erros.
  3. //==============
  4. //ini_set('display_errors',1);
  5. //ini_set('display_startup_erros',1);
  6. //error_reporting(E_ALL);
  7. class Cfcweb20Form extends TPage
  8. {
  9.     protected $form;
  10.     private $formFields = [];
  11.     private static $database 'cfcwebsystem';
  12.     private static $activeRecord 'Cfcweb20';
  13.     private static $primaryKey 'CODIGO';
  14.     private static $formName 'form_Cfcweb20'; <==AQUI....            
  15.     use Adianti\Base\AdiantiMasterDetailTrait;
  16.     use Adianti\Base\AdiantiFileSaveTrait;
  17.     /**
  18.      * Form constructor
  19.      * @param $param Request
  20.      */
  21.     public function __construct$param )
  22.     {
  23.         parent::__construct();
  24.         // creates the form
  25.         $this->form = new BootstrapFormBuilder(self::$formName); <==AQUI...
  26.         // define the form title
  27.         $this->form->setFormTitle('Processos');
  28.         blablabla
JP

Ha tá,...agora tá entendido! Muito obrigado pela força!