BI
datagrid->getRowIndex
Boa noite galera!
tenho uma datagrid onde implementei a função 'onShowDetail()', esse é o método que exibe detalhes das linhas da datagrid e usa a função $this->datagrid->getRowIndex() para recuperar a posição da linha na tabela...
pois bem vamos ao problema, o método está funcionando corretamente somente quando ordeno os dados de forma crescente "asc", quando mudo para "desc" que é o que me interessa e clico para exibir os detalhes, a função $this->datagrid->getRowIndex() retorna "null" e automaticamente a ordem dos dados é alterada para "asc". alguem já passou por isso? pode me ajudar? estou usando o template III.
tenho uma datagrid onde implementei a função 'onShowDetail()', esse é o método que exibe detalhes das linhas da datagrid e usa a função $this->datagrid->getRowIndex() para recuperar a posição da linha na tabela...
pois bem vamos ao problema, o método está funcionando corretamente somente quando ordeno os dados de forma crescente "asc", quando mudo para "desc" que é o que me interessa e clico para exibir os detalhes, a função $this->datagrid->getRowIndex() retorna "null" e automaticamente a ordem dos dados é alterada para "asc". alguem já passou por isso? pode me ajudar? estou usando o template III.
- <?php
- class Ocorrencias extends TPage
- {
- private $form; // form
- private $datagrid; // listing
- private $pageNavigation;
- private $formgrid;
- private $loaded;
- private $deleteButton;
- /**
- * Class constructor
- * Creates the page, the form and the listing
- */
- public function __construct()
- {
- parent::__construct();
- // creates the form
- $this->form = new TQuickForm('form_search_ViewOcorrenciasCliente');
- $this->form->class = 'tform'; // change CSS class
- $this->form = new BootstrapFormWrapper($this->form);
- $this->form->style = 'display: table;width:100%'; // change style
- $this->form->setFormTitle('ViewOcorrenciasCliente');
- // create the form fields
- $id = new TEntry('id');
- $data_coig = new TDate('data_coig');
- $empreendimento = new TCombo('empreendimento');
- $sigla_apl = new TCombo('sigla_apl');
- $evento = new TDBCombo('evento','sqlserver','EventoGenerico','evento','evento');
- $obs = new TEntry('obs');
- //carrega os empreendimentos do cliente
- TTransaction::open('sqlserver');
- $repository = new TRepository('ViewEmpreendimentocliente');
- $criteria = new TCriteria;
- //$log_id = TSession::getValue('login_id');
- $criteria->add(new TFilter('systemuser_id', '=', TSession::getValue('login_id')));
- $collection = $repository->load($criteria);
- $items = array();
- foreach ($collection as $object)
- {
- $items[$object->empreendimento_id] = $object->sigla;
- }
- $empreendimento->addItems($items);
- TTransaction::close();
- $id->setMask('999999999999');
- // set change action for empreendimento
- $change_action = new TAction(array($this, 'onChange'));
- $empreendimento->setChangeAction($change_action);
- // add the fields
- $this->form->addQuickField('Cód', $id, '30%' );
- $this->form->addQuickField('Data', $data_coig, '47%' );
- $this->form->addQuickField('Empreendimento', $empreendimento, '50%' );
- $this->form->addQuickField('Aplicação', $sigla_apl, '50%' );
- $this->form->addQuickField('Evento', $evento, '50%' );
- $this->form->addQuickField('Observação', $obs, '50%' );
- // keep the form filled during navigation with session data
- $this->form->setData( TSession::getValue('ViewOcorrenciasCliente_filter_data') );
- // add the search form actions
- $this->form->addQuickAction(_t('Find'), new TAction(array($this, 'onSearch')), 'fa:search');
- //$this->form->addQuickAction(_t('New'), new TAction(array('', 'onEdit')), 'bs:plus-sign green');
- // creates a Datagrid
- $this->datagrid = new TDataGrid;
- //$this->datagrid = new BootstrapDatagridWrapper($this->datagrid);
- $this->datagrid->style = 'width: 100%';
- $this->datagrid->setHeight(320);
- //$this->datagrid->datatable = 'true';
- //$this->datagrid->enablePopover('Popover', 'Hi <b> {name} </b>');
- // creates the datagrid columns
- $column_id = new TDataGridColumn('id', 'Cód', 'center');
- $column_data_coig = new TDataGridColumn('data_coig', 'Data', 'center');
- $column_hora = new TDataGridColumn('hora', 'Hora', 'center');
- $column_empreendimento = new TDataGridColumn('empreendimento', 'Empreendimento', 'left');
- $column_sigla_apl = new TDataGridColumn('sigla_apl', 'Aplicação', 'center');
- $column_evento = new TDataGridColumn('evento', 'Evento / Trip', 'left');
- $column_obs = new TDataGridColumn('obs', 'Observação', 'left');
- $column_imagem = new TDataGridColumn('imagem', 'Imagem', 'left');
- // add the columns to the DataGrid
- $this->datagrid->addColumn($column_id);
- $this->datagrid->addColumn($column_data_coig);
- $this->datagrid->addColumn($column_hora);
- $this->datagrid->addColumn($column_empreendimento);
- $this->datagrid->addColumn($column_sigla_apl);
- $this->datagrid->addColumn($column_evento);
- $this->datagrid->addColumn($column_obs);
- $this->datagrid->addColumn($column_imagem);
- $column_id->setTransformer(array($this, 'formatRelevancia'));
- // creates the datagrid column actions
- $order_id = new TAction(array($this, 'onReload'));
- $order_id->setParameter('order', 'id');
- $column_id->setAction($order_id);
- $order_data_coig = new TAction(array($this, 'onReload'));
- $order_data_coig->setParameter('order', 'data_coig');
- $column_data_coig->setAction($order_data_coig);
- $order_hora = new TAction(array($this, 'onReload'));
- $order_hora->setParameter('order', 'hora');
- $column_hora->setAction($order_hora);
- // creates two datagrid actions
- $action = new TDataGridAction(array($this, 'onShowDetail'));
- $action->setLabel('Detalhes');
- $action->setImage('ico_view.png');
- $action->setField('id');
- // add the actions to the datagrid
- $this->datagrid->addAction($action);
- // define the transformer method over image
- $column_data_coig->setTransformer( function($value, $object, $row) {
- $date = new DateTime($value);
- return $date->format('d/m/Y');
- });
- // create EDIT action
- //$action_edit = new TDataGridAction(array('', 'onEdit'));
- //$action_edit->setUseButton(TRUE);
- //$action_edit->setButtonClass('btn btn-default');
- //$action_edit->setLabel(_t('Edit'));
- //$action_edit->setImage('fa:pencil-square-o blue fa-lg');
- //$action_edit->setField('id');
- //$this->datagrid->addAction($action_edit);
- // create 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());
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 90%';
- $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add(TPanelGroup::pack('', $this->form));
- $container->add($this->datagrid);
- $container->add($this->pageNavigation);
- parent::add($container);
- }
- //transformar a linha "colorir as mais relevantes"
- public function formatRelevancia($id, $object, $row)
- {
- if (PHP_SAPI !== 'cli') // just in the web version
- {
- if ($object->relevancia_id == 2)
- {
- $row->style = "color: blue";//relevancia media
- //return $relevancia_id;
- }
- elseif($object->relevancia_id == 3)
- {
- $row->style = "color: red";//relevancia alta
- //return $relevancia_id;
- }
- else
- {
- $row->style = "color: black";//relevancia normal 'background'
- }
- return $id;
- }
- }
- /**
- DETALHES
- */
- public function onShowDetail( $param )
- {
- // get row position
- $pos = $this->datagrid->getRowIndex('id', $param['key']);
- var_dump($pos);
- //var_dump($param);
- if ($pos >= 0){
- TTransaction::open('sqlserver');
- $objeto = new ViewOcorrenciasGerais($param['key']);
- $user_post = new SystemUser($objeto->systemuser_id);
- $user_edit = new SystemUser($objeto->user_edicao);
- // get row by position
- $current_row = $this->datagrid->getRow($pos);
- $current_row->style = "background-color: #43CD80; color:white; text-shadow:none";
- // create a new row
- if ($objeto->validador == 1){
- $row3 = new TTableRow;
- $row3->style = "background-color: #E0DEF8; color: black";
- $cell = $row3->addCell("<b><p style='color: red'>Ocorrência Validada!</p></b> ");
- $cell->colspan = 9;
- $this->datagrid->insert($pos +1, $row3);
- }
- // create a new row
- if ($objeto->user_edicao){
- $row2 = new TTableRow;
- $row2->style = "background-color: #E0DEF8; color: black";
- $cell = $row2->addCell("<b>Atualizado por:</b> ". ucfirst($objeto->editor).", <b>na data:</b> ".date('d/m/y H:i:s', strtotime($objeto->data_edicao)));
- $cell->colspan = 9;
- $this->datagrid->insert($pos +1, $row2);
- }
- $row1 = new TTableRow;
- $row1->style = "background-color: #E0DEF8; color: black";
- $cell = $row1->addCell("<b>Postado por:</b> ". ucfirst($objeto->user_post). ", <b>na data:</b> ".date('d/m/y H:i:s', strtotime($objeto->agora)));
- $cell->colspan = 9;
- $this->datagrid->insert($pos +1, $row1);
- if ($objeto->nivel_montante and $objeto->potencia){
- $row = new TTableRow;
- $row->style = "background-color: #E0DEF8; color: black";
- $cell = $row->addCell("<b>Nível Montante:</b> $objeto->nivel_montante m. <b>- Potência ativa:</b> $objeto->potencia kW.");
- $cell->colspan = 9;
- $this->datagrid->insert($pos +1, $row);
- } elseif ($objeto->nivel_montante and empty ($objeto->potencia)) {
- $row = new TTableRow;
- $row->style = "background-color: #E0DEF8; color: black";
- $cell = $row->addCell("<b>Nível Montante:</b> $objeto->nivel_montante m.");
- $cell->colspan = 9;
- $this->datagrid->insert($pos +1, $row);
- } elseif (empty($objeto->nivel_montante) and $objeto->potencia) {
- $row = new TTableRow;
- $row->style = "background-color: #E0DEF8; color: black";
- $cell = $row->addCell("<b>Potência ativa:</b> $objeto->potencia kW.");
- $cell->colspan = 9;
- $this->datagrid->insert($pos +1, $row);
- }
- if (!empty($objeto->evento_real_id)) {
- $real = new EventoReal($objeto->evento_real_id);
- $row = new TTableRow;
- $row->style = "background-color: #E0DEF8; color: black";
- $cell = $row->addCell("<b>Evendo Real: </b>$real->evento ");
- $cell->colspan = 9;
- $this->datagrid->insert($pos +1, $row);
- }
- TTransaction::close();
- }
- }
- /**
- * Register the filter in the session
- */
- public function onSearch()
- {
- // get the search form data
- $data = $this->form->getData();
- // clear session filters
- TSession::setValue('Ocorrencias_filter_id', NULL);
- TSession::setValue('Ocorrencias_filter_data_coig', NULL);
- TSession::setValue('Ocorrencias_filter_empreendimento', NULL);
- TSession::setValue('Ocorrencias_filter_sigla_apl', NULL);
- TSession::setValue('Ocorrencias_filter_evento', NULL);
- TSession::setValue('Ocorrencias_filter_obs', NULL);
- if (isset($data->id) AND ($data->id)) {
- $filter = new TFilter('id', '=', "$data->id"); // create the filter
- TSession::setValue('Ocorrencias_filter_id', $filter); // stores the filter in the session
- }
- if (isset($data->data_coig) AND ($data->data_coig)) {
- $filter = new TFilter('data_coig', '=', "$data->data_coig"); // create the filter
- TSession::setValue('Ocorrencias_filter_data_coig', $filter); // stores the filter in the session
- }
- if (isset($data->empreendimento) AND ($data->empreendimento)) {
- $filter = new TFilter('empreendimento_id', '=', $data->empreendimento); // create the filter
- TSession::setValue('Ocorrencias_filter_empreendimento', $filter); // stores the filter in the session
- }
- if (isset($data->sigla_apl) AND ($data->sigla_apl)) {
- $filter = new TFilter('aplicacao_id', '=', $data->sigla_apl); // create the filter
- TSession::setValue('Ocorrencias_filter_sigla_apl', $filter); // stores the filter in the session
- }
- if (isset($data->evento) AND ($data->evento)) {
- $evento = trim($data->evento);
- $filter = new TFilter('evento', 'like', "%{$evento}%" ); // create the filter
- TSession::setValue('Ocorrencias_filter_evento', $filter); // stores the filter in the session
- }
- if (isset($data->obs) AND ($data->obs)) {
- $filter = new TFilter('obs', 'like', "%{$data->obs}%"); // create the filter
- TSession::setValue('Ocorrencias_filter_obs', $filter); // stores the filter in the session
- }
- // fill the form with data again
- $this->form->setData($data);
- TForm::sendData('form_search_ViewOcorrenciasCliente', $data);
- // keep the search data in the session
- TSession::setValue('ViewOcorrenciasCliente_filter_data', $data);
- $param=array();
- $param['offset'] =0;
- $param['first_page']=1;
- $this->onReload($param);
- }
- /**
- * Load the datagrid with data
- */
- public function onReload($param = NULL)
- {
- try
- {
- // open a transaction with database 'sqlserver'
- TTransaction::open('sqlserver');
- // creates a repository for ViewOcorrenciasCliente
- $repository = new TRepository('ViewOcorrenciasCliente');
- $limit = 30;
- // creates a criteria
- $criteria = new TCriteria;
- // default order
- if (empty($param['order']))
- {
- $param['order'] = 'id';
- $param['direction'] = 'desc';
- }
- $criteria->setProperties($param); // order, offset
- $criteria->setProperty('limit', $limit);
- if (TSession::getValue('Ocorrencias_filter_id')) {
- $criteria->add(TSession::getValue('Ocorrencias_filter_id')); // add the session filter
- }
- if (TSession::getValue('Ocorrencias_filter_data_coig')) {
- $criteria->add(TSession::getValue('Ocorrencias_filter_data_coig')); // add the session filter
- }
- if (TSession::getValue('Ocorrencias_filter_empreendimento')) {
- $criteria->add(TSession::getValue('Ocorrencias_filter_empreendimento')); // add the session filter
- }
- if (TSession::getValue('Ocorrencias_filter_sigla_apl')) {
- $criteria->add(TSession::getValue('Ocorrencias_filter_sigla_apl')); // add the session filter
- }
- if (TSession::getValue('Ocorrencias_filter_evento')) {
- $criteria->add(TSession::getValue('Ocorrencias_filter_evento')); // add the session filter
- }
- if (TSession::getValue('Ocorrencias_filter_obs')) {
- $criteria->add(TSession::getValue('Ocorrencias_filter_obs')); // add the session filter
- }
- $log_id = TSession::getValue('login_id');
- $criteria->add( new TFilter( 'id_cliente', '=', $log_id ));
- // load the objects according to criteria
- $objects = $repository->load($criteria, FALSE);
- if (is_callable($this->transformCallback))
- {
- call_user_func($this->transformCallback, $objects, $param);
- }
- $this->datagrid->clear();
- $this->datagrid->disableDefaultClick();
- if ($objects)
- {
- // iterate the collection of active records
- foreach ($objects as $object)
- {
- //$object->data_coig = date("d/m/y", strtotime($object->data_coig));
- $object->hora = date("H:i:s", strtotime($object->hora));
- if ($object->imagem){
- //coloca o botão com a classe modal para abrir uma imagem
- $teste = "";
- $teste = $object->imagem;
- $object->imagem = "<div class='container' style='width: 20px'>
- <div class='row text-center' >
- <a href='#' class='btn btn-lg btn-success' data-toggle='modal' data-target='#ocorrencia-$object->id' style='background: #ccc; border: green 1px solid; color: black; font-size: 12px;'><img style='width: 35px; height: 30px;' src='$teste'></a>
- </div>
- </div>
- <div class='modal fade' id='ocorrencia-$object->id' tabindex='-1' role='dialog' aria-labelledby='basicModal' aria-hidden='true'>
- <div class='modal-dialog' style='width: 1000px; height: 800px;'>
- <div class='modal-content'>
- <div class='modal-header'>
- <button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button>
- </div>
- <div class='modal-body' >
- <img src='$teste'>
- </div>
- </div>
- </div>
- </div>";
- }
- // add the object inside the datagrid
- $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
- // close the transaction
- TTransaction::close();
- $this->loaded = true;
- }
- catch (Exception $e) // in case of exception
- {
- // shows the exception error message
- new TMessage('error', $e->getMessage());
- // undo all pending operations
- TTransaction::rollback();
- }
- }
- /**
- * Ask before deletion
- */
- public function onDelete($param)
- {
- // define the delete action
- $action = new TAction(array($this, 'Delete'));
- $action->setParameters($param); // pass the key parameter ahead
- // shows a dialog to the user
- new TQuestion(AdiantiCoreTranslator::translate('Do you really want to delete ?'), $action);
- }
- /**
- * Delete a record
- */
- public function Delete($param)
- {
- try
- {
- $key=$param['key']; // get the parameter $key
- TTransaction::open('sqlserver'); // open a transaction with database
- $object = new ViewOcorrenciasCliente($key, FALSE); // instantiates the Active Record
- $object->delete(); // deletes the object from the database
- TTransaction::close(); // close the transaction
- $this->onReload( $param ); // reload the listing
- new TMessage('info', AdiantiCoreTranslator::translate('Record deleted')); // success message
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- TTransaction::rollback(); // undo all pending operations
- }
- }
- public static function onChange($param)
- {
- if (!empty($param['empreendimento'])){
- TTransaction::open('sqlserver');
- $criteria = new TCriteria;
- $criteria->add(new TFilter('empreendimento_id', '=', $param['empreendimento']));
- //$criteria->add(new TFilter('aplicacao', 'like', '%gerador%'));
- $repository = new TRepository('ViewEmpreendimentos');
- $aplicacaos = $repository->load($criteria);
- $options = array();
- $options[] = '' ;
- foreach ($aplicacaos as $aplicacao){
- $options[$aplicacao->id] = $aplicacao->sigla;
- }
- //TForm::sendData('form_Vertedouro', $objeto);
- TCombo::reload('form_search_ViewOcorrenciasCliente', 'sigla_apl', $options);
- }
- }
- /**
- * method show()
- * Shows the page
- */
- public function show()
- {
- // check if the datagrid is already loaded
- if (!$this->loaded AND (!isset($_GET['method']) OR !(in_array($_GET['method'], array('onReload', 'onSearch')))) )
- {
- if (func_num_args() > 0)
- {
- $this->onReload( func_get_arg(0) );
- }
- else
- {
- $this->onReload();
- }
- }
- parent::show();
- }
- }
- ?>
Buenas.
Conseguiste resolver?
Estou na mesma situação com a versão 5.7 do framework.