Trocar Button ao usar onReload? Olá pessoal, tenho dois botões: Pago e Emitir Recibo. Minha dúvida é, como passo em tempo de execução através do status "S" ou "N" exibir o botão de Pago ou de Emitir Recibo?...
IV
Trocar Button ao usar onReload?  
Olá pessoal, tenho dois botões: Pago e Emitir Recibo.
Minha dúvida é, como passo em tempo de execução através do status "S" ou "N" exibir o botão de Pago ou de Emitir Recibo?

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)


MG

Guarde o status numa TSession, não ajuda?
MG

Um exemplo:

 
  1. <?php
  2. $pago = TSession::getValue('<nome_form>_pago'); // entende-se que no onEdit ou onSave vc tenha guardando este valor
  3. $btn = new TButton('stt');
  4. if ($pago) {
  5. $btn->setValue('Pago');
  6. $action1 = new TAction(array($this,'onPago'));
  7. $btn->setAction($action1);
  8. } else {
  9. $btn->setValue('Emitir Recibo');
  10. $action1 = new TAction(array($this,'onEmitirRecibo'));
  11. $btn->setAction($action1);
  12. }
  13. ?>
IV

Marcelo, quero implementar em um TDataGridAction.
Tentei aplicar sua dica no onReload mas não tive sucesso, ele esta mudando todos e não linha a linha.
MG

Iran
Posta o código para podermos verificar.
IV

Tentei usar o TSession::getValue e TSession::setValue mas ele só ler o primeiro registro e apresentar um botão para todoss.
Coloquei o código original.

 
  1. <?php
  2. class DiariaList extends TPage
  3. {
  4. private $form; // form
  5. private $datagrid; // listing
  6. private $pageNavigation;
  7. private $formgrid;
  8. private $loaded;
  9. private $deleteButton;
  10. /**
  11. * Class constructor
  12. * Creates the page, the form and the listing
  13. */
  14. public function __construct()
  15. {
  16. parent::__construct();
  17. . . .
  18. // creates the datagrid columns
  19. $column_favorecido_id = new TDataGridColumn('favorecido_id', 'Favorecido', 'left');
  20. $column_dataDiaria = new TDataGridColumn('dataDiaria', 'Data Diária', 'left');
  21. $column_objetivo = new TDataGridColumn('objetivo', 'Objetivo', 'left');
  22. $column_origem = new TDataGridColumn('origem', 'Origem', 'left');
  23. $column_destino = new TDataGridColumn('destino', 'Destino', 'left');
  24. $column_dataInicial = new TDataGridColumn('dataInicial', 'Data Inicial', 'left');
  25. $column_dataFinal = new TDataGridColumn('dataFinal', 'Data Final', 'left');
  26. $column_autorizado = new TDataGridColumn('autorizado', 'Autorizado', 'center');
  27. // add the columns to the DataGrid
  28. $this->datagrid->addColumn($column_favorecido_id);
  29. $this->datagrid->addColumn($column_dataDiaria);
  30. //$this->datagrid->addColumn($column_objetivo);
  31. $this->datagrid->addColumn($column_origem);
  32. $this->datagrid->addColumn($column_destino);
  33. $this->datagrid->addColumn($column_dataInicial);
  34. $this->datagrid->addColumn($column_dataFinal);
  35. $this->datagrid->addColumn($column_autorizado);
  36. $column_autorizado->setTransformer( function($value, $object, $row)
  37. {
  38. $class = ($value=='N') ? 'danger' : 'success';
  39. $label = ($value=='N') ? _t('No') : _t('Yes');
  40. $div = new TElement('span');
  41. $div->class="label label-{$class}";
  42. $div->style="text-shadow:none; font-size:12px; font-weight:lighter";
  43. $div->add($label);
  44. return $div;
  45. });
  46. // create EDIT action
  47. $action_edit = new TDataGridAction(array('DiariaForm', 'onEdit'));
  48. $action_edit->setButtonClass('btn btn-default');
  49. $action_edit->setLabel(_t('Edit'));
  50. $action_edit->setImage('fa:pencil-square-o blue fa-lg');
  51. $action_edit->setField('id');
  52. $this->datagrid->addAction($action_edit);
  53. // create DELETE action
  54. $action_del = new TDataGridAction(array($this, 'onDelete'));
  55. $action_del->setButtonClass('btn btn-default');
  56. $action_del->setLabel(_t('Delete'));
  57. $action_del->setImage('fa:trash-o red fa-lg');
  58. $action_del->setField('id');
  59. $this->datagrid->addAction($action_del);
  60. /************************************************************************************
  61. * A partir deste ponto quero apresentar ou o botão de Pagar ou Emitir Recibo
  62. ************************************************************************************/
  63. // create INSERTREL action
  64. $action_Rel = new TDataGridAction(array($this, 'onInsertRel'));
  65. $action_Rel->setButtonClass('btn btn-default');
  66. $action_Rel->setLabel('Pagar');
  67. $action_Rel->setImage('fa:thumbs-o-up green fa-lg');
  68. $action_Rel->setField('id');
  69. $this->datagrid->addAction($action_Rel);
  70. // create GENERATE action
  71. $action_Gen = new TDataGridAction(array($this, 'onGenerate'));
  72. $action_Gen->setButtonClass('btn btn-default');
  73. $action_Gen->setLabel('Emitir Recibo');
  74. $action_Gen->setImage('fa:print purple fa-lg');
  75. $action_Gen->setField('id');
  76. $this->datagrid->addAction($action_Gen);
  77. // create the datagrid model
  78. $this->datagrid->createModel();
  79. . . .
  80. }
  81. /**
  82. * Load the datagrid with data
  83. */
  84. public function onReload($param = NULL)
  85. {
  86. try
  87. {
  88. // open a transaction with database 'empresa'
  89. TTransaction::open('empresa');
  90. // creates a repository for Diaria
  91. $repository = new TRepository('Diaria');
  92. $limit = 10;
  93. // creates a criteria
  94. $criteria = new TCriteria;
  95. // default order
  96. if (empty($param['order']))
  97. {
  98. $param['order'] = 'id';
  99. $param['direction'] = 'asc';
  100. }
  101. $criteria->setProperties($param); // order, offset
  102. $criteria->setProperty('limit', $limit);
  103. if (TSession::getValue('DiariaList_filter_favorecido_id')) {
  104. $criteria->add(TSession::getValue('DiariaList_filter_favorecido_id')); // add the session filter
  105. }
  106. if (TSession::getValue('DiariaList_filter_dataDiaria')) {
  107. $criteria->add(TSession::getValue('DiariaList_filter_dataDiaria')); // add the session filter
  108. }
  109. if (TSession::getValue('DiariaList_filter_origem')) {
  110. $criteria->add(TSession::getValue('DiariaList_filter_origem')); // add the session filter
  111. }
  112. if (TSession::getValue('DiariaList_filter_destino')) {
  113. $criteria->add(TSession::getValue('DiariaList_filter_destino')); // add the session filter
  114. }
  115. if (TSession::getValue('DiariaList_filter_autorizado')) {
  116. $criteria->add(TSession::getValue('DiariaList_filter_autorizado')); // add the session filter
  117. }
  118. // load the objects according to criteria
  119. $objects = $repository->load($criteria, FALSE);
  120. if (is_callable($this->transformCallback))
  121. {
  122. call_user_func($this->transformCallback, $objects, $param);
  123. }
  124. $this->datagrid->clear();
  125. if ($objects)
  126. {
  127. // iterate the collection of active records
  128. foreach ($objects as $object)
  129. {
  130. // add the object inside the datagrid
  131. $this->datagrid->addItem($object);
  132. }
  133. }
  134. // reset the criteria for record count
  135. $criteria->resetProperties();
  136. $count= $repository->count($criteria);
  137. $this->pageNavigation->setCount($count); // count of records
  138. $this->pageNavigation->setProperties($param); // order, page
  139. $this->pageNavigation->setLimit($limit); // limit
  140. // close the transaction
  141. TTransaction::close();
  142. $this->loaded = true;
  143. }
  144. catch (Exception $e) // in case of exception
  145. {
  146. // shows the exception error message
  147. new TMessage('error', $e->getMessage());
  148. // undo all pending operations
  149. TTransaction::rollback();
  150. }
  151. }
  152. }
  153. ?>
MG

Iran

Vc carrega o form a partir de um onEdit, correto?
Neste onEdit, você seta a session com o status que você quer e na hora de adicionar a action no datagrid você recupera o valor e valida se adiciona ou não.
Veja no exemplo do onReload, se existe filtros pré armazenado na session ele usa e add no criteria.
O princípio é o mesmo.
FC

segue esse exemplo

www.adianti.com.br/framework_files/tutor/index.php?class=DatagridCon
IV

A resposta de Felipe resolveu de forma provisória, mas Marcelo ainda não entendi a logica de como carregar os componentes a partir de:
 
  1. <?php
  2. $this->datagrid->clear();
  3. if ($objects)
  4. {
  5. // iterate the collection of active records
  6. foreach ($objects as $object)
  7. {
  8. // add the object inside the datagrid
  9. $this->datagrid->addItem($object);
  10. }
  11. }
  12. ?>


Quero em uma coluna só, mostrar o um botão "Pago" ou botão "Emitir" . Já tentei de varias formas criar os botões a partir do $this->datagrid->addItem($object); mas sem sucesso.
MG

Iran

Veja, os botões não são carregados pelo foreach, somente os objetos (linhas) são carregadas da forma mencionada.

Utilize o exemplo do Felipe que "conditions" que dará certo!


www.adianti.com.br/framework_files/tutor/index.php?class=DatagridCon