Erro TDataGrid com DataTable Olá Estou recebendo um erro quando habilito datatable num TDataGrid; Erro conforme imagem anexa....
MG
Erro TDataGrid com DataTable  
Olá

Estou recebendo um erro quando habilito datatable num TDataGrid;

 
  1. <?php
  2. $this->datagrid->datatable = 'true';
  3. ?>


Erro conforme imagem anexa.

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 (9)


FC

posta o código todo.
MG

Segue:
 
  1. <?php
 
  1. <?php
  2. /**
  3. * BacklogList Listing
  4. * @author Marcelo Gomes
  5. */
  6. class BacklogList extends TStandardList
  7. {
  8. protected $form; // registration form
  9. protected $datagrid; // listing
  10. protected $pageNavigation;
  11. protected $formgrid;
  12. protected $deleteButton;
  13. protected $transformCallback;
  14. /**
  15. * Page constructor
  16. */
  17. public function __construct()
  18. {
  19. parent::__construct();
  20. parent::setDatabase('projeto'); // defines the database
  21. parent::setActiveRecord('Backlog'); // defines the active record
  22. parent::setDefaultOrder('projeto_id, data_cadastro', 'asc'); // defines the default order
  23. parent::addFilterField('id', 'like', 'id'); // filterField, operator, formField
  24. parent::addFilterField('data_cadastro', 'like', 'data_cadastro'); // filterField, operator, formField
  25. parent::addFilterField('projeto_id', 'like', 'projeto_id'); // filterField, operator, formField
  26. parent::addFilterField('cliente_id', 'like', 'cliente_id'); // filterField, operator, formField
  27. parent::addFilterField('descricao', 'like', 'descricao'); // filterField, operator, formField
  28. parent::addFilterField('situacao_id', 'like', 'situacao_id'); // filterField, operator, formField
  29. // creates the form
  30. $this->form = new TQuickForm('form_search_Backlog');
  31. $this->form->class = 'tform'; // change CSS class
  32. $this->form = new BootstrapFormWrapper($this->form);
  33. $this->form->style = 'display: table;width:100%'; // change style
  34. $this->form->setFormTitle('Backlog');
  35. $this->form->setFieldsByRow(3);
  36. // create the form fields
  37. $id = new TEntry('id');
  38. $data_cadastro = new TEntry('data_cadastro');
  39. $projeto_id = new TDBCombo('projeto_id','projeto','Projeto','id','descricao');
  40. $cliente_id = new TDBCombo('cliente_id','projeto','Cliente','id','nome');
  41. $descricao = new TEntry('descricao');
  42. $situacao_id = new TDBCombo('situacao_id','projeto','Situacao','id','descricao');
  43. $situacao_id->setValue('1');
  44. // add the fields
  45. $this->form->addQuickField('Código', $id, 200 );
  46. $this->form->addQuickField('Data Cadastro', $data_cadastro, 200 );
  47. $this->form->addQuickField('Nome Projeto', $projeto_id, 200 );
  48. $this->form->addQuickField('Cliente', $cliente_id, 200 );
  49. $this->form->addQuickField('Descrição', $descricao, 200 );
  50. $this->form->addQuickField('Situação', $situacao_id, 200 );
  51. // keep the form filled during navigation with session data
  52. $this->form->setData( TSession::getValue('Backlog_filter_data') );
  53. // add the search form actions
  54. $this->form->addQuickAction(_t('Find'), new TAction(array($this, 'onSearch')), 'fa:search');
  55. $this->form->addQuickAction(_t('New'), new TAction(array('BacklogForm', 'onEdit')), 'bs:plus-sign green');
  56. //$this->form->addQuickAction(_t('Mail'), new TAction(array($this, 'enviarEmail')), 'bs:plus-sign green');
  57. // creates a DataGrid
  58. $this->datagrid = new TDataGrid;
  59. //$this->datagrid = new BootstrapDatagridWrapper($this->datagrid);
  60. $this->datagrid->style = 'width: 100%';
  61. $this->datagrid->setHeight(320);
  62. $this->datagrid->datatable = 'true';
  63. $this->datagrid->setGroupColumn('projeto->descricao', '<b>Projeto</b>: <i>{projeto->descricao}</i>');
  64. // creates the datagrid columns
  65. $column_id = new TDataGridColumn('id', 'Id', 'right');
  66. $column_data_cadastro = new TDataGridColumn('data_cadastro', 'Data Cadastro', 'left');
  67. $column_projeto = new TDataGridColumn('projeto->descricao', 'Nome Projeto', 'left');
  68. $column_cliente = new TDataGridColumn('cliente->nome', 'Cliente', 'left');
  69. $column_descricao = new TDataGridColumn('descricao', 'Descrição', 'left');
  70. $column_observacao = new TDataGridColumn('observacao', 'Observação', 'left');
  71. $column_prioridade = new TDataGridColumn('prioridade', 'Prioridade', 'left');
  72. $column_responsavel = new TDataGridColumn('responsavel', 'Responsável', 'left');
  73. $column_situacao = new TDataGridColumn('situacao->descricao', 'Situação', 'left');
  74. $column_per_conclusao = new TDataGridColumn('per_conclusao','Conclusão','center');
  75. $column_horas = new TDataGridColumn('horas', 'Horas', 'left');
  76. $column_horas_internas = new TDataGridColumn('horas_internas', 'Horas', 'left');
  77. $column_data_prevista = new TDataGridColumn('data_prevista', 'Data Prevista', 'left');
  78. $column_data_realizada = new TDataGridColumn('data_realizada', 'Data Realizada', 'left');
  79. $column_data_cadastro->setTransformer(array('ApplicationTransformers','formatDate'));
  80. $column_data_prevista->setTransformer(array('ApplicationTransformers','formatDate'));
  81. $column_data_realizada->setTransformer(array('ApplicationTransformers','formatDate'));
  82. $column_horas->setTransformer(array('ApplicationTransformers','formatNumber'));
  83. $column_prioridade->setTransformer(array($this,'formataPrioridade'));
  84. // adiciona barra de progresso
  85. $column_per_conclusao->setTransformer(function($column_per_conclusao){
  86. $bar = new TProgressBar;
  87. $bar->setMask('<b>{value}%</b>');
  88. $bar->setValue($column_per_conclusao);
  89. if ($column_per_conclusao == 100) {
  90. $bar->setClass('success');
  91. } else if ($column_per_conclusao >= 75) {
  92. $bar->setClass('info');
  93. } else if ($column_per_conclusao >= 50){
  94. $bar->setClass('warning');
  95. } else if ($column_per_conclusao < 50) {
  96. $bar->setClass('danger');
  97. }
  98. return $bar;
  99. });
  100. // add the columns to the DataGrid
  101. $this->datagrid->addColumn($column_id);
  102. $this->datagrid->addColumn($column_data_cadastro);
  103. $this->datagrid->addColumn($column_projeto);
  104. $this->datagrid->addColumn($column_cliente);
  105. $this->datagrid->addColumn($column_descricao);
  106. //$this->datagrid->addColumn($column_observacao);
  107. $this->datagrid->addColumn($column_prioridade);
  108. $this->datagrid->addColumn($column_responsavel);
  109. $this->datagrid->addColumn($column_situacao);
  110. //$this->datagrid->addColumn($column_aprovado_por);
  111. //$this->datagrid->addColumn($column_data_aprovacao);
  112. $this->datagrid->addColumn($column_per_conclusao);
  113. #dependendo do usuário, exibe ou não horas
  114. if (TSession::getValue('role') == SystemUser::ROLE_DESENV) {
  115. $this->datagrid->addColumn($column_horas);
  116. }
  117. if (TSession::getValue('role') == SystemUser::ROLE_ADMIN) {
  118. $this->datagrid->addColumn($column_horas_internas);
  119. }
  120. if (TSession::getValue('role') == SystemUser::ROLE_USER) {
  121. $this->datagrid->addColumn($column_horas_internas);
  122. }
  123. $this->datagrid->addColumn($column_data_prevista);
  124. $this->datagrid->addColumn($column_data_realizada);
  125. // create EDIT action
  126. $action_edit = new TDataGridAction(array('BacklogForm', 'onEdit'));
  127. $action_edit->setUseButton(TRUE);
  128. $action_edit->setButtonClass('btn btn-default');
  129. $action_edit->setLabel(_t('Edit'));
  130. $action_edit->setImage('fa:pencil-square-o blue fa-lg');
  131. $action_edit->setField('id');
  132. //$action_edit->setDisplayCondition(array($this, 'displayColumn'));
  133. //$this->datagrid->addAction($action_edit);
  134. // create DELETE action
  135. $action_del = new TDataGridAction(array($this, 'onDelete'));
  136. $action_del->setUseButton(TRUE);
  137. $action_del->setButtonClass('btn btn-default');
  138. $action_del->setLabel(_t('Delete'));
  139. $action_del->setImage('fa:trash-o red fa-lg');
  140. $action_del->setField('id');
  141. $action_del->setDisplayCondition(array($this,'displayColumn'));
  142. //$this->datagrid->addAction($action_del);
  143. $action_group = new TDataGridActionGroup('Ações','bs:th');
  144. $action_group->addHeader('Opções Disponíveis');
  145. $action_group->addAction($action_edit);
  146. $action_group->addSeparator();
  147. $action_group->addAction($action_del);
  148. $this->datagrid->addActionGroup($action_group);
  149. // create the datagrid model
  150. $this->datagrid->createModel();
  151. parent::show();
  152. // refaz a busca
  153. if (!empty($this->situacao_id)) {
  154. var_dump($this->situacao_id);
  155. //$this->onSearch();
  156. }
  157. // create the page navigation
  158. $this->pageNavigation = new TPageNavigation;
  159. $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
  160. $this->pageNavigation->setWidth($this->datagrid->getWidth());
  161. // vertical box container
  162. $container = new TVBox;
  163. $container->style = 'width: 100%';
  164. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  165. $container->add(TPanelGroup::pack('Backlog de Projetos', $this->form));
  166. $container->add($this->datagrid);
  167. $container->add($this->pageNavigation);
  168. parent::add($container);
  169. }
  170. /**
  171. * Verifica se o usuario pode editar ou ver o registro
  172. * Somente administrador poderá excluir um registro
  173. */
  174. public function displayColumn( $object )
  175. {
  176. if (TSession::getValue('role') != SystemUser::ROLE_ADMIN){
  177. return FALSE;
  178. } else {
  179. return TRUE;
  180. }
  181. }
  182. public function enviarEmail()
  183. {
  184. try {
  185. $ini = parse_ini_file('app/config/email.ini');
  186. $mail = new TMail;
  187. $mail->setDebug(FALSE);
  188. $mail->setFrom($ini['from'], $ini['name']);
  189. $mail->setSubject('[Prevencao Riscos] Limpeza Tabela Temp Email Enviado');
  190. $mail->setHtmlBody('Registros foram removidos...');
  191. $mail->addAddress('marcelo@mgsistemas.com.br',$ini['name']);
  192. $mail->SetUseSmtp();
  193. $mail->SetSmtpHost($ini['host'], $ini['port']);
  194. $mail->SetSmtpUser($ini['user'], $ini['pass']);
  195. $mail->setReplyTo($ini['repl']);
  196. $mail->send();
  197. new TMessage('info','E-mail enviado com sucesso!');
  198. } catch (Exception $e) {
  199. new TMessage('error','Erro : ' . $e->getMessage());
  200. }
  201. }
  202. /**
  203. * Metodo que formata a coluna prioridade
  204. */
  205. public static function formataPrioridade($value, $object, $row)
  206. {
  207. $retorno = "";
  208. switch ($value){
  209. case 'A': $retorno = "<span class='label label-danger'>Alta</span>"; break;
  210. case 'M': $retorno = "<span class='label label-warning'>Media</span>"; break;
  211. case 'B': $retorno = "<span class='label label-success'>Baixa</span>";break;
  212. }
  213. return $retorno;
  214. }
  215. /**
  216. * shows the page
  217. */
  218. function show()
  219. {
  220. $this->onReload();
  221. parent::show();
  222. }
  223. /**
  224. * method onReload()
  225. * Load the datagrid with the database objects
  226. */
  227. public function onReload($param = NULL)
  228. {
  229. try
  230. {
  231. // open a transaction with database
  232. TTransaction::open($this->database);
  233. // instancia um repositório
  234. $repository = new TRepository($this->activeRecord);
  235. $limit = isset($this->limit) ? ( $this->limit > 0 ? $this->limit : NULL) : 10;
  236. // creates a criteria
  237. $criteria = isset($this->criteria) ? clone $this->criteria : new TCriteria;
  238. // busca a lista de projetos autorizados, se o papel for diferente de ADMIN
  239. $arr = array();
  240. if (TSession::getValue('role') != SystemUser::ROLE_ADMIN) {
  241. $projetos = UtilMGConsultoria::get_projetos(TSession::getValue('usuarioId'));
  242. $in = 0;
  243. if (count($projetos)) {
  244. foreach ($projetos as $proj){
  245. array_push($arr,$proj->projeto_id);
  246. }
  247. }
  248. }
  249. if ($this->situacao != NULL) {
  250. var_dump($this->situacao);
  251. }
  252. // adiciona criterio de projetos que podem ser visualizados
  253. if (count($arr) >0) {
  254. $criteria->add(new TFilter('projeto_id','in',$arr), TExpression::AND_OPERATOR);
  255. }
  256. if ($this->order)
  257. {
  258. $criteria->setProperty('order', $this->order);
  259. $criteria->setProperty('direction', $this->direction);
  260. }
  261. $criteria->setProperties($param); // order, offset
  262. $criteria->setProperty('limit', $limit);
  263. if ($this->formFilters)
  264. {
  265. foreach ($this->formFilters as $filterKey => $filterField)
  266. {
  267. if (TSession::getValue($this->activeRecord.'_filter_'.$filterField))
  268. {
  269. // add the filter stored in the session to the criteria
  270. $criteria->add(TSession::getValue($this->activeRecord.'_filter_'.$filterField));
  271. }
  272. }
  273. }
  274. // load the objects according to criteria
  275. $objects = $repository->load($criteria, FALSE);
  276. if (is_callable($this->transformCallback))
  277. {
  278. call_user_func($this->transformCallback, $objects, $param);
  279. }
  280. $this->datagrid->clear();
  281. if ($objects)
  282. {
  283. // iterate the collection of active records
  284. foreach ($objects as $object)
  285. {
  286. // add the object inside the datagrid
  287. $this->datagrid->addItem($object);
  288. }
  289. }
  290. // reset the criteria for record count
  291. $criteria->resetProperties();
  292. $count= $repository->count($criteria);
  293. if (isset($this->pageNavigation))
  294. {
  295. $this->pageNavigation->setCount($count); // count of records
  296. $this->pageNavigation->setProperties($param); // order, page
  297. $this->pageNavigation->setLimit($limit); // limit
  298. }
  299. // close the transaction
  300. TTransaction::close();
  301. $this->loaded = true;
  302. }
  303. catch (Exception $e) // in case of exception
  304. {
  305. // shows the exception error message
  306. new TMessage('error', $e->getMessage());
  307. // undo all pending operations
  308. TTransaction::rollback();
  309. }
  310. }
  311. /**
  312. * Register the filter in the session
  313. */
  314. public function onSearch()
  315. {
  316. // get the search form data
  317. $data = $this->form->getData();
  318. $this->datagrid->clear();
  319. //var_dump($data);
  320. if ($this->formFilters)
  321. {
  322. foreach ($this->formFilters as $filterKey => $formFilter)
  323. {
  324. $operator = isset($this->operators[$filterKey]) ? $this->operators[$filterKey] : 'like';
  325. $filterField = isset($this->filterFields[$filterKey]) ? $this->filterFields[$filterKey] : $formFilter;
  326. // check if the user has filled the form
  327. if (isset($data->{$formFilter}) AND $data->{$formFilter})
  328. {
  329. // creates a filter using what the user has typed
  330. if (stristr($operator, 'like'))
  331. {
  332. $filter = new TFilter($filterField, $operator, "%{$data->{$formFilter}}%");
  333. }
  334. else
  335. {
  336. $filter = new TFilter($filterField, $operator, $data->{$formFilter});
  337. }
  338. // stores the filter in the session
  339. TSession::setValue($this->activeRecord.'_filter', $filter); // BC compatibility
  340. TSession::setValue($this->activeRecord.'_filter_'.$formFilter, $filter);
  341. TSession::setValue($this->activeRecord.'_'.$formFilter, $data->{$formFilter});
  342. }
  343. else
  344. {
  345. TSession::setValue($this->activeRecord.'_filter', NULL); // BC compatibility
  346. TSession::setValue($this->activeRecord.'_filter_'.$formFilter, NULL);
  347. TSession::setValue($this->activeRecord.'_'.$formFilter, '');
  348. }
  349. }
  350. }
  351. TSession::setValue($this->activeRecord.'_filter_data', $data);
  352. // fill the form with data again
  353. $this->form->setData($data);
  354. $param=array();
  355. $param['offset'] =0;
  356. $param['first_page']=1;
  357. $this->onReload($param);
  358. }
  359. }
  360. ?>
MG

Desculpe, no anterior eu postei a versão sem ativar o datatable (tive que desabilitar para não dar erro).
Agora segue o código com erro:

 
  1. <?php
 
  1. <?php
  2. /**
  3. * BacklogList Listing
  4. * @author Marcelo Gomes
  5. */
  6. class BacklogList extends TStandardList
  7. {
  8. protected $form; // registration form
  9. protected $datagrid; // listing
  10. protected $pageNavigation;
  11. protected $formgrid;
  12. protected $deleteButton;
  13. protected $transformCallback;
  14. /**
  15. * Page constructor
  16. */
  17. public function __construct()
  18. {
  19. parent::__construct();
  20. parent::setDatabase('projeto'); // defines the database
  21. parent::setActiveRecord('Backlog'); // defines the active record
  22. parent::setDefaultOrder('projeto_id, data_cadastro', 'asc'); // defines the default order
  23. // parent::setCriteria($criteria) // define a standard filter
  24. parent::addFilterField('id', 'like', 'id'); // filterField, operator, formField
  25. parent::addFilterField('data_cadastro', 'like', 'data_cadastro'); // filterField, operator, formField
  26. parent::addFilterField('projeto_id', 'like', 'projeto_id'); // filterField, operator, formField
  27. parent::addFilterField('cliente_id', 'like', 'cliente_id'); // filterField, operator, formField
  28. parent::addFilterField('descricao', 'like', 'descricao'); // filterField, operator, formField
  29. parent::addFilterField('situacao_id', 'like', 'situacao_id'); // filterField, operator, formField
  30. // creates the form
  31. $this->form = new TQuickForm('form_search_Backlog');
  32. $this->form->class = 'tform'; // change CSS class
  33. $this->form = new BootstrapFormWrapper($this->form);
  34. $this->form->style = 'display: table;width:100%'; // change style
  35. $this->form->setFormTitle('Backlog');
  36. $this->form->setFieldsByRow(3);
  37. // create the form fields
  38. $id = new TEntry('id');
  39. $data_cadastro = new TEntry('data_cadastro');
  40. $projeto_id = new TDBCombo('projeto_id','projeto','Projeto','id','descricao');
  41. $cliente_id = new TDBCombo('cliente_id','projeto','Cliente','id','nome');
  42. $descricao = new TEntry('descricao');
  43. $situacao_id = new TDBCombo('situacao_id','projeto','Situacao','id','descricao');
  44. $situacao_id->setValue('1');
  45. // add the fields
  46. $this->form->addQuickField('Código', $id, 200 );
  47. $this->form->addQuickField('Data Cadastro', $data_cadastro, 200 );
  48. $this->form->addQuickField('Nome Projeto', $projeto_id, 200 );
  49. $this->form->addQuickField('Cliente', $cliente_id, 200 );
  50. $this->form->addQuickField('Descrição', $descricao, 200 );
  51. $this->form->addQuickField('Situação', $situacao_id, 200 );
  52. // keep the form filled during navigation with session data
  53. $this->form->setData( TSession::getValue('Backlog_filter_data') );
  54. // add the search form actions
  55. $this->form->addQuickAction(_t('Find'), new TAction(array($this, 'onSearch')), 'fa:search');
  56. $this->form->addQuickAction(_t('New'), new TAction(array('BacklogForm', 'onEdit')), 'bs:plus-sign green');
  57. //$this->form->addQuickAction(_t('Mail'), new TAction(array($this, 'enviarEmail')), 'bs:plus-sign green');
  58. // creates a DataGrid
  59. $this->datagrid = new TDataGrid;
  60. //$this->datagrid = new BootstrapDatagridWrapper($this->datagrid);
  61. $this->datagrid->style = 'width: 100%';
  62. $this->datagrid->setHeight(320);
  63. $this->datagrid->datatable = 'true';
  64. $this->datagrid->setGroupColumn('projeto->descricao', '<b>Projeto</b>: <i>{projeto->descricao}</i>');
  65. // creates the datagrid columns
  66. $column_id = new TDataGridColumn('id', 'Id', 'right');
  67. $column_data_cadastro = new TDataGridColumn('data_cadastro', 'Data Cadastro', 'left');
  68. $column_projeto = new TDataGridColumn('projeto->descricao', 'Nome Projeto', 'left');
  69. $column_cliente = new TDataGridColumn('cliente->nome', 'Cliente', 'left');
  70. $column_descricao = new TDataGridColumn('descricao', 'Descrição', 'left');
  71. $column_observacao = new TDataGridColumn('observacao', 'Observação', 'left');
  72. $column_prioridade = new TDataGridColumn('prioridade', 'Prioridade', 'left');
  73. $column_responsavel = new TDataGridColumn('responsavel', 'Responsável', 'left');
  74. $column_situacao = new TDataGridColumn('situacao->descricao', 'Situação', 'left');
  75. //$column_aprovado_por = new TDataGridColumn('aprovado_por', 'Aprovado Por', 'left');
  76. //$column_data_aprovacao = new TDataGridColumn('data_aprovacao', 'Data Aprovação', 'left');
  77. $column_per_conclusao = new TDataGridColumn('per_conclusao','Conclusão','center');
  78. $column_horas = new TDataGridColumn('horas', 'Horas', 'left');
  79. $column_horas_internas = new TDataGridColumn('horas_internas', 'Horas', 'left');
  80. $column_data_prevista = new TDataGridColumn('data_prevista', 'Data Prevista', 'left');
  81. $column_data_realizada = new TDataGridColumn('data_realizada', 'Data Realizada', 'left');
  82. $column_data_cadastro->setTransformer(array('ApplicationTransformers','formatDate'));
  83. //$column_data_aprovacao->setTransformer(array('ApplicationTransformers','formatDate'));
  84. $column_data_prevista->setTransformer(array('ApplicationTransformers','formatDate'));
  85. $column_data_realizada->setTransformer(array('ApplicationTransformers','formatDate'));
  86. $column_horas->setTransformer(array('ApplicationTransformers','formatNumber'));
  87. $column_prioridade->setTransformer(array($this,'formataPrioridade'));
  88. // adiciona barra de progresso
  89. $column_per_conclusao->setTransformer(function($column_per_conclusao){
  90. $bar = new TProgressBar;
  91. $bar->setMask('<b>{value}%</b>');
  92. $bar->setValue($column_per_conclusao);
  93. if ($column_per_conclusao == 100) {
  94. $bar->setClass('success');
  95. } else if ($column_per_conclusao >= 75) {
  96. $bar->setClass('info');
  97. } else if ($column_per_conclusao >= 50){
  98. $bar->setClass('warning');
  99. } else if ($column_per_conclusao < 50) {
  100. $bar->setClass('danger');
  101. }
  102. return $bar;
  103. });
  104. // add the columns to the DataGrid
  105. $this->datagrid->addColumn($column_id);
  106. $this->datagrid->addColumn($column_data_cadastro);
  107. $this->datagrid->addColumn($column_projeto);
  108. $this->datagrid->addColumn($column_cliente);
  109. $this->datagrid->addColumn($column_descricao);
  110. //$this->datagrid->addColumn($column_observacao);
  111. $this->datagrid->addColumn($column_prioridade);
  112. $this->datagrid->addColumn($column_responsavel);
  113. $this->datagrid->addColumn($column_situacao);
  114. //$this->datagrid->addColumn($column_aprovado_por);
  115. //$this->datagrid->addColumn($column_data_aprovacao);
  116. $this->datagrid->addColumn($column_per_conclusao);
  117. #dependendo do usuário, exibe ou não horas
  118. if (TSession::getValue('role') == SystemUser::ROLE_DESENV) {
  119. $this->datagrid->addColumn($column_horas);
  120. }
  121. if (TSession::getValue('role') == SystemUser::ROLE_ADMIN) {
  122. $this->datagrid->addColumn($column_horas_internas);
  123. }
  124. if (TSession::getValue('role') == SystemUser::ROLE_USER) {
  125. $this->datagrid->addColumn($column_horas_internas);
  126. }
  127. $this->datagrid->addColumn($column_data_prevista);
  128. $this->datagrid->addColumn($column_data_realizada);
  129. // create EDIT action
  130. $action_edit = new TDataGridAction(array('BacklogForm', 'onEdit'));
  131. $action_edit->setUseButton(TRUE);
  132. $action_edit->setButtonClass('btn btn-default');
  133. $action_edit->setLabel(_t('Edit'));
  134. $action_edit->setImage('fa:pencil-square-o blue fa-lg');
  135. $action_edit->setField('id');
  136. //$action_edit->setDisplayCondition(array($this, 'displayColumn'));
  137. //$this->datagrid->addAction($action_edit);
  138. // create DELETE action
  139. $action_del = new TDataGridAction(array($this, 'onDelete'));
  140. $action_del->setUseButton(TRUE);
  141. $action_del->setButtonClass('btn btn-default');
  142. $action_del->setLabel(_t('Delete'));
  143. $action_del->setImage('fa:trash-o red fa-lg');
  144. $action_del->setField('id');
  145. $action_del->setDisplayCondition(array($this,'displayColumn'));
  146. //$this->datagrid->addAction($action_del);
  147. $action_group = new TDataGridActionGroup('Ações','bs:th');
  148. $action_group->addHeader('Opções Disponíveis');
  149. $action_group->addAction($action_edit);
  150. $action_group->addSeparator();
  151. $action_group->addAction($action_del);
  152. $this->datagrid->addActionGroup($action_group);
  153. // create the datagrid model
  154. $this->datagrid->createModel();
  155. parent::show();
  156. // refaz a busca
  157. if (!empty($this->situacao_id)) {
  158. var_dump($this->situacao_id);
  159. //$this->onSearch();
  160. }
  161. // create the page navigation
  162. $this->pageNavigation = new TPageNavigation;
  163. $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
  164. $this->pageNavigation->setWidth($this->datagrid->getWidth());
  165. // vertical box container
  166. $container = new TVBox;
  167. $container->style = 'width: 100%';
  168. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  169. $container->add(TPanelGroup::pack('Backlog de Projetos', $this->form));
  170. $container->add($this->datagrid);
  171. $container->add($this->pageNavigation);
  172. parent::add($container);
  173. }
  174. /**
  175. * Verifica se o usuario pode editar ou ver o registro
  176. * Somente administrador poderá excluir um registro
  177. */
  178. public function displayColumn( $object )
  179. {
  180. if (TSession::getValue('role') != SystemUser::ROLE_ADMIN){
  181. return FALSE;
  182. } else {
  183. return TRUE;
  184. }
  185. }
  186. public function enviarEmail()
  187. {
  188. try {
  189. $ini = parse_ini_file('app/config/email.ini');
  190. $mail = new TMail;
  191. $mail->setDebug(FALSE);
  192. $mail->setFrom($ini['from'], $ini['name']);
  193. $mail->setSubject('[Prevencao Riscos] Limpeza Tabela Temp Email Enviado');
  194. $mail->setHtmlBody('Registros foram removidos...');
  195. $mail->addAddress('marcelo@mgsistemas.com.br',$ini['name']);
  196. $mail->SetUseSmtp();
  197. $mail->SetSmtpHost($ini['host'], $ini['port']);
  198. $mail->SetSmtpUser($ini['user'], $ini['pass']);
  199. $mail->setReplyTo($ini['repl']);
  200. $mail->send();
  201. new TMessage('info','E-mail enviado com sucesso!');
  202. } catch (Exception $e) {
  203. new TMessage('error','Erro : ' . $e->getMessage());
  204. }
  205. }
  206. /**
  207. * Metodo que formata a coluna prioridade
  208. */
  209. public static function formataPrioridade($value, $object, $row)
  210. {
  211. $retorno = "";
  212. switch ($value){
  213. case 'A': $retorno = "<span class='label label-danger'>Alta</span>"; break;
  214. case 'M': $retorno = "<span class='label label-warning'>Media</span>"; break;
  215. case 'B': $retorno = "<span class='label label-success'>Baixa</span>";break;
  216. }
  217. return $retorno;
  218. }
  219. /**
  220. * shows the page
  221. */
  222. function show()
  223. {
  224. $this->onReload();
  225. parent::show();
  226. }
  227. /**
  228. * method onReload()
  229. * Load the datagrid with the database objects
  230. */
  231. public function onReload($param = NULL)
  232. {
  233. try
  234. {
  235. // open a transaction with database
  236. TTransaction::open($this->database);
  237. // instancia um repositório
  238. $repository = new TRepository($this->activeRecord);
  239. $limit = isset($this->limit) ? ( $this->limit > 0 ? $this->limit : NULL) : 10;
  240. // creates a criteria
  241. $criteria = isset($this->criteria) ? clone $this->criteria : new TCriteria;
  242. // busca a lista de projetos autorizados, se o papel for diferente de ADMIN
  243. $arr = array();
  244. if (TSession::getValue('role') != SystemUser::ROLE_ADMIN) {
  245. $projetos = UtilMGConsultoria::get_projetos(TSession::getValue('usuarioId'));
  246. $in = 0;
  247. if (count($projetos)) {
  248. foreach ($projetos as $proj){
  249. array_push($arr,$proj->projeto_id);
  250. }
  251. }
  252. }
  253. if ($this->situacao != NULL) {
  254. var_dump($this->situacao);
  255. }
  256. // adiciona criterio de projetos que podem ser visualizados
  257. if (count($arr) >0) {
  258. $criteria->add(new TFilter('projeto_id','in',$arr), TExpression::AND_OPERATOR);
  259. }
  260. if ($this->order)
  261. {
  262. $criteria->setProperty('order', $this->order);
  263. $criteria->setProperty('direction', $this->direction);
  264. }
  265. $criteria->setProperties($param); // order, offset
  266. $criteria->setProperty('limit', $limit);
  267. if ($this->formFilters)
  268. {
  269. foreach ($this->formFilters as $filterKey => $filterField)
  270. {
  271. if (TSession::getValue($this->activeRecord.'_filter_'.$filterField))
  272. {
  273. // add the filter stored in the session to the criteria
  274. $criteria->add(TSession::getValue($this->activeRecord.'_filter_'.$filterField));
  275. }
  276. }
  277. }
  278. // load the objects according to criteria
  279. $objects = $repository->load($criteria, FALSE);
  280. if (is_callable($this->transformCallback))
  281. {
  282. call_user_func($this->transformCallback, $objects, $param);
  283. }
  284. $this->datagrid->clear();
  285. if ($objects)
  286. {
  287. // iterate the collection of active records
  288. foreach ($objects as $object)
  289. {
  290. // add the object inside the datagrid
  291. $this->datagrid->addItem($object);
  292. }
  293. }
  294. // reset the criteria for record count
  295. $criteria->resetProperties();
  296. $count= $repository->count($criteria);
  297. if (isset($this->pageNavigation))
  298. {
  299. $this->pageNavigation->setCount($count); // count of records
  300. $this->pageNavigation->setProperties($param); // order, page
  301. $this->pageNavigation->setLimit($limit); // limit
  302. }
  303. // close the transaction
  304. TTransaction::close();
  305. $this->loaded = true;
  306. }
  307. catch (Exception $e) // in case of exception
  308. {
  309. // shows the exception error message
  310. new TMessage('error', $e->getMessage());
  311. // undo all pending operations
  312. TTransaction::rollback();
  313. }
  314. }
  315. /**
  316. * Register the filter in the session
  317. */
  318. public function onSearch()
  319. {
  320. // get the search form data
  321. $data = $this->form->getData();
  322. $this->datagrid->clear();
  323. //var_dump($data);
  324. if ($this->formFilters)
  325. {
  326. foreach ($this->formFilters as $filterKey => $formFilter)
  327. {
  328. $operator = isset($this->operators[$filterKey]) ? $this->operators[$filterKey] : 'like';
  329. $filterField = isset($this->filterFields[$filterKey]) ? $this->filterFields[$filterKey] : $formFilter;
  330. // check if the user has filled the form
  331. if (isset($data->{$formFilter}) AND $data->{$formFilter})
  332. {
  333. // creates a filter using what the user has typed
  334. if (stristr($operator, 'like'))
  335. {
  336. $filter = new TFilter($filterField, $operator, "%{$data->{$formFilter}}%");
  337. }
  338. else
  339. {
  340. $filter = new TFilter($filterField, $operator, $data->{$formFilter});
  341. }
  342. // stores the filter in the session
  343. TSession::setValue($this->activeRecord.'_filter', $filter); // BC compatibility
  344. TSession::setValue($this->activeRecord.'_filter_'.$formFilter, $filter);
  345. TSession::setValue($this->activeRecord.'_'.$formFilter, $data->{$formFilter});
  346. }
  347. else
  348. {
  349. TSession::setValue($this->activeRecord.'_filter', NULL); // BC compatibility
  350. TSession::setValue($this->activeRecord.'_filter_'.$formFilter, NULL);
  351. TSession::setValue($this->activeRecord.'_'.$formFilter, '');
  352. }
  353. }
  354. }
  355. TSession::setValue($this->activeRecord.'_filter_data', $data);
  356. // fill the form with data again
  357. $this->form->setData($data);
  358. $param=array();
  359. $param['offset'] =0;
  360. $param['first_page']=1;
  361. $this->onReload($param);
  362. }
  363. }
  364. ?>
FC

rapaz.... o que essa linha ta fazendo ai no código?

parent::show();
MG

Eu acho que peguei algum exemplo no desespero para resolver ou implementar algo que deixei lá.
Retirei e alguns comportamentos estranhos como um post que coloquei (vou excluir), sobre problema de navegação somente nesta tela.
Mas o erro continua quanto ativo o data table.
Em todas as telas que ativei, dá o mesmo erro.
FC

Cria uma lista de registros com o assistente nova e executa se continuar o erro é pq vc mudou algo no nucleo do framework ou no carregamento das bibliotecas.
MG

Farei isso, por enquanto obrigado!
NR

Faça o teste retirando:
 
  1. <?php
  2. //$this->datagrid->setGroupColumn...
  3. ?>

Acho que não é possível usar os 2 recursos juntos(dataTable e groupColumn)
MG

Nataniel
Eu acho que é isso mesmo.
Fiz o que sugeriu e não deu erro habilitando o datatable.
Obrigado!