Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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 completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto 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. ?>