Documentacao CPF/CPNJ no cadastro/edicao de cliente

De Tek-System Wiki
Ir para navegação Ir para pesquisar

O campo de CPF/CNPJ ja vem por padrao no magento 2, contudo, é necessário habilitá-lo na administracao conforme imagem acima.

Perceba que este campo é um varchar sem qualquer validacao, sendo assim é necessário a insercao de uma máscara e uma validacao completa CPF/CNPJ.

O código principal da validacao é

Note que tambem foi adicionada uma div para insercao da mensagem de erro, esta, chamada de taxvat-error-cpf-cnpj

Caminho da pagina para insercao da mascara e validacao cpf/cpnj:

 
 Vendor/magento/module-customer/view/frontend/templates/widget/taxvat.phtml
  
 <?php
 /**
  * Copyright © 2013-2017 Magento, Inc. All rights reserved.
  * See COPYING.txt for license details.
  */
 // @codingStandardsIgnoreFile
 ?>
 <script type="text/javascript">
     function fMasc(objeto,mascara) {
         obj=objeto
         masc=mascara
         setTimeout("fMascEx()",1)
     }
     function fMascEx() {
         obj.value=masc(obj.value)
     }
     function cpfCpnj(taxvat){
         document.getElementById("taxvat-error-cpf-cnpj").innerHTML = "";
         if(taxvat.length >= 16){
             taxvat=taxvat.replace(/\D/g,"")
             taxvat=taxvat.replace(/^(\d{2})(\d)/,"$1.$2")
             taxvat=taxvat.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3")
             taxvat=taxvat.replace(/\.(\d{3})(\d)/,".$1/$2")
             taxvat=taxvat.replace(/(\d{4})(\d)/,"$1-$2")
             return taxvat
         }else{
             taxvat=taxvat.replace(/\D/g,"")
             taxvat=taxvat.replace(/(\d{3})(\d)/,"$1.$2")
             taxvat=taxvat.replace(/(\d{3})(\d)/,"$1.$2")
             taxvat=taxvat.replace(/(\d{3})(\d{1,2})$/,"$1-$2")
             return taxvat                    
         }
     }
     function verificaValidadeDoCpf(strCPF) {
         strCPF = retiraPontuacaoEBarra(strCPF);
         var Soma;
         var Resto;
         Soma = 0;
         if (strCPF == "00000000000") return false;
         for (i=1; i<=9; i++) Soma = Soma + parseInt(strCPF.substring(i-1, i)) * (11 - i);
         Resto = (Soma * 10) % 11;
         if ((Resto == 10) || (Resto == 11))  Resto = 0;
         if (Resto != parseInt(strCPF.substring(9, 10)) ) return false;
         Soma = 0;
         for (i = 1; i <= 10; i++) Soma = Soma + parseInt(strCPF.substring(i-1, i)) * (12 - i);
         Resto = (Soma * 10) % 11;
         if ((Resto == 10) || (Resto == 11))  Resto = 0;
         if (Resto != parseInt(strCPF.substring(10, 11) ) ) return false;
         return true;
     }
     function verificaValidadeDoCnpj(cnpj) {
         cnpj = retiraPontuacaoEBarra(cnpj);
         cnpj = cnpj.replace(/[^\d]+/g,'');
         if(cnpj == '') return false;
         if (cnpj.length != 14)
             return false;
         // Elimina CNPJs invalidos conhecidos
         if (cnpj == "00000000000000" || 
             cnpj == "11111111111111" || 
             cnpj == "22222222222222" || 
             cnpj == "33333333333333" || 
             cnpj == "44444444444444" || 
             cnpj == "55555555555555" || 
             cnpj == "66666666666666" || 
             cnpj == "77777777777777" || 
             cnpj == "88888888888888" || 
             cnpj == "99999999999999")
             return false;
         // Valida DVs
         tamanho = cnpj.length - 2
         numeros = cnpj.substring(0,tamanho);
         digitos = cnpj.substring(tamanho);
         soma = 0;
         pos = tamanho - 7;
         for (i = tamanho; i >= 1; i--) {
         soma += numeros.charAt(tamanho - i) * pos--;
           if (pos < 2)
                 pos = 9;
         }
         resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
         if (resultado != digitos.charAt(0))
             return false;
         tamanho = tamanho + 1;
         numeros = cnpj.substring(0,tamanho);
         soma = 0;
         pos = tamanho - 7;
         for (i = tamanho; i >= 1; i--) {
           soma += numeros.charAt(tamanho - i) * pos--;
           if (pos < 2)
                 pos = 9;
         }
         resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
         if (resultado != digitos.charAt(1))
               return false;
         return true;
     }
     function retiraPontuacaoEBarra(str){
         str = str.trim();
         for(var i =0; i<str.length; i++){
             str = str.replace('/','');
             str = str.replace('.','');
             str = str.replace('-','');
         }
         return str;
     }
     function realizaValidacaoTotalDeCpfECpnj(documento){
         return aoRetirarOMouseDoInputTaxVat(documento);
     }
    function aoRetirarOMouseDoInputTaxVat(documento){
      if(documento.length <= 14){
          if(!verificaValidadeDoCpf(documento)){
              document.getElementById("taxvat-error-cpf-cnpj").innerText = "CPF inválido";
              return false;
          }else{
              return true;
          }
      }
      else{
          if(!verificaValidadeDoCnpj(documento)){
              document.getElementById("taxvat-error-cpf-cnpj").innerText = "CNPJ inválido";
              return false;
          }else{
              return true;
          }
      }
  }
 function validacaoFinal(){
     return aoRetirarOMouseDoInputTaxVat(document.getElementById('taxvat').value);
 }
 </script>
 <div class="field taxvat<?php if ($block->isRequired()) echo ' required'; ?>">
     <label class="label" for="<?php echo $this->helper(\Magento\Framework\EscapeHelper::class)->escapeHtmlAttr($block->getFieldId('taxvat')) ?>"><span><?php echo $block->escapeHtml(__('Tax/VAT number')) ?></span></label>
     <div class="control">
         <input onblur="realizaValidacaoTotalDeCpfECpnj(this.value)" onkeydown="javascript: fMasc( this, cpfCpnj );" maxlength="18" type="text" id="<?php echo $this->helper(\Magento\Framework\EscapeHelper::class)->escapeHtmlAttr($block->getFieldId('taxvat')) ?>" name="<?php echo $this-
 >helper(\Magento\Framework\EscapeHelper::class)->escapeHtmlAttr($block->getFieldName('taxvat')) ?>" value="<?php echo $this->helper(\Magento\Framework\EscapeHelper::class)->escapeHtmlAttr($block->getTaxvat()) ?>" title="<?php echo $this-
 >helper(\Magento\Framework\EscapeHelper::class)->escapeHtmlAttr(__('Tax/VAT number')) ?>" class="input-text <?php echo $this->helper(\Magento\Framework\EscapeHelper::class)->escapeHtmlAttr($this->helper(\Magento\Customer\Helper\Address::class)->getAttributeValidationClass('taxvat')) ?>" 
 <?php if ($block->isRequired()) echo ' data-validate="{required:true}"' ?>>
         <div for="taxvat" generated="true" class="mage-error-cpf-cnpj" id="taxvat-error-cpf-cnpj"></div>
     </div>
 </div>
 

Vá até

 
 vendor/experius/module-addresslines/view/frontend/templates/expirius/customer/form/register.phtml
  

No form:

 <form class="form create account form-create-account" action="<?php /* @escapeNotVerified */ echo $block->getPostActionUrl() ?>" method="post" id="form-validate" enctype="multipart/form-data" autocomplete="off" onsubmit="return validacaoFinal();">
 

adicione conforma acima o codigo dentro da tag

 onsubmit="return validacaoFinal();"
 

NOTA: ISTO PARA CADASTRAR O CLIENTE.

NO CASO DA EDICAO DEVEMOS INSERIR O CODIGO ACIMA NO FORMULARIO DA EDICAO

Vá em:

 
 vendor/magento/module-customer/view/frontend/templates/form/edit.phtml
  

Adicione novamente o onsubmit no respectivo formulario e ficara como segur:

 ...
 <form class="form form-edit-account" action="<?php echo $block->escapeUrl($block->getUrl('customer/account/editPost')) ?>" method="post" id="form-validate" enctype="multipart/form-data" data-hasrequired="<?php echo $this->helper(\Magento\Framework\EscapeHelper::class)-
 >escapeHtmlAttr(__('* Required Fields')) ?>" autocomplete="off" onsubmit="return validacaoFinal();">
 ...
 

Também é necessário colocar uma identidade(id) nos botoes de submissao do formulario de cadastro e no formulario de edicao no painel dos clientes. As paginas que contem o botao sao:

 
 Vendor/experius/module-addresslines/view/frontend/templates/experius/customer/form/register.phtml
  

e

 
 Vendor/magento/module-customer/view/frontend/templates/form/edit.phtml
  
ID DO BOTAO: botao-criar-conta