Created
March 4, 2017 03:01
-
-
Save gustavoaraujo/1cb19039f96aaf1192a9b56090f494d2 to your computer and use it in GitHub Desktop.
Rascunho/esqueleto de um projeto para monitorar verbas indenizatórias de deputados estaduais de MG.
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
| <html> | |
| <head> | |
| <title>Deputados-MG Analytics</title> | |
| <style> | |
| .invisivel { | |
| display: none; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <script> | |
| var xmlDoc; | |
| var arrayDeputado = []; | |
| var arrayFechamentos = []; | |
| var arrayPrestacaoConta = []; | |
| var arrayTiposDespesa = []; | |
| var indiceAtual; | |
| function Deputado(id, partido, tagLocalizacao, nome) { | |
| this.id = id; | |
| this.nome = nome; | |
| this.partido = partido; | |
| this.tagLocalizacao = tagLocalizacao; | |
| } | |
| function ResumoVerba(idDeputado, dataReferencia, codTipoDespesa, valor, descTipoDespesa, listaDetalheVerba) { | |
| this.idDeputado = idDeputado; | |
| this.dataReferencia = dataReferencia; | |
| this.codTipoDespesa = codTipoDespesa; | |
| this.valor = valor; | |
| this.descTipoDespesa = descTipoDespesa; | |
| this.listaDetalheVerba = listaDetalheVerba; | |
| } | |
| function DetalheVerba(id, idDeputado, dataReferencia, valorReembolsado, dataEmissao, cpfCnpj, valorDespesa, nomeEmitente, descDocumento, codTipoDespesa, descTipoDespesa) { | |
| this.id = id; | |
| this.idDeputado = idDeputado; | |
| this.dataReferencia = dataReferencia; | |
| this.valorReembolsado = valorReembolsado; | |
| this.dataEmissao = dataEmissao; | |
| this.cpfCnpj = cpfCnpj; | |
| this.valorDespesa = valorDespesa; | |
| this.nomeEmitente = nomeEmitente; | |
| this.descDocumento = descDocumento; | |
| this.codTipoDespesa = codTipoDespesa; | |
| this.descTipoDespesa = descTipoDespesa; | |
| } | |
| function FechamentoVerba(idDeputado, ano, mes) { | |
| this.idDeputado = idDeputado; | |
| this.ano = ano; | |
| this.mes = mes; | |
| } | |
| function Navegar(url, tipoParse) { | |
| var xhr = new XMLHttpRequest(); | |
| xhr.open("GET", url, false); | |
| xhr.onload = function() { | |
| var resultado = xhr.responseText; | |
| ParseResult(resultado, tipoParse); | |
| }; | |
| xhr.send(); | |
| } | |
| function ParseResult(resultado, tipoParse) { | |
| var parser = new DOMParser(); | |
| xmlDoc = parser.parseFromString(resultado, "text/xml"); | |
| switch (tipoParse) { | |
| case 0: | |
| ParseNodeListaDeputado(xmlDoc); | |
| break; | |
| case 1: | |
| ParseNodeFechamentoVerba(xmlDoc); | |
| break; | |
| case 2: | |
| ParseNodePrestacaoConta(xmlDoc); | |
| break; | |
| } | |
| } | |
| function CreateDivDadosDeputado(i) { | |
| //CriarElemento(tagName, id, classe, idPai, texto, onClick) | |
| var id = arrayDeputado[i].id; | |
| var prestacoesContaDeputado = GetElementsInArrayById(arrayPrestacaoConta, id); | |
| for (var a = 0; a < prestacoesContaDeputado.length; a++) { | |
| //ResumoVerba(idDeputado, dataReferencia, codTipoDespesa, valor, descTipoDespesa, listaDetalheVerba) | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "Data:" + prestacoesContaDeputado[a].dataReferencia, null); | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "Tipo de despesa:" + prestacoesContaDeputado[a].descTipoDespesa, null); | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "Valor:" + prestacoesContaDeputado[a].valor, null); | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "Detalhes:", null); | |
| //DetalheVerba(id, idDeputado, dataReferencia, valorReembolsado, dataEmissao, cpfCnpj, valorDespesa, nomeEmitente, descDocumento, codTipoDespesa, descTipoDespesa) | |
| for (var b = 0; b < prestacoesContaDeputado[a].listaDetalheVerba.length; b++) { | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "Data de referência:" + prestacoesContaDeputado[a].listaDetalheVerba[b].dataReferencia, null); | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "Data de emissão:" + prestacoesContaDeputado[a].listaDetalheVerba[b].dataEmissao, null); | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "Valor reembolsado:" + prestacoesContaDeputado[a].listaDetalheVerba[b].valorReembolsado, null); | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "Valor de despesa:" + prestacoesContaDeputado[a].listaDetalheVerba[b].valorDespesa, null); | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "Nome emitente:" + prestacoesContaDeputado[a].listaDetalheVerba[b].nomeEmitente, null); | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "CPF/CNPJ:" + prestacoesContaDeputado[a].listaDetalheVerba[b].cpfCnpj, null); | |
| CriarElemento("p", null, null, "dadosDeputado" + i, "Tipo de despesa:" + prestacoesContaDeputado[a].listaDetalheVerba[b].descTipoDespesa, null); | |
| } | |
| } | |
| } | |
| function GetElementsInArrayById(arraySelecao, id) { | |
| var arrayResultado = []; | |
| for (var i = 0; i < arraySelecao.length; i++) { | |
| if (arraySelecao[i].idDeputado == id) { | |
| arrayResultado.push(arraySelecao[i]); | |
| } | |
| } | |
| return arrayResultado; | |
| } | |
| function ParseNodePrestacaoConta(xmlDoc) { | |
| var nodesDeputado = xmlDoc.childNodes[0].getElementsByTagName("resumoVerba"); | |
| for (var i = 0; i < nodesDeputado.length; i++) { | |
| var idDeputado = nodesDeputado[i].getElementsByTagName("idDeputado")[0].innerHTML; | |
| var dataReferencia = nodesDeputado[i].getElementsByTagName("dataReferencia")[0].innerHTML; | |
| var codTipoDespesa = nodesDeputado[i].getElementsByTagName("codTipoDespesa")[0].innerHTML; | |
| var valor = nodesDeputado[i].getElementsByTagName("valor")[0].innerHTML; | |
| var descTipoDespesa = nodesDeputado[i].getElementsByTagName("descTipoDespesa")[0].innerHTML; | |
| var listaDetalheVerba = ParseListaDetalheVerba(nodesDeputado[i].getElementsByTagName("listaDetalheVerba")[0]); | |
| var fechamento = new ResumoVerba(idDeputado, dataReferencia, codTipoDespesa, valor, descTipoDespesa, listaDetalheVerba); | |
| arrayPrestacaoConta.push(fechamento); | |
| } | |
| CreateDivDadosDeputado(indiceAtual); | |
| } | |
| function ParseListaDetalheVerba(nodeLista) { | |
| var arrayDetalheVerba = []; | |
| var lista = nodeLista.getElementsByTagName("detalheVerba"); | |
| for (var i = 0; i < lista.length; i++) { | |
| var id = ""; | |
| var idDeputado = ""; | |
| var dataReferencia = ""; | |
| var valorReembolsado = ""; | |
| var dataEmissao = ""; | |
| var cpfCnpj = ""; | |
| var valorDespesa = ""; | |
| var nomeEmitente = ""; | |
| var descDocumento = ""; | |
| var codTipoDespesa = ""; | |
| var descTipoDespesa = ""; | |
| if (lista[i].getElementsByTagName("id").length > 0) { | |
| id = lista[i].getElementsByTagName("id")[0].innerHTML; | |
| } | |
| if (lista[i].getElementsByTagName("idDeputado").length > 0) { | |
| idDeputado = lista[i].getElementsByTagName("idDeputado")[0].innerHTML; | |
| } | |
| if (lista[i].getElementsByTagName("dataReferencia").length > 0) { | |
| dataReferencia = lista[i].getElementsByTagName("dataReferencia")[0].innerHTML; | |
| } | |
| if (lista[i].getElementsByTagName("valorReembolsado").length > 0) { | |
| valorReembolsado = lista[i].getElementsByTagName("valorReembolsado")[0].innerHTML; | |
| } | |
| if (lista[i].getElementsByTagName("dataEmissao").length > 0) { | |
| dataEmissao = lista[i].getElementsByTagName("dataEmissao")[0].innerHTML; | |
| } | |
| if (lista[i].getElementsByTagName("cpfCnpj").length > 0) { | |
| cpfCnpj = lista[i].getElementsByTagName("cpfCnpj")[0].innerHTML; | |
| } | |
| if (lista[i].getElementsByTagName("valorDespesa").length > 0) { | |
| valorDespesa = lista[i].getElementsByTagName("valorDespesa")[0].innerHTML; | |
| } | |
| if (lista[i].getElementsByTagName("nomeEmitente").length > 0) { | |
| nomeEmitente = lista[i].getElementsByTagName("nomeEmitente")[0].innerHTML; | |
| } | |
| if (lista[i].getElementsByTagName("descDocumento").length > 0) { | |
| descDocumento = lista[i].getElementsByTagName("descDocumento")[0].innerHTML; | |
| } | |
| if (lista[i].getElementsByTagName("codTipoDespesa").length > 0) { | |
| codTipoDespesa = lista[i].getElementsByTagName("codTipoDespesa")[0].innerHTML; | |
| } | |
| if (lista[i].getElementsByTagName("descTipoDespesa").length > 0) { | |
| descTipoDespesa = lista[i].getElementsByTagName("descTipoDespesa")[0].innerHTML; | |
| } | |
| var detalheVerba = new DetalheVerba(id, idDeputado, dataReferencia, valorReembolsado, dataEmissao, cpfCnpj, valorDespesa, nomeEmitente, descDocumento, codTipoDespesa, descTipoDespesa); | |
| arrayDetalheVerba.push(detalheVerba); | |
| } | |
| return arrayDetalheVerba; | |
| } | |
| function ParseNodeFechamentoVerba(xmlDoc) { | |
| var nodesDeputado = xmlDoc.childNodes[0].getElementsByTagName("fechamentoVerba"); | |
| for (var i = 0; i < nodesDeputado.length; i++) { | |
| var id = nodesDeputado[i].getElementsByTagName("idDeputado")[0].innerHTML; | |
| var dataReferencia = nodesDeputado[i].getElementsByTagName("dataReferencia")[0].innerHTML; | |
| var dataSplit = dataReferencia.split("-"); | |
| var fechamento = new FechamentoVerba(id, dataSplit[0], dataSplit[1]); | |
| Navegar("http://dadosabertos.almg.gov.br/ws/prestacao_contas/verbas_indenizatorias/legislatura_atual/deputados/" + fechamento.idDeputado + "/" + fechamento.ano + "/" + fechamento.mes, 2); | |
| arrayFechamentos.push(fechamento); | |
| } | |
| } | |
| function ParseNodeListaDeputado(xmlDoc) { | |
| var nodesDeputado = xmlDoc.childNodes[0].getElementsByTagName("deputado"); | |
| for (var i = 0; i < nodesDeputado.length; i++) { | |
| var id = nodesDeputado[i].getElementsByTagName("id")[0].innerHTML; | |
| var partido = nodesDeputado[i].getElementsByTagName("partido")[0].innerHTML; | |
| var tagLocalizacao = nodesDeputado[i].getElementsByTagName("tagLocalizacao")[0].innerHTML; | |
| var nome = nodesDeputado[i].getElementsByTagName("nome")[0].innerHTML; | |
| var deputado = new Deputado(id, partido, tagLocalizacao, nome); | |
| arrayDeputado.push(deputado); | |
| } | |
| for (var i = 0; i < arrayDeputado.length; i++) { | |
| CriarElemento("div", "deputado" + i, null, null, null, null); | |
| CriarElemento("p", "tituloDeputado" + i, null, "deputado" + i, arrayDeputado[i].nome + " - " + arrayDeputado[i].partido, "MostrarDadosDeputado(" + i + ")"); | |
| } | |
| document.getElementById("carregando").setAttribute("style", "display:none;"); | |
| } | |
| function MostrarDadosDeputado(indice) { | |
| if(document.getElementById("carregando" + indice) == null) { | |
| //CriarElemento(tagName, id, classe, idPai, texto, onClick) | |
| CriarElemento("p", "carregando" + indice, null, "deputado" + indice, "Carrregando...", null); | |
| } | |
| else { | |
| document.getElementById("carregando" + indice).style.display = "block"; | |
| } | |
| indiceAtual = indice; | |
| arrayFechamentos = []; | |
| arrayPrestacaoConta = []; | |
| for (var i = 0; i < arrayDeputado.length; i++) { | |
| if(document.getElementById("dadosDeputado" + i) != null) { | |
| document.getElementById("dadosDeputado" + i).setAttribute("style", "display:none;"); | |
| document.getElementById("analiseDeputado" + i).setAttribute("style", "display:none;"); | |
| } | |
| } | |
| if(document.getElementById("analiseDeputado" + indice) == null) { | |
| MostrarTodosDadosVerbaIndenizatoriaDeputado(indice); | |
| document.getElementById("dadosDeputado" + indice).setAttribute("style", "display:none;"); | |
| Analisar(); | |
| CriarDivAnalise(indice); | |
| } | |
| else { | |
| document.getElementById("analiseDeputado" + indice).setAttribute("style", "display:block;"); | |
| } | |
| document.getElementById("carregando" + indice).style.display = "none"; | |
| } | |
| function CriarDivAnalise(indice) { | |
| //CriarElemento(tagName, id, classe, idPai, texto, onClick) | |
| CriarElemento("div", "analiseDeputado" + indice, null, "deputado" + indice, null, null); | |
| CriarElemento("h3", null, null, "analiseDeputado" + indice, "Análise", null); | |
| CriarElemento("p", null, null, "analiseDeputado" + indice, "Última atualização: " + arrayPrestacaoConta[arrayPrestacaoConta.length - 1].dataReferencia, null); | |
| for(var r = 0; r < arrayTiposDespesa.length; r++) { | |
| CriarElemento("p", null, null, "analiseDeputado" + indice, "Tipo de despesa: " + arrayTiposDespesa[r].descTipoDespesa, null); | |
| CriarElemento("p", null, null, "analiseDeputado" + indice, "Valor: " + arrayTiposDespesa[r].valor, null); | |
| } | |
| document.getElementById("analiseDeputado" + indice).setAttribute("style", "display:block;"); | |
| } | |
| function MostrarTodosDadosVerbaIndenizatoriaDeputado(indice) { | |
| if(document.getElementById("dadosDeputado" + indice) == null) { | |
| CriarElemento("div", "dadosDeputado" + indice, null, "deputado" + indice, null, null); | |
| CriarElemento("h3", null, null, "dadosDeputado" + indice, "Verba Indenizatória", null); | |
| document.getElementById("dadosDeputado" + indice).setAttribute("style","height: 400px;overflow: auto;"); | |
| } | |
| Navegar("http://dadosabertos.almg.gov.br/ws/prestacao_contas/verbas_indenizatorias/legislatura_atual/deputados/" + arrayDeputado[indice].id + "/datas", 1); | |
| } | |
| function Analisar() { | |
| arrayTiposDespesa = []; | |
| for(var a = 0; a < arrayPrestacaoConta.length; a++) { | |
| if(arrayTiposDespesa.length > 0) { | |
| var tem = false; | |
| for(var b = 0; b < arrayTiposDespesa.length; b++) { | |
| if(arrayTiposDespesa[b].codTipoDespesa == arrayPrestacaoConta[a].codTipoDespesa) { | |
| tem = true; | |
| } | |
| } | |
| if(!tem) { | |
| arrayTiposDespesa.push({ codTipoDespesa: arrayPrestacaoConta[a].codTipoDespesa, descTipoDespesa:arrayPrestacaoConta[a].descTipoDespesa }); | |
| } | |
| } | |
| else { | |
| arrayTiposDespesa.push({ codTipoDespesa: arrayPrestacaoConta[a].codTipoDespesa, descTipoDespesa:arrayPrestacaoConta[a].descTipoDespesa }); | |
| } | |
| } | |
| for(var s = 0; s < arrayTiposDespesa.length; s++) { | |
| arrayTiposDespesa[s].valor = 0; | |
| for(var t = 0; t < arrayPrestacaoConta.length; t++) { | |
| if(arrayPrestacaoConta[t].codTipoDespesa == arrayTiposDespesa[s].codTipoDespesa) { | |
| arrayTiposDespesa[s].valor += Number(arrayPrestacaoConta[t].valor.replace(',','.')); | |
| } | |
| } | |
| } | |
| } | |
| function CriarElemento(tagName, id, classe, idPai, texto, onClick) { | |
| var elemento = document.createElement(tagName); | |
| if(id != null) { | |
| elemento.id = id; | |
| } | |
| elemento.class = classe; | |
| elemento.textContent = texto; | |
| if (idPai != null) { | |
| document.getElementById(idPai).appendChild(elemento); | |
| } else { | |
| document.body.appendChild(elemento); | |
| } | |
| if (onClick != null) | |
| elemento.setAttribute("onClick", onClick); | |
| } | |
| function Rodar() { | |
| CriarElemento("header", "cabecalho", null, null, null, null); | |
| CriarElemento("h1", "titulo", null, "cabecalho", "Deputados-MG Analytics", null); | |
| CriarElemento("div", "corpo", null, null, null, null); | |
| CriarElemento("p", "carregando", null, "corpo", "Carregando...", null); | |
| CriarElemento("p", null, null, "corpo", "Conheça os deputados", null); | |
| CriarElemento("div", null, null, "corpo", null, null); | |
| Navegar("http://dadosabertos.almg.gov.br/ws/deputados/em_exercicio", 0); | |
| } | |
| Rodar(); | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment