HABILITAR E DESABILITAR CAMPOS A PARTIR DE UM TCombo http://www.adianti.com.br/forum/pt/view_3863?desabilitar-habilitar-campos-utilizando-um-tipo-tcombo Pessoal, fiz uma configuração no meu aplicativo utilizando o TCombo para desabilitar dois campos, CPF ou CNPJ conforme seleção, porém está acontecendo o seguinte: Quando faço uma inserção está normal, ou seja, quando seleciono TIPO = FÍSICA, desabilita o campo CNPJ e vise e versa. M...
HB
HABILITAR E DESABILITAR CAMPOS A PARTIR DE UM TCombo  
www.adianti.com.br/forum/pt/view_3863?desabilitar-habilitar-campos-u

Pessoal, fiz uma configuração no meu aplicativo utilizando o TCombo para desabilitar dois campos, CPF ou CNPJ conforme seleção, porém está acontecendo o seguinte:

Quando faço uma inserção está normal, ou seja, quando seleciono TIPO = FÍSICA, desabilita o campo CNPJ e vise e versa. Mais o meu cadastro parte de uma datagrid e aí tenho o seguinte:

1) se vocês observarem tenho validação do CPF e CNPJ (entre outras mais simples usando new TRequiredValidator);
2) também faço validação de conteúdo de campos que são unicos, como por exemplo o próprio CPF e CNPJ que não deixo cadastrar em duplicidade;

Assim, tenho duas situações:
1) quando ocorre quaquer validação e a aplicação mostra a mensagem de erro na tela, ao fechar a tela da mensagem, o campo fica habilitado novamente, ou seja, se seleciono TIPO = FÍSICA, o campo CNPJ que deveria ficar desabilitado, após a mensagem fica habilitado, e o que é pior, consigo preencher os dois campos.
2) quando estou na datagrid e pressiono o botão EDITAR, a aplicação carrega o registro, mais o campo CNPJ (do exemplo acima) que deveria estar desabilitado é carregado habilitado, permitindo também que eu faça o preenchimento do mesmo.

Alguém pode me auxiliar a resolver esta situação?

Vejam o meu código do cadastro de cliente abaixo, e caso necessário, acessem o código da datagrid de cliente no anexo.

 
  1. <?php
  2. /**
  3. * clienteForm Form
  4. * @author <your name here>
  5. */
  6. class clienteForm extends TPage
  7. {
  8. protected $form; // form
  9. /**
  10. * Form constructor
  11. * @param $param Request
  12. */
  13. public function __construct( $param )
  14. {
  15. parent::__construct();
  16. // creates the form
  17. $this->form = new TQuickForm('form_cliente');
  18. $this->form->class = 'tform'; // change CSS class
  19. $this->form->style = 'display: table;width: 90%'; // change style
  20. // define the form title
  21. $this->form->setFormTitle('Cadastro de Clientes');
  22. $CLI01Tipo = new TCombo('CLI01Tipo');
  23. $CLI01Tipo->addItems(array('1'=>'Física', '2'=>'Jurídica'));
  24. $id = new TEntry('id');
  25. $CLI01Nome = new TEntry('CLI01Nome');
  26. $CLI01CPF = new TEntry('CLI01CPF');
  27. $CLI01CNPJ = new TEntry('CLI01CNPJ');
  28. $CLI01CEP = new TEntry('CLI01CEP');
  29. $CLI01Endereco = new TEntry('CLI01Endereco');
  30. $CLI01Bairro = new TEntry('CLI01Bairro');
  31. $CLI01Cidade = new TEntry('CLI01Cidade');
  32. $estado_id = new ">TDBSeekButton('estado_id', 'sistema', 'form_cliente', 'estado', 'EST01Nome', 'estado_id', 'estado_nome');
  33. $estado_nome = new TEntry('estado_nome');
  34. $CLI01Comer = new TEntry('CLI01Comer');
  35. $CLI01Celular = new TEntry('CLI01Celular');
  36. $CLI01DtCadas = new TDate('CLI01DtCadas');
  37. $CLI01Ativo = new TCombo('CLI01Ativo');
  38. // adicionando os campos no formulário
  39. $this->form->addQuickField('Código', $id, 80 );
  40. $this->form->addQuickField('Tipo', $CLI01Tipo, 80 );
  41. $this->form->addQuickFields('CPF', array($CLI01CPF, new TLabel(' CNPJ'), $CLI01CNPJ));
  42. $this->form->addQuickField('Nome', $CLI01Nome, 319 , new TRequiredValidator);
  43. $this->form->addQuickField('CEP', $CLI01CEP, 135 );
  44. $this->form->addQuickFields('Endereço', array($CLI01Endereco, new TLabel(' Bairro'), $CLI01Bairro));
  45. $this->form->addQuickField('Cidade', $CLI01Cidade, 319 , new TRequiredValidator);
  46. $this->form->addQuickFields('UF', array($estado_id, $estado_nome ));
  47. $this->form->addQuickFields('Fone Comercial', array($CLI01Comer, new TLabel(' Fone Celular'), $CLI01Celular));
  48. $this->form->addQuickField('Cadastro', $CLI01DtCadas, 100 , new TRequiredValidator);
  49. $this->form->addQuickField('Ativo', $CLI01Ativo, 80 , new TRequiredValidator);
  50. //Chamar o método onChangeRadio
  51. $CLI01Tipo->setChangeAction( new TAction( array($this, 'onChangeRadio')));
  52. // minhas modificações
  53. $estado_nome->setEditable(FALSE);
  54. $CLI01CPF->setSize(135);
  55. $CLI01CNPJ->setSize(135);
  56. $CLI01Endereco->setSize(250);
  57. $CLI01Bairro->setSize(250);
  58. $CLI01Comer->setSize(180);
  59. $CLI01Celular->setSize(180);
  60. $estado_id->setSize(80);
  61. $estado_nome->setSize(218);
  62. $CLI01Nome->forceUpperCase();
  63. $CLI01Endereco->forceUpperCase();
  64. $CLI01Bairro->forceUpperCase();
  65. $CLI01Cidade->forceUpperCase();
  66. $CLI01DtCadas->setMask('dd/mm/yyyy');
  67. $CLI01DtCadas->setDatabaseMask('yyyy-mm-dd');
  68. $CLI01Comer->setMask('(99)9999-9999');
  69. $CLI01Celular->setMask('(99)9.9999-9999');
  70. $CLI01CEP->setMask('99.999-999');
  71. $CLI01CNPJ->setMask('99.999.999/9999-99');
  72. $CLI01CPF->setMask('999.999.999-99');
  73. $CLI01Ativo->addItems( [ '1' => 'Sim', '2' => 'Não'] );
  74. if (!empty($id))
  75. {
  76. $id->setEditable(FALSE);
  77. }
  78. /** samples
  79. $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  80. $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  81. $fieldX->setSize( 100, 40 ); // set size
  82. **/
  83. // create the form actions
  84. $this->form->addQuickAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
  85. $this->form->addQuickAction(_t('New'), new TAction(array($this, 'onClear')), 'bs:plus-sign green');
  86. // minhas modificações
  87. $this->form->addQuickAction('Retorna', new TAction(array('clienteCadastroGrid', 'onReload')), 'fa:table blue' );
  88. // vertical box container
  89. $container = new TVBox;
  90. $container->style = 'width: 90%';
  91. //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  92. $container->add($this->form);
  93. parent::add($container);
  94. }
  95. /**
  96. * on ChangeRadio change - AÇÕES PARA O GRUPO DE CAMPOS
  97. * @param $param Action parameters
  98. */
  99. public static function onChangeRadio($param)
  100. {
  101. if ($param['CLI01Tipo'] == 1)
  102. {
  103. TEntry::enableField('form_cliente', 'CLI01CPF');
  104. TEntry::disableField('form_cliente', 'CLI01CNPJ');
  105. TEntry::clearField('form_cliente', 'CLI01CNPJ');
  106. }
  107. if ($param['CLI01Tipo'] == 2)
  108. {
  109. TEntry::disableField('form_cliente', 'CLI01CPF');
  110. TEntry::clearField('form_cliente', 'CLI01CPF');
  111. TEntry::enableField('form_cliente', 'CLI01CNPJ');
  112. }
  113. }
  114. /**
  115. * Save form data
  116. * @param $param Request
  117. */
  118. public function onSave( $param )
  119. {
  120. try
  121. {
  122. TTransaction::open('sistema'); // open a transaction
  123. /**
  124. // Enable Debug logger for SQL operations inside the transaction
  125. TTransaction::setLogger(new TLoggerSTD); // standard output
  126. TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  127. **/
  128. $data = $this->form->getData(); // get form data as array
  129. // Valida o CPF para pessoas físicas
  130. if($data->CLI01Tipo == 1 )
  131. {
  132. $validacpf = new TRequiredValidator;
  133. $validacpf->validate('CPF', $data->CLI01CPF);
  134. if($data->CLI01CPF != '000.000.000-00')
  135. {
  136. $validacpf = new TCPFValidator;
  137. $validacpf->validate('CPF', $data->CLI01CPF);
  138. }
  139. }
  140. if($data->CLI01Tipo == 2 )
  141. {
  142. $validator = new TRequiredValidator;
  143. $validator->validate('CNPJ', $data->CLI01CNPJ);
  144. if($data->CLI01CNPJ != '00.000.000/0000-00')
  145. {
  146. $validator = new TCNPJValidator;
  147. $validator->validate('CNPJ', $data->CLI01CNPJ);
  148. }
  149. }
  150. $this->form->validate(); // validate form data
  151. $object = new cliente; // create an empty object
  152. $object->fromArray( (array) $data); // load the object with data
  153. $object->store(); // save the object
  154. // get the generated id
  155. $data->id = $object->id;
  156. $this->form->setData($data); // fill form data
  157. TTransaction::close(); // close the transaction
  158. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  159. }
  160. catch (Exception $e) // in case of exception
  161. {
  162. if($e->getCode() == 23000){
  163. new TMessage('error', '<b>Menssagem: CPF ou CNPJ já cadastrado!</b>');
  164. $this->form->setData( $this->form->getData() );
  165. }else{
  166. new TMessage('error', 'Erro: ' .$e->getCode(). '-' . $e->getMessage());
  167. $this->form->setData( $this->form->getData() );
  168. }
  169. TTransaction::rollback(); // undo all pending operations
  170. }
  171. }
  172. /**
  173. * Clear form data
  174. * @param $param Request
  175. */
  176. public function onClear( $param )
  177. {
  178. $this->form->clear(TRUE);
  179. }
  180. /**
  181. * Load object to form data
  182. * @param $param Request
  183. */
  184. public function onEdit( $param )
  185. {
  186. try
  187. {
  188. if (isset($param['key']))
  189. {
  190. $key = $param['key']; // get the parameter $key
  191. TTransaction::open('sistema'); // open a transaction
  192. $object = new cliente($key); // instantiates the Active Record
  193. $this->form->setData($object); // fill the form
  194. TTransaction::close(); // close the transaction
  195. }
  196. else
  197. {
  198. $this->form->clear(TRUE);
  199. }
  200. }
  201. catch (Exception $e) // in case of exception
  202. {
  203. new TMessage('error', $e->getMessage()); // shows the exception error message
  204. TTransaction::rollback(); // undo all pending operations
  205. }
  206. }
  207. }
  208. ?>

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


NR

Você pode usar a função sendData nesses casos. Ela identifica os campos que possuem ações vinculadas e as executa corretamente:
adianti.com.br/framework_files/tutor/index.php?class=FormHierarchica
HB

Olá Nataniel, valeu pela dica.
Obrigado.