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


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)


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.