Mudanças entre as edições de "Documentacao CPF/CPNJ no cadastro/edicao de cliente"

De Tek-System Wiki
Ir para navegação Ir para pesquisar
Linha 121: Linha 121:
         return aoRetirarOMouseDoInputTaxVat(documento);
         return aoRetirarOMouseDoInputTaxVat(documento);
     }
     }
function aoRetirarOMouseDoInputTaxVat(documento){
    function aoRetirarOMouseDoInputTaxVat(documento){
    if(documento.length <= 14){
      if(documento.length <= 14){
        if(!verificaValidadeDoCpf(documento)){
          if(!verificaValidadeDoCpf(documento)){
            document.getElementById("taxvat-error-cpf-cnpj").innerText = "CPF inválido";
              document.getElementById("taxvat-error-cpf-cnpj").innerText = "CPF inválido";
            return false;
              return false;
        }else{
          }else{
            return true;
              return true;
        }
          }
    }
      }
    else{
      else{
        if(!verificaValidadeDoCnpj(documento)){
          if(!verificaValidadeDoCnpj(documento)){
            document.getElementById("taxvat-error-cpf-cnpj").innerText = "CNPJ inválido";
              document.getElementById("taxvat-error-cpf-cnpj").innerText = "CNPJ inválido";
            return false;
              return false;
        }else{
          }else{
            return true;
              return true;
        }
          }
    }
      }
}
  }
  function validacaoFinal(){
  function validacaoFinal(){
     return aoRetirarOMouseDoInputTaxVat(document.getElementById('taxvat').value);
     return aoRetirarOMouseDoInputTaxVat(document.getElementById('taxvat').value);

Edição das 20h00min de 21 de fevereiro de 2018

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')) ?>"><?php echo $block->escapeHtml(__('Tax/VAT number')) ?></label>
        <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}"' ?>>