diff --git a/media/images/mapicon-large.png b/media/images/mapicon-large.png
new file mode 100644
index 0000000..72fba13
Binary files /dev/null and b/media/images/mapicon-large.png differ
diff --git a/media/images/mapmarker.png b/media/images/mapmarker.png
index 7c0fc7e..61d7598 100644
Binary files a/media/images/mapmarker.png and b/media/images/mapmarker.png differ
diff --git a/media/js/metas/mapa.js b/media/js/metas/mapa.js
index 148d524..56a5bce 100644
--- a/media/js/metas/mapa.js
+++ b/media/js/metas/mapa.js
@@ -1,9 +1,9 @@
(function($) {
var map; // O mapa - Será carregado assim que o documento estiver pronto
- var markersArray = [];
+ var municipiosArray = [];
$(document).ready(function($) {
- $("#filter_form").bind('submit', ajax_submit);
+ $("input[type='checkbox']").change(filter);
var latlng = new google.maps.LatLng(-14.2350040, -51.925280);
var myOptions = {
zoom: 5,
@@ -16,31 +16,36 @@
})
function ajax_submit(event) {
- var data = $("#filter_form").serialize();
- $.post("/sigi/dashboard/map_data/", data, function(return_data) {
+ $.ajax({
+ url: "/sigi/dashboard/mapdata/",
+ type: 'GET',
+ cache: true,
+ success: function(return_data) {
// Delete all markers
- if (markersArray) {
- for (i in markersArray) {
- markersArray[i].setMap(null);
+ if (municipiosArray) {
+ for (i in municipiosArray) {
+ municipiosArray[i].setMap(null);
}
}
- markersArray.length = 0;
+ municipiosArray.length = 0;
- // Plot new markers
+ // Create new markers
for (var i in return_data) {
var municipio = return_data[i];
var markData = {
- map: map,
+ map: null, // Just create the mark, dont plot it
position: new google.maps.LatLng(parseFloat(municipio.lat), parseFloat(municipio.lng)),
title: municipio.nome,
icon: '/sigi/media/images/' + municipio.icone + '.png'
}
var mark = new google.maps.Marker(markData);
- markersArray.push(mark);
var infoWin = new google.maps.InfoWindow({content: '' + municipio.nome + '
' + municipio.info });
linkMarkMessage(mark, infoWin, map);
+ municipio['mapmark'] = mark
+ municipiosArray.push(municipio);
}
- });
+ filter(null);
+ }});
return false;
}
@@ -48,4 +53,50 @@
google.maps.event.addListener(mark, 'click', function() {infoWin.open(map, mark);});
}
+ function filter(event) {
+ var data = $("#filter_form").serializeArray();
+ var estados = [];
+ var regioes = [];
+
+ for (var i in data) {
+ var name = data[i].name, value = data[i].value;
+ if (name == 'estados') {
+ estados.push(value);
+ delete data[i];
+ } else if (name == 'regioes') {
+ regioes.push(value);
+ delete data[i];
+ }
+ }
+
+ for (var i in municipiosArray) {
+ var municipio = municipiosArray[i];
+ var aparece = false;
+
+ if (regioes.indexOf(municipio.regiao) == -1 && estados.indexOf(municipio.estado) == -1) {
+ aparece = false;
+ } else {
+ for (var j in data) {
+ if (data[j]) {
+ var name = data[j].name, value = data[j].value;
+ idx = municipio[name].indexOf(value);
+ if (idx != -1) {
+ aparece = true;
+ break;
+ }
+ }
+ }
+ }
+ if (aparece) {
+ if (municipio.mapmark.map == null) {
+ municipio.mapmark.setMap(map);
+ }
+ } else {
+ if (municipio.mapmark.map != null) {
+ municipio.mapmark.setMap(null);
+ }
+ }
+ }
+ }
+
})(django.jQuery);
\ No newline at end of file
diff --git a/sigi/apps/metas/views.py b/sigi/apps/metas/views.py
index 64fcafb..0a43d20 100644
--- a/sigi/apps/metas/views.py
+++ b/sigi/apps/metas/views.py
@@ -4,6 +4,7 @@ from django.utils import simplejson
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.apps.servicos.models import TipoServico, Servico
from sigi.apps.convenios.models import Projeto, Convenio
from sigi.apps.contatos.models import UnidadeFederativa
@@ -21,7 +22,7 @@ def mapa(request):
seit = [ ts.sigla for ts in servico_choices]
convenios = ['PML'] # Apenas o ultimo #hardcoded #fixme
- equipadas = [p.sigla for p in projeto_choices]
+ equipadas = [] #[p.sigla for p in projeto_choices]
diagnosticos = ['P'] # choices: ["A", "P"]
regioes = [r[0] for r in regiao_choices]
estados = []
@@ -41,110 +42,56 @@ def mapa(request):
return render_to_response('metas/mapa.html', extra_context, context_instance=RequestContext(request))
+
+@cache_page(86400) # Cache de um dia (24 horas = 86400 segundos)
def map_data(request):
"""
- Monta json com dados dos municípios conforme seleção do usuário
- """
-
- # Seleções default
- regiao_choices = UnidadeFederativa.REGIAO_CHOICES
-
- seit = request.POST.getlist('seit')
- convenios = request.POST.getlist('convenios')
- equipadas = request.POST.getlist('equipadas')
- diagnosticos = request.POST.getlist('diagnosticos')
- regioes = request.POST.getlist('regioes')
- estados = request.POST.getlist('estados')
-
- qRegiao = Q(municipio__uf__regiao__in=regioes) if len(regioes) < len(regiao_choices) else Q()
- qEstado = Q(municipio__uf__sigla__in=estados) if estados else Q()
- qSeit = Q(servico__data_desativacao=None, servico__tipo_servico__sigla__in=seit) if seit else Q()
- qConvenios = Q(~Q(convenio__data_retorno_assinatura=None), tipo__sigla='CM', convenio__projeto__sigla__in=convenios) if convenios else Q()
- qEquipadas = Q(tipo__sigla='CM', convenio__equipada=True, convenio__projeto__sigla__in=equipadas) if equipadas else Q()
- qDiagnosticos = Q((Q(diagnostico__publicado=True) if 'P' in diagnosticos else Q()) |
- (Q(diagnostico__publicado=False) if 'A' in diagnosticos else Q()))
-
+ Monta json com todos os dados dos municípios que têm relação com o Interlegis
+ """
+
casas = {}
- for c in CasaLegislativa.objects.select_related('servico', 'convenio', 'diagnostico').filter(qRegiao | qEstado).filter(qSeit |
- qConvenios | qEquipadas | qDiagnosticos).distinct():
+ for c in CasaLegislativa.objects.select_related('servico', 'convenio', 'diagnostico').all().distinct():
+ if c.servico_set.count() == 0 and c.convenio_set.count() == 0 and c.diagnostico_set.count() == 0:
+ continue; # Salta essa casa, pois ela não tem nada com o Interlegis
+
if not casas.has_key(c.pk):
casa = {
'nome': c.nome + ', ' + c.municipio.uf.sigla,
'icone': 'mapmarker',
'lat': str(c.municipio.latitude),
'lng': str(c.municipio.longitude),
+ 'estado': c.municipio.uf.sigla,
+ 'regiao': c.municipio.uf.regiao,
+ 'diagnosticos': [],
+ 'seit': [],
+ 'convenios': [],
+ 'equipadas': [],
'info': []
}
for sv in c.servico_set.all():
casa['info'].append(u"%s ativado em %s " % (sv.tipo_servico.nome, sv.data_ativacao.strftime('%d/%m/%Y'), sv.url))
+ casa['seit'].append(sv.tipo_servico.sigla)
for cv in c.convenio_set.all():
if (cv.data_retorno_assinatura is None) and (cv.equipada and cv.data_termo_aceite.strftime('%d/%m/%Y') is not None):
casa['info'].append(u"Equipada em %s pelo %s" % (cv.data_termo_aceite.strftime('%d/%m/%Y'), cv.projeto.sigla))
+ casa['equipadas'].append(cv.projeto.sigla)
if (cv.data_retorno_assinatura is not None) and not (cv.equipada and cv.data_termo_aceite.strftime('%d/%m/%Y') is not None):
casa['info'].append(u"Conveniada ao %s em %s" % (cv.projeto.sigla, cv.data_retorno_assinatura.strftime('%d/%m/%Y')))
+ casa['convenios'].append(cv.projeto.sigla)
if (cv.data_retorno_assinatura is not None) and (cv.equipada and cv.data_termo_aceite.strftime('%d/%m/%Y') is not None):
casa['info'].append(u"Conveniada ao %s em %s e equipada em %s" % (cv.projeto.sigla, cv.data_retorno_assinatura.strftime('%d/%m/%Y'), cv.data_termo_aceite.strftime('%d/%m/%Y')))
+ casa['equipadas'].append(cv.projeto.sigla)
+ casa['convenios'].append(cv.projeto.sigla)
for dg in c.diagnostico_set.all():
+ casa['diagnosticos'].append('P' if dg.publicado else 'A')
casa['info'].append(u'Diagnosticada no período de %s a %s' % (dg.data_visita_inicio.strftime('%d/%m/%Y'), dg.data_visita_fim.strftime('%d/%m/%Y')))
casa['info'] = "
".join(casa['info'])
casas[c.pk] = casa
-
-#-------------------------------------------------------------------------------------------------------------------------------
-# if seit:
-# for srv in Servico.objects.filter(qRegiao, qEstado, data_desativacao=None, tipo_servico__sigla__in=seit):
-# if casas.has_key(srv.casa_legislativa.id):
-# casa = casas[srv.casa_legislativa.id]
-# else:
-# casa = {
-# 'nome': srv.casa_legislativa.nome + ', ' + srv.casa_legislativa.municipio.uf.sigla,
-# 'icon': 'mapmarker',
-# 'lat': str(srv.casa_legislativa.municipio.latitude),
-# 'lng': str(srv.casa_legislativa.municipio.longitude),
-# 'info': []
-# }
-# casas[srv.casa_legislativa.id] = casa
-#
-# casa['info'].append(srv.tipo_servico.nome)
-#
-# if convenios:
-# for cnv in Convenio.objects.filter(qRegiao, qEstado, casa_legislativa__tipo__sigla='CM', projeto__sigla__in=convenios) \
-# .exclude(data_retorno_assinatura=None):
-# if casas.has_key(cnv.casa_legislativa.id):
-# casa = casas[cnv.casa_legislativa.id]
-# else:
-# casa = {
-# 'nome': cnv.casa_legislativa.nome + ', ' + cnv.casa_legislativa.municipio.uf.sigla,
-# 'icon': 'mapmarker',
-# 'lat': str(cnv.casa_legislativa.municipio.latitude),
-# 'lng': str(cnv.casa_legislativa.municipio.longitude),
-# 'info': []
-# }
-# casas[cnv.casa_legislativa.id] = casa
-#
-# casa['info'].append('Convênio %s assinado em %s' % (cnv.projeto.sigla, cnv.data_retorno_assinatura))
-#
-# if equipadas:
-# for eqp in Convenio.objects.filter(qRegiao, qEstado, casa_legislativa__tipo__sigla='CM', equipada=True, projeto__sigla__in=equipadas)\
-# .exclude(data_termo_aceite=None):
-# if casas.has_key(eqp.casa_legislativa.id):
-# casa = casas[eqp.casa_legislativa.id]
-# else:
-# casa = {
-# 'nome': eqp.casa_legislativa.nome + ', ' + eqp.casa_legislativa.municipio.uf.sigla,
-# 'icon': 'mapmarker',
-# 'lat': str(eqp.casa_legislativa.municipio.latitude),
-# 'lng': str(eqp.casa_legislativa.municipio.longitude),
-# 'info': []
-# }
-# casas[eqp.casa_legislativa.id] = casa
-#
-# casa['info'].append('Equipada pelo %s em %s' % (eqp.projeto.sigla, eqp.data_termo_aceite))
-#-------------------------------------------------------------------------------------------------------------------------------
-
+
return HttpResponse(simplejson.dumps(casas), mimetype="application/json")
diff --git a/sigi/settings.py b/sigi/settings.py
index e7d43f0..90534b1 100644
--- a/sigi/settings.py
+++ b/sigi/settings.py
@@ -109,7 +109,7 @@ AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)
-CACHE_BACKEND = 'dummy:///'
+CACHE_BACKEND = 'locmem://' # Considerar seriamente a possibilidade de usar o memcached
CACHE_MIDDLEWARE_SECONDS = 60
CACHE_MIDDLEWARE_KEY_PREFIX = 'sigi'
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = False
@@ -134,6 +134,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
)
MIDDLEWARE_CLASSES = (
+ 'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.http.ConditionalGetMiddleware',
'django.middleware.gzip.GZipMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
@@ -141,6 +142,7 @@ MIDDLEWARE_CLASSES = (
'django.middleware.cache.CacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.doc.XViewMiddleware',
+ 'django.middleware.cache.FetchFromCacheMiddleware',
)
ROOT_URLCONF = 'sigi.urls'
diff --git a/sigi/templates/metas/mapa.html b/sigi/templates/metas/mapa.html
index 17f247b..700369f 100644
--- a/sigi/templates/metas/mapa.html
+++ b/sigi/templates/metas/mapa.html
@@ -23,7 +23,6 @@