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:
<?php        $tipo = new TCombo('tipo');        $itens = array('F' => 'Física', 'J' => 'Jurídica');        $tipo->addItems($itens);?>

e no método:
<?php       if ($param['tipo']=='F')        {            TEntry::disableField('form', 'cnpj');            TEntry::enableField('form', 'cpf');        }        if ($param['tipo']=='J')        {            TEntry::enableField('form', 'cnpj');            TEntry::disableField('form', 'cpf');        }?>
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

<?php$CLI01Tipo->setChangeAction( new TAction( array($this, 'onChangeRadio')) );self::onChangeRadio( array('CLI01Tipo'=>1) );$CLI01Tipo->setValue(1);?>
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

<?php/** * clienteForm Form * @author  <your name here> */class clienteForm extends TPage{    protected $form; // form        /**     * Form constructor     * @param $param Request     */    public function __construct( $param )    {        parent::__construct();                // creates the form        $this->form = new TQuickForm('form_cliente');        $this->form->class = 'tform'; // change CSS class                $this->form->style = 'display: table;width: 90%'; // change style                // define the form title        $this->form->setFormTitle('Cadastro de Clientes');                // CAMPO TIPO DE PESSOA (FÍSICA ou JURÍDICA)        $CLI01Tipo = new TRadioGroup('CLI01Tipo');        $CLI01Tipo->addItems(array('1'=>'Física', '2'=>'Jurídica'));        $CLI01Tipo->setLayout('vertical');                 $id            = new TEntry('id');        $CLI01Nome     = new TEntry('CLI01Nome');        $CLI01CPF      = new TEntry('CLI01CPF');        $CLI01CNPJ     = new TEntry('CLI01CNPJ');        $CLI01CEP      = new TEntry('CLI01CEP');        $CLI01Endereco = new TEntry('CLI01Endereco');        $CLI01Bairro   = new TEntry('CLI01Bairro');        $CLI01Cidade   = new TEntry('CLI01Cidade');        $estado_id     = new 
">TDBSeekButton('estado_id', 'sistema', 'form_cliente', 'estado', 'EST01Nome', 'estado_id', 'estado_nome');        $estado_nome   = new TEntry('estado_nome');        $CLI01Comer    = new TEntry('CLI01Comer');        $CLI01Celular  = new TEntry('CLI01Celular');        $CLI01DtCadas  = new TDate('CLI01DtCadas');        $CLI01Ativo    = new TCombo('CLI01Ativo');                // adicionando os campos no formulário        $this->form->addQuickField('Código', $id,  80 );        $this->form->addQuickField('Tipo', $CLI01Tipo, 80 );        $this->form->addQuickFields('CPF', array($CLI01CPF, new TLabel('  CNPJ'), $CLI01CNPJ));        $this->form->addQuickField('Nome', $CLI01Nome,  319 , new TRequiredValidator);        $this->form->addQuickField('CEP', $CLI01CEP,  135 );        $this->form->addQuickFields('Endereço', array($CLI01Endereco, new TLabel('  Bairro'), $CLI01Bairro));        $this->form->addQuickField('Cidade', $CLI01Cidade,  319 , new TRequiredValidator);        $this->form->addQuickFields('UF', array($estado_id, $estado_nome ));        $this->form->addQuickFields('Fone Comercial', array($CLI01Comer, new TLabel('  Fone Celular'), $CLI01Celular));        $this->form->addQuickField('Cadastro', $CLI01DtCadas,  100 , new TRequiredValidator);        $this->form->addQuickField('Ativo', $CLI01Ativo,  80 , new TRequiredValidator);                // adicionando as ações conforme o grupo        $CLI01Tipo->setChangeAction( new TAction( array($this, 'onChangeRadio')) );        self::onChangeRadio( array('CLI01Tipo'=>1) );        $CLI01Tipo->setValue(1);                 // minhas modificações        $estado_nome->setEditable(FALSE);        $CLI01CPF->setSize(135);        $CLI01CNPJ->setSize(135);        $CLI01Endereco->setSize(250);        $CLI01Bairro->setSize(250);        $CLI01Comer->setSize(180);        $CLI01Celular->setSize(180);        $estado_id->setSize(80);        $estado_nome->setSize(218);                $CLI01Nome->forceUpperCase();        $CLI01Endereco->forceUpperCase();        $CLI01Bairro->forceUpperCase();        $CLI01Cidade->forceUpperCase();                $CLI01DtCadas->setMask('dd/mm/yyyy');        $CLI01DtCadas->setDatabaseMask('yyyy-mm-dd');        $CLI01Comer->setMask('(99)9999-9999');        $CLI01Celular->setMask('(99)9.9999-9999');        $CLI01CEP->setMask('99.999-999');        $CLI01CNPJ->setMask('99.999.999/9999-99');        $CLI01CPF->setMask('999.999.999-99');                $CLI01Ativo->addItems( [ '1' => 'Sim', '2' => 'Não'] );                        if (!empty($id))        {            $id->setEditable(FALSE);        }                /** samples         $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields         $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation         $fieldX->setSize( 100, 40 ); // set size         **/                 // create the form actions        $this->form->addQuickAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');        $this->form->addQuickAction(_t('New'),  new TAction(array($this, 'onClear')), 'bs:plus-sign green');                       // minhas modificações        $this->form->addQuickAction('Retorna', new TAction(array('clienteCadastroGrid', 'onReload')), 'fa:table blue' );                       // vertical box container        $container = new TVBox;        $container->style = 'width: 90%';        //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));        $container->add($this->form);                       parent::add($container);    }        /**     * on ChangeRadio change - AÇÕES PARA O GRUPO DE CAMPOS     * @param $param Action parameters     */    public static function onChangeRadio($param)    {        if ($param['CLI01Tipo'] == 1)        {            TEntry::enableField('form_cliente', 'CLI01CPF');            TEntry::disableField('form_cliente', 'CLI01CNPJ');            TEntry::clearField('form_cliente', 'CLI01CNPJ');        }        if ($param['CLI01Tipo'] == 2)        {            TEntry::disableField('form_cliente', 'CLI01CPF');            TEntry::clearField('form_cliente', 'CLI01CPF');            TEntry::enableField('form_cliente', 'CLI01CNPJ');        }    }        /**     * Save form data     * @param $param Request     */    public function onSave( $param )    {        try        {            TTransaction::open('sistema'); // open a transaction                        /**            // Enable Debug logger for SQL operations inside the transaction            TTransaction::setLogger(new TLoggerSTD); // standard output            TTransaction::setLogger(new TLoggerTXT('log.txt')); // file            **/                        $data = $this->form->getData(); // get form data as array                        // Valida o CPF para pessoas físicas            if($data->CLI01Tipo == 1 )            {                                $validacpf = new TRequiredValidator;                $validacpf->validate('CPF', $data->CLI01CPF);                                  if($data->CLI01CPF != '000.000.000-00')                {                    $validacpf = new TCPFValidator;                    $validacpf->validate('CPF', $data->CLI01CPF);                                    }            }                if($data->CLI01Tipo == 2 )                {                    $validator = new TRequiredValidator;                    $validator->validate('CNPJ', $data->CLI01CNPJ);                                        if($data->CLI01CNPJ != '00.000.000/0000-00')                    {                                            $validator = new TCNPJValidator;                        $validator->validate('CNPJ', $data->CLI01CNPJ);                    }                }                            $this->form->validate(); // validate form data            $object = new cliente;  // create an empty object            $object->fromArray( (array) $data); // load the object with data            $object->store(); // save the object                        // get the generated id            $data->id = $object->id;                        $this->form->setData($data); // fill form data            TTransaction::close(); // close the transaction                        new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));        }        catch (Exception $e) // in case of exception        {            if($e->getCode() == 23000){                 new TMessage('error', '<b>Menssagem: CPF ou CNPJ já cadastrado!</b>');                 $this->form->setData( $this->form->getData() );                           }else{                 new TMessage('error', 'Erro: ' .$e->getCode(). '-' . $e->getMessage());                $this->form->setData( $this->form->getData() );                           }            TTransaction::rollback(); // undo all pending operations        }    }        /**     * Clear form data     * @param $param Request     */    public function onClear( $param )    {        $this->form->clear(TRUE);    }        /**     * Load object to form data     * @param $param Request     */    public function onEdit( $param )    {        try        {            if (isset($param['key']))            {                $key = $param['key'];  // get the parameter $key                TTransaction::open('sistema'); // open a transaction                $object = new cliente($key); // instantiates the Active Record                $this->form->setData($object); // fill the form                TTransaction::close(); // close the transaction            }            else            {                $this->form->clear(TRUE);            }        }        catch (Exception $e) // in case of exception        {            new TMessage('error', $e->getMessage()); // shows the exception error message            TTransaction::rollback(); // undo all pending operations        }    }}?>
</your>
IF

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

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í?
Controle a sua privacidade
Nosso site usa cookies para melhorar a navegação