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
from sigi.apps.casas.models import CasaLegislativa
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.diagnosticos.models import Diagnostico
from sigi.apps.metas.models import Meta
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_assinados = convenios.exclude(data_retorno_assinatura=None)
@ -23,19 +22,20 @@ def charts_data(request):
g_convassinado_proj = grafico_convenio_projeto(convenios_assinados)
return {
'tabela_resumo_camara' : tabela_resumo_camara,
'tabela_resumo_seit' : tabela_resumo_seit,
'tabela_resumo_camara': tabela_resumo_camara,
'tabela_resumo_seit': tabela_resumo_seit,
'tabela_resumo_diagnostico': tabela_resumo_diagnostico,
'g_conv_proj': g_conv_proj,
"g_convassinado_proj":g_convassinado_proj,
"g_convassinado_proj": g_convassinado_proj,
'metas': Meta.objects.all(),
}
def busca_informacoes_camara():
'''
Busca informacoes no banco para montar tabela de resumo de camaras por projeto
Retorna um dicionario de listas
'''
"""
Busca informacoes no banco para montar tabela de resumo de camaras por projeto
Retorna um dicionario de listas
"""
camaras = CasaLegislativa.objects.filter(tipo__sigla='CM')
convenios = Convenio.objects.filter(casa_legislativa__tipo__sigla='CM')
projetos = Projeto.objects.all()
@ -52,10 +52,10 @@ def busca_informacoes_camara():
# 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_nao_aderidas = []
lista_nao_aderidas = []
lista_aderidas = []
lista_convenios_assinados = []
lista_convenios_em_andamento = []
@ -63,7 +63,7 @@ def busca_informacoes_camara():
for projeto in projetos:
conv_sem_adesao_proj = convenios_sem_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_equipadas_proj = convenios_com_aceite.filter(projeto=projeto)
@ -111,23 +111,24 @@ def busca_informacoes_camara():
return {
u'cabecalho_topo': cabecalho_topo,
u'lista_zip': lista_zip,
u'total_camaras' : camaras.count(),
u'total_camaras': camaras.count(),
u'camaras_sem_processo': camaras_sem_processo.count(),
}
def grafico_convenio_projeto(convenios):
projetos = Projeto.objects.all()
lista_convenios = []
lista_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():
mes_atual = datetime.date.today().replace(day=1)
@ -149,8 +150,9 @@ def busca_informacoes_seit():
return result
def busca_informacoes_diagnostico():
return [
{'title': 'Diagnósticos digitados', 'count': Diagnostico.objects.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 %}>
<head>
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% 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 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>
{% block extrahead %}{% endblock %}
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% 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 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>
{% block extrahead %}{% endblock %}
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
</head>
{% load i18n %}
@ -20,43 +21,43 @@
{% block container-top %}{% endblock %}
{% if not is_popup %}
<!-- Header -->
<div id="header">
<div id="branding">
{% block branding %}{% endblock %}
<!-- Header -->
<div id="header">
<div id="branding">
{% 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>
{% 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>
<!-- END Header -->
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
{% if title %} &rsaquo; {{ title }}{% endif %}
</div>
{% endblock %}
<!-- END Header -->
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
{% if title %} &rsaquo; {{ title }}{% endif %}
</div>
{% endblock %}
{% endif %}
{% block messages %}
{% if messages %}
<ul class="messagelist">{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message|capfirst }}</li>
{% endfor %}</ul>
<ul class="messagelist">{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message|capfirst }}</li>
{% endfor %}</ul>
{% endif %}
{% endblock messages %}
@ -65,8 +66,8 @@
{% block pretitle %}{% endblock %}
{% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
{% block content %}
{% block object-tools %}{% endblock %}
{{ content }}
{% block object-tools %}{% endblock %}
{{ content }}
{% endblock %}
{% block sidebar %}{% endblock %}
<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="https://maps.google.com/maps/api/js?sensor=false"> </script>
<script type="text/javascript">
(function($) {
$(document).ready(function($) {
var latlng = new google.maps.LatLng(-14.2350040, -51.925280);
var myOptions = {
zoom: 3,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
(function($) {
$(document).ready(function($) {
var latlng = new google.maps.LatLng(-14.2350040, -51.925280);
var myOptions = {
zoom: 3,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
$.get("/diagnosticos/mundiagjson/", function(municipios) {
for (var i in municipios) {
var municipio = municipios[i];
var markData = {
map: map,
position: new google.maps.LatLng(municipio.lat, municipio.lng),
title: municipio.nome,
icon: '{{ STATIC_URL }}img/mapmarker.png'
$.get("/diagnosticos/mundiagjson/", function(municipios) {
for (var i in municipios) {
var municipio = municipios[i];
var markData = {
map: map,
position: new google.maps.LatLng(municipio.lat, municipio.lng),
title: municipio.nome,
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/>' +
'<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);
}
});
});
function linkMarkMessage(mark, infoWin, map) {
google.maps.event.addListener(mark, 'click', function() {
infoWin.open(map, mark);});
}
})
})(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) {
google.maps.event.addListener(mark, 'click', function() {
infoWin.open(map, mark);});
}
})
})(django.jQuery);
// Build the chart
$('#processos_conv').highcharts({
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
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>
{# end highcharts scripts #}
{% endblock %}
{% block content_title %}<h1>Dashboard</h1>{% endblock %}
@ -60,14 +144,14 @@
{% block breadcrumbs %}{% endblock %}
{% block content %}
<div id="content-main">
{% include "snippets/modules/charts-convenios.html" %}
</div>
<div id="content-main">
{% include "snippets/modules/charts-convenios.html" %}
</div>
{% endblock %}
{% block sidebar %}
<div id="content-related">
{% include "snippets/modules/user.html" %}
{% include "snippets/modules/actions.html" %}
</div>
<div id="content-related">
{% include "snippets/modules/user.html" %}
{% include "snippets/modules/actions.html" %}
</div>
{% 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;">
<h2>Resumo de informações</h2>
<!-- h3>Câmaras municipais por projeto</h3 -->
<div class="align-center">
<table>
<table>
<tr>
{% for item in tabela_resumo_camara.cabecalho_topo %}
<th>{{item}}</th>
<th>{{item}}</th>
{% endfor %}
</tr>
{% for cabecalho,lista in tabela_resumo_camara.lista_zip %}
<tr>
<th>{{cabecalho}}</th>
{% for item in lista %}
<td>{{item}}</td>
{% endfor %}
</tr>
<tr>
<th>{{cabecalho}}</th>
{% for item in lista %}
<td>{{item}}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
</div>
<ul>
<li>Câmaras sem processo: {{tabela_resumo_camara.camaras_sem_processo}}</li>
<li>Total de câmaras: {{tabela_resumo_camara.total_camaras}}</li>
</ul>
<ul>
<li>Câmaras sem processo: {{tabela_resumo_camara.camaras_sem_processo}}</li>
<li>Total de câmaras: {{tabela_resumo_camara.total_camaras}}</li>
</ul>
</div>
<div class="module" style="height: 300px;">
<h2>Convênios</h2>
<h3>Convênios assinados por projeto</h3>
<div class="align-center">
<div id="processos_conv_ass" class="align-center" style="height: 280px;">
{% if g_convassinado_proj.convenios %}
<img src="{{ convenios_assinados.url }}&chdlp=b" class="chart" />
<img src="{{ convenios_assinados.url }}&chdlp=b" class="chart" />
{% else %}
<p>Nenhum dado para exibir</p>
<p>Nenhum dado para exibir</p>
{% endif %}
</div>
</div>
<div class="module" style="height: 300px;">
<h2>Serviços</h2>
<div class="titlemapbox">
<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>
</div>
<h2>Serviços</h2>
<div class="titlemapbox">
<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>
</div>
<table>
<tr>
</tr>
{% for servico in tabela_resumo_seit %}
<tr>
{% if forloop.first %}
<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.novos_mes_anterior }}</th>
<th style="width: 20%; vertical-align:bottom; text-align: right;">{{ servico.novos_mes_atual }}</th>
{% else %}
<th style="width: 40%;">{{ servico.nome }}</th>
<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_atual }}</td>
{% endif %}
</tr>
{% endfor %}
</table>
<table>
<tr>
</tr>
{% for servico in tabela_resumo_seit %}
<tr>
{% if forloop.first %}
<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.novos_mes_anterior }}</th>
<th style="width: 20%; vertical-align:bottom; text-align: right;">{{ servico.novos_mes_atual }}</th>
{% else %}
<th style="width: 40%;">{{ servico.nome }}</th>
<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_atual }}</td>
{% endif %}
</tr>
{% endfor %}
</table>
</div>
<div class="module" style="height: 300px;">
<h2>Resumo de informações</h2>
<h3>Resumo de informações por região</h3>
<div >
<p style="text-align: justify">
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.
</p>
<p style="text-align: justify">
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.
</p>
<ul class="conteudo_regiao">
<li><a href="reportsRegiao/CO">Centro Oeste</a></li>
<li><a href="reportsRegiao/NE">Nordeste</a></li>
<li><a href="reportsRegiao/NO">Norte</a></li>
<li><a href="reportsRegiao/SD">Sudeste</a></li>
<li><a href="reportsRegiao/SL">Sul</a></li>
<li><a href="reportsRegiao/CO">Centro Oeste</a></li>
<li><a href="reportsRegiao/NE">Nordeste</a></li>
<li><a href="reportsRegiao/NO">Norte</a></li>
<li><a href="reportsRegiao/SD">Sudeste</a></li>
<li><a href="reportsRegiao/SL">Sul</a></li>
</ul>
</div>
</div>
<div class="module" style="height: 300px;">
<h2>Convênios</h2>
<h3>Processos de convênios por projeto</h3>
<div class="align-center">
<div id="processos_conv" class="align-center" style="height: 280px;">
{% if g_conv_proj.convenios %}
<img src="{{ processos.url }}&chdlp=b" class="chart" />
<img src="{{ processos.url }}&chdlp=b" class="chart" />
{% else %}
<p>Nenhum dado para exibir</p>
<p>Nenhum dado para exibir</p>
{% endif %}
</div>
</div>
<div class="module" style="height: 300px;">
<h2>Atendimentos</h2>
<h3>Mapa de atuação do Interlegis</h3>
<div class="align-center">
<a href="/dashboard/mapa/"> <img src="{{ STATIC_URL }}img/mapicon-large.png" style="width: 60%;"/> </a>
</div>
{% comment %}
<h2>Atendimentos</h2>
<h3>Mapa de atuação do Interlegis</h3>
<div class="align-center">
<a href="/dashboard/mapa/"> <img src="{{ STATIC_URL }}img/mapicon-large.png" style="width: 60%;"/> </a>
</div>
{% comment %}
<h2>Metas BID</h2>
<h3>Estado das metas do contrato BID</h3>
<table style="margin: auto;">

Loading…
Cancel
Save