Carregar a DataGrid com um valor inicial no filtro. Boa Tarde, Estou montando um controle de apontamentos para meu controle diário da TI, e me deparei com a seguinte situação: A medida que fui alimentando, o PageNavigator foi aumentando, então fiz com que o campo de data do Filtro fosse alimentado pela data atual, para quando chamar o formulário ele trazer apenas os apontamentos do dia, embora ao mudar a data do filtro e fazer uma...
DA
Carregar a DataGrid com um valor inicial no filtro.  
Boa Tarde,

Estou montando um controle de apontamentos para meu controle diário da TI, e me deparei com a seguinte situação:

A medida que fui alimentando, o PageNavigator foi aumentando, então fiz com que o campo de data do Filtro fosse alimentado pela data atual, para quando chamar o formulário ele trazer apenas os apontamentos do dia, embora ao mudar a data do filtro e fazer uma nova busca traga os apontamentos da data informada, ou seja, não quero usar a data num Criteria, apenas que já entre filtrado pela data do dia, sem a necessidade de pressionar o botão de busca. Sei que terei que reescrever o OnSearch ou o OnShow, só não sei como executar.
Alguém pode me apontar a luz no fim do tunel?
Segue o fonte abaixo:

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 (6)


NR

Você pode reescrever a onReload e adicionar um filtro caso não haja outro.
 
  1. <?php
  2. $tem_filtro = false;
  3. // trecho da onReload que faz a verificacao por filtros
  4. if ($this->formFilters)
  5. {
  6. foreach ($this->formFilters as $filterKey => $filterField)
  7. {
  8. $logic_operator = isset($this->logic_operators[$filterKey]) ? $this->logic_operators[$filterKey] : TExpression::AND_OPERATOR;
  9. if (TSession::getValue($this->activeRecord.'_filter_'.$filterField))
  10. {
  11. // add the filter stored in the session to the criteria
  12. $criteria->add(TSession::getValue($this->activeRecord.'_filter_'.$filterField), $logic_operator);
  13. $tem_filtro = true;
  14. }
  15. }
  16. }
  17. if (! $tem_filtro) {
  18. $filter = new TFilter('data_suporte','=',date('Y-m-d'));
  19. TSession::setValue($this->activeRecord.'_filter_data_suporte', $filter); //gravar na sessao(comportamento padrao da onSearch)
  20. $criteria->add($filter);
  21. }
  22. ?>
DA

Infelizmente já existe esse filtro. Não existe uma forma de setar um valor para um filtro já existente ? Verifiquei que o campo fica preenchido na tela porém os dados não vão para o filtro, só quando pressionamos o Buscar. Teria que ser uma forma de setar pelo valor informado no campo da tela, senão ficaria fixo se colocasse na função para alimentar.
DA

Desculpe Nataniel, agora que entendi a rotina que criou, ou seja, não preciso preencher a tela de filtro, chega o valor null no OnReload e ai eu crio esse filtro que desejo. Vou testar. Desconsidere o post anterior, entendi o "não existir" como "não definifido", a rotina só passa a tratar como filtro a partir do momento que está preenchido.
DA

Mais uma vez muito obrigado, funcionou perfeitamente. Aos poucos vou pegando a lógica das funções do framework e suas ligações, só tenho que deixar de pensar um pouco como programava em Delphi.
RI

Boa tarde Damião!

Sou iniciante no Framework! E estou passando por situação similar a que vc citou acima.
É possível vc postar o script da solução que vc implementou e deu certo?

Também tenho um form, com combos, e tentry...
na tentry coloco a data atual e no combo coloco um valor Default.

Quero filtrar ao abrir está página com os valores passados e atribuidos no form.

Já tentei no modificar onReload (código do Nataniel) e no OnSearch mas não tive sucesso.

Obrigado!
DA

Bom dia, Rogério

No meu caso já queria que fosse filtrado pela data do dia, sem ter que informá-la, é o que acontece nesse trecho do código do Nataniel.

 
  1. <?php
  2. if (! $tem_filtro) {
  3. $filter = new TFilter('data_suporte','=',date('Y-m-d'));
  4. TSession::setValue($this->activeRecord.'_filter_data_suporte', $filter); //gravar na sessao(comportamento padrao da onSearch)
  5. $criteria->add($filter);
  6. }
  7. ?>

Se a variavel $tem_filtro é falsa, ou seja, não digitou nenhum valor nos campos de filtro, ele vai filtrar pelo field 'data_suporte' como o valor igual da data atual. O formulário já entra filtrado pelo data.

Usei o mesmo critério em outro formulário meu, onde queria trazer apenas os deslocamentos que não haviam sido pagos.

 
  1. <?php
  2. if (! $tem_filtro) {
  3. $filter = new TFilter('situacao','=','0');
  4. TSession::setValue($this->activeRecord.'_filter_situacao_pago', $filter); //gravar na sessao(comportamento padrao da onSearch)
  5. $criteria->add($filter);
  6. }
  7. ?>

Neste caso filtro pelo field 'situacao' igual a zero, igual a um já foi quitado.

No caso de você digitar os valores dos filtros a rotina do Adianti já faz automaticamente, sem precisar modificar o OnReload, desde que sejam definidos os devidos filtros. Pode verificar este formulario no tutor

localhost/tutor/index.php?class=StandardFormView