Em lojas virtuais, é extremamente necessário solicitar dados do CPF/CNPJ ao usuário para geração de notas fiscais. Por padrão, ele vem desativado no Magento. Para habilitá-lo, vá no Painel Administrativo em Sistema -> Configurações. No menu ao lado, vá na categoria Clientes, selecione Configurações. Na página, na aba Opções de Nome e Endereço, na caixa de combinação Exibir CPF/CNPJ, selecione Obrigatório.
Outra situação importante é que o Magento não faz a validação do CPF/CNPJ permitindo que dados incorretos sejam cadastrados. Para isso, precisamos configurar a validação do CPF/CNPJ. Verifique o arquivo em app/design/frontend/<default>/<default>/template/customer/widget/taxvat.phtml. Considerando que <default>/<default> seja a localização do seu template como default/modern ou default/default.
Cadê a Pasta Customer?
Talvez você não encontre a pasta customer. Nesse caso, teremos que criar essa pasta junto com a pasta widget e o arquivo taxvat.phtml. O conteúdo do arquivo taxvat.phtml deve ser o mesmo de app/design/frontend/base/default/template/customer/widget/taxvat.phtml.
Prosseguindo
No final do arquivo adicione o seguinte código:
<script type="text/javascript">
//<![CDATA[
// Adicionar classe de validação de cpf e cnpj ao Taxvat
$('<?php echo $this->getFieldId('taxvat'); ?>').addClassName('validar_cpf');
Validation.add('validar_cpf', 'O CPF ou CNPJ informado \xE9 invalido', function(v){return validaCPF(v,0);});
//]]>
</script>
Agora, abra o arquivo js/prototype/validation.js. Na última linha do arquivo após “});”, adicione:
function validaCPF(cpf,pType){
var cpf_filtrado = "", valor_1 = " ", valor_2 = " ", ch = "";
var valido = false;
for (i = 0; i < cpf.length; i++){
ch = cpf.substring(i, i + 1);
if (ch >= "0" && ch <= "9"){
cpf_filtrado = cpf_filtrado.toString() + ch.toString()
valor_1 = valor_2;
valor_2 = ch;
}
if ((valor_1 != " ") && (!valido)) valido = !(valor_1 == valor_2);
}
if (!valido) cpf_filtrado = "12345678912";
if (cpf_filtrado.length < 11){
for (i = 1; i <= (11 - cpf_filtrado.length); i++){cpf_filtrado = "0" + cpf_filtrado;}
}
if(pType <= 1){
if ( ( cpf_filtrado.substring(9,11) == checkCPF( cpf_filtrado.substring(0,9) ) ) && ( cpf_filtrado.substring(11,12)=="") ){return true;}
}
if((pType == 2) || (pType == 0)){
if (cpf_filtrado.length >= 14){
if ( cpf_filtrado.substring(12,14) == checkCNPJ( cpf_filtrado.substring(0,12) ) ){ return true;}
}
}
return false;
}
function checkCNPJ(vCNPJ){
var mControle = "";
var aTabCNPJ = new Array(5,4,3,2,9,8,7,6,5,4,3,2);
for (i = 1 ; i <= 2 ; i++){
mSoma = 0;
for (j = 0 ; j < vCNPJ.length ; j++)
mSoma = mSoma + (vCNPJ.substring(j,j+1) * aTabCNPJ[j]);
if (i == 2 ) mSoma = mSoma + ( 2 * mDigito );
mDigito = ( mSoma * 10 ) % 11;
if (mDigito == 10 ) mDigito = 0;
mControle1 = mControle ;
mControle = mDigito;
aTabCNPJ = new Array(6,5,4,3,2,9,8,7,6,5,4,3);
}
return( (mControle1 * 10) + mControle );
}
function checkCPF(vCPF){
var mControle = ""
var mContIni = 2, mContFim = 10, mDigito = 0;
for (j = 1 ; j <= 2 ; j++){
mSoma = 0;
for (i = mContIni ; i <= mContFim ; i++)
mSoma = mSoma + (vCPF.substring((i-j-1),(i-j)) * (mContFim + 1 + j - i));
if (j == 2 ) mSoma = mSoma + ( 2 * mDigito );
mDigito = ( mSoma * 10 ) % 11;
if (mDigito == 10) mDigito = 0;
mControle1 = mControle;
mControle = mDigito;
mContIni = 3;
mContFim = 11;
}
return( (mControle1 * 10) + mControle );
}
Ainda neste mesmo arquivo procure por:
['validate-ssn', 'Please enter a valid social security number. For example 123-45-6789.', function(v) {
return Validation.get('IsEmpty').test(v) || /^\d{3}-?\d{2}-?\d{4}$/.test(v);
}],
Após esse trecho adicione:
['validar_cpf', 'O CPF ou CNPJ informado e invalido.', function(v) {
return validaCPF(v,0);
}],
E pronto!
Fonte: danielbarbosa09 em http://www.magentocommerce.com/boards/viewthread/221817/
perfeito, configurei e instalei na minha loja magento 1.7.2 e foi de primeira, parabéns pelo post.
Muito bom o post, me ajudou bastante mesmo.
Obrigado.
Oi amigo, seu blog é muito bom e obrigado pelo post.
Mas como eu já havia visto na postagem que você colocou como font não funcionou, a única coisa que você disse de diferente foi criar a pasta dentro de customer, no meu magento eu tenho a pasta mais não tinha a widget, criei e coloquei o arquivo mas continua sem validar. Pode me ajudar
Boa noite, José,
A primeira coisa que recomendo é verificar se não estão ocorrendo erros na execução do JavaScript (no Firefox pode utilizar o Firebug).
A segunda coisa é verificar se o arquivo taxvat.phtml foi adicionado dentro da pasta do template correto. Se mesmo assim não funcionar tente adicionar o arquivo na pasta dos outros templates também. Por exemplo:
app/design/frontend/default/default/template/customer/widget/taxvat.phtml
app/design/frontend/default/modern/template/customer/widget/taxvat.phtml
app/design/frontend/base/default/template/customer/widget/taxvat.phtml
A validação não funciona para o Firefox, para os demais navegaderes funciona, mas no firefox quando clico em continuar simplesmente nada acontece, oque pode ser?
Boa tarde,
Código perfeito!
Mas estou com o mesmo problema que o Marcelo, no firefox não funciona, pode dar mais essa dica.
Obrigado
Amigão, salvou uma vida! Simples e objetivo, parabéns! =)
Uma coisa importante também é filtrar o CPF ou CNPJ já cadastrado de forma não permitir vários cadastros num mesmo CPF ou CNPJ.
Para isto basta adicionar o script abaixo no register.phtml que podem estar na pasta customer ou persistent de seu template.
app/design/frontend//default/template/customer/form/register.phtml
OU
app/design/frontend//default/template/persistent/customer/form/register.phtml
$('taxvat').addClassName('scripts');
Validation.add('scripts','Ja existe cadastro com esse documento!',function(the_field_value){
var url = 'scripts/verifica.php?taxvat=' + $('taxvat').value;
var ok = false;
new Ajax.Request(url, {
method: 'get',
asynchronous: false,
onSuccess: function(transport) {
var obj = response = transport.responseText;
//alert (obj);
scripts = obj.status_desc;
if (obj) {
Validation.get('scripts').error = obj + ' ja é um documento cadastrado!';
ok = false;
} else {
ok = true;
}
}
});
return ok;
});
Perfeito Marcio. Obrigado por compartilhar.
Olá Márcio, boa noite.
tentei utilizar o seu código e não funcionou. Fiquei com uma dúvida na construção da url, onde que está declarado / definido o arquivo verifica.php ? (var url = ‘scripts/verifica.php?taxvat=’ + $(‘taxvat’).value;)
Obrigado.
Muito bom o codigo!