Habilitar e desabilitar campo Olá amigos, Alguém poderia me orientar como habilitar e desabilitar um campo no formulário de acordo com o código inserido TSeekButton....
ST
Habilitar e desabilitar campo  
Olá amigos,
Alguém poderia me orientar como habilitar e desabilitar um campo no formulário de acordo com o código inserido TSeekButton.

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


ST

Preciso de um exemplo em que tenha um campo TDBSeekButton.
NR

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

A única diferença é que o exemplo utiliza a função setChangeAction para os radios enquanto que para o seek você deve usar a função setExitAction.
ST

Amigo Nataniel,

Estou fazendo da seguinte forma mas não está funcionando:

$OrigemDocumento_id->setExitAction( new TAction( array($this, 'onChangeButtonSeek')) );
self::onChangeButtonSeek('OrigemDocumento_id'->$OrigemDocumento_id);

public static function onChangeButtonSeek($param)
{
if ($param['OrigemDocumento_id'] == 1)
{
TEntry::disableField('form_perdcomp', 'PerdcompOriginal');
}
else
{
TEntry::enableField('form_perdcomp', 'PerdcompOriginal');
}
}


Segue código completo do formulário:

 
  1. <?php
  2. /**
  3. * PerdcompForm Registration
  4. * @author <your name here>
  5. */
  6. class PerdcompForm extends TPage
  7. {
  8. protected $form; // form
  9. use Adianti\Base\AdiantiStandardFormTrait; // Standard form methods
  10. /**
  11. * Class constructor
  12. * Creates the page and the registration form
  13. */
  14. function __construct()
  15. {
  16. parent::__construct();
  17. $this->setDatabase('perdcomp'); // defines the database
  18. $this->setActiveRecord('Perdcomp'); // defines the active record
  19. // creates the form
  20. $this->form = new TQuickForm('form_Perdcomp');
  21. $this->form->class = 'tform'; // change CSS class
  22. // $this->form = new BootstrapFormWrapper($this->form);
  23. $this->form->style = 'display: table;width:100%'; // change style
  24. // define the form title
  25. $this->form->setFormTitle('Perdcomp');
  26. // create the form fields
  27. $perdcomp_id = new TEntry('perdcomp_id');
  28. $DataCriacao = new TDate('DataCriacao');
  29. $DataTransmissao = new TDate('DataTransmissao');
  30. $Sequencial = new TEntry('Sequencial');
  31. $Nr_Perdcomp = new TEntry('Nr_Perdcomp');
  32. $TipoDocumento_id = new ">TDBSeekButton('TipoDocumento_id', 'perdcomp',$this->form->getName(),'TipoDocumento', 'TipoDocumentoDescricao','TipoDocumento_id','tipo_documento');
  33. $TipoDocumentoDescricao = new TEntry('tipo_documento');
  34. $OrigemDocumento_id = new ">TDBSeekButton('OrigemDocumento_id', 'perdcomp', $this->form->getName(), 'OrigemDocumento', 'OrigemDocumentoDescricao', 'OrigemDocumento_id', 'origem_documento');
  35. $OrigemDocumentoDescricao = new TEntry('origem_documento');
  36. $TipoCredito_id = new ">TDBSeekButton('TipoCredito_id', 'perdcomp', $this->form->getName(), 'TipoCredito', 'TipoCreditoDescricao', 'TipoCredito_id', 'tipo_credito');
  37. $TipoCreditoDescricao = new TEntry('tipo_credito');
  38. //$SaldoDeclarado = new TEntry('SaldoDeclarado');
  39. $Exercicio = new TEntry('Exercicio');
  40. $TipoImposto_id = new ">TDBSeekButton('TipoImposto_id', 'perdcomp', $this->form->getName(), 'TipoImposto', 'TipoImpostoDescricao', 'TipoImposto_id', 'tipo_imposto');
  41. $TipoImpostoDescricao = new TEntry('tipo_imposto');
  42. //$ValorCompensado = new TEntry('ValorCompensado');
  43. //$Competencia = new TEntry('Competencia');
  44. $PerdcompOriginal = new TEntry('PerdcompOriginal');
  45. $TipoSituacao_id = new ">TDBSeekButton('TipoSituacao_id', 'perdcomp', $this->form->getName(), 'TipoSituacao', 'TipoSituacaoDescricao', 'TipoSituacao_id', 'tipo_situacao');
  46. $TipoSituacaoDescricao = new TEntry('tipo_situacao');
  47. //$Situacao = new TEntry('Situacao');
  48. $Cancelamento = new TEntry('Cancelamento');
  49. $CreditoOriginalInicial = new TEntry('CreditoOriginalInicial');
  50. $CreditoOriginalUtilizadoCompensacoes = new TEntry('CreditoOriginalUtilizadoCompensacoes');
  51. //$CreditoOriginalDisponivel = new TEntry('CreditoOriginalDisponivel');
  52. $CreditoOriginalTransmissao = new TEntry('CreditoOriginalTransmissao');
  53. $SelicAcumulada = new TEntry('SelicAcumulada');
  54. $CreditoAtualizado = new TEntry('CreditoAtualizado');
  55. $DebitosDocumento = new TEntry('DebitosDocumento');
  56. $CreditoOriginalUtilizadoDocumento = new TEntry('CreditoOriginalUtilizadoDocumento');
  57. $SaldoCreditoOriginal = new TEntry('SaldoCreditoOriginal');
  58. // $system_unit_id = new TDBSeekButton('system_unit_id', 'permission', $this->form->getName(),'SystemUnit', 'name', 'system_unit_id', 'unit');
  59. // $system_unit = new TEntry('unit');
  60. //$system_unit_id = new TDBCombo('system_unit_id','permission','SystemUnit','id','name');
  61. $Ged = new TFile('Ged');
  62. // complete upload action
  63. $TipoDocumentoDescricao->setEditable(FALSE);
  64. $TipoDocumento_id->setSize('40');
  65. $TipoDocumentoDescricao->setSize('500');
  66. $OrigemDocumentoDescricao->setEditable(FALSE);
  67. $OrigemDocumento_id->setSize('40');
  68. $OrigemDocumentoDescricao->setSize('500');
  69. $TipoCreditoDescricao->setEditable(FALSE);
  70. $TipoCredito_id->setSize('40');
  71. $TipoCreditoDescricao->setSize('500');
  72. $TipoImpostoDescricao->setEditable(FALSE);
  73. $TipoImposto_id->setSize('40');
  74. $TipoImpostoDescricao->setSize('500');
  75. $TipoSituacaoDescricao->setEditable(FALSE);
  76. $TipoSituacao_id->setSize('40');
  77. $TipoSituacaoDescricao->setSize('500');
  78. //$SaldoDeclarado->setNumericMask(2, ',', '.', TRUE);
  79. //$ValorCompensado->setNumericMask(2, ',', '.', TRUE);
  80. $CreditoOriginalInicial->setNumericMask(2, ',', '.', TRUE);
  81. $CreditoOriginalUtilizadoCompensacoes->setNumericMask(2, ',', '.', TRUE);
  82. //$CreditoOriginalDisponivel->setNumericMask(2, ',', '.', TRUE);
  83. $CreditoOriginalTransmissao->setNumericMask(2, ',', '.', TRUE);
  84. $SelicAcumulada->setNumericMask(2, ',', '.', TRUE);
  85. $CreditoAtualizado->setNumericMask(2, ',', '.', TRUE);
  86. $DebitosDocumento->setNumericMask(2, ',', '.', TRUE);
  87. $CreditoOriginalUtilizadoDocumento->setNumericMask(2, ',', '.', TRUE);
  88. $SaldoCreditoOriginal->setNumericMask(2, ',', '.', TRUE);
  89. $Nr_Perdcomp->setMask('99999.99999.999999.9.9.99-9999');
  90. $PerdcompOriginal->setMask('99999.99999.999999.9.9.99-9999');
  91. $DataCriacao->setMask('dd/mm/yyyy');
  92. $DataTransmissao->setMask('dd/mm/yyyy');
  93. //$Competencia->setMask('dd/mm/yyyy');
  94. // add the fields
  95. $this->form->addQuickField('Código:', $perdcomp_id, 100);
  96. $this->form->addQuickField('Data Criação:', $DataCriacao, 100, new TRequiredValidator );
  97. $this->form->addQuickField('Data Transmissão:', $DataTransmissao, 100,new TRequiredValidator );
  98. $this->form->addQuickField('Sequencial:', $Sequencial, 40,new TRequiredValidator );
  99. $this->form->addQuickField('Nº Perdcomp:', $Nr_Perdcomp, 220,new TRequiredValidator );
  100. $this->form->addQuickFields('Tipo Documento:', [$TipoDocumento_id,$TipoDocumentoDescricao],new TRequiredValidator );
  101. $this->form->addQuickFields('Origem Documento:', [ $OrigemDocumento_id, $OrigemDocumentoDescricao ],new TRequiredValidator );
  102. $this->form->addQuickFields('Tipo Crédito:', [ $TipoCredito_id, $TipoCreditoDescricao],new TRequiredValidator );
  103. // $this->form->addQuickField('Saldo Declarado:', $SaldoDeclarado, 100 );
  104. $this->form->addQuickFields('Imposto:', [ $TipoImposto_id, $TipoImpostoDescricao],new TRequiredValidator );
  105. $this->form->addQuickField('Exercicio:', $Exercicio, 100 );
  106. // $this->form->addQuickField('Valor Compensado:', $ValorCompensado, 100 );
  107. // $this->form->addQuickField('Competência:', $Competencia, 100 );
  108. $this->form->addQuickField('Perdcomp Original:', $PerdcompOriginal, 220 );
  109. // $this->form->addQuickField('Situação:', $Situacao, 200 );
  110. $this->form->addQuickFields('Situação:', [ $TipoSituacao_id, $TipoSituacaoDescricao],new TRequiredValidator );
  111. $this->form->addQuickField('Cancelamento:', $Cancelamento, 200 );
  112. $this->form->addQuickField('Crédito Original Inicial:', $CreditoOriginalInicial, 100 );
  113. $this->form->addQuickField('Crédito Original Utilizado Compensações:', $CreditoOriginalUtilizadoCompensacoes, 100 );
  114. // $this->form->addQuickField('Crédito Original Disponível:', $CreditoOriginalDisponivel, 100 );
  115. $this->form->addQuickField('Crédito Original na Data da Transmissão:', $CreditoOriginalTransmissao, 100 );
  116. $this->form->addQuickField('Selic Acumulada:', $SelicAcumulada, 100 );
  117. $this->form->addQuickField('Crédito Atualizado:', $CreditoAtualizado, 100 );
  118. $this->form->addQuickField('Débitos Documento:', $DebitosDocumento, 100 );
  119. $this->form->addQuickField('Crédito Original Utilizado Documento:', $CreditoOriginalUtilizadoDocumento, 100 );
  120. $this->form->addQuickField('Saldo Crédito Original:', $SaldoCreditoOriginal, 100);
  121. // $this->form->addQuickFields('Empresa:', [$system_unit_id,$system_unit], new TRequiredValidator);
  122. $this->form->addQuickField('Ged:', $Ged, 500 );
  123. if (!empty($perdcomp_id))
  124. {
  125. $perdcomp_id->setEditable(FALSE);
  126. }
  127. $OrigemDocumento_id->setExitAction( new TAction( array($this, 'onChangeButtonSeek')) );
  128. self::onChangeButtonSeek('OrigemDocumento_id'->$OrigemDocumento_id);
  129. $source_path = 'app/files/documents/'. TSession::getValue('userunitid');
  130. if (!file_exists($source_path))
  131. {
  132. mkdir($source_path, 0777,true);
  133. }
  134. if (!file_exists($target_path))
  135. {
  136. mkdir($target_path, 0777,true);
  137. }
  138. /** samples
  139. $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  140. $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  141. $fieldX->setSize( 100, 40 ); // set size
  142. **/
  143. // create the form actions
  144. $this->form->addQuickAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
  145. $this->form->addQuickAction(_t('New'), new TAction(array($this, 'onEdit')), 'bs:plus-sign green');
  146. $this->form->addQuickAction(_t('Back to the listing'), new TAction(array('PerdcompList', 'onReload')), 'fa:table blue');
  147. // vertical box container
  148. $container = new TVBox;
  149. $container->style = 'width: 101%';
  150. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  151. $container->add($this->form);
  152. //$container->add(TPanelGroup::pack('Perdcomp', $this->form));
  153. parent::add($container);
  154. }
  155. /**
  156. * Save form data
  157. * @param $param Request
  158. */
  159. public function onSave( $param )
  160. {
  161. try
  162. {
  163. TTransaction::open('perdcomp'); // open a transaction
  164. /**
  165. // Enable Debug logger for SQL operations inside the transaction
  166. TTransaction::setLogger(new TLoggerSTD); // standard output
  167. TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  168. **/
  169. $this->form->validate(); // validate form data
  170. $object = new Perdcomp; // create an empty object
  171. $data = $this->form->getData(); // get form data as array
  172. $object->fromArray( (array) $data); // load the object with data
  173. if (!empty($object->DataCriacao)) {
  174. $object->DataCriacao = DateTime::createFromFormat('d/m/Y', $object->DataCriacao)->format( 'Y-m-d' );
  175. }
  176. if (!empty($object->DataTransmissao)) {
  177. $object->DataTransmissao = DateTime::createFromFormat('d/m/Y', $object->DataTransmissao)->format( 'Y-m-d' );
  178. }
  179. $object->system_user_id = TSession::getvalue('userid');
  180. $user = new SystemUser(TSession::getValue('userid'));
  181. $object->system_unit_id = $user->system_unit_id;
  182. $source_file = 'tmp/'.$object->Ged;
  183. $target_path = 'app/files/documents/'. TSession::getValue('userunitid');
  184. $target_file = $target_path . '/'.$object->Ged;
  185. copy($source_file, $target_file);
  186. if ($handle = opendir('tmp/')):
  187. /* Esta é a forma correta de varrer o diretório */
  188. while (false !== ($file = readdir($handle))):
  189. if ($file != '.' && $file != '..' && is_file("tmp/{$file}")):
  190. unlink("tmp/{$file}");
  191. endif;
  192. endwhile;
  193. closedir($handle);
  194. endif;
  195. $target_path = 'tmp/' . TSession::getValue('userunitid');
  196. rmdir($target_path);
  197. rmdir('tmp');
  198. $htaccess = 'app/htaccess/.htaccess';
  199. $pasta = 'app/files/.htaccess';
  200. copy($htaccess,$pasta);
  201. // $uniqueValidator = new TUniqueValidator;
  202. // $uniqueValidator->validate('CPF', $object->cpf, array('database' => 'ieadb', 'model' => 'Member','field' => 'cpf', 'id' => $object->id));
  203. $object->store(); // save the object
  204. // get the generated id
  205. $data->id = $object->id;
  206. $this->form->setData($data); // fill form data
  207. TTransaction::close(); // close the transaction
  208. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  209. }
  210. catch (Exception $e) // in case of exception
  211. {
  212. new TMessage('error', $e->getMessage()); // shows the exception error message
  213. $this->form->setData( $this->form->getData() ); // keep form data
  214. TTransaction::rollback(); // undo all pending operations
  215. }
  216. }
  217. /**
  218. * Clear form data
  219. * @param $param Request
  220. */
  221. public function onClear( $param )
  222. {
  223. $this->form->clear();
  224. }
  225. /**
  226. * Load object to form data
  227. * @param $param Request
  228. */
  229. public function onEdit( $param )
  230. {
  231. try
  232. {
  233. if (isset($param['key']))
  234. {
  235. $key = $param['key']; // get the parameter $key
  236. TTransaction::open('perdcomp'); // open a transaction
  237. $object = new Perdcomp($key); // instantiates the Active Record
  238. if (!empty($object->DataCriacao)) {
  239. $object->DataCriacao = DateTime::createFromFormat('Y-m-d', $object->DataCriacao)->format( 'd/m/Y' );
  240. }
  241. if (!empty($object->DataTransmissao)) {
  242. $object->DataTransmissao = DateTime::createFromFormat('Y-m-d', $object->DataTransmissao)->format( 'd/m/Y' );
  243. }
  244. $this->form->setData($object); // fill the form
  245. TTransaction::close(); // close the transaction
  246. }
  247. else
  248. {
  249. $this->form->clear();
  250. }
  251. }
  252. catch (Exception $e) // in case of exception
  253. {
  254. new TMessage('error', $e->getMessage()); // shows the exception error message
  255. TTransaction::rollback(); // undo all pending operations
  256. }
  257. }
  258. public static function onChangeButtonSeek($param)
  259. {
  260. if ($param['OrigemDocumento_id'] == 1)
  261. {
  262. TEntry::disableField('form_perdcomp', 'PerdcompOriginal');
  263. }
  264. else
  265. {
  266. TEntry::enableField('form_perdcomp', 'PerdcompOriginal');
  267. }
  268. }
  269. }
  270. </your>
NR

O nome do formulário informado na função onChangeButtonSeek está diferente do nome informado na função onChangeButtonSeek:
 
  1. <?php
  2. // construct
  3. $this->form = new TQuickForm('form_Perdcomp');
  4. // funcao onChangeButtonSeek
  5. TEntry::disableField('form_perdcomp', 'PerdcompOriginal');
  6. ?>
ST

Nataniel,
Realizei as alterações conforme suas orientações mas não funcionou.
EB

Funciona perfeitamente. Obrigado pela dica @Nataniel!