Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Validação CPF e CNPJ com onChangeRadio Olá pessoal Estou dando continuidade em testes para aprofundar no framework, e na minha última dúvida que foi esclarecida estou agora fazendo mais uma implementação. Seguindo o conceito de habilitar e desabilitar campo, implementei uma validação de CPF e CNPJ. É basicamente o mesmo código fonte com as respectivas validações, mais com um problema semelhante ao post anteri...
HB
Validação CPF e CNPJ com onChangeRadio  
Olá pessoal

Estou dando continuidade em testes para aprofundar no framework, e na minha última dúvida que foi esclarecida estou agora fazendo mais uma implementação.

Seguindo o conceito de habilitar e desabilitar campo, implementei uma validação de CPF e CNPJ.

É basicamente o mesmo código fonte com as respectivas validações, mais com um problema semelhante ao post anterior ((www.adianti.com.br/forum/pt/view_3918?problema-com-onchangeradio-no-)),
só que agora com a seguinte situação:

Seu eu marco a opção 1 do array('1'=>'Física') a aplicação grava corretamente e no caso de inconsistência do CPF é emitida a mensagem e os valores continuam no formulário para que eu faça a digitação correta do CPF.
Agora, se eu marco a opção 2 do array('2'=>'Jurídica') e não havendo inconsistência do CNPJ a gravação fica correta, porém, se não for um CNPJ válido a validação é acionada, só que os campos do CNPJ ficam desabilitados e os dados não permanecem na tela para que eu faça a digitação correta do CNPJ.

Vejam na imagem no anexo.

Podem me ajudar com mais essa situação?

Código Fonte
  1. <?php 
  2. /**
  3.  * TestetresForm Form
  4.  * @author  <your name here>
  5.  */
  6. class TestetresForm 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_Testetres');
  20.         $this->form->class 'tform'// change CSS class
  21.         $this->form = new BootstrapFormWrapper($this->form);
  22.         $this->form->style 'display: table;width:70%'// change style
  23.         
  24.         // define the form title
  25.         $this->form->setFormTitle('Testetres');
  26.         
  27.         $radio_enable = new TRadioGroup('testeum_id');
  28.         $radio_enable->addItems(array('1'=>'Física''2'=>'Jurídica'));
  29.         $radio_enable->setLayout('horizontal');
  30.         $radio_enable->setValue(1);
  31.         // create the form fields
  32.         $id     = new TEntry('id');
  33.         $campo1 = new TEntry('campo1');
  34.         $campo2 = new TEntry('campo2');
  35.         $campo3 = new TEntry('campo3');
  36.         $campo4 = new TEntry('campo4');
  37.         
  38.         $campo2->setMask('999.999.999-99'); 
  39.         $campo4->setMask('99.999.999/9999-99');
  40.         
  41.         // add the fields
  42.         $this->form->addQuickField('Id',      $id,  '10%' );
  43.         $this->form->addQuickField('Tipo',    $radio_enable80);
  44.         $this->form->addQuickField('CPF',     $campo1,  '40%' );
  45.         $this->form->addQuickField('',        $campo2,  '40%' );
  46.         $this->form->addQuickField('CNPJ',    $campo3,  '40%' );
  47.         $this->form->addQuickField('',        $campo4,  '40%' );
  48.         
  49.         $radio_enable->setChangeAction( new TAction( array($this'onChangeRadio')) );
  50.         self::onChangeRadio( array('testeum_id'=>1) );
  51.         
  52.         if (!empty($id))
  53.         {
  54.             $id->setEditable(FALSE);
  55.         }
  56.         
  57.         /** samples
  58.          $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  59.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  60.          $fieldX->setSize( 100, 40 ); // set size
  61.          **/
  62.          
  63.         // create the form actions
  64.         $btn $this->form->addQuickAction(_t('Save'), new TAction(array($this'onSave')), 'fa:floppy-o');
  65.         $btn->class 'btn btn-sm btn-primary';
  66.         $this->form->addQuickAction(_t('New'),  new TAction(array($this'onClear')), 'bs:plus-sign green');
  67.         
  68.         // vertical box container
  69.         $container = new TVBox;
  70.         $container->style 'width: 60%';
  71.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  72.         $container->add(TPanelGroup::pack('Validando CPF e CNPJ'$this->form));
  73.         
  74.         parent::add($container);
  75.     }
  76.     /**
  77.      * Save form data
  78.      * @param $param Request
  79.      */
  80.     public function onSave$param )
  81.     {
  82.         try
  83.         {
  84.             TTransaction::open('teste'); // open a transaction
  85.             
  86.             /**
  87.             // Enable Debug logger for SQL operations inside the transaction
  88.             TTransaction::setLogger(new TLoggerSTD); // standard output
  89.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  90.             **/
  91.             
  92.             $this->form->validate(); // validate form data
  93.             
  94.             $object = new Testedois;  // create an empty object
  95.             $data $this->form->getData(); // get form data as array
  96.             $object->fromArray( (array) $data); // load the object with data
  97.             
  98.             // Valida o CPF
  99.             if($data->testeum_id == )
  100.             {                
  101.                 $validacpf = new TCPFValidator;
  102.                 $validacpf->validate('CPF'$data->campo2);  
  103.                 
  104.             }
  105.             
  106.             // Valida o CNPJ
  107.             if($data->testeum_id == )
  108.             {
  109.                 $validator = new TCNPJValidator;
  110.                 $validator->validate('CNPJ'$data->campo4);
  111.                 
  112.             } 
  113.             
  114.             $object->store(); // save the object
  115.             
  116.             // get the generated id
  117.             $data->id $object->id;
  118.             
  119.             $obj = new stdClass;
  120.             $obj->campo1     $object->campo1;
  121.             $obj->campo2     $object->campo2;
  122.             $obj->campo3     $object->campo3;
  123.             $obj->campo4     $object->campo4;
  124.             
  125.             self::onChangeRadio(['testeum_id'=>$object->testeum_id]); 
  126.             TForm::sendData('form_Testetres'$obj);
  127.             
  128.             $this->form->setData($data); // fill form data
  129.             TTransaction::close(); // close the transaction
  130.             
  131.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  132.         }
  133.         catch (Exception $e// in case of exception
  134.         {
  135.             new TMessage('error'$e->getMessage()); // shows the exception error message
  136.             $this->form->setData$this->form->getData() ); // keep form data
  137.             TTransaction::rollback(); // undo all pending operations
  138.         }
  139.     }
  140.     
  141.     /**
  142.      * Clear form data
  143.      * @param $param Request
  144.      */
  145.     public function onClear$param )
  146.     {
  147.         $this->form->clear(TRUE);
  148.     }
  149.     
  150.     /**
  151.      * Load object to form data
  152.      * @param $param Request
  153.      */
  154.     public function onEdit$param )
  155.     {
  156.         try
  157.         {
  158.             if (isset($param['key']))
  159.             {
  160.                 $key $param['key'];  // get the parameter $key
  161.                 TTransaction::open('teste'); // open a transaction
  162.                 $object = new Testedois($key); // instantiates the Active Record
  163.                 $this->form->setData($object); // fill the form
  164.                 TTransaction::close(); // close the transaction
  165.                 
  166.                 $obj = new stdClass;
  167.                 $obj->campo1     $object->campo1;
  168.                 $obj->campo2     $object->campo2;
  169.                 $obj->campo3     $object->campo3;
  170.                 $obj->campo4     $object->campo4;
  171.                 
  172.                 self::onChangeRadio(['testeum_id'=>$object->testeum_id]); 
  173.                 TForm::sendData('form_Testetres'$obj);
  174.             
  175.             }
  176.             else
  177.             {
  178.                 $this->form->clear(TRUE);
  179.             }
  180.         }
  181.         catch (Exception $e// in case of exception
  182.         {
  183.             new TMessage('error'$e->getMessage()); // shows the exception error message
  184.             TTransaction::rollback(); // undo all pending operations
  185.         }
  186.     }
  187.     
  188.     /**
  189.      * on ChangeRadio change
  190.      * @param $param Action parameters
  191.      */
  192.     public static function onChangeRadio($param)
  193.     {
  194.         if ($param['testeum_id'] == 1)
  195.         {
  196.             TEntry::enableField('form_Testetres''campo1');
  197.             TEntry::enableField('form_Testetres''campo2');
  198.             
  199.             TEntry::disableField('form_Testetres''campo3');
  200.             TEntry::disableField('form_Testetres''campo4');
  201.             
  202.             TEntry::clearField('form_Testetres''campo3');
  203.             TEntry::clearField('form_Testetres''campo4');
  204.         }
  205.         
  206.         if ($param['testeum_id'] == 2)
  207.         {
  208.             TEntry::enableField('form_Testetres''campo3');
  209.             TEntry::enableField('form_Testetres''campo4');
  210.             
  211.             TEntry::disableField('form_Testetres''campo1');
  212.             TEntry::disableField('form_Testetres''campo2');
  213.             
  214.             TEntry::clearField('form_Testetres''campo1');
  215.             TEntry::clearField('form_Testetres''campo2');
  216.         }
  217.     }
  218. }
  219. ?>

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (2)


NR

Acontece que no momento que você chama a função validate, quando o cnpj é incorreto, uma exceção é lançada. Com isso o restante do processamento é abortado, sendo executado o código dentro da função catch. Passe o código para antes das validações que deve funcionar.

Outra coisa, eu recomendo tirar "self::onChangeRadio( array('testeum_id'=>1) );" do construtor para evitar que ele seja executado toda vez houver uma ação dentro da classe.
HB

Olá Nataniel.
Segui as suas orientações e deu certo.
Muito obrigado.