Last active
July 5, 2018 05:08
-
-
Save sayhicoelho/6ba7321f011a89cde911af5290f339e6 to your computer and use it in GitHub Desktop.
Consulta dados de uma empresa com seu CNPJ.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Este script requer a função selectBoxByText do arquivo sayhicoelho/utils.js | |
// https://gist.github.com/sayhicoelho/be058ba559cba22b207a64c1113ff1bf | |
$(function () { | |
var request; | |
var timeout; | |
var campos = [ | |
'razao_social', | |
'nome_fantasia', | |
'telefone', | |
'cep', | |
'logradouro', | |
'numero', | |
'complemento', | |
'bairro', | |
'cidade', | |
]; | |
// Atualiza o valor de um campo | |
function popula_campo(element_id, val) { | |
$('#' + element_id).val(val); | |
} | |
// Desabilita um campo | |
function set_disabled(element_id, disabled) { | |
$('#' + element_id).prop('disabled', disabled); | |
} | |
// Desabilita todos os campos do array "campos" | |
function desabilita_campos() { | |
for (var i = 0; i < campos.length; i++) { | |
set_disabled(campos[i], true); | |
} | |
} | |
// Habilita todos campos do array "campos" | |
function habilita_campos() { | |
for (var i = 0; i < campos.length; i++) { | |
set_disabled(campos[i], false); | |
} | |
} | |
// Informa o campo com algum text | |
function set_label(element, message, type = null) { | |
var span = '<span class="help-block">' + | |
'<strong>' + message + '</strong>' + | |
'</span>'; | |
element.parent().find('.help-block').remove(); | |
element.parent().addClass(type).append(span); | |
} | |
// Informa um erro no campo | |
function set_error(element, message) { | |
set_label(element, message, 'has-error'); | |
} | |
// Limpa erro do .form-group | |
function limpa_erro(input) { | |
$(input).closest('.form-group').removeClass('has-error').find('.help-block').remove(); | |
} | |
// Limpa todos erros do array "campos" | |
function limpa_erros() { | |
for (var i = 0; i < campos.length; i++) { | |
limpa_erro('#' + campos[i]); | |
} | |
} | |
// Desativa campos do formulário de cnpj. | |
function desativa_formulario_cnpj() { | |
$('#uf_id').prop('disabled', true); | |
desabilita_campos(); | |
} | |
// Limpa valores do formulário de cnpj. | |
function limpa_formulário_cnpj() { | |
$('#uf_id').prop('disabled', false); | |
habilita_campos(); | |
} | |
// Evento que é acionado quando uma tecla deixa de ser pressionada | |
$('#cnpj').keyup(function (e) { | |
// Guarda o elemento atual em uma variável para ser utilizado em algum escopo assíncrono | |
$this = $(this); | |
// Verifica se uma tecla numérica foi pressionada | |
if ((e.which >= 48 && e.which <= 57) || (e.which >= 96 && e.which <= 105)) { | |
// Nova variável "cnpj" somente com dígitos. | |
var cnpj = $(this).val().replace(/\D/g, ''); | |
// Verifica se campo cnpj possui valor informado. | |
if (cnpj != "") { | |
// Expressão regular para validar o cnpj. | |
var validacnpj = /^[0-9]{14}$/; | |
// Valida o formato do cnpj. | |
if (validacnpj.test(cnpj)) { | |
// Limpa erros e desabilita os campos referentes ao CNPJ | |
set_label($this, 'Buscando...'); | |
limpa_erros(); | |
limpa_erro($this); | |
desativa_formulario_cnpj(); | |
// Cancela a última requisição | |
if (request) { | |
request.abort(); | |
} | |
// Cancela o último timeout | |
if (timeout) { | |
clearTimeout(timeout); | |
} | |
// Adiciona um timeout para a próxima requisição | |
timeout = setTimeout(function () { | |
limpa_formulário_cnpj(); | |
set_error($this, 'Não foi possível buscar por este CNPJ. Por favor, tente novamente.'); | |
$this.focus(); | |
}, 5000); | |
// Consulta o webservice receitaws.com.br/ | |
request = $.getJSON("//receitaws.com.br/v1/cnpj/" + cnpj + "/?callback=?", function (dados) { | |
// Cancela o último timeout, caso uma nova requisição foi bem sucedida | |
clearTimeout(timeout); | |
if (dados.status == 'OK') { | |
// Atualiza os campos com os valores da consulta. | |
for (var i = 0; i < campos.length; i++) { | |
switch (campos[i]) { | |
case "razao_social": | |
popula_campo(campos[i], dados.nome); | |
break; | |
case "nome_fantasia": | |
popula_campo(campos[i], dados.fantasia); | |
break; | |
case "cidade": | |
popula_campo(campos[i], dados.municipio); | |
break; | |
default: | |
popula_campo(campos[i], dados[campos[i]]); | |
} | |
} | |
// Seleciona UF | |
selectBoxByText(dados.uf, document.getElementById('uf_id')); | |
$('#uf_id').prop('disabled', false).trigger('change'); | |
// Limpa erros (se houver) | |
limpa_erros(); | |
limpa_erro($this); | |
habilita_campos(); | |
} // end if. | |
else { | |
// cnpj pesquisado não foi encontrado. | |
limpa_formulário_cnpj(); | |
set_error($this, 'Este CNPJ não foi encontrado em nossa base de dados.'); | |
$this.focus(); | |
} | |
}); | |
} // end if. | |
else { | |
// cnpj é inválido. | |
limpa_formulário_cnpj(); | |
} | |
} // end if. | |
else { | |
// cnpj sem valor, limpa formulário. | |
limpa_formulário_cnpj(); | |
} | |
} | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment