Inserir um filtro. Olá, estou usando um formulário com TCheckButton() baseado no exemplo do tutor http://www.adianti.com.br/framework_files/tutor/index.php?class=MultiCheckView&method=onReload O meu problema é que não estou conseguindo colocar um filtro na grid ...
AR
Inserir um filtro.  
Olá, estou usando um formulário com TCheckButton() baseado no exemplo do tutor www.adianti.com.br/framework_files/tutor/index.php?class=MultiCheckV

O meu problema é que não estou conseguindo colocar um filtro na grid

 
  1. <?php
  2. public function onReload( $param = NULL )
  3. {
  4. // update the post action parameters to pass
  5. // offset, limit, page and other info in
  6. // order to preserve the pagination after post
  7. $this->postAction->setParameters($param); // important!
  8. return parent::onReload( $param );
  9. }
  10. /**
  11. * Transform the objects before load them into the datagrid
  12. */
  13. public function onBeforeLoad( $objects )
  14. {
  15. TTransaction::open('dbaerp');
  16. //----------------------------------------------------------
  17. $user_id='';
  18. $user_name ='';
  19. $user = SystemUser::newFromLogin(TSession::getValue('login') );
  20. if ($user)
  21. {
  22. $user_id = $user->id;
  23. $user_name = $user->name;
  24. $vendedor_id = $user->vendedor_id;
  25. }
  26. if (!empty($vendedor_id))
  27. {
  28. $objects = Pedido::where('vendedor_id', '=', $vendedor_id)
  29. ->load();
  30. }
  31. TTransaction::close();
  32. foreach ($objects as $object)
  33. {
  34. $object->check = new TCheckButton('check_'.$object->id);
  35. $object->check->setIndexValue('on');
  36. $this->form->addField($object->check); // important!
  37. }
  38. }
  39. ?>


Quando coloco o filtro por vendedor_id:

 
  1. <?php
  2. if (!empty($vendedor_id))
  3. {
  4. // $criteria->add(new TFilter('vendedor_id', '=', $vendedor_id));
  5. $objects = Pedido::where('vendedor_id', '=', $vendedor_id)
  6. ->load();
  7. }
  8. ?>


Além de não filtrar, o campo check deixa de aparecer na grid.

Podem me ajudar ?

Obrigado.

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)


FC

Ola Adriano, eu criei um exemplo que filtra no TCheckList muito parecido com que vc quer.
felipecortez.kinghost.net/tutor7/index.php?class=FormCheckListView

Mas na sua classe, o filtro é feito em cima da classe pois ela é uma TStandardList olha essa parte:
$this->addFilterField('customer_id', '=', 'customer_id');
AR

Obrigado Felipe!

Com a sua sugestão ficou melhor, só que surgiram outros problemas.

 
  1. <?php
  2. $cliente->setMinLength(1);
  3. $this->order_list->addColumn('id', 'Id', 'center', '10%');
  4. $this->order_list->addColumn('cliente->nome', 'Cliente', 'left', '50%');
  5. $this->order_list->addColumn('vendedor->nome', 'Vendedor', 'left', '10%');
  6. $this->order_list->addColumn('estado_pedido->nome', 'Estado', 'left', '10%');
  7. $this->order_list->addColumn('dt_pedido', 'Dt pedido', 'left', '10%');
  8. $this->order_list->addColumn('valor_total', 'Valor total', 'left', '10%');
  9. ?>


1 - Não consigo chamar o nome do cliente (da classe Pessoa)
erro:
Sem transação ativa com a base de dados:
AdiantiDatabaseTRecord::load
Pessoa

Sem transação ativa com a base de dados:
AdiantiDatabaseTRecord::load
Vendedor

Desta maneira, como posso ativar a base de dados no formulário uma vez que não posso usar:
parent::setDatabase('banco'); // defines the database
parent::setActiveRecord('Pedido'); // defines the active record

Muito obrigado.