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. * Form constructor
  11. * @param $param Request
  12. */
  13. public function __construct( $param )
  14. {
  15. parent::__construct();
  16. // creates the form
  17. $this->form = new BootstrapFormBuilder('form_nasc');
  18. $this->form->setFormTitle('Teste Idade');
  19. $nasc = new TDate('nasc');
  20. $idade = new TEntry('idade');
  21. $nasc->setSize(120);
  22. $nasc->setMask('dd/mm/yyyy');
  23. $idade->setSize(120);
  24. $idade->setEditable(FALSE);
  25. $input_exit = new TAction(array($this, 'onExitAction'));
  26. $nasc->setExitAction($input_exit);
  27. $this->form->addFields([new TLabel('Nascimento:')],[$nasc]);
  28. $this->form->addFields([new TLabel('Idade:')],[$idade]);
  29. // vertical box container
  30. $container = new TVBox;
  31. $container->style = 'wnascth: 100%';
  32. $container->class = 'form-container';
  33. $container->add($this->form);
  34. parent::add($container);
  35. }
  36. public static function onExitAction($param)
  37. {
  38. $hoje = new TDateTime();
  39. $obj = new StdClass;
  40. $obj->idade = $hoje->diff( $obj->nasc);
  41. TForm::sendData('form_nasc', $obj);
  42. }
  43. }</code>

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 (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. bla, bla, bla
JP

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