Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Desabilitar / Habilitar campos utilizando um tipo TCombo Olá pessoal. Vi através do tutor (http://www.adianti.com.br/framework_files/tutor/index.php?class=FormEnableDisableView) uma forma de desabilitar campos através de um TRadioGroup. Fiz teste e deu certo como vocês podem ver na imagem do anexo. Mais o que de fato eu gostaria é que o meu campo TIPO(pessoal física ou jurídica) seja um campo do tipo TCombo. Existe uma forma no framework d...
HB
Desabilitar / Habilitar campos utilizando um tipo TCombo  
Olá pessoal.
Vi através do tutor (www.adianti.com.br/framework_files/tutor/index.php?class=FormEnableD) uma forma de desabilitar campos através de um TRadioGroup. Fiz teste e deu certo como vocês podem ver na imagem do anexo.

Mais o que de fato eu gostaria é que o meu campo TIPO(pessoal física ou jurídica) seja um campo do tipo TCombo.

Existe uma forma no framework de fazer a mesma coisa que foi feita no TRadioGroup para o TCombo para desabilitar UM CONJUNTO DE CAMPOS?

Obrigado
José Humberto

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)


IF

Sim José, use a mesma lógica pra isso:
  1. <?php
  2.         $tipo = new TCombo('tipo');
  3.         $itens = array('F' => 'Física''J' => 'Jurídica');
  4.         $tipo->addItems($itens);
  5. ?>

e no método:
  1. <?php
  2.        if ($param['tipo']=='F')
  3.         {
  4.             TEntry::disableField('form''cnpj');
  5.             TEntry::enableField('form''cpf');
  6.         }
  7.         if ($param['tipo']=='J')
  8.         {
  9.             TEntry::enableField('form''cnpj');
  10.             TEntry::disableField('form''cpf');
  11.         }
  12. ?>
HB

Ivan, primeiramente obrigado por ter respondido meu questionamento.

Ivan, sou novo no framework e ainda tenho várias dúvidas.

Para o TRadioGroup pelo que percebi exite um método, conforme abaixo.
A minha dúvida está na parte que você me orientou a incluir o código de desabilitar e habilitar no método.
E no caso do TCombo também tem um método nativo? Se não tem, pode me ajudar implementar?

Ação do Radio Group: este trecho extrai do tutor e só troquei para os meus atributos

  1. <?php
  2. $CLI01Tipo->setChangeAction( new TAction( array($this'onChangeRadio')) );
  3. self::onChangeRadio( array('CLI01Tipo'=>1) );
  4. $CLI01Tipo->setValue(1);
  5. ?>
IF

O método é o mesmo setChangeAction, poste o seu código aqui pra eu dar uma olhada e tentar te instruir melhor.
HB

Segue o código Ivan

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

Faça assim:
  1. <?php
  2.         $CLI01Tipo = new TCombo('CLI01Tipo');
  3.         $CLI01Tipo->addItems(array('1'=>'Física''2'=>'Jurídica'));
  4.         //Chamar o método onChangeRadio
  5.         $CLI01Tipo->setChangeAction( new TAction( array($this'onChangeRadio')) );
  6. ?>

O método onChangeRadio continua como está, assim vai continuar funcionando normalmente
HB

Ivian, deu certo.

Ainda nesse contexto 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ê observar 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.

Pode me ajudar também com essas situações aproveitando que meu código já está postado aí?