Browse Source

Melhorias no Mapa de Atuação do Interlegis

stable/1.0
Sesostris Vieira 12 years ago
parent
commit
2ce1028063
  1. 39
      media/js/metas/mapa.js
  2. 115
      sigi/apps/metas/views.py
  3. 7
      sigi/templates/base_report.html
  4. 24
      sigi/templates/metas/mapa.html
  5. 2
      sigi/urls.py

39
media/js/metas/mapa.js

@ -6,6 +6,8 @@
$("input[type='checkbox']").change( filter );
$("#changelist-search").submit( search );
$("#closeiwlink").click( closeAllInfowindows );
$("#summary_report").click( open_report );
$("#list_report").click( open_report );
var latlng = new google.maps.LatLng(-14.2350040, -51.925280);
var myOptions = {
zoom: 5,
@ -65,6 +67,8 @@
var estados = [];
var regioes = [];
$(".totalizador").text("0");
for (var i in data) {
var name = data[i].name, value = data[i].value;
if (name == 'estados') {
@ -99,6 +103,33 @@
if (municipio.mapmark.map == null) {
municipio.mapmark.setMap(map);
}
var qtde = $("#" + municipio.regiao + ".totalizador").text();
qtde = parseInt(qtde);
qtde++;
$("#" + municipio.regiao + ".totalizador").text(qtde);
qtde = parseInt($("#" + municipio.estado + ".totalizador").text());
$("#" + municipio.estado + ".totalizador").text(++qtde);
for (var j in municipio.seit) {
qtde = parseInt($("#" + municipio.seit[j] + ".totalizador").text());
$("#" + municipio.seit[j] + ".totalizador").text(++qtde);
}
for (var j in municipio.convenios) {
qtde = parseInt($("#convenio_" + municipio.convenios[j] + ".totalizador").text());
$("#convenio_" + municipio.convenios[j] + ".totalizador").text(++qtde);
}
for (var j in municipio.equipadas) {
qtde = parseInt($("#equip_" + municipio.equipadas[j] + ".totalizador").text());
$("#equip_" + municipio.equipadas[j] + ".totalizador").text(++qtde);
}
for (var j in municipio.diagnosticos) {
qtde = parseInt($("#diagnostico_" + municipio.diagnosticos[j] + ".totalizador").text());
$("#diagnostico_" + municipio.diagnosticos[j] + ".totalizador").text(++qtde);
}
} else {
if (municipio.mapmark.map != null) {
municipio.mapmark.setMap(null);
@ -148,4 +179,12 @@
return false;
}
function open_report(event) {
var data = $("#filter_form").serialize();
var href = this.href + "?" + data;
var win = window.open(href, '', '');
win.focus();
return false;
}
})(django.jQuery);

115
sigi/apps/metas/views.py

@ -1,10 +1,12 @@
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.utils import simplejson
from django.utils.datastructures import SortedDict
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.db.models import Q
from django.views.decorators.cache import cache_page
from sigi.shortcuts import render_to_pdf
from sigi.apps.servicos.models import TipoServico, Servico
from sigi.apps.convenios.models import Projeto, Convenio
from sigi.apps.contatos.models import UnidadeFederativa
@ -110,3 +112,116 @@ def map_search(request):
response = {'result': 'FOUND', 'ids': [c.pk for c in casas]}
return HttpResponse(simplejson.dumps(response), mimetype="application/json")
@cache_page(86400) # Cache de um dia (24 horas = 86400 segundos)
def map_sum(request):
# Filtrar Casas de acordo com os parâmetros
param = get_params(request)
casas = filtrar_casas(**param)
# Montar registros de totalização
tot_servicos = SortedDict()
tot_projetos = SortedDict()
tot_diagnosticos = SortedDict()
for ts in TipoServico.objects.all():
tot_servicos[ts.sigla] = 0
for pr in Projeto.objects.all():
tot_projetos[pr.sigla] = 0
tot_convenios = tot_projetos.copy()
tot_equipadas = tot_projetos.copy()
tot_diagnosticos['A'] = 0
tot_diagnosticos['P'] = 0
# Montar as linhas do array de resultados com as regiões e os estados
result = {}
for uf in UnidadeFederativa.objects.filter(Q(regiao__in=param['regioes']) | Q(sigla__in=param['estados'])).order_by('regiao', 'nome'):
if not result.has_key(uf.regiao):
result[uf.regiao] = {'nome': uf.get_regiao_display(), 'ufs': {}, 'servicos': tot_servicos.copy(),
'convenios': tot_projetos.copy(), 'equipadas': tot_projetos.copy(),
'diagnosticos': tot_diagnosticos.copy()}
result[uf.regiao]['ufs'][uf.codigo_ibge] = {'nome': uf.nome, 'servicos': tot_servicos.copy(),
'convenios': tot_projetos.copy(), 'equipadas': tot_projetos.copy(),
'diagnosticos': tot_diagnosticos.copy()}
# Processar as casas filtradas
for casa in casas.distinct():
uf = casa.municipio.uf
for s in casa.servico_set.all():
tot_servicos[s.tipo_servico.sigla] += 1
result[uf.regiao]['servicos'][s.tipo_servico.sigla] += 1
result[uf.regiao]['ufs'][uf.codigo_ibge]['servicos'][s.tipo_servico.sigla] += 1
for c in casa.convenio_set.all():
tot_convenios[c.projeto.sigla] += 1
result[uf.regiao]['convenios'][c.projeto.sigla] += 1
result[uf.regiao]['ufs'][uf.codigo_ibge]['convenios'][c.projeto.sigla] += 1
if (c.equipada and c.data_termo_aceite is not None):
tot_equipadas[c.projeto.sigla] += 1
result[uf.regiao]['equipadas'][c.projeto.sigla] += 1
result[uf.regiao]['ufs'][uf.codigo_ibge]['equipadas'][c.projeto.sigla] += 1
for d in casa.diagnostico_set.all():
if d.publicado:
tot_diagnosticos['P'] += 1
result[uf.regiao]['diagnosticos']['P'] += 1
result[uf.regiao]['ufs'][uf.codigo_ibge]['diagnosticos']['P'] += 1
else:
tot_diagnosticos['A'] += 1
result[uf.regiao]['diagnosticos']['A'] += 1
result[uf.regiao]['ufs'][uf.codigo_ibge]['diagnosticos']['A'] += 1
extra_context = {
'pagesize': 'a4 landscape',
'servicos': TipoServico.objects.all(),
'projetos': Projeto.objects.all(),
'result': result,
'tot_servicos': tot_servicos,
'tot_convenios': tot_convenios,
'tot_equipadas': tot_equipadas,
'tot_diagnosticos': tot_diagnosticos,
}
return render_to_pdf('metas/map_sum.html', extra_context)
def map_list(request):
# Filtrar Casas de acordo com os parâmetros
param = get_params(request)
casas = filtrar_casas(**param)
casas = casas.order_by('municipio__uf__regiao', 'municipio__uf__nome', 'nome').distinct()
return render_to_pdf('metas/map_list.html', {'casas': casas})
#----------------------------------------------------------------------------------------------------
# Funções auxiliares - não são views
#----------------------------------------------------------------------------------------------------
# Pegar parâmetros da pesquisa
def get_params(request):
return {
'seit' : request.GET.getlist('seit'),
'convenios' : request.GET.getlist('convenios'),
'equipadas' : request.GET.getlist('equipadas'),
'diagnosticos' : request.GET.getlist('diagnosticos'),
'regioes' : request.GET.getlist('regioes'),
'estados' : request.GET.getlist('estados'),
}
# Filtrar Casas que atendem aos parâmetros de pesquisa
def filtrar_casas(seit, convenios, equipadas, regioes, estados, diagnosticos):
qServico = Q(servico__tipo_servico__sigla__in=seit)
qConvenio = Q(convenio__projeto__sigla__in=convenios)
qEquipada = Q(convenio__projeto__sigla__in=equipadas, convenio__equipada=True)
qRegiao = Q(municipio__uf__regiao__in=regioes)
qEstado = Q(municipio__uf__sigla__in=estados)
if diagnosticos:
qDiagnostico = Q(diagnostico__publicado__in=[p == 'P' for p in diagnosticos])
else:
qDiagnostico = Q()
casas = CasaLegislativa.objects.filter(qServico | qConvenio | qEquipada | qDiagnostico).filter(qRegiao | qEstado)
return casas

7
sigi/templates/base_report.html

@ -50,8 +50,6 @@
@frame footer {
-pdf-frame-content: footer;
bottom: 0cm;
margin-left: 9cm;
margin-right: 9cm;
height: 1cm;
}
}
@ -66,7 +64,8 @@
<td class="logo"><img src="{{MEDIA_URL}}images/logo-senado.jpg"/></td>
<td class="header_text">
<p><strong>SENADO FEDERAL</strong></p>
<p><strong>SECRETARIA ESPECIAL DO INTERLEGIS – SINTER</strong></p>
<p><strong>INSTITUTO LEGISLATIVO BRASILEIRO - ILB</strong></p>
<p><strong>PROGRAMA INTERLEGIS</strong></p>
<p>{% block subsecretaria %}{% endblock %}</p>
</td>
<td class="logo"><img src="{{MEDIA_URL}}images/logo-interlegis.jpg"/></td>
@ -75,7 +74,7 @@
</div>
{% block report %}
{% endblock %}
<div id="footer">
<div id="footer" style="text-align: center;">
{%block page_foot%}
Página <pdf:pagenumber>
{%endblock%}

24
sigi/templates/metas/mapa.html

@ -11,6 +11,9 @@
<script type="text/javascript" src="{% admin_media_prefix %}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="{{ MEDIA_URL }}js/metas/mapa.js"></script>
<style>
.totalizador { float:right; }
</style>
{% endblock %}
{% block content_title %}
@ -26,9 +29,9 @@
</div>
</form>
<ul class="object-tools">
<li>
<a href="#" id="closeiwlink">Fechar todas as janelas de informação</a>
</li>
<li> <a href="/sigi/dashboard/mapsum/" id="summary_report" onclick="return false;">Relatório resumo</a> </li>
<li> <a href="/sigi/dashboard/maplist/" id="list_report" onclick="return false;">Listagem das Casas</a> </li>
<li> <a href="#" id="closeiwlink">Fechar todas as janelas de informação</a> </li>
</ul>
</div>
</div>
@ -40,7 +43,7 @@
{% endblock %}
{% block sidebar %}
<form id="filter_form" method="post" action="">
<form id="filter_form" method="get" action="">
<div id="content-related">
<div class="module" id="filters"> {% comment %} Adicione style="overflow: auto; height: 800px;" para rolar apenas na caixa de filtros {% endcomment %}
<h2>Filtros</h2>
@ -50,6 +53,7 @@
<li><input type="checkbox" name="seit" value="{{ s.sigla }}"
{% if s.sigla in seit %} checked="checked" {% endif %}/>
{{ s.nome }}
<span id="{{ s.sigla }}" class="totalizador">&nbsp;</span>
</li>
{% endfor %}
</ul>
@ -57,27 +61,28 @@
<ul>
{% for p in projeto_choices %}
<li><input type="checkbox" name="convenios" value="{{ p.sigla }}" {% if p.sigla in convenios %}checked="checked" {% endif %}/>
ao {{ p.sigla }}</li>
ao {{ p.sigla }} <span id="convenio_{{ p.sigla }}" class="totalizador">&nbsp;</span> </li>
{% endfor %}
</ul>
<h3>Por Casas equipadas</h3>
<ul>
{% for p in projeto_choices %}
<li><input type="checkbox" name="equipadas" value="{{ p.sigla }}" {% if p.sigla in equipadas %}checked="checked"{% endif %} />
pelo {{ p.sigla }}</li>
pelo {{ p.sigla }}<span id="equip_{{ p.sigla }}" class="totalizador">&nbsp;</span> </li></li>
{% endfor %}
</ul>
<h3>Por Diagnósticos</h3>
<ul>
<li><input type="checkbox" name="diagnosticos" value="A" {% if "A" in diagnosticos %}checked="checked" {% endif %}/>
Em andamento</li>
Em andamento<span id="diagnostico_A" class="totalizador">&nbsp;(1)</span></li>
<li><input type="checkbox" name="diagnosticos" value="P" {% if "P" in diagnosticos %}checked="checked" {% endif %}/>
Publicados</li>
Publicados<span id="diagnostico_P" class="totalizador">&nbsp;(1)</span></li>
</ul>
<h3>Por região</h3>
<ul>
{% for r in regiao_choices %}
<li><input type="checkbox" name="regioes" value="{{ r.0 }}" {% if r.0 in regioes %}checked="checked"{% endif %}/> {{ r.1 }}</li>
<li><input type="checkbox" name="regioes" value="{{ r.0 }}" {% if r.0 in regioes %}checked="checked"{% endif %}/> {{ r.1 }}
<span id="{{ r.0 }}" class="totalizador">&nbsp;(1)</span></li>
{% endfor %}
</ul>
<h3>Por Estado</h3>
@ -86,6 +91,7 @@
<li><input type="checkbox" name="estados" value="{{ e.sigla }}"
{% if e.sigla in estados %} checked="checked" {% endif %}/>
{{ e.nome }}
<span id="{{ e.sigla }}" class="totalizador">&nbsp;(1)</span>
</li>
{% endfor %}
</ul>

2
sigi/urls.py

@ -100,6 +100,8 @@ urlpatterns = patterns(
(r'^sigi/dashboard/mapa/$', 'sigi.apps.metas.views.mapa'),
(r'^sigi/dashboard/mapdata/$', 'sigi.apps.metas.views.map_data'),
(r'^sigi/dashboard/mapsearch/$', 'sigi.apps.metas.views.map_search'),
(r'^sigi/dashboard/mapsum/$', 'sigi.apps.metas.views.map_sum'),
(r'^sigi/dashboard/maplist/$', 'sigi.apps.metas.views.map_list'),
# automatic interface based on admin
#(r'^sigi/(.*)', sites.default.root),
(r'^sigi/', include(sites.default.urls)),

Loading…
Cancel
Save