Browse Source

Gerando os graficos do dashboard com highcharts, em vez do google-charts

producao
Breno Teixeira 11 years ago
parent
commit
64b52fadd8
  1. 52
      sigi/context_processors.py
  2. 87
      templates/admin/base.html
  3. 164
      templates/index.html
  4. 146
      templates/snippets/modules/charts-convenios.html

52
sigi/context_processors.py

@ -2,17 +2,16 @@
import datetime import datetime
from sigi.apps.casas.models import CasaLegislativa from sigi.apps.casas.models import CasaLegislativa
from sigi.apps.convenios.models import Convenio, Projeto from sigi.apps.convenios.models import Convenio, Projeto
from sigi.apps.contatos.models import UnidadeFederativa
from sigi.apps.servicos.models import TipoServico from sigi.apps.servicos.models import TipoServico
from sigi.apps.diagnosticos.models import Diagnostico from sigi.apps.diagnosticos.models import Diagnostico
from sigi.apps.metas.models import Meta from sigi.apps.metas.models import Meta
def charts_data(request): def charts_data(request):
''' """
Busca informacoes para a criacao dos graficos e resumos Busca informacoes para a criacao dos graficos e resumos
''' """
projetos = Projeto.objects.all()
convenios = Convenio.objects.all() convenios = Convenio.objects.all()
convenios_assinados = convenios.exclude(data_retorno_assinatura=None) convenios_assinados = convenios.exclude(data_retorno_assinatura=None)
@ -23,19 +22,20 @@ def charts_data(request):
g_convassinado_proj = grafico_convenio_projeto(convenios_assinados) g_convassinado_proj = grafico_convenio_projeto(convenios_assinados)
return { return {
'tabela_resumo_camara' : tabela_resumo_camara, 'tabela_resumo_camara': tabela_resumo_camara,
'tabela_resumo_seit' : tabela_resumo_seit, 'tabela_resumo_seit': tabela_resumo_seit,
'tabela_resumo_diagnostico': tabela_resumo_diagnostico, 'tabela_resumo_diagnostico': tabela_resumo_diagnostico,
'g_conv_proj': g_conv_proj, 'g_conv_proj': g_conv_proj,
"g_convassinado_proj":g_convassinado_proj, "g_convassinado_proj": g_convassinado_proj,
'metas': Meta.objects.all(), 'metas': Meta.objects.all(),
} }
def busca_informacoes_camara(): def busca_informacoes_camara():
''' """
Busca informacoes no banco para montar tabela de resumo de camaras por projeto Busca informacoes no banco para montar tabela de resumo de camaras por projeto
Retorna um dicionario de listas Retorna um dicionario de listas
''' """
camaras = CasaLegislativa.objects.filter(tipo__sigla='CM') camaras = CasaLegislativa.objects.filter(tipo__sigla='CM')
convenios = Convenio.objects.filter(casa_legislativa__tipo__sigla='CM') convenios = Convenio.objects.filter(casa_legislativa__tipo__sigla='CM')
projetos = Projeto.objects.all() projetos = Projeto.objects.all()
@ -52,10 +52,10 @@ def busca_informacoes_camara():
# Criacao das listas para o resumo de camaras por projeto # Criacao das listas para o resumo de camaras por projeto
cabecalho_topo = ['',] # Cabecalho superior da tabela cabecalho_topo = ['', ] # Cabecalho superior da tabela
lista_total = [] lista_total = []
lista_nao_aderidas = [] lista_nao_aderidas = []
lista_aderidas = [] lista_aderidas = []
lista_convenios_assinados = [] lista_convenios_assinados = []
lista_convenios_em_andamento = [] lista_convenios_em_andamento = []
@ -63,7 +63,7 @@ def busca_informacoes_camara():
for projeto in projetos: for projeto in projetos:
conv_sem_adesao_proj = convenios_sem_adesao.filter(projeto=projeto) conv_sem_adesao_proj = convenios_sem_adesao.filter(projeto=projeto)
conv_com_adesao_proj = convenios_com_adesao.filter(projeto=projeto) conv_com_adesao_proj = convenios_com_adesao.filter(projeto=projeto)
conv_assinados_proj = convenios_assinados.filter(projeto=projeto) conv_assinados_proj = convenios_assinados.filter(projeto=projeto)
conv_em_andamento_proj = convenios_em_andamento.filter(projeto=projeto) conv_em_andamento_proj = convenios_em_andamento.filter(projeto=projeto)
conv_equipadas_proj = convenios_com_aceite.filter(projeto=projeto) conv_equipadas_proj = convenios_com_aceite.filter(projeto=projeto)
@ -111,23 +111,24 @@ def busca_informacoes_camara():
return { return {
u'cabecalho_topo': cabecalho_topo, u'cabecalho_topo': cabecalho_topo,
u'lista_zip': lista_zip, u'lista_zip': lista_zip,
u'total_camaras' : camaras.count(), u'total_camaras': camaras.count(),
u'camaras_sem_processo': camaras_sem_processo.count(), u'camaras_sem_processo': camaras_sem_processo.count(),
} }
def grafico_convenio_projeto(convenios): def grafico_convenio_projeto(convenios):
projetos = Projeto.objects.all() projetos = Projeto.objects.all()
lista_convenios = [] lista_projetos = []
for projeto in projetos: for projeto in projetos:
lista_convenios.append(convenios.filter(projeto=projeto).count()) lista_projetos.append((projeto.nome, convenios.filter(projeto=projeto).count()))
total_convenios = "Total: " + str(convenios.count())
lista_projetos.insert(0, total_convenios)
return lista_projetos
dic = {
"total_convenios":("Total: " + str(convenios.count())),
"convenios":lista_convenios,
"projetos":projetos
}
return dic
def busca_informacoes_seit(): def busca_informacoes_seit():
mes_atual = datetime.date.today().replace(day=1) mes_atual = datetime.date.today().replace(day=1)
@ -149,8 +150,9 @@ def busca_informacoes_seit():
return result return result
def busca_informacoes_diagnostico(): def busca_informacoes_diagnostico():
return [ return [
{'title': 'Diagnósticos digitados', 'count': Diagnostico.objects.count()}, {'title': 'Diagnósticos digitados', 'count': Diagnostico.objects.count()},
{'title': 'Diagnósticos publicados', 'count': Diagnostico.objects.filter(publicado=True).count()}, {'title': 'Diagnósticos publicados', 'count': Diagnostico.objects.filter(publicado=True).count()},
] ]

87
templates/admin/base.html

@ -1,14 +1,15 @@
{% load admin_static %}{% load firstof from future %}<!DOCTYPE html> {% load admin_static %}{% load firstof from future %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}> <html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head> <head>
<title>{% block title %}{% endblock %}</title> <title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" /> <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
{% block extrastyle %}{% endblock %} {% block extrastyle %}{% endblock %}
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% static "admin/css/ie.css" %}{% endblock %}" /><![endif]--> <!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% static "admin/css/ie.css" %}{% endblock %}" /><![endif]-->
{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %} {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %}
<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script> <script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
{% block extrahead %}{% endblock %} {% block extrahead %}{% endblock %}
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %} {% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
</head> </head>
{% load i18n %} {% load i18n %}
@ -20,43 +21,43 @@
{% block container-top %}{% endblock %} {% block container-top %}{% endblock %}
{% if not is_popup %} {% if not is_popup %}
<!-- Header --> <!-- Header -->
<div id="header"> <div id="header">
<div id="branding"> <div id="branding">
{% block branding %}{% endblock %} {% block branding %}{% endblock %}
</div>
{% if user.is_active and user.is_staff %}
<div id="user-tools">
{% trans 'Welcome,' %}
<strong>{% firstof user.get_short_name user.get_username %}</strong>.
{% block userlinks %}
{% url 'django-admindocs-docroot' as docsroot %}
{% if docsroot %}
<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> /
{% endif %}
{% if user.has_usable_password %}
<a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a> /
{% endif %}
<a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
{% endblock %}
</div>
{% endif %}
{% block nav-global %}{% endblock %}
</div> </div>
{% if user.is_active and user.is_staff %} <!-- END Header -->
<div id="user-tools"> {% block breadcrumbs %}
{% trans 'Welcome,' %} <div class="breadcrumbs">
<strong>{% firstof user.get_short_name user.get_username %}</strong>. <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
{% block userlinks %} {% if title %} &rsaquo; {{ title }}{% endif %}
{% url 'django-admindocs-docroot' as docsroot %} </div>
{% if docsroot %} {% endblock %}
<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> /
{% endif %}
{% if user.has_usable_password %}
<a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a> /
{% endif %}
<a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
{% endblock %}
</div>
{% endif %}
{% block nav-global %}{% endblock %}
</div>
<!-- END Header -->
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
{% if title %} &rsaquo; {{ title }}{% endif %}
</div>
{% endblock %}
{% endif %} {% endif %}
{% block messages %} {% block messages %}
{% if messages %} {% if messages %}
<ul class="messagelist">{% for message in messages %} <ul class="messagelist">{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message|capfirst }}</li> <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message|capfirst }}</li>
{% endfor %}</ul> {% endfor %}</ul>
{% endif %} {% endif %}
{% endblock messages %} {% endblock messages %}
@ -65,8 +66,8 @@
{% block pretitle %}{% endblock %} {% block pretitle %}{% endblock %}
{% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %} {% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
{% block content %} {% block content %}
{% block object-tools %}{% endblock %} {% block object-tools %}{% endblock %}
{{ content }} {{ content }}
{% endblock %} {% endblock %}
{% block sidebar %}{% endblock %} {% block sidebar %}{% endblock %}
<br class="clear" /> <br class="clear" />

164
templates/index.html

@ -10,43 +10,127 @@
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/jquery.init.js"></script> <script type="text/javascript" src="{{ STATIC_URL }}admin/js/jquery.init.js"></script>
<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"> </script> <script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"> </script>
<script type="text/javascript"> <script type="text/javascript">
(function($) { (function($) {
$(document).ready(function($) { $(document).ready(function($) {
var latlng = new google.maps.LatLng(-14.2350040, -51.925280); var latlng = new google.maps.LatLng(-14.2350040, -51.925280);
var myOptions = { var myOptions = {
zoom: 3, zoom: 3,
center: latlng, center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP mapTypeId: google.maps.MapTypeId.ROADMAP
}; };
var map = new google.maps.Map(document.getElementById("map_canvas"), var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions); myOptions);
$.get("/diagnosticos/mundiagjson/", function(municipios) { $.get("/diagnosticos/mundiagjson/", function(municipios) {
for (var i in municipios) { for (var i in municipios) {
var municipio = municipios[i]; var municipio = municipios[i];
var markData = { var markData = {
map: map, map: map,
position: new google.maps.LatLng(municipio.lat, municipio.lng), position: new google.maps.LatLng(municipio.lat, municipio.lng),
title: municipio.nome, title: municipio.nome,
icon: '{{ STATIC_URL }}img/mapmarker.png' icon: '{{ STATIC_URL }}img/mapmarker.png'
}
var mark = new google.maps.Marker(markData);
var infoWin = new google.maps.InfoWindow({content:
'<strong>' + municipio.nome + '</strong><br/>' +
'<strong>Início da visita:</strong><br/>' + municipio.inicio + '<br/>' +
'<strong>Término da visita:</strong><br/>' + municipio.fim + '<br/>' +
'<strong>Equipe:</trong><br/>' + municipio.equipe });
linkMarkMessage(mark, infoWin, map);
} }
var mark = new google.maps.Marker(markData); });
var infoWin = new google.maps.InfoWindow({content:
'<strong>' + municipio.nome + '</strong><br/>' + function linkMarkMessage(mark, infoWin, map) {
'<strong>Início da visita:</strong><br/>' + municipio.inicio + '<br/>' + google.maps.event.addListener(mark, 'click', function() {
'<strong>Término da visita:</strong><br/>' + municipio.fim + '<br/>' + infoWin.open(map, mark);});
'<strong>Equipe:</trong><br/>' + municipio.equipe }); }
linkMarkMessage(mark, infoWin, map); })
} })(django.jQuery);
}); </script>
{# Highcharts scripts #}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script type="text/javascript">
$(function () {
var chart;
$(document).ready(function () {
function linkMarkMessage(mark, infoWin, map) { // Build the chart
google.maps.event.addListener(mark, 'click', function() { $('#processos_conv').highcharts({
infoWin.open(map, mark);}); chart: {
} plotBackgroundColor: null,
}) plotBorderWidth: null,
})(django.jQuery); plotShadow: false
},
title: {
text: 'Processos de convênios por projeto <br/> {{ g_conv_proj.0 }}'
},
tooltip: {
pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: false
},
showInLegend: true
}
},
series: [{
type: 'pie',
name: 'Browser share',
data: [
{% for k, v in g_conv_proj %}
{% if not forloop.first %}
['{{ k }}', {{ v }}],
{% endif %}
{% endfor %}
]
}]
});
$('#processos_conv_ass').highcharts({
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false
},
title: {
text: 'Convênios assinados por projeto <br/> {{ g_convassinado_proj.0 }}'
},
tooltip: {
pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: false
},
showInLegend: true
}
},
series: [{
type: 'pie',
name: 'Browser share',
data: [
{% for k, v in g_convassinado_proj %}
{% if not forloop.first %}
['{{ k }}', {{ v }}],
{% endif %}
{% endfor %}
]
}]
});
});
});
</script> </script>
{# end highcharts scripts #}
{% endblock %} {% endblock %}
{% block content_title %}<h1>Dashboard</h1>{% endblock %} {% block content_title %}<h1>Dashboard</h1>{% endblock %}
@ -60,14 +144,14 @@
{% block breadcrumbs %}{% endblock %} {% block breadcrumbs %}{% endblock %}
{% block content %} {% block content %}
<div id="content-main"> <div id="content-main">
{% include "snippets/modules/charts-convenios.html" %} {% include "snippets/modules/charts-convenios.html" %}
</div> </div>
{% endblock %} {% endblock %}
{% block sidebar %} {% block sidebar %}
<div id="content-related"> <div id="content-related">
{% include "snippets/modules/user.html" %} {% include "snippets/modules/user.html" %}
{% include "snippets/modules/actions.html" %} {% include "snippets/modules/actions.html" %}
</div> </div>
{% endblock %} {% endblock %}

146
templates/snippets/modules/charts-convenios.html

@ -1,133 +1,109 @@
{% load charts %}
{% chart as convenios_assinados %}
{% chart-size 250 160 %}
{% chart-type "pie-3d" %}
{% chart-labels g_convassinado_proj.convenios %}
{% chart-data g_convassinado_proj.convenios %}
{% chart-legend g_convassinado_proj.projetos %}
{% chart-colors "A2CD5A,FFB90F,6CA6CD" %}
{% chart-title g_convassinado_proj.total_convenios %}
{% endchart %}
{% chart as processos %}
{% chart-size 250 160 %}
{% chart-type "pie-3d" %}
{% chart-labels g_conv_proj.convenios %}
{% chart-data g_conv_proj.convenios %}
{% chart-legend g_conv_proj.projetos %}
{% chart-colors "A2CD5A,FFB90F,6CA6CD" %}
{% chart-title g_conv_proj.total_convenios %}
{% endchart %}
<div class="module" style="height: 300px;"> <div class="module" style="height: 300px;">
<h2>Resumo de informações</h2> <h2>Resumo de informações</h2>
<!-- h3>Câmaras municipais por projeto</h3 --> <!-- h3>Câmaras municipais por projeto</h3 -->
<div class="align-center"> <div class="align-center">
<table> <table>
<tr> <tr>
{% for item in tabela_resumo_camara.cabecalho_topo %} {% for item in tabela_resumo_camara.cabecalho_topo %}
<th>{{item}}</th> <th>{{item}}</th>
{% endfor %} {% endfor %}
</tr> </tr>
{% for cabecalho,lista in tabela_resumo_camara.lista_zip %} {% for cabecalho,lista in tabela_resumo_camara.lista_zip %}
<tr> <tr>
<th>{{cabecalho}}</th> <th>{{cabecalho}}</th>
{% for item in lista %} {% for item in lista %}
<td>{{item}}</td> <td>{{item}}</td>
{% endfor %} {% endfor %}
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
</div> </div>
<ul> <ul>
<li>Câmaras sem processo: {{tabela_resumo_camara.camaras_sem_processo}}</li> <li>Câmaras sem processo: {{tabela_resumo_camara.camaras_sem_processo}}</li>
<li>Total de câmaras: {{tabela_resumo_camara.total_camaras}}</li> <li>Total de câmaras: {{tabela_resumo_camara.total_camaras}}</li>
</ul> </ul>
</div> </div>
<div class="module" style="height: 300px;"> <div class="module" style="height: 300px;">
<h2>Convênios</h2> <h2>Convênios</h2>
<h3>Convênios assinados por projeto</h3> <div id="processos_conv_ass" class="align-center" style="height: 280px;">
<div class="align-center">
{% if g_convassinado_proj.convenios %} {% if g_convassinado_proj.convenios %}
<img src="{{ convenios_assinados.url }}&chdlp=b" class="chart" /> <img src="{{ convenios_assinados.url }}&chdlp=b" class="chart" />
{% else %} {% else %}
<p>Nenhum dado para exibir</p> <p>Nenhum dado para exibir</p>
{% endif %} {% endif %}
</div> </div>
</div> </div>
<div class="module" style="height: 300px;"> <div class="module" style="height: 300px;">
<h2>Serviços</h2> <h2>Serviços</h2>
<div class="titlemapbox"> <div class="titlemapbox">
<div class="mapbox"><a href="/dashboard/mapa/"><img src="{{ STATIC_URL }}img/mapicon.png"/><br/>Ver mapa</a></div> <div class="mapbox"><a href="/dashboard/mapa/"><img src="{{ STATIC_URL }}img/mapicon.png"/><br/>Ver mapa</a></div>
<h3>Serviços hospedados no Interlegis (SEIT)</h3> <h3>Serviços hospedados no Interlegis (SEIT)</h3>
</div> </div>
<table> <table>
<tr> <tr>
</tr> </tr>
{% for servico in tabela_resumo_seit %} {% for servico in tabela_resumo_seit %}
<tr> <tr>
{% if forloop.first %} {% if forloop.first %}
<th style="width: 40%; vertical-align:bottom;">{{ servico.nome }}</th> <th style="width: 40%; vertical-align:bottom;">{{ servico.nome }}</th>
<th style="width: 20%; vertical-align:bottom; text-align: right;">{{ servico.total }}</th> <th style="width: 20%; vertical-align:bottom; text-align: right;">{{ servico.total }}</th>
<th style="width: 20%; vertical-align:bottom; text-align: right;">{{ servico.novos_mes_anterior }}</th> <th style="width: 20%; vertical-align:bottom; text-align: right;">{{ servico.novos_mes_anterior }}</th>
<th style="width: 20%; vertical-align:bottom; text-align: right;">{{ servico.novos_mes_atual }}</th> <th style="width: 20%; vertical-align:bottom; text-align: right;">{{ servico.novos_mes_atual }}</th>
{% else %} {% else %}
<th style="width: 40%;">{{ servico.nome }}</th> <th style="width: 40%;">{{ servico.nome }}</th>
<td style="text-align: right;">{{ servico.total }}</td> <td style="text-align: right;">{{ servico.total }}</td>
<td style="text-align: right;">{{ servico.novos_mes_anterior }}</td> <td style="text-align: right;">{{ servico.novos_mes_anterior }}</td>
<td style="text-align: right;">{{ servico.novos_mes_atual }}</td> <td style="text-align: right;">{{ servico.novos_mes_atual }}</td>
{% endif %} {% endif %}
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
</div> </div>
<div class="module" style="height: 300px;"> <div class="module" style="height: 300px;">
<h2>Resumo de informações</h2> <h2>Resumo de informações</h2>
<h3>Resumo de informações por região</h3> <h3>Resumo de informações por região</h3>
<div > <div >
<p style="text-align: justify"> <p style="text-align: justify">
Resumo de informações de Câmaras Municipais por região levando em conta Resumo de informações de Câmaras Municipais por região levando em conta
apenas o Projeto Interlegis. Demais projetos como PPM e PML não estão inclusos. apenas o Projeto Interlegis. Demais projetos como PPM e PML não estão inclusos.
</p> </p>
<ul class="conteudo_regiao"> <ul class="conteudo_regiao">
<li><a href="reportsRegiao/CO">Centro Oeste</a></li> <li><a href="reportsRegiao/CO">Centro Oeste</a></li>
<li><a href="reportsRegiao/NE">Nordeste</a></li> <li><a href="reportsRegiao/NE">Nordeste</a></li>
<li><a href="reportsRegiao/NO">Norte</a></li> <li><a href="reportsRegiao/NO">Norte</a></li>
<li><a href="reportsRegiao/SD">Sudeste</a></li> <li><a href="reportsRegiao/SD">Sudeste</a></li>
<li><a href="reportsRegiao/SL">Sul</a></li> <li><a href="reportsRegiao/SL">Sul</a></li>
</ul> </ul>
</div> </div>
</div> </div>
<div class="module" style="height: 300px;"> <div class="module" style="height: 300px;">
<h2>Convênios</h2> <h2>Convênios</h2>
<h3>Processos de convênios por projeto</h3> <div id="processos_conv" class="align-center" style="height: 280px;">
<div class="align-center">
{% if g_conv_proj.convenios %} {% if g_conv_proj.convenios %}
<img src="{{ processos.url }}&chdlp=b" class="chart" /> <img src="{{ processos.url }}&chdlp=b" class="chart" />
{% else %} {% else %}
<p>Nenhum dado para exibir</p> <p>Nenhum dado para exibir</p>
{% endif %} {% endif %}
</div> </div>
</div> </div>
<div class="module" style="height: 300px;"> <div class="module" style="height: 300px;">
<h2>Atendimentos</h2> <h2>Atendimentos</h2>
<h3>Mapa de atuação do Interlegis</h3> <h3>Mapa de atuação do Interlegis</h3>
<div class="align-center"> <div class="align-center">
<a href="/dashboard/mapa/"> <img src="{{ STATIC_URL }}img/mapicon-large.png" style="width: 60%;"/> </a> <a href="/dashboard/mapa/"> <img src="{{ STATIC_URL }}img/mapicon-large.png" style="width: 60%;"/> </a>
</div> </div>
{% comment %} {% comment %}
<h2>Metas BID</h2> <h2>Metas BID</h2>
<h3>Estado das metas do contrato BID</h3> <h3>Estado das metas do contrato BID</h3>
<table style="margin: auto;"> <table style="margin: auto;">

Loading…
Cancel
Save