Skip to content

Instantly share code, notes, and snippets.

@sayhicoelho
Last active July 5, 2018 05:08
Show Gist options
  • Save sayhicoelho/6ba7321f011a89cde911af5290f339e6 to your computer and use it in GitHub Desktop.
Save sayhicoelho/6ba7321f011a89cde911af5290f339e6 to your computer and use it in GitHub Desktop.
Consulta dados de uma empresa com seu CNPJ.
// 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