Filtros não funcionar data grid Ola, pessoa, estou tentando criar um filtro na data grid, porém sem sucesso, alguém poderia me auxiliar, não estou conseguindo identificar onde estou cometendo o erro. Segue estrutura da página Grid com o filtro ...
RB
Filtros não funcionar data grid  
Ola, pessoa, estou tentando criar um filtro na data grid, porém sem sucesso, alguém poderia me auxiliar, não estou conseguindo identificar onde estou cometendo o erro.

Segue estrutura da página
Grid com o filtro
 
  1. <?php
  2. /**
  3. * DatagridQuickView
  4. */
  5. class ClienteFisicoGrid extends TPage
  6. {
  7. private $datagrid;
  8. private $pageNavigation;
  9. private $loaded;
  10. private $form_header;
  11. private $form_grid;
  12. private $form_footer;
  13. private $editar;
  14. private $order_nome;
  15. private $table_box;
  16. public function __construct()
  17. {
  18. parent::__construct();
  19. parent::include_css('app/resources/custom-table.css');
  20. parent::include_css('app/resources/blue_modificado.css');
  21. new TSession;
  22. $this->table_box = new TTable;
  23. $this->table_box->id = 'table_box';
  24. $list = new TCombo('grid_cliente');
  25. $combo_items = array();
  26. $combo_items['1'] ='fisico';
  27. $combo_items['2'] ='Juridico';
  28. $list->addItems($combo_items);
  29. //cria o formulário de buscas
  30. $this->form_header = new TForm('form_search_cliente');
  31. //cria os campos de buscas
  32. $nome_cliente = new TEntry('nome_cliente');
  33. $cpf_cliente = new TEntry('cpf_cliente');
  34. $nome_cliente->placeholder = "Nome";
  35. $cpf_cliente->placeholder = "CPF";
  36. $cpf_cliente->setMask('999.999.999.99');
  37. $nome_cliente->setSize(208);
  38. $cpf_cliente->setSize(126);
  39. //mantém os campos preenchidos com os valores da sessão
  40. $nome_cliente->setValue(TSession::getValue('nome_cliente'));
  41. $cpf_cliente->setValue(TSession::getValue('cpf_cliente'));
  42. $table = new TTable;
  43. $table->style="text-align:right;float:left;";
  44. // adds a row to the table
  45. $row = $table->addRow();
  46. $cell = $row->addCell('');//cria uma célula de espaçamento
  47. $cell->width = PHP_SAPI == 'cli' ? 10:20;//define a largura da célula
  48. //cria os botões de ação
  49. $button1 = new TButton('find');
  50. $button1->setAction(new TAction(array($this,'onSearch')),'');
  51. $button1->setImage('fa:search blue');
  52. $bt1a = new TButton('novo');
  53. $bt1b = new TButton('refresh');
  54. $bt1a->setAction(new TAction(array('ClienteFisicoBuilder','onClear')));
  55. $bt1b->setAction(new TAction(array($this, 'onReload')));
  56. $bt1a->setLabel('Novo');
  57. $bt1b->setLabel('atualizar');
  58. $bt1a->setImage('ico_edit.png');
  59. $bt1b->setImage('bs:edit green');
  60. $hbox1 = new THBox;
  61. $hbox1->style='float:left;';
  62. $hbox1->addRowSet( $bt1a, $bt1b );
  63. $row->addCell($hbox1);
  64. $row->addCell($cpf_cliente);
  65. $row->addCell($nome_cliente);
  66. $row->addCell($button1);
  67. //$cell = $row->addCell('');//cria uma célula de espaçamento
  68. $this->form_header->add($table);
  69. //define quais os campos do formulário de pesquisa
  70. $this->form_header->setFields(array($bt1a,$bt1b,$nome_cliente,$cpf_cliente,$button1));
  71. $this->form_footer = new TForm('form_cliente_footer');
  72. $this->datagrid = new TDataGrid;
  73. $this->datagrid->style="width: 100%,float:left;"; // Responsive
  74. $id = new TDataGridColumn('id','#','center');
  75. $nome = new TDataGridColumn('pessoa->nome','Nome','left');
  76. $telefone = new TDataGridColumn('contato->telefone','Telefone','center');
  77. $email = new TDataGridColumn('contatoweb->email','E-mail','left');
  78. //$genero = new TDataGridColumn('fisica->genero_id','Sexo','');
  79. $data_nascimento = new TDataGridColumn('pessoa->data_nascimento','Data Nascto','center');
  80. //$civil = new TDataGridColumn('fisica->civil->descricao','Estado Cívil','left');
  81. //$etnia = new TDataGridColumn('fisica->etnia->descricao','Etnia','left');
  82. $cpf = new TDataGridColumn('fisica->cpf','CPF','center');
  83. $rg = new TDataGridColumn('fisica->rg','RG','center');
  84. //$site = new TDataGridColumn('site->url','Site','left');
  85. $cidade = new TDataGridColumn('endereco->endereco->cidade','Cidade','center');
  86. $uf = new TDataGridColumn('endereco->endereco->uf','UF','center');
  87. $editar = new TDataGridColumn('editar','','center');
  88. $deletar = new TDataGridColumn('deletar','','center');
  89. $editar->colspan = 2;
  90. $editar->style = "border-style:solid;border-right-color: #ccc;border-collapse:collapse";
  91. $deletar->style = "border-style:solid;border-right-color: #069;border-collapse:collapse;display:none;";
  92. $this->datagrid->addColumn($id);
  93. $this->datagrid->addColumn($nome);
  94. $this->datagrid->addColumn($telefone);
  95. $this->datagrid->addColumn($email);
  96. //$this->datagrid->addColumn($genero);
  97. $this->datagrid->addColumn($data_nascimento);
  98. //$this->datagrid->addColumn($civil);
  99. //$this->datagrid->addColumn($etnia);
  100. $this->datagrid->addColumn($cpf);
  101. $this->datagrid->addColumn($rg);
  102. //$this->datagrid->addColumn($cep);
  103. //$this->datagrid->addColumn($logradouro);
  104. //$this->datagrid->addColumn($bairro);
  105. $this->datagrid->addColumn($cidade);
  106. $this->datagrid->addColumn($uf);
  107. //$this->datagrid->addColumn($site);
  108. $this->datagrid->addColumn($editar);
  109. $this->datagrid->addColumn($deletar);
  110. // define the transformer method over image
  111. $data_nascimento->setTransformer( function($value, $object, $row) {
  112. $date = new DateTime($value);
  113. return $date->format('d/m/Y');
  114. });
  115. $telefone->setTransformer( function($value, $object, $row) {
  116. $fone = '';
  117. if ($value):
  118. if (strlen($value) == 8):
  119. $fone = substr($value, 0, 4) . '-' . substr($value, 4, 8);
  120. else:
  121. $fone = substr($value, 0, 5) . '-' . substr($value, 5, 9);
  122. endif;
  123. endif;
  124. return $fone;
  125. });
  126. $cpf->setTransformer( function($value, $object, $row) {
  127. $cpf = '';
  128. if ($value):
  129. if (strlen($value) == 11):
  130. $cpf = substr($value, 0,3).'.'.substr($value,3,3).'.'.substr($value, 6,3).'-'.substr($value, 9,2);
  131. endif;
  132. endif;
  133. return $cpf;
  134. });
  135. $rg->setTransformer( function($value, $object, $row) {
  136. $rg = '';
  137. if ($value):
  138. if (strlen($value) == 9):
  139. $rg = substr($value, 0,2).'.'.substr($value,2,3).'.'.substr($value, 5,3).'-'.substr($value, 8,8);
  140. endif;
  141. endif;
  142. return $rg;
  143. });
  144. // creates the datagrid actions
  145. $order1 = new TAction(array($this, 'onReload'));
  146. $order2 = new TAction(array($this, 'onReload'));
  147. $this->order_nome = $nome;
  148. // define the ordering parameters
  149. $order1->setParameter('order', 'id');
  150. $order2->setParameter('order', $this->order_nome);
  151. // assign the ordering actions
  152. $id->setAction($order1);
  153. $nome->setAction($order2);
  154. // creates the datagrid model
  155. $this->datagrid->createModel();
  156. // creates the page navigation
  157. $this->pageNavigation = new TPageNavigation;
  158. $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
  159. $this->pageNavigation->setWidth($this->datagrid->getWidth());
  160. $box_grid = new TElement('div');
  161. $box_grid->id = 'box_grid';
  162. $box_grid->class = 'box_grid';
  163. // wrap the page content using vertical box
  164. $vbox = new TVBox;
  165. //$vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  166. $box_grid->add($this->form_header);
  167. $box_grid->add($this->form_footer);
  168. $box_grid->add($this->datagrid);
  169. //$box_grid->add($frame1);
  170. //$this->form_footer->setFields(array($bt1a,$bt1b));
  171. $box_grid->add($this->pageNavigation);
  172. $this->table_box->add($box_grid);
  173. $scroll = new TScroll();
  174. $scroll->style ='width:auto;heigth:auto';
  175. $scroll->add($this->table_box);
  176. $vbox->add($scroll);
  177. parent::add($vbox);
  178. }
  179. /**
  180. * Load the data into the datagrid
  181. */
  182. public function onReload($param)
  183. {
  184. try
  185. {
  186. TTransaction::open('centinel');//abre a transação com a base
  187. $get_organizacion_id = TSession::getValue('organizacion_id');//pega id da empresa na seção do usuário
  188. //cria um repositório para carregar 'Cliente '
  189. $repository = new TRepository('Cliente');
  190. $limit = 10;
  191. $criteria = new TCriteria; //cria um critério para filtrar os dados conforme usuário logado
  192. //default order
  193. $newparam = $param;
  194. if (isset($newparam['order']) AND $newparam['order']=='pessoa->nome')
  195. {
  196. $newparam['order'] = '(select nome from pessoa where id = id)';
  197. }
  198. // default order
  199. if (empty($newparam['order']))
  200. {
  201. $newparam['order'] = 'id';
  202. $newparam['direction'] = 'asc';
  203. }
  204. $criteria->setProperties($newparam); // order, offset
  205. $criteria->add(new TFilter('organizacao_id', '=', $get_organizacion_id));
  206. $criteria->add(new TFilter('ativo', '=', 1));
  207. $criteria->add(new TFilter('tipo_pessoa_id','=',1));
  208. $criteria->setProperty('limit',$limit);
  209. if (TSession::getValue('cliente_filter1'))
  210. {
  211. //adiciona o filtro da sessao no criterio
  212. $criteria->add(TSession::getValue('cliente_filter1'));
  213. }
  214. if (TSession::getValue('cliente_filter2'))
  215. {
  216. //adiciona o filtro da sessao no criterio
  217. $criteria->add(TSession::getValue('cliente_filter2'));
  218. }
  219. //carrega os objetos conforme o criterio
  220. $objects = $repository->load($criteria,FALSE);
  221. //limpa a datagrid
  222. $this->datagrid->clear();
  223. if($objects)
  224. {
  225. foreach($objects as $object)
  226. {
  227. //cria os botões de ação e adiciona a datagrid
  228. $edit = new TImage('fa:edit blue');
  229. $action = new TAction(array('ClienteFisicoBuilder', 'onEdit'));
  230. $action->setParameter('key',$object->id);
  231. $object->editar = $edit;
  232. $a = new TActionLink($edit, $action);
  233. $del = new TImage('fa:trash red');
  234. $action1 = new TAction(array($this, 'onDelete'));
  235. $action1->setParameter('key',$object->id);
  236. $object->deletar = $del;
  237. $b = new TActionLink($del, $action1);
  238. $object->editar = $a;
  239. $object->deletar = $b;
  240. $this->datagrid->addItem($object);
  241. }
  242. }
  243. // reset the criteria for record count
  244. $criteria->resetProperties();
  245. $count = $repository->count($criteria);
  246. $this->pageNavigation->setCount($count); // count of records
  247. $this->pageNavigation->setProperties($param); // order, page
  248. $this->pageNavigation->setLimit($limit); // limit
  249. TTransaction::close();
  250. $this->loaded = TRUE;
  251. }
  252. catch (Exception $e)
  253. {
  254. new TMessage('error',$e->getMessage());
  255. TTransaction::rollback();
  256. }
  257. }
  258. /**
  259. * shows the page
  260. */
  261. public function show(){
  262. // check if the datagrid is already loaded
  263. if (!$this->loaded){
  264. $this->onReload( func_get_arg(0) );
  265. }
  266. parent::show();
  267. }
  268. function onDelete($param)
  269. {
  270. // define the next action
  271. $action3 = new TAction(array($this, 'onInative'));
  272. $action3->setParameters($param); // pass 'key' parameter ahead
  273. // shows a dialog to the user
  274. new TQuestion(TAdiantiCoreTranslator::translate('Do you really want to delete ?'),$action3);
  275. }
  276. function onInative($param)
  277. {
  278. try
  279. {
  280. TTransaction::open('centinel');
  281. TTransaction::setLoggerFunction(function($param)
  282. {
  283. print $param.'<br/>';
  284. });
  285. $organizacao_id = TSession::getValue('organizacion_id');
  286. $atualizacao = date('Y-m-d H:m:s');
  287. $key = $param['key'];
  288. $criteria = new TCriteria;
  289. $criteria->add(new TFilter('id', '=', $key));
  290. $criteria->add(new TFilter('organizacao_id', '=', $organizacao_id));
  291. $repository = new TRepository('Cliente');
  292. $clientes = $repository->load($criteria);
  293. foreach ($clientes as $cliente)
  294. {
  295. $cliente->ativo = 0;
  296. $cliente->atualizacao = $atualizacao;
  297. $cliente->store();
  298. }
  299. TTransaction::close();
  300. new TMessage('info',TAdiantiCoreTranslator::translate('Records deleted'), new TAction(array($this, 'onReload')));
  301. }
  302. catch (Exception $e)
  303. {
  304. new TMessage('error', $e->getMessage());
  305. }
  306. }
  307. function onSearch()
  308. {
  309. //obtém os dados do formulário
  310. $data = $this->form_header->getData();
  311. //verifica se o nome do cliente foi preenchido
  312. if ($data->nome_cliente)
  313. {
  314. //cria um objeto de filtro
  315. //$filter = new TFilter('cliente_nome','like',"{$data->cliente_nome}%");
  316. $filter = new TFilter('(select nome from pessoa where id = cliente.pessoa_id)','like',"{$data->nome_cliente}%");
  317. //armazena o filtro na sessão
  318. TSession::setValue('cliente_filter1',$filter);
  319. TSession::setValue('cliente_nome',$data->nome_cliente);
  320. }
  321. else //caso contrário limpa o filtro
  322. {
  323. TSession::setValue('cliente_filter1',NULL);
  324. TSession::setValue('cliente_nome','');
  325. }
  326. //verifica se o cpf foi preenchido
  327. if ($data->cpf_cliente)
  328. {
  329. //retira os caracters especiais do cpf
  330. $item = str_replace('.','',$data->cpf_cliente);
  331. //cria um objeto de filtro pelo cpf do cliente
  332. $filter = new TFilter('(select cpf from fisica where pessoa_id = cliente.pessoa_id)','like',"{$item}%");
  333. //armazena o filtro na sessão
  334. TSession::setValue('cliente_filter2',$filter);
  335. TSession::setValue('cliente_cpf',$item);
  336. }
  337. else //caso contrário limpa o filtro
  338. {
  339. TSession::setValue('cliente_filter2',NULL);
  340. TSession::setValue('cliente_cpf','');
  341. }
  342. //mantém o formulário com os dados preenchidos após a postagem
  343. $this->form_header->setData($data);
  344. $param = array();
  345. $param['offset'] = 0;
  346. $param['first_page'] = 1 ;
  347. //recarrega a datagrid reinicializando a paginação
  348. $this->onReload($param);
  349. }
  350. }
  351. ?>


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)


NR

Acredito que o problema esteja na linha abaixo:
 
  1. <?php
  2. //$this->table_box->add($box_grid); //trocar por addRowSet
  3. $this->table_box->addRowSet($box_grid);
  4. ?>

A função add está adicionando uma div em uma tabela, quando seria necessário adicionar linha e coluna antes(TR e TD).
RB

Nataniel, bom dia.

Muito obrigado, funcionou perfeito. valeu.