Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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:

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 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.                    
  10.                if (TSession::getValue($this->activeRecord.'_filter_'.$filterField))
  11.                {
  12.                        // add the filter stored in the session to the criteria
  13.                        $criteria->add(TSession::getValue($this->activeRecord.'_filter_'.$filterField), $logic_operator);
  14.                        $tem_filtro true;
  15.                }
  16.         }
  17.  }
  18. if (! $tem_filtro) {
  19.     $filter = new TFilter('data_suporte','=',date('Y-m-d'));
  20.     TSession::setValue($this->activeRecord.'_filter_data_suporte'$filter); //gravar na sessao(comportamento padrao da onSearch)
  21.     $criteria->add($filter);
  22. }
  23. ?>
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