diff --git a/media/js/metas/mapa.js b/media/js/metas/mapa.js
index 8beb97c..f676854 100644
--- a/media/js/metas/mapa.js
+++ b/media/js/metas/mapa.js
@@ -8,6 +8,7 @@
$("#closeiwlink").click( closeAllInfowindows );
$("#summary_report").click( open_report );
$("#list_report").click( open_report );
+ $("#list_csv").click( open_report );
var latlng = new google.maps.LatLng(-14.2350040, -51.925280);
var myOptions = {
zoom: 5,
@@ -181,7 +182,12 @@
function open_report(event) {
var data = $("#filter_form").serialize();
- var href = this.href + "?" + data;
+ var href = this.href;
+ if (href.indexOf("?") < 0) {
+ href = href + "?" + data
+ } else {
+ href = href + "&" + data
+ }
var win = window.open(href, '', '');
win.focus();
return false;
diff --git a/sigi/apps/metas/views.py b/sigi/apps/metas/views.py
index 0fbc8bc..21e66ed 100644
--- a/sigi/apps/metas/views.py
+++ b/sigi/apps/metas/views.py
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
+import csv
from django.http import HttpResponse
from django.core.exceptions import PermissionDenied
from django.utils import simplejson
@@ -7,16 +8,17 @@ 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 django.db.models.aggregates import Sum
+from django.contrib.auth.decorators import user_passes_test, login_required
+from sigi.settings import MEDIA_ROOT
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
from sigi.apps.casas.models import CasaLegislativa
from sigi.apps.utils import to_ascii
-from apps.financeiro.models import Desembolso
-from django.db.models.aggregates import Sum
-from django.contrib.auth.decorators import user_passes_test, login_required
-from sigi.settings import MEDIA_ROOT
+from sigi.apps.financeiro.models import Desembolso
+from sigi.apps.metas.templatetags.mapa_tags import descricao_servicos
JSON_FILE_NAME = MEDIA_ROOT + 'apps/metas/map_data.json'
@@ -188,12 +190,46 @@ def map_sum(request):
}
return render_to_pdf('metas/map_sum.html', extra_context)
+@cache_page(86400) # Cache de um dia (24 horas = 86400 segundos)
def map_list(request):
# Filtrar Casas de acordo com os parâmetros
param = get_params(request)
+ formato = request.GET.get('fmt', 'pdf')
casas = filtrar_casas(**param)
casas = casas.order_by('municipio__uf__regiao', 'municipio__uf__nome', 'nome').distinct()
+
+ if formato == 'csv':
+ response = HttpResponse(content_type='text/csv')
+ response['Content-Disposition'] = 'attachment; filename="maplist.csv"'
+ writer = csv.writer(response)
+
+ srv = {ts.pk: ts.nome for ts in TipoServico.objects.all()}
+ cnv = {pr.id: pr.sigla for pr in Projeto.objects.all()}
+
+ writer.writerow([u'codigo_ibge', u'nome_casa', u'municipio', u'uf', u'regiao',] + [x for x in srv.values()] +
+ reduce(lambda x,y: x+y, [['conveniada ao %s' % x, 'equipada por %s' % x] for x in cnv.values()]))
+
+ for casa in casas:
+ row = [casa.municipio.codigo_ibge, casa.nome, casa.municipio.nome, casa.municipio.uf.sigla,
+ casa.municipio.uf.get_regiao_display(),]
+ for id in srv.keys():
+ try:
+ sv = casa.servico_set.get(tipo_servico__id=id)
+ row += [sv.data_ativacao,]
+ except:
+ row += [None,]
+ for id in cnv.keys():
+ try:
+ cv = casa.convenio_set.get(projeto__id=id)
+ row += [cv.data_retorno_assinatura, cv.data_termo_aceite if cv.equipada else None,]
+ except:
+ row += [None, None,]
+
+ writer.writerow(row)
+ return response
+
return render_to_pdf('metas/map_list.html', {'casas': casas})
+
#----------------------------------------------------------------------------------------------------
# Funções auxiliares - não são views
@@ -259,24 +295,28 @@ def gera_map_data_file(cronjob=False):
}
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['info'].append(u"%s ativado em %s " % (
+ sv.tipo_servico.nome, sv.data_ativacao.strftime('%d/%m/%Y') if sv.data_ativacao else
+ u'', 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):
+ if (cv.data_retorno_assinatura is None) and (cv.equipada and cv.data_termo_aceite 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):
+ if (cv.data_retorno_assinatura is not None) and not (cv.equipada and cv.data_termo_aceite 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):
+ if (cv.data_retorno_assinatura is not None) and (cv.equipada and cv.data_termo_aceite 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'].append(u'Diagnosticada no período de %s a %s' % (dg.data_visita_inicio.strftime('%d/%m/%Y') if
+ dg.data_visita_inicio is not None else u"",
+ dg.data_visita_fim.strftime('%d/%m/%Y') if dg.data_visita_fim else u""))
casa['info'] = "
".join(casa['info'])
diff --git a/sigi/templates/metas/mapa.html b/sigi/templates/metas/mapa.html
index 5651d87..18fc7d4 100644
--- a/sigi/templates/metas/mapa.html
+++ b/sigi/templates/metas/mapa.html
@@ -31,6 +31,7 @@