FW
onChangeAction - Campo Data - Message
Fechado
Senhores, gostaria de uma nova ajuda.
Tenho um formulário bastante simples.
Nele possuo dois campos TDATE, data de ida e data de volta.
Adicionei um Change Action a um dos campos:
Porém ocorre um comportamento estranho, quando a data da viagem comparada a hoje for inferior a 15 dias, gostaria de exibir uma mensagem avisando, e setar uma variável, porém ao exibir a mensagem, o campo de data fica em branco, como posso resolver este problema???
Na minha Change Action tenho o seguinte:
Obrigado.
Tenho um formulário bastante simples.
Nele possuo dois campos TDATE, data de ida e data de volta.
Adicionei um Change Action a um dos campos:
- <?php
- $change_action = new TAction(array($this, 'onChangeAction'));
- $dt_volta->setExitAction($change_action);
- ?>
Porém ocorre um comportamento estranho, quando a data da viagem comparada a hoje for inferior a 15 dias, gostaria de exibir uma mensagem avisando, e setar uma variável, porém ao exibir a mensagem, o campo de data fica em branco, como posso resolver este problema???
Na minha Change Action tenho o seguinte:
- <?php
- public static function onChangeAction($param)
- {
- $dt_ida = $param['dt_ida'];
- $dt_volta = $param['dt_volta'];
- $vlr_dia = 60; // valor de 60 reais por dia.
- $obj = new StdClass;
- $excessao = 0;
-
- $dt_ida = strtotime(str_replace('/', '-', $dt_ida));
- $dt_volta = strtotime(str_replace('/', '-', $dt_volta));
- $hoje = strtotime(str_replace('/', '-', date('d/m/Y')));
-
- $prazo_viagem = (int)floor( ($dt_ida - $hoje) / (60 * 60 * 24));
-
- if($dt_ida < $hoje)
- {
- new TMessage('error', 'A data de IDA não pode ser menor que hoje.');
- $obj->dt_ida = '';
- }else{
-
- if($prazo_viagem < 15)
- {
- $message = 'Viagem programada com data inferior a 15 dias.';
- $message .= '<br> Será cadastrada como exceção. ';
- new TMessage('info', $message);
- $excessao = 1;
- }
-
- $diff = $dt_volta - $dt_ida;
-
- // Calcula a diferença de dias
- $dias = (int)floor( $diff / (60 * 60 * 24));
-
- $vlr_total = $vlr_dia * ($dias + 1);
- $vlr_total = number_format($vlr_total, 2, ',', '.');
-
- $obj->dias_viagem = $dias;
- $obj->alimentacao = $vlr_total;
- $obj->dias_alimenta = ($dias + 1);
-
- }
- TForm::sendData('form_solicita_viagem', $obj);
-
- }
- ?>
Obrigado.
João, tenta implementar a sua lógica dentro do bloco try/catch.
Jorge.
Adicionei o Try/Catch e não mudou nada.
Quando seleciono a data, ele faz a operação, exibe o alerta, e quando fecho a mensagem, a data não fica no campo.
Oi.
Tenta alterar a ultima linha do código para:
TForm::sendData('form_solicita_viagem', $obj, FALSE, FALSE);
Uma dúvida, para que serve a variavel $excessao ?
Gustavo.
Obrigado pela dica.
Mas também não funcionou... Tentei exibir um TAlert, mas não estou conseguindo também.
Se removo o TMessage, a data fica no campo, bem estranho.
Gustavo, ela vai servir para destacar este registro em um GRID.
Depois do cadastro, vou verificar se ela é igual a 1, se sim, alterar a cor da linha, ou algo do gênero, caracterizando urgência, e valor fora da politica.
Fernando, testei o código que você postou e aqui a data fica preenchida, independente de aparecer a mensagem ou não.
Poste todo o código que tento executar novamente.
Eu acho que o teu problema deve ser na lógica.
Uma dica para 'debugar' o código, você pode usar o TMessage('info', 'valor: '.$variavel);
com esse código você pode vendo o valor da variável durante o percurso do código.
abraços
Nataniel, mais estranho ainda.
Gustavo, fiz isto e não aparece o valor da data...
Segue o fonte do Form Completo.
Executei aqui, sem problemas. A data continua preenchida.
Faça o teste em outro navegador.
Oi.
Se eu fosse desenvolver a aplicação, em primeiro lugar:
Criaria um OnChangeAction para cada validação de cada campo.
Por exemplo, eu tenho que preencher o campo de volta para ele validar a data de IDA.
E dai ele valida a data de ida e na linha 194:
$obj->dt_ida = '';
Ele seta vazio o campo de ida.
Ou seja, eu iria criar um validador para para quando o setasse uma data ele já validasse, como por exemplo no meu código aqui:
Nataniel,
Estou usando o Google Chrome, ultima versão.
IE 8 não funciona - Nem abre a tela de login.
IE 11 não funciona - Nem abre a tela de login.
Firefox 46 - Não armazena a data no campo.
Rodando no PHP 5.4.6.
Gustavo,
Vou testar esta sua dica.
talvez esse seja o teu problema:
Rodando no PHP 5.4.6.
Gustavo.
Vou tentar atualizar, o problema que a maquina que estou usando como servidor é bastante antiga.
Esta executando em um Windows Server 2003.
Vou ver oq consigo fazer para atualizar, talvez resolva, se no teste do Nataniel funcionou normal.
Obrigado por hora.
Não vou conseguir atualizar o PHP...
Será que existe alguma outra coisa que eu possa fazer?
Na versão atualizada da ferramenta, vem o PHP 5.4.31
O estranho é que ele some o valor do campo dt_volta quando entra no if.
Mas quando a operação é maior que 15, funciona normalmente.
Como posso substituir este TMessage por um TAlert??
Quando tiro o TMessage ele funciona de boas.
Mais estranho ainda.
Se eu adicionar um Alert dentro do IF, ele aparece o alert e mais uma modal de erro, sem ter nenhuma modal adicionada.
E não calcula os demais campos, mas se eu clicar na data e der um TAB ele funciona, aparece o alert mas não a Modal de erro.
Alguma dica?? Creio que seja alguma coisa do TMessage, que causa isto.
Pessoal...
Fazendo mais testes, cheguei ao seguinte cenário.
Ele dispara o evento antes de preencher o valor.
Removi o TMessage, e adicionei um var_dump / echo.
Quando clico no campo e seleciono uma data qualquer, ele dispara com o clique e depois dispara com com o valor preenchido.
Adicionei um if(dt_ida) e resolveu o problema.
Perdi a manhã e parte da tarde nisto, hahahaha, vivendo e aprendendo.
Talvez seja meu servidor ou a versão do PHP, mas consegui contornar.
Obrigado pela ajuda pessoal.