Browse Source

Refactor parliament summary for map views

Removed code duplication
producao
Marcio Mazza 10 years ago
parent
commit
ff94be8a59
  1. 27
      sigi/apps/metas/templatetags/mapa_tags.py
  2. 89
      sigi/apps/metas/views.py

27
sigi/apps/metas/templatetags/mapa_tags.py

@ -1,37 +1,20 @@
# -*- coding: utf-8 -*-
from django import template
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
from sigi.apps.casas.models import CasaLegislativa
from sigi.apps.metas.views import parliament_summary
register = template.Library()
@register.filter(name='map_desc_serv')
def descricao_servicos(value):
if not isinstance(value, CasaLegislativa):
def descricao_servicos(casa):
if not isinstance(casa, CasaLegislativa):
return ""
result = ""
for sv in value.servico_set.all():
result += _(u'<li>%s ativado em %s</li>') % (sv.tipo_servico.nome, sv.data_ativacao.strftime('%d/%m/%Y'))
for cv in value.convenio_set.all():
if (cv.data_retorno_assinatura is None) and (cv.equipada and cv.data_termo_aceite is not None):
result += _(u"<li>Equipada em %s pelo %s</li>") % (cv.data_termo_aceite.strftime('%d/%m/%Y'), cv.projeto.sigla)
if (cv.data_retorno_assinatura is not None) and not (cv.equipada and cv.data_termo_aceite is not None):
result += _(u"<li>Conveniada ao %s em %s</li>") % (cv.projeto.sigla, cv.data_retorno_assinatura.strftime('%d/%m/%Y'))
if (cv.data_retorno_assinatura is not None) and (cv.equipada and cv.data_termo_aceite is not None):
result += _(u"<li>Conveniada ao %s em %s e equipada em %s</li>") % (cv.projeto.sigla, cv.data_retorno_assinatura.strftime('%d/%m/%Y'), cv.data_termo_aceite.strftime('%d/%m/%Y'))
for dg in value.diagnostico_set.all():
result += _(u'<li>Diagnosticada no período de %s a %s</li>') % (dg.data_visita_inicio.strftime('%d/%m/%Y') if dg.data_visita_inicio
else _(u"<< sem data inicial >>"),
dg.data_visita_fim.strftime('%d/%m/%Y') if dg.data_visita_fim
else _(u"<< sem data final >>"))
summary = parliament_summary(casa)
result = ''.join('<li>%s</li>' % info for info in summary['info'])
return mark_safe(result)
descricao_servicos.is_safe = True

89
sigi/apps/metas/views.py

@ -13,6 +13,7 @@ from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext as _
from django.views.decorators.cache import cache_page
from easy_thumbnails.templatetags.thumbnail import thumbnail_url
@ -295,15 +296,38 @@ def gera_map_data_file(cronjob=False):
# Salta essa casa, pois ela não tem nada com o Interlegis
if c.pk not in casas:
casa = {
'nome': c.nome + ', ' + c.municipio.uf.sigla,
summary = parliament_summary(c)
summary['info'] = "<br/>".join(summary['info'])
casas[c.pk] = summary
json_data = simplejson.dumps(casas)
try:
file = open(JSON_FILE_NAME, 'w')
file.write(json_data)
file.close()
except Exception as e: # A gravação não foi bem sucedida ...
if cronjob: # ... o chamador deseja a mensagem de erro
return str(e)
else:
pass # ... ou os dados poderão ser usados de qualquer forma
if cronjob:
return _(u"Arquivo %s gerado em %d segundos") % (JSON_FILE_NAME, time.time() - start)
return json_data
def parliament_summary(parliament):
summary = {
'nome': parliament.nome + ', ' + parliament.municipio.uf.sigla,
'icone': '/static/img/mapmarker.png',
'thumb': thumbnail_url(c.foto, 'small'),
'foto': (c.foto.url if c.foto else ''),
'lat': str(c.municipio.latitude),
'lng': str(c.municipio.longitude),
'estado': c.municipio.uf.sigla,
'regiao': c.municipio.uf.regiao,
'thumb': thumbnail_url(parliament.foto, 'small'),
'foto': (parliament.foto.url if parliament.foto else ''),
'lat': str(parliament.municipio.latitude),
'lng': str(parliament.municipio.longitude),
'estado': parliament.municipio.uf.sigla,
'regiao': parliament.municipio.uf.regiao,
'diagnosticos': [],
'seit': [],
'convenios': [],
@ -311,49 +335,30 @@ def gera_map_data_file(cronjob=False):
'info': []
}
for sv in c.servico_set.all():
casa['info'].append(
for sv in parliament.servico_set.all():
summary['info'].append(
_(u"%(name)s ativado em %(date)s") % dict(
name=sv.tipo_servico.nome,
date=sv.data_ativacao.strftime('%d/%m/%Y') if sv.data_ativacao else _(u'<sem data de ativação>')) +
" <a href='%s' target='_blank'><img src='%simg/link.gif' alt='link'></a>" % (sv.url, STATIC_URL))
casa['seit'].append(sv.tipo_servico.sigla)
summary['seit'].append(sv.tipo_servico.sigla)
for cv in c.convenio_set.all():
for cv in parliament.convenio_set.all():
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)
summary['info'].append(_(u"Equipada em %s pelo %s") % (cv.data_termo_aceite.strftime('%d/%m/%Y'), cv.projeto.sigla))
summary['equipadas'].append(cv.projeto.sigla)
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)
summary['info'].append(_(u"Conveniada ao %s em %s") % (cv.projeto.sigla, cv.data_retorno_assinatura.strftime('%d/%m/%Y')))
summary['convenios'].append(cv.projeto.sigla)
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)
summary['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')))
summary['equipadas'].append(cv.projeto.sigla)
summary['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') if
for dg in parliament.diagnostico_set.all():
summary['diagnosticos'].append('P' if dg.publicado else 'A')
summary['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"<sem data de início>"),
dg.data_visita_fim.strftime('%d/%m/%Y') if dg.data_visita_fim else _(u"<sem data de término>")))
casa['info'] = "<br/>".join(casa['info'])
casas[c.pk] = casa
json_data = simplejson.dumps(casas)
try:
file = open(JSON_FILE_NAME, 'w')
file.write(json_data)
file.close()
except Exception as e: # A gravação não foi bem sucedida ...
if cronjob: # ... o chamador deseja a mensagem de erro
return str(e)
else:
pass # ... ou os dados poderão ser usados de qualquer forma
if cronjob:
return _(u"Arquivo %s gerado em %d segundos") % (JSON_FILE_NAME, time.time() - start)
return json_data
return summary

Loading…
Cancel
Save