71
| <![CDATA[<script>
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* GLOBAIS */
/* MAPA */
var leafLetMap; // MAPA
var leafLetMapCenter; // CENTRO DO MAPA
var markers = []; // ARRAY COM SO MARCADORES
var markersAgrupados = {}; // ARRAY COM SO MARCADORES AGRUPADOS
const cidadeLatLng = [-15.8143, -42.2274]; // LAT LNG DA CIDADE
const zoomMax = 18; // ZOOM MAXIMO
const zoomMin = 11; // ZOOM MINIMO
/* MAPA */
/* OBRAS */
const seguirObra = false;
/* OBRAS */
/* LAYOUT */
var divMenuObras;
var botaoMenuDetalhes; // REFERENCIA GLOBAL DO BOTAO DETRALHES
var botaoVerMapa = $("#btn_ver_mapa");
/* LAYOUT */
/* PAGINA */
var $document;
var $window;
var $body;
/* PAGINA */
/* FILTROS */
var dadosExibir; // AUXILIAR PARA EXIBICAO DOS DADOS APÓS A FILTRAGEM
var formFiltrar;
var inputPeriodoInicial;
var inputPeriodoFinal;
var inputsBairro;
var inputsLogradouro;
var inputsCategoria;
var inputsSituacao;
var inputPalavraChave;
var selectRelatorioFiltroAno;
var divsRelatorioInfo;
var divRelatorioTotalExecutadas;
var divRelatorioTotalConcluidas;
var divRelatorioTotalEmAndamento;
var divRelatorioTotalSuspensas;
var divRelatorioTotalEmProjeto;
var divRelatorioTotalAcompanhamentos;
var divRelatorioTotalContratos;
var divRelatorioTotalValor;
var filtrosFormulario;
/* FILTROS */
/* LISTAGEM */
var divAreaListagem;
var divResultados;
var spanQtdeResultado;
var spanObrasEncontradas;
var divListagemObras;
/* LISTAGEM */
/* DETALHES */
var divAreaDetalhes;
var btnSeguirObra;
var btnAvaliarObra;
var divCategoriaObra;
var divLocalizacaoObra;
var divEditalObra;
var divContratoObra;
var divEmpresaObra;
var divFiscalObra;
var divValorObra;
var divValorPagoObra;
var spanValorPago;
var divDescricao;
var divFonteRecurso;
var divMotivoParalisacao;
var divExecucaoObra;
var divSituacao;
var spanSituacao;
var divDataInicio;
var divDataFim;
var divObraAtraso;
var divAcompanhamentosObras;
var divTotalAcompanhamentos;
var spanTotalPorcentagem;
var divFotosObra;
var divContFotos;
var divVideosObra;
var divArquivosObra;
var divSecretariasObra;
var divValorContrato;
var spanValorContrato;
var divValorUtilizado;
var spanValorPagoFinal;
// var divPrazoEstimado;
var divPrazoRealizacao;
/* DETALHES */
/* PAGINACAO */
const qtdePorPagina = 100;
var selectPagina;
var divAvancaPagina;
var divVoltaPagina;
/* PAGINACAO */
/* MODELOS */
const htmlSecretariaModelo =
'<a href="" class="obr_secretaria_modelo">'+
'<div class="obr_secretaria_vinculada">'+
'<div class="obr_area_img_secretaria"><img src="" alt=""></div>'+
'<div class="obr_area_info_secretaria">'+
'<div class="obr_nome_secretaria sw_lato_black"></div>'+
'</div>'+
'</div>'+
'</a>';
const secretariaModelo = $(htmlSecretariaModelo);
const htmlArquivoMoldeo =
'<a href="" class="obr_arquivo_modelo" target="_blank">'+
'<div class="sw_arquivo_download">'+
'<div class="sw_icone_arquivo_download"><img src="" alt=""></div>'+
'<div class="sw_info_arquivo_download">'+
'<div class="sw_data_arquivo_download sw_lato"></div>'+
'<div class="sw_nome_arquivo_download sw_lato_bold"></div>'+
'</div>'+
'</div>'+
'</a>';
const arquivoModelo = $(htmlArquivoMoldeo);
const htmlVideoModelo =
'<div class="obr_video_obra obr_video_modelo">'+
'<div class="obr_img_video">'+
'<img src="" alt="">'+
'<span class="swfa fas fa-play"></span>'+
'</div>'+
'<div class="obr_data_video"></div>'+
'<div class="obr_nome_video sw_lato_black"></div>'+
'<div class="obr_assistir_video sw_lato_medium">ASSISTIR</div>'+
'<input type="hidden" value="">'+
'</div>';
const videoModelo = $(htmlVideoModelo);
const htmlFotoModelo =
'<div class="vinc_cont_img_galeria_fotos obr_foto_modelo">'+
'<div class="vinc_img_galeria_fotos">'+
'<span class="swfa fas fa-search-plus" aria-hidden="true"></span>'+
'<img src="" alt="">'+
'</div>'+
'</div>';
const fotoModelo = $(htmlFotoModelo);
const htmlAcompanhamentoModelo =
'<div class="sw_linha_lista_detalhes obr_acompanhamento_info obr_acompanhamento_modelo" style="display: none;">'+
'<div class="obr_cont_acompanhamento_obra">'+
'<div class="obr_area_porcentagem_obra sw_lato_black">'+
'<div class="obr_barra_porcentagem_acompanhamento">'+
'<div class="obr_porcentagem_acompanhamento">'+
'<span style="min-width: 40%">40%</span>'+
'</div>'+
'</div>'+
'</div>'+
'<div class="obr_area_info_acompanhamento_obra">'+
'<div class="sw_lato_medium">'+
'<span class="obr_data_acompanhamento">10 jan 2020</span>'+
'<div class="obr_descricao_acompanhamento sw_lato_bold"></div>'+
'<span class="obr_situacao_acompanhamento"></span>'+
'<div class="obr_link_obra obr_link_ver_fotos"><span class="obr_txt_link_obra">ver fotos</span><span class="swfa fas fa-camera"></span></div>'+
'</div>'+
'</div>'+
'</div>'+
'</div>';
const acompanhamentoModelo = $(htmlAcompanhamentoModelo);
const htmlItemListaObraModelo =
'<div class="obr_item_listagem obr_item_listagem_modelo" data-id="">'+
'<div class="obr_area_titulo_obra">'+
'<div class="obr_categoria_obra sw_lato">'+
'<div class="obr_cont_categoria_obra">'+
'<span class="swfa fa"></span>'+
'<span class="obr_txt_categoria"></span>'+
'</div>'+
'</div>'+
'<div class="obr_titulo_obra sw_lato_black"></div>'+
'</div>'+
'<div class="obr_area_info_obra sw_lato">'+
'<div class="obr_info_obra obr_info_obra_situacao">'+
'<div class="obr_titulo_info sw_lato_black">Situação</div>'+
'<div class="obr_descricao_info"><span class="obr_situacao"></span></div>'+
'</div>'+
'<div class="obr_info_obra obr_info_obra_dt_inicio">'+
'<div class="obr_titulo_info sw_lato_black">Data Início</div>'+
'<div class="obr_descricao_info"></div>'+
'</div>'+
'<div class="obr_info_obra obr_info_obra_dt_fim">'+
'<div class="obr_titulo_info sw_lato_black">Data Fim</div>'+
'<div class="obr_descricao_info"></div>'+
'</div>'+
'<div class="obr_info_obra obr_info_obra_valor">'+
'<div class="obr_titulo_info sw_lato_black">Valor</div>'+
'<div class="obr_descricao_info"><span class="obr_valor_obra sw_lato_black"></span></div>'+
'</div>'+
'<div class="obr_info_obra obr_info_obra_contrato">'+
'<div class="obr_titulo_info sw_lato_black">Contrato</div>'+
'<div class="obr_descricao_info"></div>'+
'</div>'+
'<div class="obr_info_obra obr_info_obra_edital">'+
'<div class="obr_titulo_info sw_lato_black">Edital</div>'+
'<div class="obr_descricao_info"></div>'+
'</div>'+
'<div class="obr_area_link_obra_listagem">'+
'<div class="obr_link_obra obr_link_ver_obra"><span class="obr_txt_link_obra">ver obra</span><span class="swfa fas fa-search"></span></div>'+
'<div class="obr_link_obra obr_link_ver_fotos"><span class="obr_txt_link_obra">ver fotos</span><span class="swfa fas fa-camera"></span></div>'+
'</div>'+
'</div>'+
'</div>';
const itemListaObraModelo = $(htmlItemListaObraModelo);
/* MODELOS */
/* INICIANDO VARIAVEIS */
$(document).ready(function(){
$document = $(document);
$window = $(window);
$body = $("body");
divMenuObras = $("#obr_menu");
botaoMenuDetalhes = $("button[data-menu=obr_content_detalhes]");
botaoVerMapa = $("#btn_ver_mapa");
formFiltrar = $("#obr_form_filtro");
inputPeriodoInicial = $("#obr_periodo_inicial");
inputPeriodoInicial.datepicker();
inputPeriodoInicial.mask("99/99/9999");
inputPeriodoFinal = $("#obr_periodo_final");
inputPeriodoFinal.datepicker();
inputPeriodoFinal.mask("99/99/9999");
inputsBairro = $(".obr_filtro_bairro");
inputsLogradouro = $(".obr_filtro_logradouro");
inputsCategoria = $(".obr_filtro_categoria");
inputsSituacao = $(".obr_filtro_situacao");
inputPalavraChave = $("#obr_palavra_chave");
selectRelatorioFiltroAno = $("#obr_filtro_ano");
divsRelatorioInfo = $(".obr_area_info_relatorio_obras");
divRelatorioTotalExecutadas = divsRelatorioInfo.find(".obr_total_executadas");
divRelatorioTotalConcluidas = divsRelatorioInfo.find(".obr_numero_info.obr_situacao.obr_situacao_concluida");
divRelatorioTotalEmAndamento = divsRelatorioInfo.find(".obr_numero_info.obr_situacao.obr_situacao_em_andamento");
divRelatorioTotalSuspensas = divsRelatorioInfo.find(".obr_numero_info.obr_situacao.obr_situacao_suspensa");
divRelatorioTotalEmProjeto = divsRelatorioInfo.find(".obr_numero_info.obr_situacao.obr_situacao_em_projeto");
divRelatorioTotalAcompanhamentos = divsRelatorioInfo.find(".obr_total_acompanhamentos");
divRelatorioTotalContratos = divsRelatorioInfo.find(".obr_total_contratos");
divRelatorioTotalValor = divsRelatorioInfo.find(".obr_valor_obra");
filtrosFormulario = divMenuObras.find(".obr_formulario_filtro:not(.obr_relatorio)");
divAreaListagem = $(".obr_area_listagem");
divResultados = $(".sw_area_info_resultado_busca");
spanQtdeResultado = $("#span_qtde_obras_encontradas");
spanObrasEncontradas = $("#span_obras_encontradas");
divListagemObras = $(".obr_info_listagem_obras");
divAreaDetalhes = $(".obr_area_detalhes_obra");
btnSeguirObra = divAreaDetalhes.find('#sw_btn_seguir_ferramenta');
btnAvaliarObra = divAreaDetalhes.find('#sw_btn_avaliar');
divCategoriaObra = divAreaDetalhes.find(".obr_categoria_obra");
divLocalizacaoObra = divAreaDetalhes.find(".obr_localizacao");
divEditalObra = divAreaDetalhes.find(".obr_edital");
divContratoObra = divAreaDetalhes.find(".obr_contrato");
divEmpresaObra = divAreaDetalhes.find(".obr_empresa");
divFiscalObra = divAreaDetalhes.find(".obr_fiscal");
divValorObra = divAreaDetalhes.find("div.obr_valor_obra");
divValorPagoObra = divAreaDetalhes.find("div.obr_valor_pago");
divDescricao = divAreaDetalhes.find("div.obr_descricao");
divFonteRecurso = divAreaDetalhes.find("div.obr_fonte_recurso");
divMotivoParalisacao = divAreaDetalhes.find("div.obr_motivo_paralisacao");
spanValorPago = divValorPagoObra.find("span");
divExecucaoObra = divAreaDetalhes.find(".obr_execucao");
divSituacao = divExecucaoObra.find(".obr_situacao_atual");
spanSituacao = divSituacao.find("span.obr_situacao");
divDataInicio = divExecucaoObra.find(".obr_data_inicio");
divDataFim = divExecucaoObra.find(".obr_data_fim");
divObraAtraso = divExecucaoObra.find(".obr_atraso");
divAcompanhamentosObras = divAreaDetalhes.find("div.obr_cont_detalhes.obr_acompanhamentos");
divTotalAcompanhamentos = divAreaDetalhes.find(".sw_linha_lista_detalhes.obr_total_acompanhamentos");
spanTotalPorcentagem = divTotalAcompanhamentos.find(".obra_porcentagem_concluida");
divFotosObra = divAreaDetalhes.find(".obr_obra_fotos");
divContFotos = divFotosObra.find('.vinc_cont_galeria_fotos_vinculada');
divVideosObra = divAreaDetalhes.find("div.obr_obra_videos div.obr_area_videos_obra");
divArquivosObra = divAreaDetalhes.find("div.obr_obra_arquivos");
divSecretariasObra = divAreaDetalhes.find(".obr_obra_secretarias");
divValorContrato = divAreaDetalhes.find("div.obr_cont_estatisticas_barra.obr_valor_contratado");
spanValorContrato = divValorContrato.find("span");
divValorUtilizado = divAreaDetalhes.find("div.obr_cont_estatisticas_barra.obr_valor_utilizado");
spanValorPagoFinal = divValorUtilizado.find("span");
// divPrazoEstimado = divAreaDetalhes.find("div.obr_cont_estatisticas_barra.obr_prazo_dias");
divPrazoRealizacao = divAreaDetalhes.find("div.obr_cont_estatisticas_barra.obr_total_dias");
selectPagina = $(".obr_select_paginacao_listagem");
divAvancaPagina = $(".obr_avanca_pagina");
divVoltaPagina = $(".obr_volta_pagina");
/* CAPTURA DADOS PARA O GRÁFICO DE CATEGORIAS */
var dados_grafico_categorias = $("#dados_grafico_categorias").val();
if(dados_grafico_categorias != undefined)
{
dados_grafico_categorias = decodeURIComponent(dados_grafico_categorias);
dados_grafico_categorias = JSON.parse(dados_grafico_categorias);
// GRÁFICO DE PIZZA -- RELAÇÃO DE OBRAS COM CATEGORIAS
if(dados_grafico_categorias.length > 0)
{
Highcharts.chart('obr_grafico_categoria', {
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false,
type: 'pie'
},
title: { text: '<span class="sw_lato_black" style="font-size:16px;">Obras por categorias</span>' },
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: false
},
showInLegend: true
}
},
series: [{
name: 'Quantidade',
colorByPoint: true,
data: dados_grafico_categorias
}],
tooltip: {
pointFormat: '{series.name}: <span style="padding:0"><strong>{point.y}</strong></span>'
},
});
}
}
/* CAPTURA DADOS PARA O GRÁFICO DE FONTE DE RECURSO */
var dados_grafico_fonte_recurso = $("#dados_fonte_recurso").val();
if(dados_grafico_fonte_recurso != undefined)
{
dados_grafico_fonte_recurso = decodeURIComponent(dados_grafico_fonte_recurso);
dados_grafico_fonte_recurso = JSON.parse(dados_grafico_fonte_recurso);
// GRÁFICO DE PIZZA -- FONTE DE RECURSO
if(dados_grafico_fonte_recurso.length > 0)
{
Highcharts.chart('obr_grafico_fonte_recurso', {
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false,
type: 'pie'
},
title: { text: '<span class="sw_lato_black" style="font-size:16px;">Obras por fonte de recurso</span>' },
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: false
},
showInLegend: true
}
},
series: [{
name: 'Quantidade',
colorByPoint: true,
data: dados_grafico_fonte_recurso
}],
tooltip: {
pointFormat: '{series.name}: <span style="padding:0"><strong>{point.y}</strong></span>'
},
});
}
}
/* CAPTURA DADOS PARA O GRÁFICO DOS MOTIVOS DE PARALISAÇÃO */
var dados_grafico_motivo_paralisacao = $("#dados_motivo_paralisacao").val();
if(dados_grafico_motivo_paralisacao != undefined)
{
dados_grafico_motivo_paralisacao = decodeURIComponent(dados_grafico_motivo_paralisacao);
dados_grafico_motivo_paralisacao = JSON.parse(dados_grafico_motivo_paralisacao);
// GRÁFICO DE PIZZA -- MOTIVOS DA PARALISAÇÃO
if(dados_grafico_motivo_paralisacao.length > 0)
{
Highcharts.chart('obr_grafico_motivo_paralisacao', {
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false,
type: 'pie'
},
title: { text: '<span class="sw_lato_black" style="font-size:16px;">Obras por motivos de paralisação</span>' },
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: false
},
showInLegend: true
}
},
series: [{
name: 'Quantidade',
colorByPoint: true,
data: dados_grafico_motivo_paralisacao
}],
tooltip: {
pointFormat: '{series.name}: <span style="padding:0"><strong>{point.y}</strong></span>'
},
});
}
}
// ADAPTAÇÃO NO MÉTODO 'CONTAINS' DO JQUERY PARA FILTRAR CASE INSENSITIVE E REMOVER ACENTUAÇÃO
jQuery.expr[':'].instarcontains = function(a, i, m) {
return jQuery(a).text()
.replace(/[áàãâä]/gi,"a")
.replace(/[éèê]/gi,"e")
.replace(/[íìïî]/gi,"i")
.replace(/[óòöôõ]/gi,"o")
.replace(/[úùüû]/gi, "u")
.replace(/[ç]/gi, "c")
.replace(/[ñ]/gi, "n")
.replace(/[^a-zA-Z0-9]/g," ")
.toUpperCase()
.indexOf(m[3]
.replace(/[áàãâä]/gi,"a")
.replace(/[éèê]/gi,"e")
.replace(/[íìïî]/gi,"i")
.replace(/[óòöôõ]/gi,"o")
.replace(/[úùüû]/gi, "u")
.replace(/[ç]/gi, "c")
.replace(/[ñ]/gi, "n")
.replace(/[^a-zA-Z0-9]/g," ")
.toUpperCase()
) >= 0;
};
});
/* INICIANDO VARIAVEIS */
/* GLOBAIS */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* FUNCAO CRIA O MAPA */
function Mapa(idElementoMapa, renderizarRelatorio = true)
{
markers = [];
// DADOS
var pontos = [{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.812681228174494","longitude":"-42.22603797912598","icone":"angle-double-left","cor_fundo_circulo":"#81b6a5","cor_marcador":"#81b6a5","cor_icone":"#ffffff","nome_categoria":"Construções de quadras esportivas (sem cobertura)","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes obr_popup_leaflet_img\">\r\n <img src=\"\/fotos\/obras\/4\/69df1f4009f557e9f1526b6607b2efdc.jpg\" alt=\"Foto da obra\" class=\"imgcentraliza\" \/>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Quadra de Futebol Society na Praça de Esportes<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construções de quadras esportivas (sem cobertura)<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_concluida\">Concluído<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Centro<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Praça de Esportes, s\/n, <\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"4\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":5,"situacao":"Concluído","bairro":"Centro","logradouro_completo":"Praça de Esportes, s\/n, ","logradouro":"Praça de Esportes, s\/n","dt_inicio":1648436400,"dt_inicio_string":"28\/03\/2022","dt_fim":1663210800,"dt_fim_string":"15\/09\/2022","valor":"493.000,00","valor_pago":null,"titulo":"Quadra de Futebol Society na Praça de Esportes","codigo":4,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1813","nome":"Tomada de Preço - TP 004.2022 - (CONSTRUÇÃO DE QUADRA DE FUTEBOL SOCIETY)","numero":4,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[{"arquivo":"\/fotos\/obras\/4\/69df1f4009f557e9f1526b6607b2efdc.jpg","legenda":"Quadra de Futebol Society 2"},{"arquivo":"\/fotos\/obras\/4\/84c7c5160e34c05f705b06ce648c9861.jpg","legenda":"Quadra de Futebol Society 3"},{"arquivo":"\/fotos\/obras\/4\/cec825b0a9eda02e39b977d56cb410e4.jpg","legenda":"Quadra de Futebol Society"}],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"Fabio Rodrigues Cardoso","fiscal":"Arthur Herbert P. Soares","descricao":"","fonte_recurso":"Convênio Estadual, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.812681228174494","longitude":"-42.22603797912598","icone":"angle-double-left","cor_fundo_circulo":"#81b6a5","cor_marcador":"#81b6a5","cor_icone":"#ffffff","nome_categoria":"Construções de quadras esportivas (sem cobertura)","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes obr_popup_leaflet_img\">\r\n <img src=\"\/fotos\/obras\/5\/c8c9a4cfa75e32456498de87844819b4.jpg\" alt=\"Foto da obra\" class=\"imgcentraliza\" \/>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Quadra de Beach Tennis, Vôlei de Praia, Peteca e Basquete<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construções de quadras esportivas (sem cobertura)<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_concluida\">Concluído<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Centro<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Praça de Esportes, s\/n, <\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"5\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":5,"situacao":"Concluído","bairro":"Centro","logradouro_completo":"Praça de Esportes, s\/n, ","logradouro":"Praça de Esportes, s\/n","dt_inicio":1647918000,"dt_inicio_string":"22\/03\/2022","dt_fim":1668481200,"dt_fim_string":"15\/11\/2022","valor":"504.764,40","valor_pago":null,"titulo":"Quadra de Beach Tennis, Vôlei de Praia, Peteca e Basquete","codigo":5,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1812","nome":"Tomada de Preço - TP 003.2022 - (CONSTRUÇÃO DE QUADRAS DE BEACH TÊNIS E OUTROS)","numero":3,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[{"arquivo":"\/fotos\/obras\/5\/c8c9a4cfa75e32456498de87844819b4.jpg","legenda":"Quadra de Beach Tennis e outros"}],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"Antônio Coelho Campos","fiscal":"Wesley Miranda de Sena","descricao":"","fonte_recurso":"Convênio Estadual, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.800499919443892","longitude":"-42.22378492355347","icone":"angle-double-left","cor_fundo_circulo":"#000000","cor_marcador":"#000000","cor_icone":"#ffffff","nome_categoria":"Pavimentações de vias públicas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes obr_popup_leaflet_img\">\r\n <img src=\"\/fotos\/obras\/6\/13fa880c8deb9899dbf4a2c9f38fa2ca.jpg\" alt=\"Foto da obra\" class=\"imgcentraliza\" \/>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentação em blocos sextavados de concreto e obras complementares<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentações de vias públicas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Bom Jardim<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Tóquio e Belo Horizonte, <\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"6\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":6,"situacao":"Em Andamento","bairro":"Bom Jardim","logradouro_completo":"Tóquio e Belo Horizonte, ","logradouro":"Tóquio e Belo Horizonte","dt_inicio":1651201200,"dt_inicio_string":"29\/04\/2022","dt_fim":1674097200,"dt_fim_string":"19\/01\/2023","valor":"273.904,29","valor_pago":null,"titulo":"Pavimentação em blocos sextavados de concreto e obras complementares","codigo":6,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1817","nome":"Tomada de Preço - TP 008.2022 - (OBRA DE PAVIMENTAÇÃO)","numero":8,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[{"arquivo":"\/fotos\/obras\/6\/13fa880c8deb9899dbf4a2c9f38fa2ca.jpg","legenda":"Pav-1"},{"arquivo":"\/fotos\/obras\/6\/6371110693a42f74b6a6ab92a635115f.jpg","legenda":"Pav-2"},{"arquivo":"\/fotos\/obras\/6\/80c9e94833365606ad003b1c70238a63.jpg","legenda":"Pav-3"},{"arquivo":"\/fotos\/obras\/6\/2869ae62634cc38d0d73c6aa5faaf4aa.jpg","legenda":"Pav-4"},{"arquivo":"\/fotos\/obras\/6\/fe1dd147b4efb3adedc9568292c09c7e.jpg","legenda":"Pav-5"}],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"Vinicius Hiago Sarmento de Carvalho","fiscal":"Cynthia Andrade Gomes","descricao":"","fonte_recurso":"Próprio, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.806838420734739","longitude":"-42.217004299163825","icone":"angle-double-left","cor_fundo_circulo":"#36ce87","cor_marcador":"#36ce87","cor_icone":"#ffffff","nome_categoria":"Construções de praças e calçadas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes obr_popup_leaflet_img\">\r\n <img src=\"\/fotos\/obras\/8\/4dcec5b8c31bc06cd0048d7e505615f1.jpg\" alt=\"Foto da obra\" class=\"imgcentraliza\" \/>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construção de Pista de Caminhada, Av. do Contorno - 3ª etapa<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construções de praças e calçadas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Sagrada Família<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">do Contorno, <\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"8\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":7,"situacao":"Em Andamento","bairro":"Sagrada Família","logradouro_completo":"do Contorno, ","logradouro":"do Contorno","dt_inicio":1634094000,"dt_inicio_string":"13\/10\/2021","dt_fim":1659841200,"dt_fim_string":"07\/08\/2022","valor":"501.980,07","valor_pago":null,"titulo":"Construção de Pista de Caminhada, Av. do Contorno - 3ª etapa","codigo":8,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1266","nome":"Tomada de Preço - TP 007.2021 Constr. 3ª Etapa da Pista de Caminhada","numero":7,"ano":2021},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[{"arquivo":"\/fotos\/obras\/8\/4dcec5b8c31bc06cd0048d7e505615f1.jpg","legenda":"3 pista - 1"},{"arquivo":"\/fotos\/obras\/8\/2349bbabd56dc2f5a084a33ad5ffe34b.jpg","legenda":"3 pista - 2"},{"arquivo":"\/fotos\/obras\/8\/5120d2fdd80e84c416680b942229e5d3.jpg","legenda":"3 pista - 3"}],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"Wesley Miranda de Sena","descricao":"","fonte_recurso":"","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.802671785001465","longitude":"-42.235889268559724","icone":"angle-double-left","cor_fundo_circulo":"#36ce87","cor_marcador":"#36ce87","cor_icone":"#ffffff","nome_categoria":"Construções de praças e calçadas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes obr_popup_leaflet_img\">\r\n <img src=\"\/fotos\/obras\/9\/2601bbf290661d96599a6bcdd40b7c3b.jpg\" alt=\"Foto da obra\" class=\"imgcentraliza\" \/>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construção de Praça na Rua Turmalina, Bairro Planalto<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construções de praças e calçadas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Planalto<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Turmalina, <\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"9\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":7,"situacao":"Em Andamento","bairro":"Planalto","logradouro_completo":"Turmalina, ","logradouro":"Turmalina","dt_inicio":1636081200,"dt_inicio_string":"05\/11\/2021","dt_fim":1665975600,"dt_fim_string":"17\/10\/2022","valor":"236.301,25","valor_pago":null,"titulo":"Construção de Praça na Rua Turmalina, Bairro Planalto","codigo":9,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1262","nome":"Tomada de Preço - TP 011.2021 - Construção de Praça na Rua Turmalina","numero":11,"ano":2021},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[{"arquivo":"\/fotos\/obras\/9\/2601bbf290661d96599a6bcdd40b7c3b.jpg","legenda":"Praça rua Turmalina"},{"arquivo":"\/fotos\/obras\/9\/51e012806c60a443f66c97489d6e3a9d.jpg","legenda":"Praça rua Turmalina 4"},{"arquivo":"\/fotos\/obras\/9\/43410043a4900356567bb2f59ec4300b.jpg","legenda":"Praça rua Turmalina 3"},{"arquivo":"\/fotos\/obras\/9\/4450a6b09e1a7da05b3eb36ff5a2b76a.jpg","legenda":"Praça rua Turmalina 1"},{"arquivo":"\/fotos\/obras\/9\/d9a2f043aff20cb36711757da0c96c3f.jpg","legenda":"Praça rua Turmalina 2"}],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"Wesley Miranda de Sena","descricao":"","fonte_recurso":"Emenda parlamentar, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.79945087640446","longitude":"-42.23724034909476","icone":"angle-double-left","cor_fundo_circulo":"#000000","cor_marcador":"#000000","cor_icone":"#ffffff","nome_categoria":"Pavimentações de vias públicas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes obr_popup_leaflet_img\">\r\n <img src=\"\/fotos\/obras\/10\/f4d70733be9ace9233c80a10354c44bb.jpg\" alt=\"Foto da obra\" class=\"imgcentraliza\" \/>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentação em PMF, na Rua Paineiras, Bairro Planalto<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentações de vias públicas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Planalto<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">das Paineiras, <\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"10\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":6,"situacao":"Em Andamento","bairro":"Planalto","logradouro_completo":"das Paineiras, ","logradouro":"das Paineiras","dt_inicio":1665111600,"dt_inicio_string":"07\/10\/2022","dt_fim":1678158000,"dt_fim_string":"07\/03\/2023","valor":"486.286,89","valor_pago":null,"titulo":"Pavimentação em PMF, na Rua Paineiras, Bairro Planalto","codigo":10,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1265","nome":"Tomada de Preço - TP 008.2021 - Obras de Pavimentação Asfáltica","numero":8,"ano":2021},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[{"arquivo":"\/fotos\/obras\/10\/f4d70733be9ace9233c80a10354c44bb.jpg","legenda":"R. Paineiras 1"},{"arquivo":"\/fotos\/obras\/10\/30f0d3a07a77e18e202497ee4252f93f.jpg","legenda":"R. Paineiras 2"},{"arquivo":"\/fotos\/obras\/10\/5a680233f7c2718ccbce97f7ac7a061a.jpg","legenda":"R. Paineiras 3"},{"arquivo":"\/fotos\/obras\/10\/d406d418105a74df981439f6ab6267b0.jpg","legenda":"R. Paineiras 4"}],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"Cynthia Andrade Gomes","descricao":"","fonte_recurso":"Transferências especiais, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.820659410488958","longitude":"-42.22543863788777","icone":"angle-double-left","cor_fundo_circulo":"#000000","cor_marcador":"#000000","cor_icone":"#ffffff","nome_categoria":"Pavimentações de vias públicas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes obr_popup_leaflet_img\">\r\n <img src=\"\/fotos\/obras\/11\/2c45d4748aa56c212569b8a95ba2c3f4.jpg\" alt=\"Foto da obra\" class=\"imgcentraliza\" \/>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentação em PMF, na Av. do Contorno (entre a Rua Xandú e Av. JK)<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentações de vias públicas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Nossa Senhora de Fátima<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">do Contorno, <\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"11\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":6,"situacao":"Em Andamento","bairro":"Nossa Senhora de Fátima","logradouro_completo":"do Contorno, ","logradouro":"do Contorno","dt_inicio":1636081200,"dt_inicio_string":"05\/11\/2021","dt_fim":1657681200,"dt_fim_string":"13\/07\/2022","valor":"272.548,74","valor_pago":null,"titulo":"Pavimentação em PMF, na Av. do Contorno (entre a Rua Xandú e Av. JK)","codigo":11,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1265","nome":"Tomada de Preço - TP 008.2021 - Obras de Pavimentação Asfáltica","numero":8,"ano":2021},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[{"arquivo":"\/fotos\/obras\/11\/2c45d4748aa56c212569b8a95ba2c3f4.jpg","legenda":"Av. Contorno 1"},{"arquivo":"\/fotos\/obras\/11\/55693a6a269c95a3dbaf4fa8150ecd5f.jpg","legenda":"Av. Contorno 5"},{"arquivo":"\/fotos\/obras\/11\/cc4f69f8b16d78e30ff33e1d51dd6cfa.jpg","legenda":null},{"arquivo":"\/fotos\/obras\/11\/a2dd790ae56966a3c8d145509277c1f1.jpg","legenda":"Av. Contorno 3"},{"arquivo":"\/fotos\/obras\/11\/0e7d17220aa2b8aaa0ba0debef55c6a9.jpg","legenda":null}],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"Carmen Silva Mendes","fiscal":"Cynthia Andrade Gomes","descricao":"","fonte_recurso":"Convênio Federal, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.819865469280522","longitude":"-42.152352333068855","icone":"angle-double-left","cor_fundo_circulo":"#e2c269","cor_marcador":"#e2c269","cor_icone":"#ffffff","nome_categoria":"Construção de galpão","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes obr_popup_leaflet_img\">\r\n <img src=\"\/fotos\/obras\/12\/8f825d405f88722f57ad36662c715b3a.jpg\" alt=\"Foto da obra\" class=\"imgcentraliza\" \/>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construção de galpão para produtos do cerrado, em Lagoa Grande<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construção de galpão<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Povoado de Lagoa Grande<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"12\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":8,"situacao":"Em Andamento","bairro":"Povoado de Lagoa Grande","logradouro_completo":"","logradouro":"nao_informado","dt_inicio":1647226800,"dt_inicio_string":"14\/03\/2022","dt_fim":1659841200,"dt_fim_string":"07\/08\/2022","valor":"269.872,43","valor_pago":null,"titulo":"Construção de galpão para produtos do cerrado, em Lagoa Grande","codigo":12,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1267","nome":"Tomada de Preço - TP 006.2021 Constr. Galpão - Comunid. Lagoa Grande","numero":6,"ano":2021},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[{"arquivo":"\/fotos\/obras\/12\/8f825d405f88722f57ad36662c715b3a.jpg","legenda":null}],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"João Carlos Sarmento","fiscal":"Wesley Miranda de Sena","descricao":"","fonte_recurso":"Convênio Federal, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.802671785001465","longitude":"-42.235889268559724","icone":"angle-double-left","cor_fundo_circulo":"#81b6a5","cor_marcador":"#81b6a5","cor_icone":"#ffffff","nome_categoria":"Construções de quadras esportivas (sem cobertura)","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes obr_popup_leaflet_img\">\r\n <img src=\"\/fotos\/obras\/13\/c314d7e03c29409cee9475e2dcf72362.jpg\" alt=\"Foto da obra\" class=\"imgcentraliza\" \/>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Quadra poliesportiva sem cobertura, na Rua Turmalina, Bairro Planalto<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construções de quadras esportivas (sem cobertura)<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Planalto<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Turmalina, <\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"13\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":5,"situacao":"Em Andamento","bairro":"Planalto","logradouro_completo":"Turmalina, ","logradouro":"Turmalina","dt_inicio":1626922800,"dt_inicio_string":"22\/07\/2021","dt_fim":1657594800,"dt_fim_string":"12\/07\/2022","valor":"209.147,06","valor_pago":null,"titulo":"Quadra poliesportiva sem cobertura, na Rua Turmalina, Bairro Planalto","codigo":13,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1272","nome":"Tomada de Preço - TP 001.2021 Constr. Quadra Poliesportiva Turmalina","numero":1,"ano":2021},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[{"arquivo":"\/fotos\/obras\/13\/c314d7e03c29409cee9475e2dcf72362.jpg","legenda":"Poli Planalto 4"},{"arquivo":"\/fotos\/obras\/13\/bfb7a4508451dfa0b34e1e2b636d6801.jpg","legenda":"Poli Planalto 2"},{"arquivo":"\/fotos\/obras\/13\/58f085f394641b730aad47504de9f930.jpg","legenda":"Poli Planalto 3"},{"arquivo":"\/fotos\/obras\/13\/e00d23f949c32aba3ff456582b783e2e.jpg","legenda":"Poli Planalto 1"}],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"Cynthia Andrade Gomes","descricao":"","fonte_recurso":"Convênio Federal, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.802269515254464","longitude":"-42.23955098155233","icone":"angle-double-left","cor_fundo_circulo":"#000000","cor_marcador":"#000000","cor_icone":"#ffffff","nome_categoria":"Pavimentações de vias públicas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Recapeamento asfáltico em PMF, na Rua Alagoas e outras<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentações de vias públicas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_projeto\">Em Projeto<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Planalto<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"14\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":6,"situacao":"Em Projeto","bairro":"Planalto","logradouro_completo":"","logradouro":"nao_informado","dt_inicio":0,"dt_inicio_string":null,"dt_fim":0,"dt_fim_string":null,"valor":"739.584,07","valor_pago":null,"titulo":"Recapeamento asfáltico em PMF, na Rua Alagoas e outras","codigo":14,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1773","nome":"Chamamento Público - C.P. 003.2022 - (RECAPEAMENTO ASFÁLTICO EM PMF)","numero":3,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"","descricao":"","fonte_recurso":"Convênio Estadual, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.805099470070175","longitude":"-42.22963797020245","icone":"angle-double-left","cor_fundo_circulo":"#000000","cor_marcador":"#000000","cor_icone":"#ffffff","nome_categoria":"Pavimentações de vias públicas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Recapeamento asfáltico em PMF, em ruas e avenidas diversas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentações de vias públicas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_projeto\">Em Projeto<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Vila Formosa<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"15\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":6,"situacao":"Em Projeto","bairro":"Vila Formosa","logradouro_completo":"","logradouro":"nao_informado","dt_inicio":0,"dt_inicio_string":null,"dt_fim":0,"dt_fim_string":null,"valor":"3.655.968,01","valor_pago":null,"titulo":"Recapeamento asfáltico em PMF, em ruas e avenidas diversas","codigo":15,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1772","nome":"Chamamento Público - C.P. 002.2022 - ( RECAPEAMENTO ASFÁLTICO PMF)","numero":2,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"","descricao":"","fonte_recurso":"Próprio, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.805407477580784","longitude":"-42.24872071424028","icone":"recycle","cor_fundo_circulo":"#51e63d","cor_marcador":"#51e63d","cor_icone":"#ffffff","nome_categoria":"Construção de trincheira","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construção de aterro sanitário de pequeno porte, em Taiobeiras<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construção de trincheira<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Zona Rural<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">LMG 626 (Taiobeiras\/Rio Pardo de Minas), KM<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"16\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":10,"situacao":"Em Andamento","bairro":"Zona Rural","logradouro_completo":"LMG 626 (Taiobeiras\/Rio Pardo de Minas), KM","logradouro":"LMG 626 (Taiobeiras\/Rio Pardo de Minas)","dt_inicio":1670986800,"dt_inicio_string":"14\/12\/2022","dt_fim":1684119600,"dt_fim_string":"15\/05\/2023","valor":"224.711,72","valor_pago":null,"titulo":"Construção de aterro sanitário de pequeno porte, em Taiobeiras","codigo":16,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1261","nome":"Tomada de Preço - TP 012.2021 - Obra de Aterro Sanitário","numero":12,"ano":2021},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"","descricao":"","fonte_recurso":"Próprio, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.817496708133522","longitude":"-42.22847861537064","icone":"plus-circle","cor_fundo_circulo":"#1870cd","cor_marcador":"#1870cd","cor_icone":"#ffffff","nome_categoria":"Construção de unidades básicas de saúde (UBSs)","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construção de UBS T2T, Rua Bonfim, em Taiobeiras<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construção de unidades básicas de saúde (UBSs)<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Centro<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Bonfim, 136<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"17\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":11,"situacao":"Em Andamento","bairro":"Centro","logradouro_completo":"Bonfim, 136","logradouro":"Bonfim","dt_inicio":1650250800,"dt_inicio_string":"18\/04\/2022","dt_fim":1674010800,"dt_fim_string":"18\/01\/2023","valor":"895.027,83","valor_pago":"215.314,86","titulo":"Construção de UBS T2T, Rua Bonfim, em Taiobeiras","codigo":17,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1327","nome":"Concorrência Pública - C.P 006.2021 - (OBRA DE UBS TIPO T2T)","numero":0,"ano":2021},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"Rogério Vieira Fernandes júnior","fiscal":"Cynthia Andrade Gomes","descricao":"","fonte_recurso":"Convênio Estadual, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.812949621636132","longitude":"-42.23069429397584","icone":"angle-double-left","cor_fundo_circulo":"#9b3636","cor_marcador":"#9b3636","cor_icone":"#ffffff","nome_categoria":"Reformas diversas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Prédio do Conselho Tutelar dos Direitos da Criança e do Adolescente<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Reformas diversas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_projeto\">Em Projeto<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Centro<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Rio Pardo, 621<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"18\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":12,"situacao":"Em Projeto","bairro":"Centro","logradouro_completo":"Rio Pardo, 621","logradouro":"Rio Pardo","dt_inicio":1674442800,"dt_inicio_string":"23\/01\/2023","dt_fim":1687489200,"dt_fim_string":"23\/06\/2023","valor":"79.810,12","valor_pago":null,"titulo":"Prédio do Conselho Tutelar dos Direitos da Criança e do Adolescente","codigo":18,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1997","nome":"Tomada de Preço - Tomada de Preço 027-2022 - OBRA DE REFORMA DO CONSELHO TUTELAR","numero":27,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"33":{"nome":"Secretaria Municipal de Assistência Social - SEAS","link":"\/portal\/secretarias\/33\/secretaria-municipal-de-assistencia-social---seas","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"},"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"Kaio Vinicius Soares de Sá","fiscal":"Arthur Herbert Pereira Soares","descricao":"","fonte_recurso":"Transferências especiais, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.82783457826833","longitude":"-42.22726106643677","icone":"angle-double-left","cor_fundo_circulo":"#d8baba","cor_marcador":"#d8baba","cor_icone":"#ffffff","nome_categoria":"Construção de ponte","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Ponte Mista na Comunidade Riinho<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construção de ponte<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_projeto\">Em Projeto<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Zona Rural<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Comunidade Riinho<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"19\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":13,"situacao":"Em Projeto","bairro":"Zona Rural","logradouro_completo":"Comunidade Riinho","logradouro":"Comunidade Riinho","dt_inicio":1682478000,"dt_inicio_string":"26\/04\/2023","dt_fim":1687921200,"dt_fim_string":"28\/06\/2023","valor":"218.252,76","valor_pago":null,"titulo":"Ponte Mista na Comunidade Riinho","codigo":19,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1971","nome":"Tomada de Preço - Tomada de Preço 026-2022 - CONSTRUÇÃO DA PONTE MISTA NA COMUNIDADE RIINHO","numero":26,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"GERALDO SARMENTO DE SENA JUNIOR","descricao":"","fonte_recurso":"Convênio Federal, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.804608612291354","longitude":"-42.23702430725098","icone":"angle-double-left","cor_fundo_circulo":"#9b3636","cor_marcador":"#9b3636","cor_icone":"#ffffff","nome_categoria":"Reformas diversas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Obra de reforma do CRAS Planalto<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Reformas diversas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_projeto\">Em Projeto<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Planalto<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Paraíba, 140<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"22\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":12,"situacao":"Em Projeto","bairro":"Planalto","logradouro_completo":"Paraíba, 140","logradouro":"Paraíba","dt_inicio":0,"dt_inicio_string":null,"dt_fim":0,"dt_fim_string":null,"valor":null,"valor_pago":null,"titulo":"Obra de reforma do CRAS Planalto","codigo":22,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1998","nome":"Tomada de Preço - Tomada de Preço 028-2022 - OBRA DE REFORMA DO CRAS PLANALTO","numero":28,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"","descricao":"","fonte_recurso":"","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.834072553666598","longitude":"-42.17797279357911","icone":"angle-double-left","cor_fundo_circulo":"#000000","cor_marcador":"#000000","cor_icone":"#ffffff","nome_categoria":"Pavimentações de vias públicas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentação em PMF, na Lagoa Dourada<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentações de vias públicas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Zona Rural<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">LMG 626, Km 1,2<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"23\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":6,"situacao":"Em Andamento","bairro":"Zona Rural","logradouro_completo":"LMG 626, Km 1,2","logradouro":"LMG 626","dt_inicio":0,"dt_inicio_string":null,"dt_fim":0,"dt_fim_string":null,"valor":null,"valor_pago":null,"titulo":"Pavimentação em PMF, na Lagoa Dourada","codigo":23,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1951","nome":"Tomada de Preço - Tomada de Preço 022-2022 - OBRA DE PAVIMENTAÇÃO EM PMF - LAGOA DOURADA","numero":22,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"","descricao":"","fonte_recurso":"Convênio Federal, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.798272299464461","longitude":"-42.23535060882569","icone":"angle-double-left","cor_fundo_circulo":"#000000","cor_marcador":"#000000","cor_icone":"#ffffff","nome_categoria":"Pavimentações de vias públicas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentação asfáltica em PMF <\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentações de vias públicas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Planalto<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">, s\/n<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"24\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":6,"situacao":"Em Andamento","bairro":"Planalto","logradouro_completo":", s\/n","logradouro":"nao_informado","dt_inicio":1665111600,"dt_inicio_string":"07\/10\/2022","dt_fim":1678158000,"dt_fim_string":"07\/03\/2023","valor":"365.706,00","valor_pago":null,"titulo":"Pavimentação asfáltica em PMF ","codigo":24,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1953","nome":"Tomada de Preço - TP 023-2022 - OBRA DE PAVIMENTAÇÃO ASFALTICA - RUAS AIMORES E OUTRAS","numero":23,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"Arthur Herbert Pereira Soares","descricao":"","fonte_recurso":"Convênio Estadual, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.848856614962308","longitude":"-42.01015233993531","icone":"angle-double-left","cor_fundo_circulo":"#000000","cor_marcador":"#000000","cor_icone":"#ffffff","nome_categoria":"Pavimentações de vias públicas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentação em bloquete - Ruas Dom Pedro I e Tancredo Neves<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentações de vias públicas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Distrito de Mirandópolis<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"25\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":6,"situacao":"Em Andamento","bairro":"Distrito de Mirandópolis","logradouro_completo":"","logradouro":"nao_informado","dt_inicio":1657508400,"dt_inicio_string":"11\/07\/2022","dt_fim":1678503600,"dt_fim_string":"11\/03\/2023","valor":"427.108,64","valor_pago":null,"titulo":"Pavimentação em bloquete - Ruas Dom Pedro I e Tancredo Neves","codigo":25,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1824","nome":"Tomada de Preço - TP 015.2022 - (OBRA DE PAVIMENTAÇÃO DE BLOCO MIRANDÓPOLIS)","numero":15,"ano":1969},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"Geraldo Sarmento de Sena Junior ","descricao":"","fonte_recurso":"Próprio, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.851429426449187","longitude":"-42.00983047485352","icone":"angle-double-left","cor_fundo_circulo":"#36ce87","cor_marcador":"#36ce87","cor_icone":"#ffffff","nome_categoria":"Construções de praças e calçadas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Revitalização da Praça Santo Menezes<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Construções de praças e calçadas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Distrito de Mirandópolis<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Santo Menezes <\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"26\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":7,"situacao":"Em Andamento","bairro":"Distrito de Mirandópolis","logradouro_completo":"Santo Menezes ","logradouro":"Santo Menezes ","dt_inicio":1663210800,"dt_inicio_string":"15\/09\/2022","dt_fim":1684119600,"dt_fim_string":"15\/05\/2023","valor":"219.563,00","valor_pago":null,"titulo":"Revitalização da Praça Santo Menezes","codigo":26,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1940","nome":"Tomada de Preço - Tomada de Preço 020-2022 - OBRA DE REVITALIZAÇÃO DA PRAÇA SANTO MENEZES - MIRANDÓPOLIS","numero":20,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"Geraldo Sarmento de Sena Júnior","descricao":"","fonte_recurso":"Convênio Estadual, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.807333930386044","longitude":"-42.22088813781739","icone":"angle-double-left","cor_fundo_circulo":"#9b3636","cor_marcador":"#9b3636","cor_icone":"#ffffff","nome_categoria":"Reformas diversas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Ampliação e reforma da UBS Dona Nininha<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Reformas diversas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Sagrada Família<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Guaicurus, 1625<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"27\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":12,"situacao":"Em Andamento","bairro":"Sagrada Família","logradouro_completo":"Guaicurus, 1625","logradouro":"Guaicurus","dt_inicio":1663210800,"dt_inicio_string":"15\/09\/2022","dt_fim":1681527600,"dt_fim_string":"15\/04\/2023","valor":"160.595,00","valor_pago":null,"titulo":"Ampliação e reforma da UBS Dona Nininha","codigo":27,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1939","nome":"Tomada de Preço - Tomada de Preço 019-2022 - OBRA DE AMPLIAÇÃO E REFORMA DA UAPS DONA NININHA","numero":19,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"Cynthia Andrade Gomes","descricao":"","fonte_recurso":"","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.83372612996826","longitude":"-42.1794319152832","icone":"angle-double-left","cor_fundo_circulo":"#000000","cor_marcador":"#000000","cor_icone":"#ffffff","nome_categoria":"Pavimentações de vias públicas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentação em PMF, na Lagoa Dourada<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentações de vias públicas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_andamento\">Em Andamento<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Zona Rural<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Logradouro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Povoado de Lagoa Dourada, LMG 626, K 1,2<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"28\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":6,"situacao":"Em Andamento","bairro":"Zona Rural","logradouro_completo":"Povoado de Lagoa Dourada, LMG 626, K 1,2","logradouro":"Povoado de Lagoa Dourada","dt_inicio":1665111600,"dt_inicio_string":"07\/10\/2022","dt_fim":1680836400,"dt_fim_string":"07\/04\/2023","valor":"1.487.828,70","valor_pago":null,"titulo":"Pavimentação em PMF, na Lagoa Dourada","codigo":28,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1951","nome":"Tomada de Preço - Tomada de Preço 022-2022 - OBRA DE PAVIMENTAÇÃO EM PMF - LAGOA DOURADA","numero":22,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"","fiscal":"Geraldo Sarmento de Sena Júnior","descricao":"","fonte_recurso":"Convênio Federal, ","motivo_paralisacao":""},{"seguir_acao":"seguir","seguir_class":"itn_btn_login disabled","seguir_txt":"Seguir","seguir_title":"Necessário estar logado para utilizar esta função.","latitude":"-15.817597094734548","longitude":"-42.221016883850105","icone":"angle-double-left","cor_fundo_circulo":"#000000","cor_marcador":"#000000","cor_icone":"#ffffff","nome_categoria":"Pavimentações de vias públicas","conteudo_popup":"\r\n <div class=\"sw_lista_detalhes obr_popup_leaflet\">\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Título<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentação em blocos sextavados de concreto<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Categoria<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Pavimentações de vias públicas<\/div>\r\n <\/div>\r\n\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Situação<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\"><span class=\"obr_situacao obr_situacao_em_projeto\">Em Projeto<\/span><\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes\">\r\n <div class=\"sw_nome_detalhe sw_lato_bold\">Bairro<\/div>\r\n <div class=\"sw_descricao_detalhe sw_lato\">Sagrada Família<\/div>\r\n <\/div>\r\n <div class=\"sw_linha_lista_detalhes obr_cont_btn_ver_obra sw_lato\">\r\n <div class=\"obr_link_obra obr_link_ver_obra m_detalhes_click obr_link_ver_obra\" data-codigo=\"29\"><span class=\"obr_txt_link_obra\">ver obra<\/span><span class=\"swfa fas fa-search\"><\/span><\/div>\r\n <div class=\"obr_link_obra obr_link_ver_fotos\"><span class=\"obr_txt_link_obra\">ver fotos<\/span><span class=\"swfa fas fa-camera\"><\/span><\/div>\r\n <\/div>\r\n <\/div>","categoria":6,"situacao":"Em Projeto","bairro":"Sagrada Família","logradouro_completo":"","logradouro":"nao_informado","dt_inicio":1665111600,"dt_inicio_string":"07\/10\/2022","dt_fim":1680836400,"dt_fim_string":"07\/04\/2023","valor":"960.925,52","valor_pago":null,"titulo":"Pavimentação em blocos sextavados de concreto","codigo":29,"acompanhamentos":[],"edital":{"link":"\/portal\/editais\/0\/1\/1955","nome":"Tomada de Preço - TP 025-2022 - OBRA DE PAVIMENTAÇÃO EM BLOCOS - BAIRROS SAGRADA FAMILIA E SANTOS CRUZEIRO","numero":25,"ano":2022},"contrato":false,"ordem_vinculos":["secretarias"],"fotos":[],"secretarias":{"29":{"nome":"Secretaria Municipal de Obras, Serviços, Regulação Urbana e Saneamento - SOSU","link":"\/portal\/secretarias\/29\/secretaria-municipal-de-obras-servicos-regulacao-urbana-e-saneamento---sosu","abertura":"_target","imagem":"\/fotos\/1b3f5a985ab5c762e73aed0bd89eceef.jpg"}},"videos":[],"arquivos":[],"empresa":"Arthur Herbert Pereira Soares","fiscal":"","descricao":"","fonte_recurso":"Convênio Federal, ","motivo_paralisacao":""}];
// CONSTANTES
leafLetMapCenter = cidadeLatLng;
// VARIAVEIS
var elementoMapa;
// VALIDANDO ELEMENTO PARA O MAPA
elementoMapa = document.getElementById(idElementoMapa);
if (!elementoMapa)
{
// ERRO
return false;
}
elementoMapa = $(elementoMapa);
// VERIFICANDO O NAVEGADOR
if (L.Browser.ielt9)
{
elementoMapa.css({
"background-color": "#fff",
"text-align": "center",
"margin-bottom": "15px"
});
elementoMapa.append('<span class="sw_lato_bold">Este navegador não é compatível com o mapa.</span>');
return false;
}
// TILE PROVIDER CONFIGURACAO OpenStreetMap
const tileProvider = {
// URLS COM AS IMAGENS DOS TILES
urls : [
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
'https://{s}.tile.osm.org/{z}/{x}/{y}.png',
'https://{s}.tile.openstreetmap.de/{z}/{x}/{y}.png',
'https://{s}.tile.openstreetmap.com/{z}/{x}/{y}.png'
],
// FUNCAO QUE RETORNA A PROXIMA URL DISPONIVEL EM 'urls'
getUrl: function(){
var activeUrl = ""+this.urls.shift();
this.urls = this.urls.concat(activeUrl);
return activeUrl;
},
// ATRIBUICAO DE DIREITOS
// OBRIGATORIO
attribution : 'Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, <a href="https://osm.org/copyright">ODbL 1.0.</a>'
};
// CRIANDO MAPA
leafLetMap = L.map(elementoMapa.get(0) ,{
preferCanvas: true, // USA CANVAS > DESEMPENHO++
center: cidadeLatLng, // CENTRO DO MAPA
zoom: zoomMin, // ZOOM ATUAL
minZoom: zoomMin, // ZOOM MIN
maxZoom: zoomMax, // ZOOM MAX
doubleClickZoom: false // DESATIVA ZOOM DO CLICK DUPLO
});
// TRAVANDO O MAPA
leafLetMap.setMaxBounds(leafLetMap.getBounds());
// OBJETO TileLayer PARA O MAPA
const tiles = L.tileLayer(tileProvider.getUrl(), {
attribution: tileProvider.attribution,
bounds: leafLetMap.getBounds(),
tileSize: 256,
minNativeZoom: zoomMin,
maxNativeZoom: zoomMax,
updateWhenZooming: false,
updateWhenIdle: false,
updateInterval: 1000,
detectRetina: true,
keepBuffer: 15
});
// TRATANDO ERRO AO REQUISITAR UM TILE
// CASO ERRO >> CHAMA FUNCAO TileProvider.getUrl()
tiles.on("tileerror", function(){
tiles.setUrl(tileProvider.getUrl());
}, tiles);
tiles.addTo(leafLetMap);
// PERCORRENDO PONTOS
// for(var indicePonto = 0; indicePonto < pontos.length; indicePonto++){
// var ponto = pontos[indicePonto];
var indicePonto = 0;
pontos.forEach(function(ponto) {
indicePonto++;
// CRIANDO MARCADOR
var markerLeaflet = L.marker(
[ponto.latitude, ponto.longitude],
{
icon: L.FontAwesomeMarker.icon({
icon: ponto.icone,
markerColor: ponto.cor_marcador,
iconColor: "#FFFFFF",
svgCircleColor: ponto.cor_marcador
// Forma antiga de mostrar as cores dos pontos (contraste de cor para fundo e ícone)
// iconColor: ponto.cor_icone,
// svgCircleColor: ponto.cor_fundo_circulo
})
}
);
// ADICIONANDO POPUP AO MARCADOR
var markerPopup = $(ponto.conteudo_popup);
var divVerFotosPopup = markerPopup.find(".obr_link_obra.obr_link_ver_fotos");
if (Object.values(ponto.fotos) && Object.values(ponto.fotos).length > 0)
{
divVerFotosPopup.css("display", "inline-block");
var fancyBoxSrc = [];
var fancyBoxOptions = {
buttons : [ 'slideShow', 'close' ],
loop : true,
arrows : true,
slideShow : { autoStart : false, speed : 3500 }
};
Object.values(ponto.fotos).forEach(function(foto, index, arr) {
var legenda = "";
if (foto.legenda && foto.legenda !== "null")
{
legenda = foto.legenda;
}
var src = { src: foto.arquivo, opts: { caption: legenda } };
fancyBoxSrc.push(src);
});
divVerFotosPopup.click(function(mouseEvent) {
$.fancybox.open(fancyBoxSrc, fancyBoxOptions);
});
} else {
divVerFotosPopup.hide();
}
markerLeaflet.bindPopup(markerPopup.get(0), {
autoPanPaddingTopLeft: L.point(0, 50),
autoPanPaddingBottomRight: L.point(0, 0)
});
markerLeaflet.on('mouseover', function(e) {
if (!$('.leaflet-popup:hover').length) {
this.openPopup();
}
});
// MARCADOR JS
var marcador = {
marker: markerLeaflet, // MARCADOR LEAFLET
/* DADOS */
seguir_acao: ponto.seguir_acao,
seguir_class: ponto.seguir_class,
seguir_txt: ponto.seguir_txt,
seguir_title: ponto.seguir_title,
categoria: ponto.categoria,
situacao: ponto.situacao,
bairro: ponto.bairro,
logradouro_completo: ponto.logradouro_completo,
logradouro: ponto.logradouro,
dt_inicio: ponto.dt_inicio,
dt_inicio_string: ponto.dt_inicio_string,
dt_fim: ponto.dt_fim,
dt_fim_string: ponto.dt_fim_string,
titulo: ponto.titulo,
valor: ponto.valor,
valor_pago: ponto.valor_pago,
edital: ponto.edital,
icone: ponto.icone,
contrato: ponto.contrato,
nome_categoria: ponto.nome_categoria,
cor_marcador: ponto.cor_marcador,
cor_icone: ponto.cor_icone,
cor_fundo_circulo: ponto.cor_fundo_circulo,
fotos: ponto.fotos,
secretarias: ponto.secretarias,
videos: ponto.videos,
arquivos: ponto.arquivos,
ordem_vinculos: ponto.ordem_vinculos,
acompanhamentos: ponto.acompanhamentos,
codigo: parseInt(ponto.codigo),
empresa: ponto.empresa,
fiscal: ponto.fiscal,
descricao: ponto.descricao,
fonte_recurso: ponto.fonte_recurso,
motivo_paralisacao: ponto.motivo_paralisacao
/* DADOS */
};
var latLong = [ponto.latitude, ponto.longitude];
if (!markersAgrupados.hasOwnProperty(latLong)){
markersAgrupados[latLong] = [];
}
markersAgrupados[latLong].push(marcador);
markers.push(marcador);
});
// }
for(const chave of Object.keys(markersAgrupados)){
if (markersAgrupados[chave].length === 1){
markersAgrupados[chave].pop().marker.addTo(leafLetMap);
} else {
var markerGroup = L.markerClusterGroup({
spiderLegPolylineOptions: {
color: "#000000"
// ,opacity: "1"
}
});
for(var indicePonto = 0; indicePonto < markersAgrupados[chave].length; indicePonto++){
var ponto = markersAgrupados[chave][indicePonto];
markerGroup.addLayer(ponto.marker)
}
leafLetMap.addLayer(markerGroup);
}
}
// GERA OS OPTIONS PARA O SELECT DO RELATORIO
if (renderizarRelatorio) {
geraOptionsRelatorio();
selectRelatorioFiltroAno.trigger("change");
}
// DEFINE ZOOM
leafLetMap.setZoom((zoomMin + 0.51));
// Revomendo marcadores do mapa conforme configuração de exibição
var obcObrasSituacaoExibir = $("#obcObrasSituacaoExibir").val();
var obcObrasSituacaoExibirAux = obcObrasSituacaoExibir.split(";");
markers.forEach(function(item) {
if (obcObrasSituacaoExibirAux.indexOf(item.situacao) < 0) {
item.marker.removeFrom(leafLetMap);
}
});
markersAgrupados = {};
return leafLetMap;
}
/* FUNCAO CRIA O MAPA */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* FUNCAO QUE EXIBE OS DADOS DA FILTRAGEM */
function exibirDados(pagina)
{
// PADROES
divResultados.hide();
divAreaListagem.hide();
spanQtdeResultado.html(0);
divVoltaPagina.hide();
divAvancaPagina.hide();
selectPagina.hide();
// REVOMENDO TODOS OS MARCADORES DO MAPA
markers.forEach(function(item){
item.marker.removeFrom(leafLetMap);
});
// SE HA DADOS PARA EXIBIR
if (dadosExibir)
{
// MOSTRANDO ALGUMAS DIVS
divAreaListagem.show();
divResultados.show();
var paginacao = paginar(dadosExibir, pagina);
dadosPaginacao = paginacao.dados;
// TRATANDO QTDE DE REGISTROS E QTDE DE PAGINAS
// APENAS PARA O FUNCIONAMENTO DOS BOTOES DE PAGINACAO
if (dadosExibir.length > 1 && paginacao.paginas > pagina)
{
if (pagina === 1)
{
divVoltaPagina.attr("data-pagina", 0);
divVoltaPagina.prop("disabled" , true)
divAvancaPagina.attr("data-pagina", 2);
divAvancaPagina.prop("disabled" , false);
} else {
divVoltaPagina.attr("data-pagina", (pagina - 1));
divVoltaPagina.prop("disabled" , false);
divAvancaPagina.attr("data-pagina", (pagina + 1));
divAvancaPagina.prop("disabled" , false);
}
} else {
divAvancaPagina.attr("data-pagina", 0);
divAvancaPagina.prop("disabled" , true);
divVoltaPagina.attr("data-pagina", (paginacao.paginas - 1));
divVoltaPagina.prop("disabled" , false);
}
selectPagina.find("option[value="+pagina+"]").prop("selected", true);
// QTDE DE RESULTADO
spanQtdeResultado.html(dadosExibir.length);
if (dadosExibir.length === 1)
{
spanObrasEncontradas.text("obra encontrada");
spanObrasEncontradas.show();
divListagemObras.text("Listando 1 de 1");
divVoltaPagina.hide();
divAvancaPagina.hide();
selectPagina.hide();
} else {
if (dadosExibir.length > 0)
{
spanObrasEncontradas.text("obras encontradas");
spanObrasEncontradas.show();
divListagemObras.text("");
divListagemObras.text("Listando "+dadosPaginacao.length+" de "+dadosExibir.length);
if (dadosExibir.length > qtdePorPagina)
{
divVoltaPagina.show();
divAvancaPagina.show();
selectPagina.show();
}
} else {
spanObrasEncontradas.text("Nenhuma obra encontrada");
// spanObrasEncontradas.hide();
divListagemObras.text("");
// divListagemObras.hide();
divVoltaPagina.hide();
divAvancaPagina.hide();
selectPagina.hide();
}
}
// REMOVENDO ELEMENTOS QUE NAO SAO MODELO
divAreaListagem.find(".obr_item_listagem.obr_item_listagem_modelo").remove();
// PERCORRENDO REGISTROS PAGINADOS
dadosPaginacao.forEach(function(item){
// CLONANDO MODELO
var cloneModelo = itemListaObraModelo.clone();
// DATA-ID
cloneModelo.attr("data-id", item.codigo);
/* PARA A CATEGORIA */
var divCategoria = cloneModelo.find(".obr_cont_categoria_obra");
var spansCategoria = divCategoria.find("span");
var spanCategoriaIcone = divCategoria.find("span").first();
var spanCategoriaNome = divCategoria.find("span").last();
// SETANDO ESTILOS
divCategoria.attr("style", "background:"+item.cor_marcador+" !important");
spanCategoriaIcone.addClass("fa-"+item.icone);
spanCategoriaIcone.attr("style", "background:"+item.cor_fundo_circulo+" !important; color:"+item.cor_icone+" !important; border-color:"+item.cor_marcador+" !important");
spanCategoriaNome.text(item.nome_categoria);
spanCategoriaNome.attr("style", "background:"+item.cor_marcador+" !important; "+"color:"+item.cor_icone+" !important;");
/* FIM PARA A CATEGORIA */
// TITULO DA OBRA
var divTituloObra = cloneModelo.find(".obr_titulo_obra");
divTituloObra.text(item.titulo);
/* PARA O CONTRATO */
var divContrato = cloneModelo.find(".obr_info_obra_contrato");
if (item.contrato) {
divContrato.find(".obr_descricao_info").html('<span>'+item.contrato.nome+'</span><a href="'+item.contrato.link+'" target="_blank"><span class="sw_link_acesso_facil sw_lato_medium">Ver Contrato ;<span class="swfa fas fa-search-plus"></span></span></a>');
} else {
divContrato.hide();
}
/* PARA O CONTRATO */
/* PARA O EDITAL */
var divEdital = cloneModelo.find(".obr_info_obra_edital");
if (item.edital) {
divEdital.find(".obr_descricao_info").html('<span>'+item.edital.nome+'</span><a href="'+item.edital.link+'" target="_blank"><span class="sw_link_acesso_facil sw_lato_medium">Ver Edital ;<span class="swfa fas fa-search-plus"></span></span></a>');
} else {
divEdital.hide();
}
/* PARA O EDITAL */
/* PARA A SITUACAO */
var divSituacao = cloneModelo.find(".obr_info_obra_situacao"); // obr_situacao obr_situacao_suspensa
var spanSituacao = divSituacao.find(".obr_situacao");
spanSituacao = $(spanSituacao);
spanSituacao.text(item.situacao);
if (item.situacao === "Suspensa") {
spanSituacao.addClass("obr_situacao_suspensa");
}
else if (item.situacao === "Concluído") {
spanSituacao.addClass("obr_situacao_concluida");
}
else if (item.situacao === "Em Andamento") {
spanSituacao.addClass("obr_situacao_em_andamento");
}
else if (item.situacao === "Em Projeto") {
spanSituacao.addClass("obr_situacao_em_projeto");
}
/* PARA A SITUACAO */
/* PARA AS DATAS */
var divDataInicio = cloneModelo.find(".obr_info_obra_dt_inicio");
if (item.dt_inicio > 0)
{
divDataInicio.find(".obr_descricao_info").text(item.dt_inicio_string);
} else {
divDataInicio.hide();
}
var divDataFim = cloneModelo.find(".obr_info_obra_dt_fim");
if (item.dt_fim > 0)
{
divDataFim.find(".obr_descricao_info").text(item.dt_fim_string);
} else {
divDataFim.hide();
}
/* PARA AS DATAS */
// PARA O VALOR DA OBRA
var divValor = cloneModelo.find(".obr_info_obra_valor");
if (item.valor && parseFloat(item.valor) > 0)
{
divValor.find(".obr_descricao_info").text("R$ "+item.valor);
} else {
divValor.hide();
}
/* PARA AS FOTOS */
var divVerFotos = cloneModelo.find(".obr_link_ver_fotos");
if (item.fotos.length <= 0)
{
divVerFotos.hide();
} else {
var fancyBoxSrc = [];
var fancyBoxOptions = {
buttons : [ 'slideShow', 'close' ],
loop : true,
arrows : true,
slideShow : { autoStart : false, speed : 3500 }
};
Object.values(item.fotos).forEach(function(foto){
var legenda = "";
if (foto.legenda && foto.legenda !== "null")
{
legenda = foto.legenda;
}
var src = { src: foto.arquivo, opts: { caption: legenda } };
fancyBoxSrc.push(src);
});
divVerFotos.click(function(){
$.fancybox.open(fancyBoxSrc, fancyBoxOptions);
});
divVerFotos.show();
}
/* PARA AS FOTOS */
// PARA O BOTAO DE VER DETALHES DA OBRA
var divVerObra = cloneModelo.find(".obr_link_ver_obra");
divVerObra.attr("data-codigo", item.codigo);
// ADICIONANDO MODELO NA LISTAGEM E EXIBINDO PONTO NO MAPA
cloneModelo.insertBefore(divVoltaPagina);
cloneModelo.show();
item.marker.addTo(leafLetMap);
});
} else {
spanObrasEncontradas.text("Nenhuma obra encontrada");
spanObrasEncontradas.show();
divResultados.show();
divAreaListagem.show();
divListagemObras.show();
}
}
/* FUNCAO QUE EXIBE OS DADOS DA FILTRAGEM */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* FUNCAO DA PAGINACAO >> RETORNA O ARRAY JA QUEBRADO E A QUANTIDADE DE PAGINAS */
function paginar(dados, pagina) {
var indexComeco = (pagina - 1) * qtdePorPagina;
var indexTermina = indexComeco + qtdePorPagina;
var dadosSlice = dados.slice(indexComeco, indexTermina);
var paginas = Math.ceil(dados.length / qtdePorPagina);
if (selectPagina.children().length !== paginas)
{
selectPagina.empty();
for(var indexPagina = 1; indexPagina <= paginas; indexPagina++)
{
var optionPagina = document.createElement("option");
optionPagina = $(optionPagina);
optionPagina.text(indexPagina);
optionPagina.val(indexPagina);
selectPagina.append(optionPagina);
}
}
return {dados: dadosSlice, paginas: paginas};
}
/* FUNCAO DA PAGINACAO >> RETORNA O ARRAY JA QUEBRADO E A QUANTIDADE DE PAGINAS */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* FUNCAO QUE GERA OS OPTIONS DO SELECT DO RELATORIO */
function geraOptionsRelatorio()
{
var anosOption = [];
for(var indexMarker = 0; indexMarker < markers.length; indexMarker++)
{
var item = markers[indexMarker];
if (typeof item.dt_inicio_string === "string" && item.dt_inicio_string !== "null" && item.dt_inicio_string !== "31/12/1969")
{
var dataInicio = item.dt_inicio_string;
dataInicio = dataInicio.split("/");
var ano = dataInicio[(dataInicio.length -1)];
ano = parseInt(ano);
if (anosOption.indexOf(ano) === -1)
{
anosOption.push(ano);
}
}
}
if (anosOption.length > 0)
{
var anoAgora = new Date().getUTCFullYear();
var selecionou = false;
anoAgora = parseInt(anoAgora);
anosOption.sort();
anosOption.reverse();
for(var anoIndex = 0; anoIndex < anosOption.length; anoIndex++)
{
var ano = anosOption[anoIndex];
var optionAno = document.createElement("option");
optionAno = $(optionAno);
optionAno.val(ano);
optionAno.text(ano);
if (selecionou === false && ano === anoAgora)
{
optionAno.prop("selected", true);
selecionou = true;
}
selectRelatorioFiltroAno.append(optionAno);
}
if (selecionou === false)
{
selectRelatorioFiltroAno.find("option").first().prop("selected", true);
}
} else {
selectRelatorioFiltroAno.prop("disabled", true);
}
}
/* FUNCAO QUE GERA OS OPTIONS DO SELECT DO RELATORIO */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* FUNCAO LIMPA STRING */
function limpaStringJS(string) {
if (string === "" || typeof string === typeof undefined) {
return "";
}
string = string.replace(/[áàãâä]/gi,"a"); // REMOVE ACENTOS
string = string.replace(/[éèê]/gi,"e"); // REMOVE ACENTOS
string = string.replace(/[íìïî]/gi,"i"); // REMOVE ACENTOS
string = string.replace(/[óòöôõ]/gi,"o"); // REMOVE ACENTOS
string = string.replace(/[úùüû]/gi, "u"); // REMOVE ACENTOS
string = string.replace(/[ç]/gi, "c"); // REMOVE CEDILHA
string = string.replace(/[ñ]/gi, "n"); // REMOVE ACENTOS
string = string.replace(/[^a-zA-Z0-9]/g," "); // REMOVE TUDO QUE NAO E LETRA OU NUMERO
return string;
}
/* FUNCAO LIMPA STRING */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* EVENTOS */
$(document).ready(function() {
/* SUBMIT DO FORMULARIO DE FILTRAGEM */
formFiltrar.submit(function(formEvent) {
// ESCONDE BOTAO DE DETALHES E NAO DEIXA O FORM COMPLETAR O SUBMIT
botaoMenuDetalhes.prop("disabled", true);
formEvent.preventDefault();
leafLetMap.setView(leafLetMapCenter, zoomMin);
leafLetMap.closePopup();
/* VARIAVEIS */
var inputsBairroChecked = $(".obr_filtro_bairro:checked");
var inputsLogradouroChecked = $(".obr_filtro_logradouro:checked");
var inputsCategoriaChecked = $(".obr_filtro_categoria:checked");
var inputsSituacaoChecked = $(".obr_filtro_situacao:checked");
/* VARIAVEIS */
// ARRAY PARA OS REGISTROS ENCONTRADOS
var encontrados = [];
// PERCORRENDO MARCADORES(REGISTROS)
markers.forEach(function(marker){
// REVOMENDO TODOS OS PONTOS DO MAPA
marker.marker.removeFrom(leafLetMap);
// ARRAY PARA AS FUNCOES DE FILTRAGEM
var retornoFiltragem = [];
/* BUSCA POR PALAVRA-CHAVE */
if (inputPalavraChave.val().trim()) {
var palavraChave = limpaStringJS(inputPalavraChave.val());
palavraChave = palavraChave.toLowerCase();
var tituloMarcador = limpaStringJS(marker.titulo);
tituloMarcador = tituloMarcador.toLowerCase();
retornoFiltragem.push((tituloMarcador.indexOf(palavraChave) > -1));
}
/* FIM PALAVRA-CHAVE */
/* BUSCA POR PERIODO */
// OBS DIVIDIMOS O RETORNO DO datepicker POR 1000 POIS ELE RETORNAR DIFERENTE
if (inputPeriodoInicial.val().trim() && inputPeriodoFinal.val().trim()) { // INICIAL E FINAL SELECIONADO
var dataInicial = (inputPeriodoInicial.datepicker("getDate").getTime() / 1000);
var dataFinal = (inputPeriodoFinal.datepicker("getDate").getTime() / 1000);
var dataMarcador = new Date(marker.dt_inicio).getTime();
if (dataInicial && dataFinal) {
retornoFiltragem.push((dataMarcador >= dataInicial && dataMarcador <= dataFinal));
}
} else {
if (inputPeriodoInicial.val().trim()) { // INICIAL
var dataMarcador = new Date(marker.dt_inicio).getTime();
var dataInicial = (inputPeriodoInicial.datepicker("getDate").getTime() / 1000);
retornoFiltragem.push((dataMarcador >= dataInicial));
}
else if (inputPeriodoFinal.val().trim()) { // FINAL
var dataMarcador = new Date(marker.dt_inicio).getTime();
var dataFinal = (inputPeriodoFinal.datepicker("getDate").getTime() / 1000);
retornoFiltragem.push((dataMarcador <= dataFinal));
}
}
/* PERIODO */
/* BUSCA POR BAIRROS */
if (inputsBairroChecked.length > 0) {
var arrayBairros = [];
inputsBairroChecked.each(function(indice, bairro){
arrayBairros.push($(bairro).data("bairro"));
});
retornoFiltragem.push((arrayBairros.indexOf(marker.bairro) >= 0));
}
/* BUSCA POR BAIRROS */
/* BUSCA POR LOGRADOUROS */
if (inputsLogradouroChecked.length > 0) {
var arrayLogradouros = [];
inputsLogradouroChecked.each(function(indice, logradouro){
arrayLogradouros.push($(logradouro).data("logradouro"));
});
retornoFiltragem.push((arrayLogradouros.indexOf(marker.logradouro) >= 0));
}
/* BUSCA POR LOGRADOUROS */
/* BUSCA POR CATEGORIAS */
if (inputsCategoriaChecked.length > 0) {
var arrayCategorias = [];
inputsCategoriaChecked.each(function(indice, categoria){
arrayCategorias.push($(categoria).data("categoria"));
});
retornoFiltragem.push((arrayCategorias.indexOf(marker.categoria) >= 0));
}
/* BUSCA POR CATEGORIAS */
/* BUSCA POR SITUACOES */
if (inputsSituacaoChecked.length > 0) {
var arraySituacoes = [];
inputsSituacaoChecked.each(function(indice, situacao){
arraySituacoes.push($(situacao).data("situacao"));
});
retornoFiltragem.push((arraySituacoes.indexOf(marker.situacao) >= 0));
}
/* BUSCA POR SITUACOES */
if (retornoFiltragem.length === 0)
{
encontrados.push(marker);
}
else
{
var mostrar = true;
for(var indexRetorno = 0; indexRetorno < retornoFiltragem.length; indexRetorno++)
{
var retorno = retornoFiltragem[indexRetorno];
if (retorno === false)
{
mostrar = false;
break;
}
}
if (mostrar)
{
encontrados.push(marker);
}
}
});
// SE ARRAY TEM REGISTROS A EXIBIR
if (encontrados.length > 0) {
dadosExibir = encontrados; // ATRIBUICAO A VARIAVEL GLOBAL dadosExibir
exibirDados(1); // FUNCAO QUE EXIBE OS REGISTROS
} else {
dadosExibir = false;
exibirDados(0);
}
});
/* SUBMIT DO FORMULARIO DE FILTRAGEM */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* BOTAO AVANCA E VOLTA */
$([divAvancaPagina, divVoltaPagina]).each(function(){
$(this).click(function(event){
leafLetMap.setView(leafLetMapCenter, zoomMin);
botaoMenuDetalhes.prop("disabled", true);
var botao = $(this);
var pagina = botao.attr("data-pagina");
pagina = parseInt(pagina);
if (pagina > 0)
{
exibirDados(pagina);
}
});
});
/* BOTAO AVANCA E VOLTA */
/* SELECT CHANGE */
$(selectPagina).change(function(){
leafLetMap.setView(leafLetMapCenter, zoomMin);
botaoMenuDetalhes.prop("disabled", true);
var option = $(this).find(":selected");
var pagina = option.val();
pagina = parseInt(pagina);
if (pagina > 0)
{
exibirDados(pagina);
}
});
/* SELECT CHANGE */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* BOTAO VER MAPA */
botaoVerMapa.click(function(){
// leafLetMap.setView(leafLetMapCenter, zoomMin);
// RENDERIZA MAPA
$(".obr_area_mapa").html('<div id="leaflet_map" class="obr_mapa"></div>');
leafLetMap = Mapa("leaflet_map", false);
leafLetMap.closePopup();
});
/* BOTAO VER MAPA */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* BOTOES DO MENU */
divMenuObras.find(".obr_btn_menu").click(function() {
var botao = $(this);
if (!botao.hasClass("ativo"))
{
// SETANDO CLASSE NOS BOTÕES
divMenuObras.find(".obr_btn_menu").removeClass("ativo");
botao.addClass("ativo");
// FORÇAR MENU "FILTRO" ATIVADO QUANDO VIER DO BOTÃO "VOLTAR AO FILTRO" DO RELATÓRIO
if(botao.attr('data-ativar-filtro') == "S") {
$(".obr_btn_filtro").addClass('ativo');
}
// ANALISANDO SE HÁ MENU A EXIBIR
var data_menu = botao.data("menu");
if (data_menu == "obr_content_mapa") {
// MOSTRANDO MENU SELECIONADO
divMenuObras.find(".obr_btn_menu").addClass("disable");
setTimeout(function() {
divMenuObras.find(".obr_content_menu").hide();
divMenuObras.find(".obr_btn_menu").removeClass("disable");
}, 400);
// ABRINDO CONTEÚDO DO MENU
divMenuObras.find(".obr_conteudo_menu").removeClass("show");
}
else {
var menu = $("#" + data_menu);
if (menu.length)
{
// MOSTRANDO MENU SELECIONADO
divMenuObras.find(".obr_content_menu").hide();
menu.show();
// ABRINDO CONTEÚDO DO MENU
divMenuObras.find(".obr_conteudo_menu").addClass("show");
}
}
}
});
// SETANDO CLICK NO FILTRO EM MEDIAS NÃO MOBILE
if (window.innerWidth > 1000) {
divMenuObras.find(".obr_btn_filtro").trigger("click");
}
/* BOTOES DO MENU */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* BOTAO FECHAR MENU */
divMenuObras.find(".obg_btn_fechar").click(function() {
divMenuObras.find(".obr_btn_mapa").trigger("click");
});
/* BOTAO FECHAR MENU */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* FECHAR FORMULARIO */
function fecharFiltro() {
filtrosFormulario.addClass("hide");
filtrosFormulario.find(".obr_cont_formulario").slideUp(400);
// FECHANDO CHECKLIST
filtrosFormulario.find(".obr_checklist").addClass("hide");
}
/* FECHAR FORMULARIO */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ABRIR FORMULARIO */
function abrirFiltro() {
filtrosFormulario.removeClass("hide");
filtrosFormulario.find(".obr_cont_formulario").slideDown(200);
}
/* ABRIR FORMULARIO */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ABRE E FECHA FILTROS */
filtrosFormulario.find("#obr_btn_toggle_filtro").click(function() {
if (filtrosFormulario.hasClass("hide")) { abrirFiltro(); }
else { fecharFiltro(); }
});
/* ABRE E FECHA FILTROS */
/* CHECKLIST */
var checklist = filtrosFormulario.find(".obr_checklist");
divMenuObras.on("click", ".obr_titulo_checklist, obr_btn_toggle_checklist", function() {
var this_checklist = $(this).closest(".obr_checklist");
if (this_checklist.hasClass("hide")) {
checklist.addClass("hide");
this_checklist.removeClass("hide");
}
else {
checklist.addClass("hide");
}
});
// CHECKAR TODOS
checklist.find(".obr_checklist_todos").change(function() {
checklist_todos = $(this);
this_checklist = checklist_todos.closest(".obr_checklist");
// RESETANDO CHECKLIST
if (checklist_todos.prop("checked") == true) {
checklist_todos.siblings("label").attr("title", "Desmarcar todos")
this_checklist.find("input[type='checkbox']").prop("checked", true);
}
else {
checklist_todos.siblings("label").attr("title", "Marcar todos")
this_checklist.find("input[type='checkbox']").prop("checked", false);
}
});
// ANALISANDO CHECAGEM INDIVIDUAL
checklist.find(".obr_area_lista_checklist input[type='checkbox']").change(function() {
var this_checkbox = $(this);
var this_checklist = this_checkbox.closest(".obr_checklist");
// ANALISANDO SE TODOS ESTÃO CHECADOS
if (this_checkbox.closest(".obr_area_lista_checklist").find("input[type='checkbox']:checked").length == 0) {
this_checklist.find(".obr_checklist_todos").prop("checked", false);
this_checklist.find(".obr_checklist_todos").siblings("label").attr("title", "Marcar todos");
}
else {
this_checklist.find(".obr_checklist_todos").prop("checked", true);
this_checklist.find(".obr_checklist_todos").siblings("label").attr("title", "Desmarcar todos");
}
});
// BUSCA NA CHECKLIST
checklist.find(".obr_busca_checklist").on("keypress keyup keydown change", function() {
var this_checklist = $(this)
var valor = this_checklist.val();
if (valor != "") {
this_checklist.closest(".obr_checklist").find(".obr_item_checklist").hide();
this_checklist.closest(".obr_checklist").find(".obr_item_checklist:instarcontains("+valor+")").show();
}
else {
this_checklist.closest(".obr_checklist").find(".obr_item_checklist").show();
}
});
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* SUBMISSÃO DO FORMULÁRIO DE FILTRO */
divMenuObras.find("#obr_form_filtro").submit(function(e) {
e.preventDefault();
var filtrosFormulario = $(this)
// EXIBINDO BOTÃO DE RESET
filtrosFormulario.find(".obr_btn_limpar").fadeIn(200);
setTimeout(function() {
// RECOLHENDO FILTRO
fecharFiltro();
}, 300);
});
/* SUBMISSÃO DO FORMULÁRIO DE FILTRO */
/* BOTAO RESET DO FORMULARIO */
divMenuObras.find(".obr_btn_limpar").click(function() {
botaoMenuDetalhes.prop("disabled", true);
// RESETANDO CAMPOS
divMenuObras.find(".obr_checklist").addClass("hide");
setTimeout(function() {
divMenuObras.find(".obr_busca_checklist").val("").change();
}, 300);
// OCULTANDO BOTÃO
$(this).fadeOut(200);
});
/* BOTAO RESET DO FORMULARIO */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* VIDEOS DA OBRA */
var modal_video = divMenuObras.find(".obr_player_video_modal");
$body.on("click", ".obr_video_obra", function() {
var video = $(this);
// CAPTURANDO INFO DO VÍDEO
var elemento_video = video.find("input").val();
var data_video = video.find(".obr_data_video").text();
var nome_video = video.find(".obr_nome_video").text();
// SETANDO INFO NO IFRAME
modal_video.find(".obr_data_video").text(data_video)
modal_video.find(".obr_nome_video").text(nome_video)
setTimeout(function() {
modal_video.find(".obr_video").html(elemento_video)
}, 1000);
// ABRIR VÍDEO
modal_video.addClass("show");
$window.on("keyup click", fecharModalVideo);
});
// FECHAR VÍDEO
var fecharModalVideo = function(e) {
if ((e.keyCode === 27) || (e.target === modal_video.get(0) || e.target.id === "obr_btn_fechar_modal")) {
modal_video.removeClass("show");
setTimeout(function() {
modal_video.find(".obr_video").html("")
}, 400);
$window.off("keyup click", fecharModalVideo);
}
}
/* VIDEOS DA OBRA */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* SELECT DO RELATORIO */
selectRelatorioFiltroAno.change(function(mouseEvent){
divsRelatorioInfo.hide();
var optionSelecionada = $(this).find(":selected");
var anoSelecionado = parseInt(optionSelecionada.val());
var totalObrasExecutadas = 0;
var totalObrasConcluidas = 0;
var totalObrasEmAndamento = 0;
var totalObrasSuspensas = 0;
var totalObrasEmProjeto = 0;
var totalAcompanhamentos = 0;
var totalContratos = 0;
var totalValor = 0;
if (anoSelecionado > 0)
{
for(var indexMarker = 0; indexMarker < markers.length; indexMarker++)
{
var item = markers[indexMarker];
if (item.dt_inicio > 0)
{
var dataInicio = item.dt_inicio_string;
dataInicio = dataInicio.split("/");
var ano = dataInicio[(dataInicio.length -1)];
ano = parseInt(ano);
if (ano === anoSelecionado)
{
totalObrasExecutadas++;
if (item.situacao === "Concluído")
{
totalObrasConcluidas++;
}
else if (item.situacao === "Em Andamento")
{
totalObrasEmAndamento++;
}
else if (item.situacao === "Suspensa")
{
totalObrasSuspensas++;
}
else if (item.situacao === "Em Projeto")
{
totalObrasEmProjeto++;
}
if (item.contrato && item.contrato.nome)
{
totalContratos++;
}
if (item.acompanhamentos && item.acompanhamentos.length > 0)
{
totalAcompanhamentos = totalAcompanhamentos + item.acompanhamentos.length;
}
var valorObra = item.valor ? parseFloat(item.valor.replace(/\./g, "").replace(/,/g, ".")) : 0.0;
if (valorObra > 0.0)
{
totalValor = totalValor + valorObra;
}
}
}
}
} else {
for(var indexMarker = 0; indexMarker < markers.length; indexMarker++)
{
var item = markers[indexMarker];
totalObrasExecutadas++;
if (item.situacao === "Concluído")
{
totalObrasConcluidas++;
}
else if (item.situacao === "Em Andamento")
{
totalObrasEmAndamento++;
}
else if (item.situacao === "Suspensa")
{
totalObrasSuspensas++;
}
else if (item.situacao === "Em Projeto")
{
totalObrasEmProjeto++;
}
if (item.contrato && item.contrato.nome)
{
totalContratos++;
}
if (item.acompanhamentos && item.acompanhamentos.length > 0)
{
totalAcompanhamentos = totalAcompanhamentos + item.acompanhamentos.length;
}
var valorObra = item.valor ? parseFloat(item.valor.replace(/\./g, "").replace(/,/g, ".")) : 0.0;
if (valorObra > 0.0)
{
totalValor = totalValor + valorObra;
}
}
}
divRelatorioTotalExecutadas.text("Obras executadas: "+totalObrasExecutadas);
divRelatorioTotalConcluidas.text(totalObrasConcluidas);
divRelatorioTotalEmAndamento.text(totalObrasEmAndamento);
divRelatorioTotalSuspensas.text(totalObrasSuspensas);
divRelatorioTotalEmProjeto.text(totalObrasEmProjeto);
divRelatorioTotalAcompanhamentos.text("Acompanhamentos: "+totalAcompanhamentos);
divRelatorioTotalContratos.text("Contratos: "+totalContratos);
divRelatorioTotalValor.text("R$ "+totalValor.toLocaleString("pt-BR", { minimumFractionDigits: 2 }));
divsRelatorioInfo.show();
});
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* Verificar avaliação */
function verificarAvaliacao (nomeCookie) {
var arrayCookies = document.cookie.split(";");
for(var i = 0; i < arrayCookies.length; i++) {
var cookie = arrayCookies[i].split("=");
if(nomeCookie == cookie[0].trim()) {
return true;
}
}
return false;
}
/* Ordenar Vínculos */
function ordenarVinculos (arrayOrdem) {
// Revertendo elementos do array (para respeitar a ordem)
let ordenacaoElementos = Object.values(arrayOrdem).reverse();
// A cada elemento do array
ordenacaoElementos.forEach((elemento) => {
let nomeClasse = ".obr_obra_" + elemento
let estruturaHtml = document.querySelector(nomeClasse);
const elementoAnterior = document.querySelector('.obr_acompanhamentos');
elementoAnterior.insertAdjacentElement('afterend', estruturaHtml);
});
}
/* VISUALIZAR OBRA */
function visualizarObra(codigoObra) {
var fancyBoxOptions = {
buttons : [ 'slideShow', 'close' ],
loop : true,
arrows : true,
slideShow : { autoStart : false, speed : 3500 }
};
for(var indexMarker = 0; indexMarker < markers.length; indexMarker++)
{
var item = markers[indexMarker];
item.marker.removeFrom(leafLetMap);
item.marker.closePopup();
if (item.codigo === codigoObra)
{
botaoMenuDetalhes.prop("disabled", false);
item.marker.addTo(leafLetMap);
item.marker.openPopup();
leafLetMap.setView(item.marker.getLatLng(), zoomMax);
divCategoriaObra.css("background", item.cor_marcador);
divCategoriaObra.css("color", item.cor_icone);
divCategoriaObra.find(".obr_categoria_icone").removeClass().addClass("obr_categoria_icone");
divCategoriaObra.find(".obr_categoria_icone").addClass("swfa fa fa-"+item.icone);
divCategoriaObra.find(".obr_categoria_icone").css("background", item.cor_fundo_circulo);
divCategoriaObra.find(".obr_categoria_nome").text(item.nome_categoria);
divCategoriaObra.parent().find(".obr_nome_obra").text(item.titulo);
/* BOTAO SEGUIR */
if (seguirObra)
{
btnSeguirObra.removeClass();
btnSeguirObra.addClass("sw_btn_seguir_ferramenta sw_lato_bold "+item.seguir_class);
btnSeguirObra.attr("title", item.seguir_title);
btnSeguirObra.attr("data-id", item.codigo);
btnSeguirObra.attr("data-ferramenta", "obras");
btnSeguirObra.attr("data-seguir-acao", item.seguir_acao);
$(btnSeguirObra.find("span")[1]).text(item.seguir_txt);
} else {
btnSeguirObra.hide();
}
/* Botão avaliar */
btnAvaliarObra.attr("data-id", item.codigo);
var obraAvaliada = verificarAvaliacao("PrefeituraMunicipaldeTaiobeiras-MG-avaliacao-obras-" + item.codigo);
btnAvaliarObra.removeClass("avaliar_servico avaliado");
if (obraAvaliada) {
btnAvaliarObra.addClass("avaliado")
btnAvaliarObra.children(".swfa").removeClass("far fa-star");
btnAvaliarObra.children(".swfa").addClass("fas fa-star");
btnAvaliarObra.children(".sw_txt_btn").text("Avaliado");
} else {
btnAvaliarObra.addClass("avaliar_servico")
btnAvaliarObra.children(".swfa").removeClass("fas fa-star");
btnAvaliarObra.children(".swfa").addClass("far fa-star");
btnAvaliarObra.children(".sw_txt_btn").text("Avaliar");
}
/* INFORMACOES GERIAS */
var logradouro_completo_exibir = "";
if(item.logradouro_completo != "" && item.logradouro_completo != null && item.logradouro_completo != "0") {
logradouro_completo_exibir += item.logradouro_completo;
}
if(item.bairro != "" && item.bairro != null && item.bairro != "0" && item.bairro != "nao_informado") {
logradouro_completo_exibir += item.bairro;
}
if(logradouro_completo_exibir) {
divLocalizacaoObra.find(".sw_descricao_detalhe").text(logradouro_completo_exibir);
divLocalizacaoObra.show();
} else {
divLocalizacaoObra.hide();
}
if (item.edital) {
divEditalObra.find(".sw_descricao_detalhe").html('<div>'+item.edital.nome+'</div><a href="'+item.edital.link+'" target="_blank"><span class="sw_link_acesso_facil sw_lato_medium">Ver Edital ;<span class="swfa fas fa-search-plus"></span></span></a>');
divEditalObra.show();
} else {
divEditalObra.hide();
}
if (item.contrato) {
divContratoObra.find(".sw_descricao_detalhe").html('<div>'+item.contrato.nome+'</div><a href="'+item.contrato.link+'" target="_blank"><span class="sw_link_acesso_facil sw_lato_medium">Ver Contrato ;<span class="swfa fas fa-search-plus"></span></span></a>');
divContratoObra.show();
} else {
divContratoObra.hide();
}
if (item.empresa && item.empresa !== "null") {
divEmpresaObra.find(".sw_descricao_detalhe").text(item.empresa);
divEmpresaObra.show();
} else {
divEmpresaObra.hide();
}
if (item.fiscal && item.fiscal !== "null") {
divFiscalObra.find(".sw_descricao_detalhe").text(item.fiscal);
divFiscalObra.show();
} else {
divFiscalObra.hide();
}
if (item.descricao && item.descricao !== "null") {
divDescricao.find(".sw_descricao_detalhe").text(item.descricao);
divDescricao.show();
} else {
divDescricao.hide();
}
if (item.valor && parseFloat(item.valor.replace(/\./g, "").replace(/,/g, ".")) > 0.0) {
divValorObra.find("span").text("R$ "+item.valor);
divValorObra.show();
} else {
divValorObra.hide();
}
var valorObra = item.valor ? parseFloat(item.valor.replace(/\./g, "").replace(/,/g, ".")) : 0.0;
var valorPagoObra = item.valor_pago ? parseFloat(item.valor_pago.replace(/\./g, "").replace(/,/g, ".")) : 0.0;
if (valorPagoObra > 0.0) {
spanValorPago.text("R$ "+item.valor_pago);
if (valorPagoObra > valorObra){
spanValorPago.addClass("obr_valor_superior");
}
else if (valorPagoObra < valorObra){
spanValorPago.addClass("obr_valor_inferior");
} else {
spanValorPago.addClass("obr_valor_obra");
}
divValorPagoObra.show();
} else {
divValorPagoObra.hide();
}
/* INFORMACOES GERIAS */
/* EXECUCAO DA OBRA */
spanSituacao.text(item.situacao);
if (item.situacao === "Em Andamento") {
spanSituacao.addClass("obr_situacao_em_andamento");
}
else if (item.situacao === "Suspensa") {
spanSituacao.addClass("obr_situacao_suspensa");
}
else if (item.situacao === "Concluída") {
spanSituacao.addClass("obr_situacao_concluida");
}
else if (item.situacao === "Em Projeto") {
spanSituacao.addClass("obr_situacao_em_projeto");
}
/* MOTIVO DA SUSPENSÃO */
if (item.motivo_paralisacao && item.motivo_paralisacao !== "null") {
divMotivoParalisacao.find(".sw_descricao_detalhe").text(item.motivo_paralisacao);
divMotivoParalisacao.show();
} else {
divMotivoParalisacao.hide();
}
/* FONTES DE RECURSO */
if (item.fonte_recurso && item.fonte_recurso !== "null") {
var fontes_recursos = item.fonte_recurso.substr(0, item.fonte_recurso.length - 2);
divFonteRecurso.find(".sw_descricao_detalhe").text(fontes_recursos);
divFonteRecurso.show();
} else {
divFonteRecurso.hide();
}
if (item.dt_inicio)
{
divDataInicio.find(".sw_descricao_detalhe").text(item.dt_inicio_string);
} else {
divDataInicio.hide();
}
if (item.dt_fim)
{
divDataFim.find(".sw_descricao_detalhe").text(item.dt_fim_string);
} else {
divDataFim.hide();
}
if (item.dt_inicio && item.dt_fim && item.situacao === 'Em Andamento')
{
var dataItemFim = item.dt_fim;
var dataAgora = Date.now() / 1000;
if (dataAgora > dataItemFim && ((dataAgora - dataItemFim) >= (24 * 60 * 60)))
{
var diferenca = dataAgora - dataItemFim;
var diferencaDias = diferenca / (24 * 60 * 60);
diferencaDias = ~~diferencaDias;
divObraAtraso.find(".sw_descricao_detalhe").html('Esta obra está <strong>'+diferencaDias+' dias</strong> atrasada.');
divObraAtraso.find(".obr_execucao_atraso").show();
divDataFim.find(".sw_descricao_detalhe").append()
divObraAtraso.show();
} else {
divObraAtraso.hide();
}
} else {
divObraAtraso.hide();
divObraAtraso.find(".obr_execucao_atraso").hide();
}
/* EXECUCAO DA OBRA */
/* ACOMPANHAMENTOS */
divAcompanhamentosObras.find(".sw_linha_lista_detalhes.obr_acompanhamento_info.obr_acompanhamento_modelo").remove();
if (item.acompanhamentos.length > 0)
{
var porcentagemConcluido = 0
item.acompanhamentos.forEach(function(acompanhamento){
var divAcompanhamentoModelo = acompanhamentoModelo.clone();
var spanPorcentagem = divAcompanhamentoModelo.find("div.obr_porcentagem_acompanhamento span");
spanPorcentagem.text(acompanhamento.porcentagem+"%");
spanPorcentagem.css("min-width", acompanhamento.porcentagem+"%");
var spanDtConclusao = divAcompanhamentoModelo.find(".obr_data_acompanhamento");
var spanSituacao = divAcompanhamentoModelo.find(".obr_situacao_acompanhamento");
spanSituacao.text(acompanhamento.situacao);
var spanDescricao = divAcompanhamentoModelo.find(".obr_descricao_acompanhamento");
spanDescricao.text(acompanhamento.descricao);
if (acompanhamento.situacao === "Concluído")
{
spanSituacao.addClass("obr_situacao_concluida");
spanSituacao.show();
spanDtConclusao.text(acompanhamento.dt_conclusao);
spanDtConclusao.show();
porcentagemConcluido = porcentagemConcluido + parseInt(acompanhamento.porcentagem);
} else {
spanDtConclusao.hide();
}
var divVerFotosAcompanhamento = divAcompanhamentoModelo.find(".obr_link_obra.obr_link_ver_fotos");
if (acompanhamento.fotos && Object.values(acompanhamento.fotos).length > 0)
{
var fancyBoxSrc = [];
Object.values(acompanhamento.fotos).forEach(function(foto){
var legenda = "";
if (foto.legenda && foto.legenda !== "null")
{
legenda = foto.legenda;
}
var src = { src: foto.arquivo, opts: { caption: legenda } };
fancyBoxSrc.push(src);
});
divVerFotosAcompanhamento.click(function(mouseEvent){
$.fancybox.open(fancyBoxSrc, fancyBoxOptions, 0);
});
divVerFotosAcompanhamento.show();
} else {
divVerFotosAcompanhamento.hide();
}
divAcompanhamentoModelo.insertBefore(divTotalAcompanhamentos)
divAcompanhamentoModelo.show();
});
if (porcentagemConcluido > 0)
{
spanTotalPorcentagem.css("min-width", porcentagemConcluido+"%");
spanTotalPorcentagem.text(porcentagemConcluido+"%");
divTotalAcompanhamentos.show();
} else {
divTotalAcompanhamentos.hide();
}
divAcompanhamentosObras.show();
} else {
divAcompanhamentosObras.hide();
}
/* ACOMPANHAMENTOS */
// Ordena as estruturas HTML de acordo com os vínculos
ordenarVinculos(item.ordem_vinculos);
/* FOTOS */
if (Object.values(item.fotos).length > 0)
{
divFotosObra.find("div.vinc_cont_img_galeria_fotos.obr_foto_modelo").remove();
var dataIndex = -1;
var fancyBoxSrc = [];
Object.values(item.fotos).forEach(function(foto){
var divFotoModelo = fotoModelo.clone();
dataIndex = dataIndex + 1;
var legenda = "";
var imgElemento = divFotoModelo.find("img");
imgElemento.attr("src", foto.arquivo);
imgElemento.attr("data-index", dataIndex);
if (foto.legenda && foto.legenda !== "null")
{
imgElemento.attr("alt", foto.legenda);
legenda = foto.legenda;
} else {
imgElemento.attr("alt", "");
}
// divFotoModelo.attr("data-fancybox", "gallery"+item.codigo);
divContFotos.append(divFotoModelo);
divFotoModelo.show();
var src = { src: foto.arquivo, opts: { caption: legenda } };
fancyBoxSrc.push(src);
});
divContFotos.find("div.vinc_cont_img_galeria_fotos").click(function(mouseEvent){
var target = mouseEvent.target;
target = $(target);
var indexClick = 0;
if (target.attr("data-index") >=0)
{
indexClick = target.attr("data-index");
}
$.fancybox.open(fancyBoxSrc, fancyBoxOptions, indexClick);
});
var fotosQtde = Object.values(item.fotos).length;
var classeGaleriaFotos = "";
if(fotosQtde < 6) { classeGaleriaFotos = "vinc_cont_galeria_fotos_vinculada_l"+fotosQtde; }
else if(fotosQtde % 6 == 5) { classeGaleriaFotos = "vinc_cont_galeria_fotos_vinculada_lr5"; }
else if(fotosQtde % 6 == 4) { classeGaleriaFotos = "vinc_cont_galeria_fotos_vinculada_lr4"; }
else if(fotosQtde % 6 == 3) { classeGaleriaFotos = "vinc_cont_galeria_fotos_vinculada_lr3"; }
else if(fotosQtde % 6 == 2) { classeGaleriaFotos = "vinc_cont_galeria_fotos_vinculada_lr2"; }
else if(fotosQtde % 6 == 1) { classeGaleriaFotos = "vinc_cont_galeria_fotos_vinculada_lr1"; }
divFotosObra.find(".vinc_cont_galeria_fotos_vinculada").addClass(classeGaleriaFotos);
divFotosObra.show();
} else {
divFotosObra.hide();
}
/* FOTOS */
/* VIDEOS */
divVideosObra.find("div.obr_video_obra.obr_video_modelo").remove();
if (Object.values(item.videos).length > 0)
{
Object.values(item.videos).forEach(function(video){
if (video.video && video.video !== "null")
{
var divVideoModelo = videoModelo.clone();
var divImg = divVideoModelo.find(".obr_img_video");
if (video.imagem && video.imagem !== "null")
{
var imgVideo = divImg.find("img");
imgVideo.attr("src", video.imagem);
imgVideo.attr("alt", video.nome);
divImg.show();
} else {
divImg.hide();
}
var divData = divVideoModelo.find(".obr_data_video");
if (video.data && video.data !== "null")
{
divData.text(video.data);
divData.show();
} else {
divData.hide();
}
var divNome = divVideoModelo.find(".obr_nome_video");
if (video.nome && video.nome !== "null")
{
divNome.text(video.nome);
}
var inputHidden = divVideoModelo.find("input[type='hidden']");
inputHidden.val(video.video);
divVideoModelo.show();
divVideosObra.append(divVideoModelo);
}
});
divVideosObra.parent().show();
} else {
divVideosObra.parent().hide();
}
/* VIDEOS */
/* ARQUIVOS */
divArquivosObra.find("a.obr_arquivo_modelo").remove();
if (Object.values(item.arquivos).length > 0)
{
Object.values(item.arquivos).forEach(function(arquivo){
var aModelo = arquivoModelo.clone();
aModelo.attr("href", arquivo.arquivo);
var imgExtensao = aModelo.find("img");
imgExtensao.attr("src", arquivo.img_extensao);
imgExtensao.attr("alt", arquivo.extensao);
var divDataArquivo = aModelo.find(".sw_data_arquivo_download");
if (arquivo.data && arquivo.data !== "null")
{
divDataArquivo.text(arquivo.data);
divDataArquivo.show();
} else {
divDataArquivo.hide();
}
var divNomeArquivo = aModelo.find(".sw_nome_arquivo_download");
if (arquivo.nome && arquivo.nome !== "null")
{
divNomeArquivo.text(arquivo.nome);
divNomeArquivo.show();
} else {
divNomeArquivo.hide();
}
aModelo.show();
divArquivosObra.append(aModelo);
});
divArquivosObra.show();
} else {
divArquivosObra.hide();
}
/* ARQUIVOS */
/* SECRETARIAS */
divSecretariasObra.find("a.obr_secretaria_modelo").remove();
if (Object.values(item.secretarias).length > 0)
{
Object.values(item.secretarias).forEach(function(secretaria){
var aSecretariaModelo = secretariaModelo.clone();
aSecretariaModelo.attr("href", secretaria.link)
aSecretariaModelo.attr("target", secretaria.abertura);
var imgModelo = aSecretariaModelo.find("img");
imgModelo.attr("src", secretaria.imagem);
imgModelo.attr("alt", secretaria.nome);
var divNomeSecretaria = aSecretariaModelo.find(".obr_nome_secretaria");
divNomeSecretaria.text(secretaria.nome);
aSecretariaModelo.show();
divSecretariasObra.append(aSecretariaModelo);
});
divSecretariasObra.show();
} else {
divSecretariasObra.hide();
}
/* SECRETARIAS */
/* VALORES E PRAZOS */
if (item.valor || item.valor_pago)
{
if (valorObra > 0.0 && valorPagoObra > 0.0)
{
spanValorContrato.text("R$ "+item.valor);
spanValorPagoFinal.text("R$ "+item.valor_pago);
if (valorObra >= valorPagoObra)
{
spanValorContrato.css("min-width", "100%");
spanValorPagoFinal.parent().addClass("obr_estatistica_positiva");
spanValorPagoFinal.css("min-width", ((valorPagoObra * 100) / valorObra)+"%");
}
else if (valorObra < valorPagoObra)
{
spanValorPagoFinal.css("min-width", "100%");
spanValorPagoFinal.parent().addClass("obr_estatistica_negativa");
spanValorContrato.css("min-width", ((valorObra * 100) / valorPagoObra)+"%");
}
divValorContrato.show();
divValorUtilizado.show();
} else {
if (valorObra > 0.0)
{
spanValorContrato.text("R$ "+item.valor);
spanValorContrato.css("min-width", "100%");
divValorContrato.show();
divValorUtilizado.hide();
}
else if (valorPagoObra > 0.0)
{
spanValorPagoFinal.text("R$ "+item.valor_pago);
spanValorPagoFinal.css("min-width", "100%");
divValorUtilizado.show();
divValorContrato.hide();
}
else {
divValorContrato.parent().hide();
}
}
divValorContrato.parent().show();
} else {
divValorContrato.parent().hide();
}
if (item.dt_inicio && item.dt_fim)
{
var dataInicio = item.dt_inicio;
var dataFim = item.dt_fim;
var dias = (dataFim - dataInicio) / (24 * 60 * 60);
divPrazoRealizacao.find("span").text(dias+" dias");
divPrazoRealizacao.show();
} else {
divPrazoRealizacao.parent().hide();
}
/* VALORES E PRAZOS */
divAreaDetalhes.show();
$(".obr_btn_detalhes").trigger("click");
}
}
}
$body.on("click", ".obr_link_ver_obra", function(){
botaoMenuDetalhes.prop("disabled", false);
var codigoObra = $(this).data("codigo");
codigoObra = parseInt(codigoObra);
if (codigoObra > 0)
{
visualizarObra(codigoObra);
}
});
/* VISUALIZAR OBRA */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* SEGUIR OBRA */
btnSeguirObra.click(function(mouseEvent){
if (seguirObra)
{
if (btnSeguirObra.hasClass("itn_btn_login"))
{
sw_popup("#itn_login", "S");
/* RECUPERAÇÃO DE SENHA */
$("#link_senha").click(function() { sw_abrir_janela("/portal/internautas/recuperar-senha", 450, 600) });
} else {
// TRATANDO TEXTO/AÇÃO DO MODAL
var seguirAcao = btnSeguirObra.attr("data-seguir-acao");
var textoModal = "";
if(seguirAcao == "seguir")
{
textoModal = "Ao seguir este item você receberá por e-mail todas suas atualizações em tempo real."
}
else if(seguirAcao == "deixar_seguir")
{
textoModal = "Ao deixar de seguir este item você deixará de receber por e-mail todas suas atualizações em tempo real.";
}
swal({
title: "Atenção!",
text: textoModal,
icon: "warning",
buttons: ["Cancelar", "OK"],
})
.then(function(acao) {
if(acao === true)
{
var codigo = btnSeguirObra.attr("data-id");
codigo = parseInt(codigo);
var ferramenta = btnSeguirObra.attr("data-ferramenta");
// ANALISANDO SE ESTÁ LOGADO
if (!btnSeguirObra.hasClass("itn_btn_login"))
{
//ANALISANDO AÇÃO
var acao;
if (!btnSeguirObra.hasClass("sw_seguindo"))
{
acao = "cadastrar";
} else {
acao = "remover";
}
$.ajax({
url: "/portal/notificacoes/seguir/ferramentas/",
type: "POST",
data: "acao="+acao+"&ferramenta="+ferramenta+"&codigo="+codigo,
async: false,
beforeSend: function(){
sw_carregando_fs("show");
},
complete: function() {
sw_carregando_fs("hide");
},
success: function(data) {
data = JSON.parse(data);
if(data.erro != "" && data.erro != undefined)
{
swal({
text: data.erro,
icon: "error",
});
}
else
{
// ANALISANDO AÇÃO
if (acao == "cadastrar")
{
btnSeguirObra.addClass("sw_seguindo").attr("title", "Clique para deixar de seguir ").find(".sw_txt_btn").text("Seguindo");
btnSeguirObra.attr("data-seguir-acao","deixar_seguir");
} else {
btnSeguirObra.removeClass("sw_seguindo").attr("title", "Clique para seguir").find(".sw_txt_btn").text("Seguir");
btnSeguirObra.attr("data-seguir-acao","seguir");
}
for(var indexMarcador = 0; indexMarcador < markers.length; indexMarcador++)
{
var item = markers[indexMarcador];
if (item.codigo === codigo)
{
if (acao === "cadastrar")
{
item.seguir_acao = "deixar_seguir";
item.seguir_class = "sw_seguindo btn_seguir_ferramenta";
item.seguir_txt = "Seguindo";
item.seguir_title = "Clique para deixar de seguir.";
} else {
item.seguir_acao = "seguir";
item.seguir_class = "btn_seguir_ferramenta disabled";
item.seguir_txt = "Seguir";
item.seguir_title = "Clique para seguir.";
}
break;
}
}
}
},
error: function(data) {
swal({
text: "Algo de errado aconteceu, tente novamente!",
icon: "error",
})
.then(function() {
location.reload(true);
});
}
});
}
}
});
}
}
});
/* SEGUIR OBRA */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ACESSIBILIDADE */
//BOTÃO DE CONTRASTE DE COR
$("#obra_contraste").click(function () {
if($("body").hasClass("contraste"))
{
$("body").removeClass("contraste");
$("body").css("background","#FFFFFF");
$("#logo_branca").hide();
$("#logo_mobile").show();
}
else
{
$("body").addClass("contraste");
$("#logo_branca").show();
$("#logo_mobile").hide();
}
});
/* ACESSIBILIDADE */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* CRIANDO MAPA */
leafLetMap = Mapa("leaflet_map");
/* CRIANDO MAPA */
var abrirRelatorio = false;
var codigoObra = 4;
if (abrirRelatorio)
{
var anoSelecionado = 0;
if (anoSelecionado > 0)
{
selectRelatorioFiltroAno.find("option[value='"+anoSelecionado+"']").prop("selected", true);
}
divMenuObras.find("button[data-menu='obr_content_relatorio']").trigger("click");
}
else
{
if (codigoObra > 0)
{
visualizarObra(codigoObra);
}
}
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
// ABRIR MODAL/ALERT CONFIRMAÇÃO
$(".btn_modal_boletim").click(function() {
swal({
title: "Atenção!",
text: "Ao confirmar você será redirecionado para sua área de preferências para que possa gerenciador o Boletim Informativo.",
icon: "warning",
buttons: ["Cancelar", "OK"],
})
.then(function(acao) {
if(acao === true)
{
window.open("/portal/internautas/dados/preferencias/#boletim_informativo", "_blank");
}
});
});
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
/* ############################################################################################################################################################################################# */
});
</script>]]>
|