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.
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.
- <?php
- /**
- * Idadeform Form
- * @author <your name here>
- */
- class IdadeForm extends TStandardForm
- {
- protected $form; // form
- /**
- * Form constructor
- * @param $param Request
- */
- public function __construct( $param )
- {
- parent::__construct();
- // creates the form
- $this->form = new BootstrapFormBuilder('form_nasc');
- $this->form->setFormTitle('Teste Idade');
- $nasc = new TDate('nasc');
- $idade = new TEntry('idade');
- $nasc->setSize(120);
- $nasc->setMask('dd/mm/yyyy');
- $idade->setSize(120);
- $idade->setEditable(FALSE);
- $input_exit = new TAction(array($this, 'onExitAction'));
- $nasc->setExitAction($input_exit);
- $this->form->addFields([new TLabel('Nascimento:')],[$nasc]);
- $this->form->addFields([new TLabel('Idade:')],[$idade]);
- // vertical box container
- $container = new TVBox;
- $container->style = 'wnascth: 100%';
- $container->class = 'form-container';
- $container->add($this->form);
- parent::add($container);
- }
- public static function onExitAction($param)
- {
- $hoje = new TDateTime();
- $obj = new StdClass;
- $obj->idade = $hoje->diff( $obj->nasc);
- TForm::sendData('form_nasc', $obj);
- }
- }</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!
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!
Dominando o Adianti Framework Quero me inscrever agora!
Post que acredito ter o caminho: https://www.adianti.com.br/forum/pt/view_4124?calculo-entre-duas-datas
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());
}
}
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!
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!
Ha tá,...agora tá entendido! Muito obrigado pela força!