Criar um botão de ação para expandir ou comprimir os grupos de um DataGrid. Estive pesquisando como expandir ou comprimir os grupos do Datagrid, a solução encontrada no fórum, foi um post de 2017, através de JS, porém preciso que seja através da ação de um botão, como não tenho muita experiência nessa área do JS, gostaria de saber se existe essa possibilidade. Agradeço qualquer dica! ...
DA
Criar um botão de ação para expandir ou comprimir os grupos de um DataGrid.  
Estive pesquisando como expandir ou comprimir os grupos do Datagrid, a solução encontrada no fórum, foi um post de 2017, através de JS, porém preciso que seja através da ação de um botão, como não tenho muita experiência nessa área do JS, gostaria de saber se existe essa possibilidade.

Agradeço qualquer dica!

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


NR

Tente o seguinte:
 
  1. <?php
  2. $this->form->addButton('Ocultar/Expandir', "$('tr.info').click();",'fa:check');
  3. ?>
DA

Bom dia, Nataniel

Agora que consegui retornar ao projeto, sua resposta como sempre funcionou perfeitamente.

Mudei para um Actionlink e criei uma função com o comando, para poder usá-la no onShow, porém ela não funciona, só no click do botão, a intenção era trazer tudo comprimido.

Segue o código para avaliação e ajuda, para me indicar onde estou errando.

 
  1. <?php
  2. /**
  3. * MapaPreventivaForm
  4. *
  5. * @version
  6. * @package
  7. * @subpackage
  8. * @author
  9. * @copyright
  10. * @license
  11. */
  12. class MapaPreventivaForm extends TPage
  13. {
  14. protected $form; // form
  15. use Adianti\base\AdiantiStandardListTrait; // Standard form methods
  16. /**
  17. * Class constructor
  18. * Creates the page and the registration form
  19. */
  20. function __construct()
  21. {
  22. parent::__construct();
  23. $this->form = new BootstrapFormBuilder('form_MapaPreventiva');
  24. $this->form->setFormTitle('<b>Mapa de Manutenção</b>');
  25. $this->indicator1 = new THtmlRenderer('app/resources/info-box.html');
  26. $this->indicator2 = new THtmlRenderer('app/resources/info-box.html');
  27. $this->indicator3 = new THtmlRenderer('app/resources/info-box.html');
  28. $this->indicator4 = new THtmlRenderer('app/resources/info-box.html');
  29. $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  30. $this->datagrid->setGroupColumn('placa', '<i>Equipamento: </i> <b>{placa} {equipamento} </b>');
  31. $this->datagrid->setHeight(200);
  32. $this->datagrid->name = 'grid_manu';
  33. $action3 = new TDataGridAction(array($this, 'onGeraProg'), ['id' => '{id}','medida_id'=>'{medida_id}', 'troca'=>'{troca}','leitura'=>'{leitura}','periodo'=>'{periodo}','register_state' => 'false'] );
  34. $this->datagrid->addAction($action3, 'Gera Programação', 'fa:edit #000000');
  35. $this->datagrid->style = "width: 100%";
  36. $this->datagrid->makeScrollable();
  37. $this->proggrid = new BootstrapDatagridWrapper(new TDataGrid);
  38. $this->proggrid->setGroupColumn('preventiva_id', '<i>Equipamento: </i> <b>{placa} {equipamento} </b>');
  39. $this->proggrid->setHeight(200);
  40. $this->proggrid->style = "width: 100%";
  41. $this->proggrid->makeScrollable();
  42. $this->tacogrid = new BootstrapDatagridWrapper(new TDataGrid);
  43. $this->tacogrid->setHeight(200);
  44. $this->tacogrid->style = "width: 100%";
  45. $this->tacogrid->makeScrollable();
  46. $this->bategrid = new BootstrapDatagridWrapper(new TDataGrid);
  47. $this->bategrid->setHeight(200);
  48. $this->bategrid->style = "width: 100%";
  49. $this->bategrid->makeScrollable();
  50. // create the datagrid column
  51. $column_medida= new TDataGridColumn('medida','Medida','left','50%');
  52. $column_troca= new TDataGridColumn('troca','Troca','left','10%');
  53. $column_periodo = new TDataGridColumn('periodo','Período','left','10%');
  54. $column_leitura = new TDataGridColumn('leitura','Leitura','left','10%');
  55. $column_hoje = new TDataGridColumn('hoje','Hoje','left','10%');
  56. // enabled AutoHide
  57. // create the datagrid column
  58. $column_prg_medida= new TDataGridColumn('medida','Medida','left','40%');
  59. $column_prg_vlratual= new TDataGridColumn('valor_atual','Atual','left','10%');
  60. $column_prg_vlranter= new TDataGridColumn('valor_anterior','Anterior','left','10%');
  61. $column_prg_ordem = new TDataGridColumn('ordem_servico','O.S.','left','10%');
  62. $column_prg_dataanter = new TDataGridColumn('data_anterior','Periodo','left','10%');
  63. $column_prg_situacao = new TDataGridColumn('situacao','Status','left','20%');
  64. $column_taco_equipto= new TDataGridColumn('equipto','Equipamento','left','30%');
  65. $column_taco_documento= new TDataGridColumn('documento','Documento','left','10%');
  66. $column_taco_emissao= new TDataGridColumn('emissao','Emissao','left','10%');
  67. $column_taco_validade= new TDataGridColumn('validade','Validade','left','10%');
  68. $column_taco_situacao= new TDataGridColumn('situacao','Certificado','left','30%');
  69. $column_taco_certificado= new TDataGridColumn('certificado','Situação','left','0%');
  70. $column_bate_equipto= new TDataGridColumn('equipamento','Equipamento','left','40%');
  71. $column_bate_serie= new TDataGridColumn('serie','Serie','left','20%');
  72. $column_bate_fabricante= new TDataGridColumn('fabricante','Fabricante','left','10%');
  73. $column_bate_validade= new TDataGridColumn('data_validade','Garantia','left','10%');
  74. $column_bate_situacao= new TDataGridColumn('situacao','Situação','left','20%');
  75. $empresa_id = new TDBUniqueSearch('empresa_id','pcmman','Empresas','id','descricao');
  76. $empresa_id->setSize('100%');
  77. $empresa_id->setMinLength(0);
  78. $this->form->addFields( [ new TLabel('Empresa') , $empresa_id ]);
  79. // add the columns to the DataGrid
  80. // $this->datagrid->addColumn($column_placa);
  81. // $this->datagrid->addColumn($column_equipto);
  82. $this->datagrid->addColumn($column_medida);
  83. $this->datagrid->addColumn($column_troca);
  84. $this->datagrid->addColumn($column_periodo);
  85. $this->datagrid->addColumn($column_leitura);
  86. $this->datagrid->addColumn($column_hoje);
  87. $column_hoje->setTransformer( function ($value) {
  88. if ($value)
  89. {
  90. $value = TDate::convertToMask($value, 'yyyy-mm-dd', 'dd/mm/yyyy');
  91. return $value;
  92. }
  93. });
  94. $column_periodo->setTransformer( function ($value) {
  95. if ($value)
  96. {
  97. $value = TDate::convertToMask($value, 'yyyy-mm-dd', 'dd/mm/yyyy');
  98. return $value;
  99. }
  100. });
  101. // add the search form actions
  102. $this->form->addAction('Atualizar', new TAction( array( $this, 'onProcLog')), 'fa:reply red');
  103. $this->form->addActionLink('Ocultar/Expandir', new TAction([$this, 'abrefecha']), 'fa:check blue');
  104. $this->proggrid->addColumn($column_prg_medida);
  105. $this->proggrid->addColumn($column_prg_vlranter);
  106. $this->proggrid->addColumn($column_prg_vlratual);
  107. $this->proggrid->addColumn($column_prg_ordem);
  108. $this->proggrid->addColumn($column_prg_dataanter);
  109. $this->proggrid->addColumn($column_prg_situacao);
  110. $column_prg_dataanter->setTransformer( function ($value) {
  111. if ($value)
  112. {
  113. $value = TDate::convertToMask($value, 'yyyy-mm-dd', 'dd/mm/yyyy');
  114. return $value;
  115. }
  116. });
  117. $column_prg_situacao->setTransformer( function ($value) {
  118. if ($value == '0')
  119. {
  120. $div = new TElement('span');
  121. $div->class="label label-primary";
  122. $div->style="text-shadow:none; font-size:12px";
  123. $div->add('Aguardando O.S');
  124. return $div;
  125. }
  126. else
  127. if ($value == '1')
  128. {
  129. $div = new TElement('span');
  130. $div->class="label label-danger";
  131. $div->style="text-shadow:none; font-size:12px";
  132. $div->add('Em manutenção');
  133. return $div;
  134. }
  135. else
  136. {
  137. $div = new TElement('span');
  138. $div->class="label label-success";
  139. $div->style="text-shadow:none; font-size:12px";
  140. $div->add('Concluido');
  141. return $div;
  142. }
  143. });
  144. $this->tacogrid->addColumn($column_taco_equipto);
  145. $this->tacogrid->addColumn($column_taco_documento);
  146. // $this->tacogrid->addColumn($column_taco_emissao);
  147. $this->tacogrid->addColumn($column_taco_validade);
  148. $this->tacogrid->addColumn($column_taco_situacao);
  149. $this->tacogrid->addColumn($column_taco_certificado);
  150. $column_taco_certificado->setVisibility(false);
  151. $column_taco_validade->setTransformer( function ($value) {
  152. if ($value)
  153. {
  154. $value = TDate::convertToMask($value, 'yyyy-mm-dd', 'dd/mm/yyyy');
  155. return $value;
  156. }
  157. });
  158. $column_taco_emissao->setTransformer( function ($value) {
  159. if ($value)
  160. {
  161. $value = TDate::convertToMask($value, 'yyyy-mm-dd', 'dd/mm/yyyy');
  162. return $value;
  163. }
  164. });
  165. $column_taco_situacao->setTransformer( function ($value,$object,$row) {
  166. if ($object->certificado == '0')
  167. {
  168. $div = new TElement('span');
  169. $div->class="label label-success";
  170. $div->style="text-shadow:none; font-size:12px";
  171. $div->add('No Prazo');
  172. return $div;
  173. }
  174. else
  175. if ($object->certificado == '1')
  176. {
  177. $div = new TElement('span');
  178. $div->class="label label-info";
  179. $div->style="text-shadow:none; font-size:12px";
  180. $div->add($value);
  181. return $div;
  182. }
  183. else
  184. if ($object->certificado == '2')
  185. {
  186. $div = new TElement('span');
  187. $div->class="label label-danger";
  188. $div->style="text-shadow:none; font-size:12px";
  189. $div->add('Vencido');
  190. return $div;
  191. }
  192. else
  193. {
  194. $div = new TElement('span');
  195. $div->class="label label-default";
  196. $div->style="text-shadow:none; font-size:12px";
  197. $div->add('Inativo');
  198. return $div;
  199. }
  200. });
  201. $this->bategrid->addColumn($column_bate_equipto);
  202. $this->bategrid->addColumn($column_bate_serie);
  203. $this->bategrid->addColumn($column_bate_fabricante);
  204. $this->bategrid->addColumn($column_bate_validade);
  205. $this->bategrid->addColumn($column_bate_situacao);
  206. $column_bate_validade->setTransformer( function ($value) {
  207. if ($value)
  208. {
  209. $value = TDate::convertToMask($value, 'yyyy-mm-dd', 'dd/mm/yyyy');
  210. return $value;
  211. }
  212. });
  213. $column_bate_situacao->setTransformer( function ($value) {
  214. if ($value == '1')
  215. {
  216. $div = new TElement('span');
  217. $div->class="label label-danger";
  218. $div->style="text-shadow:none; font-size:12px";
  219. $div->add('Vencida');
  220. return $div;
  221. }
  222. });
  223. // create the datagrid model
  224. $this->datagrid->createModel();
  225. $this->proggrid->createModel();
  226. $this->tacogrid->createModel();
  227. $this->bategrid->createModel();
  228. // creates the page navigation
  229. // creates the form
  230. $panel = new TPanelGroup('<b>Mapa de Programação Preventiva</b>','orange');
  231. $panel->add($this->datagrid);
  232. $panel2 = new TPanelGroup('<b>Programações em Andamento</b>','yellow');
  233. $panel2->add($this->proggrid);
  234. $panel3 = new TPanelGroup('<b>Situação de Tacógrafos</b>','#dde171');
  235. $panel3->add($this->tacogrid);
  236. $panel4 = new TPanelGroup('<b>Garantia das Baterias</b>','#dde171');
  237. $panel4->add($this->bategrid);
  238. // vertical box container
  239. $container = new TVBox;
  240. $container->style ='width: 100%';
  241. $div = new TElement('div');
  242. $div->class = "row";
  243. // $div->add( TElement::tag('div', $this->label_dashboard, ['class' => 'col-sm-12']) );
  244. $div->add( TElement::tag('div', $this->indicator1, ['class' => 'col-sm-3']) );
  245. $div->add( TElement::tag('div', $this->indicator2, ['class' => 'col-sm-3']) );
  246. $div->add( TElement::tag('div', $this->indicator3, ['class' => 'col-sm-3']) );
  247. $div->add( TElement::tag('div', $this->indicator4, ['class' => 'col-sm-3']) );
  248. // $div->add( TElement::tag('div', TPanelGroup::pack('<b>Mapa de Programação Preventiva</b>', $this->datagrid), ['class' => 'col-sm-12']) );
  249. $div->add( TElement::tag('div',$panel , ['class' => 'col-sm-12']) );
  250. $div->add( TElement::tag('div',$panel2, ['class' => 'col-sm-12']) );
  251. $div->add( TElement::tag('div',$panel3, ['class' => 'col-sm-6']) );
  252. $div->add( TElement::tag('div',$panel4, ['class' => 'col-sm-6']) );
  253. $container->add($this->form);
  254. $container->add($div);
  255. parent::add($container);
  256. }
  257. public static function abrefecha()
  258. {
  259. TScript::create("$('tr.info').click();");
  260. }
  261. public function onProcLog( $param = null )
  262. {
  263. try
  264. {
  265. $dataform = $this->form->getData();
  266. $source = TTransaction::open('pcmman');
  267. if (!$param['empresa_id'])
  268. {
  269. $mapa_preventiva = ViewMapapreventiva::orderBy('placa,medida_id')->load();
  270. $programacao = ViewProgramacao::where('situacao','<>','2')->orderBy('preventiva_id')->load();
  271. $preventivaexecuta = ViewMapapreventiva::count();
  272. $aguardando = ViewProgramacao::where('situacao','=','0')->count();
  273. $manutencao = ViewProgramacao::where('situacao','=','1')->count();
  274. $concluido = ViewProgramacao::where('situacao','=','2')->count();
  275. $tacografo = ViewTacografo::orderBy('validade')->load();
  276. $baterias = ViewBaterias::orderBy('data_validade')->load();
  277. }
  278. else
  279. {
  280. $mapa_preventiva = ViewMapapreventiva::where('empresa','=',$param['empresa_id'])->orderBy('placa,medida_id')->load();
  281. $programacao = ViewProgramacao::where('situacao','<>','2')->where('empresa','=',$param['empresa_id'])->orderBy('preventiva_id')->load();
  282. $preventivaexecuta = ViewMapapreventiva::where('empresa','=',$param['empresa_id'])->count();
  283. $aguardando = ViewProgramacao::where('situacao','=','0')->where('empresa','=',$param['empresa_id'])->count();
  284. $manutencao = ViewProgramacao::where('situacao','=','1')->where('empresa','=',$param['empresa_id'])->count();
  285. $concluido = ViewProgramacao::where('situacao','=','2')->where('empresa','=',$param['empresa_id'])->count();
  286. $tacografo = ViewTacografo::where('empresa','=',$param['empresa_id'])->orderBy('validade')->load();
  287. $baterias = ViewBaterias::where('empresa','=',$param['empresa_id'])->orderBy('data_validade')->load();
  288. }
  289. $this->datagrid->clear();
  290. if ($mapa_preventiva)
  291. {
  292. foreach ($mapa_preventiva as $mapa)
  293. {
  294. $programa = new stdClass;
  295. $programa->id = $mapa->id;
  296. $programa->placa = $mapa->placa;
  297. $programa->equipamento = $mapa->equipamento;
  298. $programa->medida = $mapa->medida;
  299. $programa->troca = $mapa->troca;
  300. $programa->periodo = $mapa->periodo;
  301. $programa->leitura = $mapa->leitura;
  302. $programa->hoje = $mapa->hoje;
  303. $programa->medida_id = $mapa->medida_id;
  304. $this->datagrid->addItem($programa);
  305. }
  306. }
  307. $this->proggrid->clear();
  308. if ($programacao)
  309. {
  310. foreach ($programacao as $manut)
  311. {
  312. $programa = new stdClass;
  313. $programa->id = $manut->id;
  314. $programa->preventiva_id = $manut->preventiva_id;
  315. $programa->itemplano_id = $manut->itemplano_id;
  316. $programa->valor_atual = $manut->valor_atual;
  317. $programa->valor_anterior = $manut->valor_anterior;
  318. $programa->data_anterior = $manut->data_anterior;
  319. $programa->situacao = $manut->situacao;
  320. $programa->data_manut = $manut->data_manut;
  321. $programa->ordem_servico = $manut->ordem_servico;
  322. $programa->medida = $manut->medida;
  323. $programa->equipamento = $manut->equipamento;
  324. $programa->placa = $manut->placa;
  325. $this->proggrid->addItem($programa);
  326. }
  327. }
  328. $this->tacogrid->clear();
  329. if ($tacografo)
  330. {
  331. foreach ($tacografo as $manut)
  332. {
  333. $programa = new stdClass;
  334. $programa->documento = $manut->documento;
  335. $programa->emissao = $manut->emissao;
  336. $programa->validade = $manut->validade;
  337. $programa->situacao = $manut->situacao;
  338. $programa->equipto = $manut->equipto;
  339. $programa->certificado = $manut->certificado;
  340. $this->tacogrid->addItem($programa);
  341. }
  342. }
  343. $this->bategrid->clear();
  344. if ($baterias)
  345. {
  346. foreach ($baterias as $manut)
  347. {
  348. $programa = new stdClass;
  349. $programa->equipamento = $manut->equipamento;
  350. $programa->serie = $manut->serie;
  351. $programa->fabricante = $manut->fabricante;
  352. $programa->situacao = $manut->situacao;
  353. $programa->data_validade = $manut->data_validade;
  354. $this->bategrid->addItem($programa);
  355. }
  356. }
  357. $this->indicator1->enableSection('main', ['title' => 'A programar', 'icon' => 'bullhorn', 'background' => 'red', 'value' => number_format($preventivaexecuta,0,',','.')] );
  358. $this->indicator2->enableSection('main', ['title' => 'Aguardando O.S', 'icon' => 'clock', 'background' => 'blue', 'value' => number_format($aguardando,0,',','.')] );
  359. $this->indicator3->enableSection('main', ['title' => 'Em Manutenção', 'icon' => 'wrench', 'background' => 'orange', 'value' => number_format($manutencao,0,',','.')] );
  360. $this->indicator4->enableSection('main', ['title' => 'Concluidas', 'icon' => 'thumbs-up', 'background' => 'green', 'value' => number_format($concluido,0,',','.')] );
  361. $this->form->setData($dataform);
  362. }
  363. catch (Exception $e)
  364. {
  365. new TMessage('error', $e->getMessage());
  366. }
  367. }
  368. public function onGeraProg( $param )
  369. {
  370. $action = new TAction(array($this, 'programar'));
  371. $action->setParameters($param); // pass the key parameter ahead
  372. // shows a dialog to the user
  373. new TQuestion('Deseja Programar essa manutenção?', $action);
  374. }
  375. public function programar($param){
  376. try
  377. {
  378. TTransaction::open('pcmman');
  379. $data = new Programacao;
  380. $data->preventiva_id = (int) $param['id'];
  381. $data->itemplano_id = (int) $param['medida_id'];
  382. $data->valor_anterior = (int) $param['troca'];
  383. $data->valor_atual = (int) $param['leitura'];
  384. $data->data_manut = date('Y-m-d');
  385. $data->situacao = 0;
  386. $data->data_anterior = TDate::convertToMask($param['periodo'],'dd/mm/yyyy','yyyy-mm-dd');
  387. $data->store();
  388. TTransaction::close();
  389. $this->onProcLog();
  390. }
  391. catch (Exception $e) // in case of exception
  392. {
  393. new TMessage('error', $e->getMessage()); // shows the exception error message
  394. TTransaction::rollback(); // undo all pending operations
  395. }
  396. }
  397. function show()
  398. {
  399. $this->onProcLog();
  400. $this->abrefecha();
  401. parent::show();
  402. }
  403. }
  404. ?>
NR

Provavelmente o javascript está executando antes do término do carregamento/processamento da página. Tente o seguinte:
 
  1. <?php
  2. public static function abrefecha()
  3. {
  4. TScript::create("
  5. $(function(){
  6. $('tr.info').click();
  7. });
  8. ");
  9. }
  10. ?>
DA

Bom dia, Nataniel

Funcionou certinho agora.

Só para compreender a inclusão de FUNCTION no script, ele cria a função no JS e depois ela será chamada na sequência do processo da função SHOW, diferente de antes que executava o comando direto antes da conclusão na chamada da função abrefecha(), trocando em miúdo seria isso ou não?

Grato por mais esse auxílio!