Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
Listagem na grid filtrada por status e unidade Boa noite. Estou tentando filtrar a apresentação da grid de forma que as tarefas que estejam concluídas e canceladas não sejam mais listadas. Cabendo ao usuário filtrar por este status e verificar os registros. Fiz a seguinte lógica: ...
AA
Listagem na grid filtrada por status e unidade  
Boa noite.

Estou tentando filtrar a apresentação da grid de forma que as tarefas que estejam concluídas e canceladas não sejam mais listadas. Cabendo ao usuário filtrar por este status e verificar os registros.

Fiz a seguinte lógica:
 
  1. <?php
  2. $criteria_grid = new TCriteria;
  3. if ( $this->form->getData()->status == '' )
  4. {
  5. $criteria_grid->add(new TFilter('status', '=', 'Em andamento'), TExpression::OR_OPERATOR);
  6. $criteria_grid->add(new TFilter('status', '=', 'Pendente' ), TExpression::OR_OPERATOR);
  7. }
  8. elseif ($this->form->getData()->status == 'Cancelada')
  9. {
  10. $criteria_grid->add(new TFilter('status', '=', 'Cancelada' ), TExpression::OR_OPERATOR);
  11. }
  12. elseif ($this->form->getData()->status == 'Concluída')
  13. {
  14. $criteria_grid->add(new TFilter('status', '=', 'Concluída' ), TExpression::OR_OPERATOR);
  15. }
  16. $criteria_grid->add(new TFilter('system_unit_id', '=', TSession::getValue('userunitid') ), TExpression::AND_OPERATOR);
  17. parent::setCriteria($criteria_grid);
  18. ?>


Aparentemente funcionou tudo como esperado, mas percebi que as tarefas que estão Em andamento aparecem tanto na Unidade Principal quanto na Unidade Filial, o que não era para acontecer já que a linha
$criteria_grid->add(new TFilter('system_unit_id', '=', TSession::getValue('userunitid') ), TExpression::AND_OPERATOR);
deveria funcionar e filtrar.

Na aplicação de exemplo changeman tem algo bem parecido na apresentação dos chamados, mas mesmo o usuário marcando o chamado como finalizado o mesmo continua a aparecer na listagem. Eu não queria com esse comportamento porque a aplicação, com o tempo, fica com uma listagem muito suja, cheia de tarefas/chamados, desnecessários.

Alguém consegue visualizar uma solução para isso?

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


AA

Para quem tiver interesse, consegui resolver a lógica com:
 
  1. <?php
  2. $criteria_grid = new TCriteria;
  3. if ( $this->form->getData()->status == '' )
  4. {
  5. $criteria_grid->add(new TFilter('status','NOT IN', array('Concluída', 'Cancelada') ));
  6. }
  7. elseif ($this->form->getData()->status == 'Cancelada')
  8. {
  9. $criteria_grid->add(new TFilter('status', '=', 'Cancelada' ), TExpression::OR_OPERATOR);
  10. }
  11. elseif ($this->form->getData()->status == 'Concluída')
  12. {
  13. $criteria_grid->add(new TFilter('status', '=', 'Concluída' ), TExpression::OR_OPERATOR);
  14. }
  15. $criteria_grid->add(new TFilter('system_unit_id', '=', TSession::getValue('userunitid') ), TExpression::AND_OPERATOR);
  16. parent::setCriteria($criteria_grid);
  17. ?>
LC

Alison eu uso o:
 
  1. <?php
  2. echo $criteria_grid->dump();
  3. ?>


Assim consigo ver se esta ficando na logica que quero os filtros

As vezes precisa criar uma TCriteria adicionar os filtros com o operador TExpression::OR_OPERATOR e depois adicionar este TCriteria dentro da TCriteria principal, tipo:
 
  1. <?php
  2. $criteria_status = new TCriteria;
  3. $criteria_status->add(new TFilter('status', '=', 'Em andamento'), TExpression::OR_OPERATOR);
  4. $criteria_status->add(new TFilter('status', '=', 'Pendente' ), TExpression::OR_OPERATOR);
  5. $criteria_grid->add($criteria_status);
  6. ?>