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

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.