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 link" % (sv.tipo_servico.nome, sv.data_ativacao.strftime('%d/%m/%Y'), sv.url)) + casa['info'].append(u"%s ativado em %s link" % ( + 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 @@