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
Segue estrutura da página
Grid com o filtro
- <?php
- /**
- * DatagridQuickView
- */
- class ClienteFisicoGrid extends TPage
- {
- private $datagrid;
- private $pageNavigation;
- private $loaded;
- private $form_header;
- private $form_grid;
- private $form_footer;
- private $editar;
- private $order_nome;
- private $table_box;
- public function __construct()
- {
- parent::__construct();
- parent::include_css('app/resources/custom-table.css');
- parent::include_css('app/resources/blue_modificado.css');
- new TSession;
- $this->table_box = new TTable;
- $this->table_box->id = 'table_box';
- $list = new TCombo('grid_cliente');
- $combo_items = array();
- $combo_items['1'] ='fisico';
- $combo_items['2'] ='Juridico';
- $list->addItems($combo_items);
- //cria o formulário de buscas
- $this->form_header = new TForm('form_search_cliente');
- //cria os campos de buscas
- $nome_cliente = new TEntry('nome_cliente');
- $cpf_cliente = new TEntry('cpf_cliente');
- $nome_cliente->placeholder = "Nome";
- $cpf_cliente->placeholder = "CPF";
- $cpf_cliente->setMask('999.999.999.99');
- $nome_cliente->setSize(208);
- $cpf_cliente->setSize(126);
- //mantém os campos preenchidos com os valores da sessão
- $nome_cliente->setValue(TSession::getValue('nome_cliente'));
- $cpf_cliente->setValue(TSession::getValue('cpf_cliente'));
- $table = new TTable;
- $table->style="text-align:right;float:left;";
- // adds a row to the table
- $row = $table->addRow();
- $cell = $row->addCell('');//cria uma célula de espaçamento
- $cell->width = PHP_SAPI == 'cli' ? 10:20;//define a largura da célula
- //cria os botões de ação
- $button1 = new TButton('find');
- $button1->setAction(new TAction(array($this,'onSearch')),'');
- $button1->setImage('fa:search blue');
- $bt1a = new TButton('novo');
- $bt1b = new TButton('refresh');
- $bt1a->setAction(new TAction(array('ClienteFisicoBuilder','onClear')));
- $bt1b->setAction(new TAction(array($this, 'onReload')));
- $bt1a->setLabel('Novo');
- $bt1b->setLabel('atualizar');
- $bt1a->setImage('ico_edit.png');
- $bt1b->setImage('bs:edit green');
- $hbox1 = new THBox;
- $hbox1->style='float:left;';
- $hbox1->addRowSet( $bt1a, $bt1b );
- $row->addCell($hbox1);
- $row->addCell($cpf_cliente);
- $row->addCell($nome_cliente);
- $row->addCell($button1);
- //$cell = $row->addCell('');//cria uma célula de espaçamento
- $this->form_header->add($table);
- //define quais os campos do formulário de pesquisa
- $this->form_header->setFields(array($bt1a,$bt1b,$nome_cliente,$cpf_cliente,$button1));
- $this->form_footer = new TForm('form_cliente_footer');
- $this->datagrid = new TDataGrid;
- $this->datagrid->style="width: 100%,float:left;"; // Responsive
- $id = new TDataGridColumn('id','#','center');
- $nome = new TDataGridColumn('pessoa->nome','Nome','left');
- $telefone = new TDataGridColumn('contato->telefone','Telefone','center');
- $email = new TDataGridColumn('contatoweb->email','E-mail','left');
- //$genero = new TDataGridColumn('fisica->genero_id','Sexo','');
- $data_nascimento = new TDataGridColumn('pessoa->data_nascimento','Data Nascto','center');
- //$civil = new TDataGridColumn('fisica->civil->descricao','Estado Cívil','left');
- //$etnia = new TDataGridColumn('fisica->etnia->descricao','Etnia','left');
- $cpf = new TDataGridColumn('fisica->cpf','CPF','center');
- $rg = new TDataGridColumn('fisica->rg','RG','center');
- //$site = new TDataGridColumn('site->url','Site','left');
- $cidade = new TDataGridColumn('endereco->endereco->cidade','Cidade','center');
- $uf = new TDataGridColumn('endereco->endereco->uf','UF','center');
- $editar = new TDataGridColumn('editar','','center');
- $deletar = new TDataGridColumn('deletar','','center');
- $editar->colspan = 2;
- $editar->style = "border-style:solid;border-right-color: #ccc;border-collapse:collapse";
- $deletar->style = "border-style:solid;border-right-color: #069;border-collapse:collapse;display:none;";
- $this->datagrid->addColumn($id);
- $this->datagrid->addColumn($nome);
- $this->datagrid->addColumn($telefone);
- $this->datagrid->addColumn($email);
- //$this->datagrid->addColumn($genero);
- $this->datagrid->addColumn($data_nascimento);
- //$this->datagrid->addColumn($civil);
- //$this->datagrid->addColumn($etnia);
- $this->datagrid->addColumn($cpf);
- $this->datagrid->addColumn($rg);
- //$this->datagrid->addColumn($cep);
- //$this->datagrid->addColumn($logradouro);
- //$this->datagrid->addColumn($bairro);
- $this->datagrid->addColumn($cidade);
- $this->datagrid->addColumn($uf);
- //$this->datagrid->addColumn($site);
- $this->datagrid->addColumn($editar);
- $this->datagrid->addColumn($deletar);
- // define the transformer method over image
- $data_nascimento->setTransformer( function($value, $object, $row) {
- $date = new DateTime($value);
- return $date->format('d/m/Y');
- });
- $telefone->setTransformer( function($value, $object, $row) {
- $fone = '';
- if ($value):
- if (strlen($value) == 8):
- $fone = substr($value, 0, 4) . '-' . substr($value, 4, 8);
- else:
- $fone = substr($value, 0, 5) . '-' . substr($value, 5, 9);
- endif;
- endif;
- return $fone;
- });
- $cpf->setTransformer( function($value, $object, $row) {
- $cpf = '';
- if ($value):
- if (strlen($value) == 11):
- $cpf = substr($value, 0,3).'.'.substr($value,3,3).'.'.substr($value, 6,3).'-'.substr($value, 9,2);
- endif;
- endif;
- return $cpf;
- });
- $rg->setTransformer( function($value, $object, $row) {
- $rg = '';
- if ($value):
- if (strlen($value) == 9):
- $rg = substr($value, 0,2).'.'.substr($value,2,3).'.'.substr($value, 5,3).'-'.substr($value, 8,8);
- endif;
- endif;
- return $rg;
- });
- // creates the datagrid actions
- $order1 = new TAction(array($this, 'onReload'));
- $order2 = new TAction(array($this, 'onReload'));
- $this->order_nome = $nome;
- // define the ordering parameters
- $order1->setParameter('order', 'id');
- $order2->setParameter('order', $this->order_nome);
- // assign the ordering actions
- $id->setAction($order1);
- $nome->setAction($order2);
- // creates the datagrid model
- $this->datagrid->createModel();
- // creates the page navigation
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
- $this->pageNavigation->setWidth($this->datagrid->getWidth());
- $box_grid = new TElement('div');
- $box_grid->id = 'box_grid';
- $box_grid->class = 'box_grid';
- // wrap the page content using vertical box
- $vbox = new TVBox;
- //$vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $box_grid->add($this->form_header);
- $box_grid->add($this->form_footer);
- $box_grid->add($this->datagrid);
- //$box_grid->add($frame1);
- //$this->form_footer->setFields(array($bt1a,$bt1b));
- $box_grid->add($this->pageNavigation);
- $this->table_box->add($box_grid);
- $scroll = new TScroll();
- $scroll->style ='width:auto;heigth:auto';
- $scroll->add($this->table_box);
- $vbox->add($scroll);
- parent::add($vbox);
- }
- /**
- * Load the data into the datagrid
- */
- public function onReload($param)
- {
- try
- {
- TTransaction::open('centinel');//abre a transação com a base
- $get_organizacion_id = TSession::getValue('organizacion_id');//pega id da empresa na seção do usuário
- //cria um repositório para carregar 'Cliente '
- $repository = new TRepository('Cliente');
- $limit = 10;
- $criteria = new TCriteria; //cria um critério para filtrar os dados conforme usuário logado
- //default order
- $newparam = $param;
- if (isset($newparam['order']) AND $newparam['order']=='pessoa->nome')
- {
- $newparam['order'] = '(select nome from pessoa where id = id)';
- }
- // default order
- if (empty($newparam['order']))
- {
- $newparam['order'] = 'id';
- $newparam['direction'] = 'asc';
- }
- $criteria->setProperties($newparam); // order, offset
- $criteria->add(new TFilter('organizacao_id', '=', $get_organizacion_id));
- $criteria->add(new TFilter('ativo', '=', 1));
- $criteria->add(new TFilter('tipo_pessoa_id','=',1));
- $criteria->setProperty('limit',$limit);
- if (TSession::getValue('cliente_filter1'))
- {
- //adiciona o filtro da sessao no criterio
- $criteria->add(TSession::getValue('cliente_filter1'));
- }
- if (TSession::getValue('cliente_filter2'))
- {
- //adiciona o filtro da sessao no criterio
- $criteria->add(TSession::getValue('cliente_filter2'));
- }
- //carrega os objetos conforme o criterio
- $objects = $repository->load($criteria,FALSE);
- //limpa a datagrid
- $this->datagrid->clear();
- if($objects)
- {
- foreach($objects as $object)
- {
- //cria os botões de ação e adiciona a datagrid
- $edit = new TImage('fa:edit blue');
- $action = new TAction(array('ClienteFisicoBuilder', 'onEdit'));
- $action->setParameter('key',$object->id);
- $object->editar = $edit;
- $a = new TActionLink($edit, $action);
- $del = new TImage('fa:trash red');
- $action1 = new TAction(array($this, 'onDelete'));
- $action1->setParameter('key',$object->id);
- $object->deletar = $del;
- $b = new TActionLink($del, $action1);
- $object->editar = $a;
- $object->deletar = $b;
- $this->datagrid->addItem($object);
- }
- }
- // reset the criteria for record count
- $criteria->resetProperties();
- $count = $repository->count($criteria);
- $this->pageNavigation->setCount($count); // count of records
- $this->pageNavigation->setProperties($param); // order, page
- $this->pageNavigation->setLimit($limit); // limit
- TTransaction::close();
- $this->loaded = TRUE;
- }
- catch (Exception $e)
- {
- new TMessage('error',$e->getMessage());
- TTransaction::rollback();
- }
- }
- /**
- * shows the page
- */
- public function show(){
- // check if the datagrid is already loaded
- if (!$this->loaded){
- $this->onReload( func_get_arg(0) );
- }
- parent::show();
- }
- function onDelete($param)
- {
- // define the next action
- $action3 = new TAction(array($this, 'onInative'));
- $action3->setParameters($param); // pass 'key' parameter ahead
- // shows a dialog to the user
- new TQuestion(TAdiantiCoreTranslator::translate('Do you really want to delete ?'),$action3);
- }
- function onInative($param)
- {
- try
- {
- TTransaction::open('centinel');
- TTransaction::setLoggerFunction(function($param)
- {
- print $param.'<br/>';
- });
- $organizacao_id = TSession::getValue('organizacion_id');
- $atualizacao = date('Y-m-d H:m:s');
- $key = $param['key'];
- $criteria = new TCriteria;
- $criteria->add(new TFilter('id', '=', $key));
- $criteria->add(new TFilter('organizacao_id', '=', $organizacao_id));
- $repository = new TRepository('Cliente');
- $clientes = $repository->load($criteria);
- foreach ($clientes as $cliente)
- {
- $cliente->ativo = 0;
- $cliente->atualizacao = $atualizacao;
- $cliente->store();
- }
- TTransaction::close();
- new TMessage('info',TAdiantiCoreTranslator::translate('Records deleted'), new TAction(array($this, 'onReload')));
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- }
- }
- function onSearch()
- {
- //obtém os dados do formulário
- $data = $this->form_header->getData();
- //verifica se o nome do cliente foi preenchido
- if ($data->nome_cliente)
- {
- //cria um objeto de filtro
- //$filter = new TFilter('cliente_nome','like',"{$data->cliente_nome}%");
- $filter = new TFilter('(select nome from pessoa where id = cliente.pessoa_id)','like',"{$data->nome_cliente}%");
- //armazena o filtro na sessão
- TSession::setValue('cliente_filter1',$filter);
- TSession::setValue('cliente_nome',$data->nome_cliente);
- }
- else //caso contrário limpa o filtro
- {
- TSession::setValue('cliente_filter1',NULL);
- TSession::setValue('cliente_nome','');
- }
- //verifica se o cpf foi preenchido
- if ($data->cpf_cliente)
- {
- //retira os caracters especiais do cpf
- $item = str_replace('.','',$data->cpf_cliente);
- //cria um objeto de filtro pelo cpf do cliente
- $filter = new TFilter('(select cpf from fisica where pessoa_id = cliente.pessoa_id)','like',"{$item}%");
- //armazena o filtro na sessão
- TSession::setValue('cliente_filter2',$filter);
- TSession::setValue('cliente_cpf',$item);
- }
- else //caso contrário limpa o filtro
- {
- TSession::setValue('cliente_filter2',NULL);
- TSession::setValue('cliente_cpf','');
- }
- //mantém o formulário com os dados preenchidos após a postagem
- $this->form_header->setData($data);
- $param = array();
- $param['offset'] = 0;
- $param['first_page'] = 1 ;
- //recarrega a datagrid reinicializando a paginação
- $this->onReload($param);
- }
- }
- ?>
Acredito que o problema esteja na linha abaixo:
A função add está adicionando uma div em uma tabela, quando seria necessário adicionar linha e coluna antes(TR e TD).
Nataniel, bom dia.
Muito obrigado, funcionou perfeito. valeu.