Browse Source

Mark strings for translation in *.py files

producao
Marcio Mazza 10 years ago
parent
commit
0b25bf26c8
  1. 37
      sigi/apps/casas/admin.py
  2. 9
      sigi/apps/casas/forms.py
  3. 102
      sigi/apps/casas/reports.py
  4. 57
      sigi/apps/casas/views.py
  5. 4
      sigi/apps/contatos/admin.py
  6. 11
      sigi/apps/contatos/filters.py
  7. 200
      sigi/apps/contatos/models.py
  8. 15
      sigi/apps/convenios/admin.py
  9. 69
      sigi/apps/convenios/models.py
  10. 67
      sigi/apps/convenios/reports.py
  11. 78
      sigi/apps/convenios/views.py
  12. 16
      sigi/apps/diagnosticos/admin.py
  13. 16
      sigi/apps/diagnosticos/forms.py
  14. 38
      sigi/apps/diagnosticos/models.py
  15. 23
      sigi/apps/diagnosticos/views.py
  16. 16
      sigi/apps/financeiro/models.py
  17. 29
      sigi/apps/inventario/models.py
  18. 3
      sigi/apps/mesas/admin.py
  19. 60
      sigi/apps/mesas/models.py
  20. 4
      sigi/apps/metas/admin.py
  21. 4
      sigi/apps/metas/management/commands/gera_map_data.py
  22. 54
      sigi/apps/metas/models.py
  23. 18
      sigi/apps/metas/templatetags/mapa_tags.py
  24. 52
      sigi/apps/metas/views.py
  25. 9
      sigi/apps/ocorrencias/admin.py
  26. 8
      sigi/apps/ocorrencias/filters.py
  27. 81
      sigi/apps/ocorrencias/models.py
  28. 13
      sigi/apps/parlamentares/admin.py
  29. 28
      sigi/apps/parlamentares/models.py
  30. 97
      sigi/apps/parlamentares/reports.py
  31. 25
      sigi/apps/relatorios/reports.py
  32. 24
      sigi/apps/servicos/admin.py
  33. 4
      sigi/apps/servicos/management/commands/atualiza_uso_servico.py
  34. 98
      sigi/apps/servicos/models.py
  35. 35
      sigi/apps/servicos/views.py
  36. 13
      sigi/apps/servidores/admin.py
  37. 21
      sigi/apps/servidores/forms.py
  38. 13
      sigi/apps/servidores/management/commands/migra.py
  39. 11
      sigi/apps/servidores/models.py
  40. 2
      sigi/apps/utils/admin_widgets.py
  41. 14
      sigi/apps/utils/email.py
  42. 24
      sigi/context_processors.py
  43. 14
      sigi/shortcuts.py

37
sigi/apps/casas/admin.py

@ -2,6 +2,7 @@
from django.contrib import admin from django.contrib import admin
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.utils.translation import ugettext as _
from image_cropping import ImageCroppingMixin from image_cropping import ImageCroppingMixin
from sigi.apps.casas.forms import CasaLegislativaForm from sigi.apps.casas.forms import CasaLegislativaForm
@ -46,7 +47,7 @@ class FuncionariosInline(admin.StackedInline):
inlines = (TelefonesInline,) inlines = (TelefonesInline,)
def get_queryset(self, request): def get_queryset(self, request):
return self.model.objects.exclude(cargo="Presidente") return self.model.objects.exclude(cargo=_("Presidente"))
class ConveniosInline(admin.StackedInline): class ConveniosInline(admin.StackedInline):
@ -64,17 +65,17 @@ class ConveniosInline(admin.StackedInline):
def get_tramitacoes(self, obj): def get_tramitacoes(self, obj):
return '<br/>'.join([t.__unicode__() for t in obj.tramitacao_set.all()]) return '<br/>'.join([t.__unicode__() for t in obj.tramitacao_set.all()])
get_tramitacoes.short_description = 'Tramitações' get_tramitacoes.short_description = _('Tramitações')
get_tramitacoes.allow_tags = True get_tramitacoes.allow_tags = True
def get_anexos(self, obj): def get_anexos(self, obj):
return '<br/>'.join(['<a href="%s" target="_blank">%s</a>' % (a.arquivo.url, a.__unicode__()) for a in obj.anexo_set.all()]) return '<br/>'.join(['<a href="%s" target="_blank">%s</a>' % (a.arquivo.url, a.__unicode__()) for a in obj.anexo_set.all()])
get_anexos.short_description = 'Anexos' get_anexos.short_description = _('Anexos')
get_anexos.allow_tags = True get_anexos.allow_tags = True
def get_equipamentos(self, obj): def get_equipamentos(self, obj):
return '<br/>'.join([e.__unicode__() for e in obj.equipamentoprevisto_set.all()]) return '<br/>'.join([e.__unicode__() for e in obj.equipamentoprevisto_set.all()])
get_equipamentos.short_description = 'Equipamentos previstos' get_equipamentos.short_description = _('Equipamentos previstos')
get_equipamentos.allow_tags = True get_equipamentos.allow_tags = True
def link_convenio(self, obj): def link_convenio(self, obj):
@ -88,7 +89,7 @@ class ConveniosInline(admin.StackedInline):
Editar Editar
</a>""" % (obj.pk, obj.pk, url) </a>""" % (obj.pk, obj.pk, url)
link_convenio.short_description = 'Editar convenio' link_convenio.short_description = _('Editar convenio')
link_convenio.allow_tags = True link_convenio.allow_tags = True
@ -108,7 +109,7 @@ class LegislaturaInline(admin.TabularInline):
Editar Editar
</a>""" % (obj.pk, obj.pk, url) </a>""" % (obj.pk, obj.pk, url)
link_parlamentares.short_description = 'Parlamentares' link_parlamentares.short_description = _('Parlamentares')
link_parlamentares.allow_tags = True link_parlamentares.allow_tags = True
@ -130,7 +131,7 @@ class DiagnosticoInline(admin.TabularInline):
Abrir PDF Abrir PDF
</a>""" % (obj.pk, obj.pk, url) </a>""" % (obj.pk, obj.pk, url)
link_diagnostico.short_description = 'Ver PDF' link_diagnostico.short_description = _('Ver PDF')
link_diagnostico.allow_tags = True link_diagnostico.allow_tags = True
@ -174,11 +175,11 @@ class CasaLegislativaAdmin(ImageCroppingMixin, BaseModelAdmin):
(None, { (None, {
'fields': ('tipo', 'nome', 'cnpj', 'num_parlamentares', 'gerente_contas') 'fields': ('tipo', 'nome', 'cnpj', 'num_parlamentares', 'gerente_contas')
}), }),
('Endereço', { (_(u'Endereço'), {
'fields': ('data_instalacao', 'logradouro', 'bairro', 'fields': ('data_instalacao', 'logradouro', 'bairro',
'municipio', 'cep', 'pagina_web', 'email', 'ult_alt_endereco'), 'municipio', 'cep', 'pagina_web', 'email', 'ult_alt_endereco'),
}), }),
('Outras informações', { (_(u'Outras informações'), {
'fields': ('observacoes', 'foto', 'recorte'), 'fields': ('observacoes', 'foto', 'recorte'),
}), }),
) )
@ -190,7 +191,7 @@ class CasaLegislativaAdmin(ImageCroppingMixin, BaseModelAdmin):
def get_convenios(self, obj): def get_convenios(self, obj):
return '<ul>' + ''.join(['<li>%s</li>' % c.__unicode__() for c in obj.convenio_set.all()]) + '</ul>' return '<ul>' + ''.join(['<li>%s</li>' % c.__unicode__() for c in obj.convenio_set.all()]) + '</ul>'
get_convenios.short_description = u'Convênios' get_convenios.short_description = _(u'Convênios')
get_convenios.allow_tags = True get_convenios.allow_tags = True
def changelist_view(self, request, extra_context=None): def changelist_view(self, request, extra_context=None):
@ -205,23 +206,23 @@ class CasaLegislativaAdmin(ImageCroppingMixin, BaseModelAdmin):
def etiqueta(self, request, queryset): def etiqueta(self, request, queryset):
return labels_report(request, queryset=queryset) return labels_report(request, queryset=queryset)
etiqueta.short_description = "Gerar etiqueta(s) da(s) casa(s) selecionada(s)" etiqueta.short_description = _("Gerar etiqueta(s) da(s) casa(s) selecionada(s)")
def etiqueta_sem_presidente(self, request, queryset): def etiqueta_sem_presidente(self, request, queryset):
return labels_report_sem_presidente(request, queryset=queryset) return labels_report_sem_presidente(request, queryset=queryset)
etiqueta_sem_presidente.short_description = "Gerar etiqueta(s) sem presidente da(s) casa(s) selecionada(s)" etiqueta_sem_presidente.short_description = _("Gerar etiqueta(s) sem presidente da(s) casa(s) selecionada(s)")
def relatorio(self, request, queryset): def relatorio(self, request, queryset):
return report(request, queryset=queryset) return report(request, queryset=queryset)
relatorio.short_description = u"Exportar a(s) casa(s) selecionada(s) para PDF" relatorio.short_description = _(u"Exportar a(s) casa(s) selecionada(s) para PDF")
def relatorio_completo(self, request, queryset): def relatorio_completo(self, request, queryset):
return report_complete(request, queryset=queryset) return report_complete(request, queryset=queryset)
relatorio_completo.short_description = u"Gerar relatório completo da(s) casa(s) selecionada(s)" relatorio_completo.short_description = _(u"Gerar relatório completo da(s) casa(s) selecionada(s)")
def relatorio_csv(self, request, queryset): def relatorio_csv(self, request, queryset):
return export_csv(request) return export_csv(request)
relatorio_csv.short_description = u"Exportar casa(s) selecionada(s) para CSV" relatorio_csv.short_description = _(u"Exportar casa(s) selecionada(s) para CSV")
def adicionar_casas(self, request, queryset): def adicionar_casas(self, request, queryset):
if 'carrinho_casas' in request.session: if 'carrinho_casas' in request.session:
@ -233,12 +234,12 @@ class CasaLegislativaAdmin(ImageCroppingMixin, BaseModelAdmin):
q2 = len(request.session['carrinho_casas']) q2 = len(request.session['carrinho_casas'])
quant = q2 - q1 quant = q2 - q1
if quant: if quant:
self.message_user(request, str(q2 - q1) + " Casas Legislativas adicionadas no carrinho") self.message_user(request, str(q2 - q1) + " " + _("Casas Legislativas adicionadas no carrinho"))
else: else:
self.message_user(request, "As Casas Legislativas selecionadas já foram adicionadas anteriormente") self.message_user(request, _("As Casas Legislativas selecionadas já foram adicionadas anteriormente"))
return HttpResponseRedirect('.') return HttpResponseRedirect('.')
adicionar_casas.short_description = u"Armazenar casas no carrinho para exportar" adicionar_casas.short_description = _(u"Armazenar casas no carrinho para exportar")
def get_actions(self, request): def get_actions(self, request):
actions = super(CasaLegislativaAdmin, self).get_actions(request) actions = super(CasaLegislativaAdmin, self).get_actions(request)

9
sigi/apps/casas/forms.py

@ -1,17 +1,18 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django import forms from django import forms
from django.utils.translation import ugettext as _
from localflavor.br.forms import BRZipCodeField from localflavor.br.forms import BRZipCodeField
from sigi.apps.casas.models import CasaLegislativa from sigi.apps.casas.models import CasaLegislativa
class CasaLegislativaForm(forms.ModelForm): class CasaLegislativaForm(forms.ModelForm):
# cnpj = BRCNPJField( # cnpj = BRCNPJField(
# label='CNPJ', # label=_('CNPJ'),
# required=False, # required=False,
# help_text='Utilize o formato <em>XX.XXX.XXX/XXXX-XX</em> ou ' # help_text=_('Utilize o formato <em>XX.XXX.XXX/XXXX-XX</em> ou insira apenas os dígitos.')
# 'insira apenas os dígitos.'
#) #)
cep = BRZipCodeField(label='CEP', help_text='Formato: <em>XXXXX-XXX</em>.') cep = BRZipCodeField(label=_('CEP'), help_text=_('Formato: <em>XXXXX-XXX</em>.'))
class Meta: class Meta:
model = CasaLegislativa model = CasaLegislativa

102
sigi/apps/casas/reports.py

@ -1,17 +1,15 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.utils.translation import ugettext as _
from geraldo import Report, DetailBand, Label, ObjectValue, ReportGroup, ReportBand, landscape, SubReport, BAND_WIDTH, SystemField
from geraldo.graphics import Image
from reportlab.lib.enums import TA_CENTER
from reportlab.lib.pagesizes import A4 from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm from reportlab.lib.units import cm
from reportlab.lib.enums import TA_CENTER, TA_RIGHT
from geraldo import Report, DetailBand, Label, ObjectValue, ManyElements, \
ReportGroup, ReportBand, landscape, SubReport, BAND_WIDTH, SystemField
from sigi.apps.relatorios.reports import ReportDefault from sigi.apps.relatorios.reports import ReportDefault
from sigi.settings import STATICFILES_DIRS from sigi.settings import STATICFILES_DIRS
from geraldo.graphics import Image
def string_to_cm(texto): def string_to_cm(texto):
tamanho = 0 tamanho = 0
minEspeciais = { minEspeciais = {
@ -97,7 +95,7 @@ class CasasLegislativasLabels(Report):
my_elements = [ my_elements = [
Label( Label(
text='A Sua Excelência o(a) Senhor(a):', text=_('A Sua Excelência o(a) Senhor(a):'),
top=calc_top(0), left=calc_left, width=calc_width, top=calc_top(0), left=calc_left, width=calc_width,
), ),
ObjectValue( ObjectValue(
@ -110,7 +108,7 @@ class CasasLegislativasLabels(Report):
attribute_name='nome', attribute_name='nome',
top=calc_top(2), left=calc_left, width=calc_width, height=calc_height(2), top=calc_top(2), left=calc_left, width=calc_width, height=calc_height(2),
get_value=lambda instance: get_value=lambda instance:
("Presidente da %s" % instance.nome) (_("Presidente da %s") % instance.nome)
), ),
ObjectValue( ObjectValue(
attribute_name='logradouro', attribute_name='logradouro',
@ -123,7 +121,7 @@ class CasasLegislativasLabels(Report):
attribute_name='cep', attribute_name='cep',
top=calc_top(8), left=calc_left, width=calc_width, top=calc_top(8), left=calc_left, width=calc_width,
get_value=lambda instance: get_value=lambda instance:
"CEP: %s" % instance.cep _("CEP: %s") % instance.cep
), ),
] ]
self.band_detail = DetailBand( self.band_detail = DetailBand(
@ -146,14 +144,14 @@ class CasasLegislativasLabelsSemPresidente(CasasLegislativasLabels):
my_elements = [ my_elements = [
Label( Label(
text='A Sua Excelência o(a) Senhor(a):', text=_('A Sua Excelência o(a) Senhor(a):'),
top=calc_top(0), left=calc_left, width=calc_width, top=calc_top(0), left=calc_left, width=calc_width,
), ),
ObjectValue( ObjectValue(
attribute_name='nome', attribute_name='nome',
top=calc_top(1), left=calc_left, width=calc_width, height=calc_height(2), top=calc_top(1), left=calc_left, width=calc_width, height=calc_height(2),
get_value=lambda instance: get_value=lambda instance:
("Presidente da %s" % instance.nome) (_("Presidente da %s") % instance.nome)
), ),
ObjectValue( ObjectValue(
attribute_name='logradouro', attribute_name='logradouro',
@ -166,7 +164,7 @@ class CasasLegislativasLabelsSemPresidente(CasasLegislativasLabels):
attribute_name='cep', attribute_name='cep',
top=calc_top(8), left=calc_left, width=calc_width, top=calc_top(8), left=calc_left, width=calc_width,
get_value=lambda instance: get_value=lambda instance:
"CEP: %s" % instance.cep _("CEP: %s") % instance.cep
), ),
] ]
self.band_detail = DetailBand( self.band_detail = DetailBand(
@ -178,7 +176,7 @@ class CasasLegislativasLabelsSemPresidente(CasasLegislativasLabels):
class CasasLegislativasReport(ReportDefault): class CasasLegislativasReport(ReportDefault):
title = u'Relatório de Casas Legislativas' title = _(u'Relatório de Casas Legislativas')
height = 80 * cm height = 80 * cm
page_size = landscape(A4) page_size = landscape(A4)
@ -197,10 +195,10 @@ class CasasLegislativasReport(ReportDefault):
left=1 * cm, right=1 * cm, top=0.1 * cm, bottom=1 * cm, left=1 * cm, right=1 * cm, top=0.1 * cm, bottom=1 * cm,
width=3 * cm, height=3 * cm, width=3 * cm, height=3 * cm,
), ),
Label(text="SENADO FEDERAL", top=1 * cm, left=0, width=BAND_WIDTH, Label(text=_("SENADO FEDERAL"), top=1 * cm, left=0, width=BAND_WIDTH,
style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER} style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER}
), ),
Label(text="SINTER - Secretaria Especial do Interlegis", top=1.5 * cm, left=0, width=BAND_WIDTH, Label(text=_("SINTER - Secretaria Especial do Interlegis"), top=1.5 * cm, left=0, width=BAND_WIDTH,
style={'fontName': 'Helvetica-Bold', 'fontSize': 13, 'alignment': TA_CENTER} style={'fontName': 'Helvetica-Bold', 'fontSize': 13, 'alignment': TA_CENTER}
), ),
SystemField( SystemField(
@ -208,32 +206,32 @@ class CasasLegislativasReport(ReportDefault):
style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER} style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER}
), ),
Label( Label(
text="UF", text=_("UF"),
left=label_left[0] * cm, left=label_left[0] * cm,
top=label_top, top=label_top,
), ),
Label( Label(
text="Municipio", text=_("Municipio"),
left=label_left[1] * cm, left=label_left[1] * cm,
top=label_top, top=label_top,
), ),
Label( Label(
text="Presidente", text=_("Presidente"),
left=label_left[2] * cm, left=label_left[2] * cm,
top=label_top, top=label_top,
), ),
Label( Label(
text="Endereço", text=_("Endereço"),
left=label_left[3] * cm, left=label_left[3] * cm,
top=label_top, top=label_top,
), ),
Label( Label(
text="Endereço na Internet", text=_("Endereço na Internet"),
left=label_left[4] * cm, left=label_left[4] * cm,
top=label_top, top=label_top,
), ),
Label( Label(
text="Email", text=_("Email"),
left=label_left[5] * cm, left=label_left[5] * cm,
top=label_top, top=label_top,
), ),
@ -292,11 +290,11 @@ class CasasLegislativasReport(ReportDefault):
class CasasSemConvenioReport(CasasLegislativasReport): class CasasSemConvenioReport(CasasLegislativasReport):
title = u'Relatório de Casas Legislativas sem Convênio' title = _(u'Relatório de Casas Legislativas sem Convênio')
class InfoCasaLegislativa(ReportDefault): class InfoCasaLegislativa(ReportDefault):
title = u'Casa Legislativa' title = _(u'Casa Legislativa')
class band_summary(ReportBand): class band_summary(ReportBand):
pass pass
@ -305,7 +303,7 @@ class InfoCasaLegislativa(ReportDefault):
height = 1 * cm height = 1 * cm
elements = [ elements = [
SystemField(expression=u'%(now:%d/%m/%Y)s às %(now:%H:%M)s', top=0.3 * cm), SystemField(expression=_(u'%(now:%d/%m/%Y)s às %(now:%H:%M)s'), top=0.3 * cm),
] ]
class band_detail(ReportDefault.band_detail): class band_detail(ReportDefault.band_detail):
@ -343,7 +341,7 @@ class InfoCasaLegislativa(ReportDefault):
elements = [ elements = [
Label( Label(
text="Tipo: ", text=_("Tipo: "),
left=posicao_left[0] * cm, left=posicao_left[0] * cm,
top=posicao_top[0] * cm, top=posicao_top[0] * cm,
), ),
@ -354,7 +352,7 @@ class InfoCasaLegislativa(ReportDefault):
width=6 * cm, width=6 * cm,
), ),
Label( Label(
text="Região: ", text=_("Região: "),
left=posicao_left[2] * cm, left=posicao_left[2] * cm,
top=posicao_top[1] * cm, top=posicao_top[1] * cm,
), ),
@ -363,11 +361,11 @@ class InfoCasaLegislativa(ReportDefault):
left=posicao_left[3] * cm, left=posicao_left[3] * cm,
top=posicao_top[1] * cm, top=posicao_top[1] * cm,
get_value=lambda instance: get_value=lambda instance:
{'SL': 'Sul', 'SD': 'Sudeste', 'CO': 'Centro-Oeste', 'NE': 'Nordeste', 'NO': 'Norte', } {'SL': _('Sul'), 'SD': _('Sudeste'), 'CO': _('Centro-Oeste'), 'NE': _('Nordeste'), 'NO': _('Norte'), }
[instance.municipio.uf.regiao] [instance.municipio.uf.regiao]
), ),
Label( Label(
text="U.F.: ", text=_("U.F.: "),
left=posicao_left[4] * cm, left=posicao_left[4] * cm,
top=posicao_top[2] * cm, top=posicao_top[2] * cm,
), ),
@ -377,7 +375,7 @@ class InfoCasaLegislativa(ReportDefault):
top=posicao_top[2] * cm, top=posicao_top[2] * cm,
), ),
Label( Label(
text="Município: ", text=_("Município: "),
left=posicao_left[6] * cm, left=posicao_left[6] * cm,
top=posicao_top[3] * cm, top=posicao_top[3] * cm,
), ),
@ -389,7 +387,7 @@ class InfoCasaLegislativa(ReportDefault):
), ),
# Linha 3 # Linha 3
Label( Label(
text="Endereço: ", text=_("Endereço: "),
left=posicao_left[8] * cm, left=posicao_left[8] * cm,
top=posicao_top[4] * cm, top=posicao_top[4] * cm,
), ),
@ -400,7 +398,7 @@ class InfoCasaLegislativa(ReportDefault):
width=20 * cm, width=20 * cm,
), ),
Label( Label(
text="Bairro: ", text=_("Bairro: "),
left=posicao_left[10] * cm, left=posicao_left[10] * cm,
top=posicao_top[5] * cm, top=posicao_top[5] * cm,
), ),
@ -410,7 +408,7 @@ class InfoCasaLegislativa(ReportDefault):
top=posicao_top[5] * cm, top=posicao_top[5] * cm,
), ),
Label( Label(
text="CEP: ", text=_("CEP: "),
left=posicao_left[12] * cm, left=posicao_left[12] * cm,
top=posicao_top[6] * cm, top=posicao_top[6] * cm,
), ),
@ -420,7 +418,7 @@ class InfoCasaLegislativa(ReportDefault):
top=posicao_top[6] * cm, top=posicao_top[6] * cm,
), ),
Label( Label(
text="CNPJ: ", text=_("CNPJ: "),
left=posicao_left[14] * cm, left=posicao_left[14] * cm,
top=posicao_top[7] * cm, top=posicao_top[7] * cm,
), ),
@ -430,7 +428,7 @@ class InfoCasaLegislativa(ReportDefault):
top=posicao_top[7] * cm, top=posicao_top[7] * cm,
), ),
Label( Label(
text="Telefone: ", text=_("Telefone: "),
left=posicao_left[16] * cm, left=posicao_left[16] * cm,
top=posicao_top[8] * cm, top=posicao_top[8] * cm,
), ),
@ -440,7 +438,7 @@ class InfoCasaLegislativa(ReportDefault):
top=posicao_top[8] * cm, top=posicao_top[8] * cm,
), ),
Label( Label(
text="Presidente: ", text=_("Presidente: "),
left=posicao_left[18] * cm, left=posicao_left[18] * cm,
top=posicao_top[9] * cm, top=posicao_top[9] * cm,
), ),
@ -469,14 +467,14 @@ class InfoCasaLegislativa(ReportDefault):
height=2.5 * cm, height=2.5 * cm,
elements=[ elements=[
Label( Label(
text="Telefone(s)", text=_("Telefone(s)"),
style={'fontSize': 14, 'alignment': TA_CENTER}, style={'fontSize': 14, 'alignment': TA_CENTER},
width=BAND_WIDTH, width=BAND_WIDTH,
top=1 * cm, top=1 * cm,
), ),
Label(text="Número", left=tel_left[0] * cm, top=tel_top), Label(text=_("Número"), left=tel_left[0] * cm, top=tel_top),
Label(text="Tipo", left=tel_left[1] * cm, top=tel_top), Label(text=_("Tipo"), left=tel_left[1] * cm, top=tel_top),
Label(text="Nota", left=tel_left[2] * cm, top=tel_top), Label(text=_("Nota"), left=tel_left[2] * cm, top=tel_top),
], ],
borders={'bottom': True}, borders={'bottom': True},
), ),
@ -487,7 +485,7 @@ class InfoCasaLegislativa(ReportDefault):
ObjectValue(attribute_name='__unicode__', left=tel_left[0] * cm), ObjectValue(attribute_name='__unicode__', left=tel_left[0] * cm),
ObjectValue(attribute_name='tipo', left=tel_left[1] * cm, ObjectValue(attribute_name='tipo', left=tel_left[1] * cm,
get_value=lambda instance: get_value=lambda instance:
{'F': 'Fixo', 'M': u'Móvel', 'X': 'Fax', 'I': 'Indefinido'}[instance.tipo], {'F': _('Fixo'), 'M': _(u'Móvel'), 'X': _('Fax'), 'I': _('Indefinido')}[instance.tipo],
), ),
ObjectValue(attribute_name='nota', left=tel_left[2] * cm), ObjectValue(attribute_name='nota', left=tel_left[2] * cm),
], ],
@ -502,14 +500,14 @@ class InfoCasaLegislativa(ReportDefault):
height=2.5 * cm, height=2.5 * cm,
elements=[ elements=[
Label( Label(
text="Contato(s)", text=_("Contato(s)"),
style={'fontSize': 14, 'alignment': TA_CENTER}, style={'fontSize': 14, 'alignment': TA_CENTER},
width=BAND_WIDTH, width=BAND_WIDTH,
top=1 * cm, top=1 * cm,
), ),
Label(text="Nome", left=cont_left[0] * cm, top=cont_top), Label(text=_("Nome"), left=cont_left[0] * cm, top=cont_top),
Label(text="Nota", left=cont_left[1] * cm, top=cont_top), Label(text=_("Nota"), left=cont_left[1] * cm, top=cont_top),
Label(text="E-mail", left=cont_left[2] * cm, top=cont_top), Label(text=_("E-mail"), left=cont_left[2] * cm, top=cont_top),
], ],
borders={'bottom': True, 'top': True}, borders={'bottom': True, 'top': True},
), ),
@ -532,18 +530,18 @@ class InfoCasaLegislativa(ReportDefault):
height=2.5 * cm, height=2.5 * cm,
elements=[ elements=[
Label( Label(
text="Convênio(s)", text=_("Convênio(s)"),
style={'fontSize': 14, 'alignment': TA_CENTER}, style={'fontSize': 14, 'alignment': TA_CENTER},
width=BAND_WIDTH, width=BAND_WIDTH,
top=1 * cm, top=1 * cm,
), ),
Label(text="Projeto", left=convenio_left[0] * cm, top=convenio_top), Label(text=_("Projeto"), left=convenio_left[0] * cm, top=convenio_top),
Label(text="Nº Convenio", left=convenio_left[1] * cm, top=convenio_top), Label(text=_("Nº Convenio"), left=convenio_left[1] * cm, top=convenio_top),
Label(text="Nº Processo SF", left=convenio_left[2] * cm, top=convenio_top), Label(text=_("Nº Processo SF"), left=convenio_left[2] * cm, top=convenio_top),
Label(text="Adesão", left=convenio_left[3] * cm, top=convenio_top), Label(text=_("Adesão"), left=convenio_left[3] * cm, top=convenio_top),
Label(text="Convênio", left=convenio_left[4] * cm, top=convenio_top), Label(text=_("Convênio"), left=convenio_left[4] * cm, top=convenio_top),
Label(text="Equipada", left=convenio_left[5] * cm, top=convenio_top), Label(text=_("Equipada"), left=convenio_left[5] * cm, top=convenio_top),
Label(text="Data D.O.", left=convenio_left[6] * cm, top=convenio_top), Label(text=_("Data D.O."), left=convenio_left[6] * cm, top=convenio_top),
], ],
borders={'bottom': True} borders={'bottom': True}
), ),

57
sigi/apps/casas/views.py

@ -1,23 +1,18 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import csv
from functools import reduce
from django.conf import settings
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext as _
from geraldo.generators import PDFGenerator from geraldo.generators import PDFGenerator
from sigi.apps.casas.models import CasaLegislativa, Funcionario from sigi.apps.casas.models import CasaLegislativa
from sigi.apps.casas.reports import CasasLegislativasLabels from sigi.apps.casas.reports import CasasLegislativasLabels, CasasLegislativasLabelsSemPresidente, CasasLegislativasReport, CasasSemConvenioReport, InfoCasaLegislativa
from sigi.apps.casas.reports import CasasLegislativasLabelsSemPresidente
from sigi.apps.casas.reports import CasasLegislativasReport
from sigi.apps.casas.reports import CasasSemConvenioReport
from sigi.apps.casas.reports import InfoCasaLegislativa
from sigi.apps.parlamentares.models import Parlamentar
from sigi.apps.parlamentares.reports import ParlamentaresLabels from sigi.apps.parlamentares.reports import ParlamentaresLabels
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.conf import settings
import csv
from functools import reduce
# @param qs: queryset # @param qs: queryset
# @param o: (int) number of order field # @param o: (int) number of order field
@ -327,7 +322,7 @@ def export_csv(request):
atributos2 = [s.encode("utf-8") for s in atributos] atributos2 = [s.encode("utf-8") for s in atributos]
try: try:
atributos2.insert(atributos2.index('Município'), u'UF') atributos2.insert(atributos2.index(_(u'Município')), _(u'UF'))
except ValueError: except ValueError:
pass pass
@ -337,49 +332,49 @@ def export_csv(request):
lista = [] lista = []
contatos = casa.funcionario_set.filter(setor="contato_interlegis") contatos = casa.funcionario_set.filter(setor="contato_interlegis")
for atributo in atributos: for atributo in atributos:
if u"CNPJ" == atributo: if _(u"CNPJ") == atributo:
lista.append(casa.cnpj.encode("utf-8")) lista.append(casa.cnpj.encode("utf-8"))
elif u"Código IBGE" == atributo: elif _(u"Código IBGE") == atributo:
lista.append(str(casa.municipio.codigo_ibge).encode("utf-8")) lista.append(str(casa.municipio.codigo_ibge).encode("utf-8"))
elif u"Código TSE" == atributo: elif _(u"Código TSE") == atributo:
lista.append(str(casa.municipio.codigo_tse).encode("utf-8")) lista.append(str(casa.municipio.codigo_tse).encode("utf-8"))
elif u"Nome" == atributo: elif _(u"Nome") == atributo:
lista.append(casa.nome.encode("utf-8")) lista.append(casa.nome.encode("utf-8"))
elif u"Município" == atributo: elif _(u"Município") == atributo:
lista.append(unicode(casa.municipio.uf.sigla).encode("utf-8")) lista.append(unicode(casa.municipio.uf.sigla).encode("utf-8"))
lista.append(unicode(casa.municipio.nome).encode("utf-8")) lista.append(unicode(casa.municipio.nome).encode("utf-8"))
elif u"Presidente" == atributo: elif _(u"Presidente") == atributo:
# TODO: Esse encode deu erro em 25/04/2012. Comentei para que o usuário pudesse continuar seu trabalho # TODO: Esse encode deu erro em 25/04/2012. Comentei para que o usuário pudesse continuar seu trabalho
# É preciso descobrir o porque do erro e fazer a correção definitiva. # É preciso descobrir o porque do erro e fazer a correção definitiva.
# lista.append(str(casa.presidente or "").encode("utf-8")) # lista.append(str(casa.presidente or "").encode("utf-8"))
lista.append(str(casa.presidente or "")) lista.append(str(casa.presidente or ""))
elif u"Logradouro" == atributo: elif _(u"Logradouro") == atributo:
lista.append(casa.logradouro.encode("utf-8")) lista.append(casa.logradouro.encode("utf-8"))
elif u"Bairro" == atributo: elif _(u"Bairro") == atributo:
lista.append(casa.bairro.encode("utf-8")) lista.append(casa.bairro.encode("utf-8"))
elif u"CEP" == atributo: elif _(u"CEP") == atributo:
lista.append(casa.cep.encode("utf-8")) lista.append(casa.cep.encode("utf-8"))
elif u"Telefone" == atributo: elif _(u"Telefone") == atributo:
lista.append(str(casa.telefone or "")) lista.append(str(casa.telefone or ""))
elif u"Página web" == atributo: elif _(u"Página web") == atributo:
lista.append(casa.pagina_web.encode("utf-8")) lista.append(casa.pagina_web.encode("utf-8"))
elif u"Email" == atributo: elif _(u"Email") == atributo:
lista.append(casa.email.encode("utf-8")) lista.append(casa.email.encode("utf-8"))
elif u"Número de parlamentares" == atributo: elif _(u"Número de parlamentares") == atributo:
lista.append(casa.total_parlamentares) lista.append(casa.total_parlamentares)
elif u"Última alteração de endereco" == atributo: elif _(u"Última alteração de endereco") == atributo:
lista.append(casa.ult_alt_endereco) lista.append(casa.ult_alt_endereco)
elif u"Nome contato" == atributo: elif _(u"Nome contato") == atributo:
if contatos and contatos[0].nome: if contatos and contatos[0].nome:
lista.append(contatos[0].nome.encode("utf-8")) lista.append(contatos[0].nome.encode("utf-8"))
else: else:
lista.append('') lista.append('')
elif u"Cargo contato" == atributo: elif _(u"Cargo contato") == atributo:
if contatos and contatos[0].cargo: if contatos and contatos[0].cargo:
lista.append(contatos[0].cargo.encode("utf-8")) lista.append(contatos[0].cargo.encode("utf-8"))
else: else:
lista.append('') lista.append('')
elif u"Email contato" == atributo: elif _(u"Email contato") == atributo:
if contatos and contatos[0].email: if contatos and contatos[0].email:
lista.append(contatos[0].email.encode("utf-8")) lista.append(contatos[0].email.encode("utf-8"))
else: else:

4
sigi/apps/contatos/admin.py

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib import admin from django.contrib import admin
from django.utils.translation import ugettext as _
from sigi.apps.contatos.filters import PopulationFilter from sigi.apps.contatos.filters import PopulationFilter
from sigi.apps.contatos.models import (UnidadeFederativa, Municipio, Telefone, from sigi.apps.contatos.models import (UnidadeFederativa, Municipio, Telefone,
Contato) Contato)
@ -29,7 +31,7 @@ class MunicipioAdmin(BaseModelAdmin):
'codigo_microrregiao', 'nome', 'data_criacao', 'uf', 'codigo_microrregiao', 'nome', 'data_criacao', 'uf',
'is_capital', 'populacao', 'is_polo', 'idh', 'pib_ano', 'pib_total', 'pib_percapita') 'is_capital', 'populacao', 'is_polo', 'idh', 'pib_ano', 'pib_total', 'pib_percapita')
}), }),
('Posição geográfica', { (_(u'Posição geográfica'), {
'fields': ('latitude', 'longitude'), 'fields': ('latitude', 'longitude'),
}), }),
) )

11
sigi/apps/contatos/filters.py

@ -1,11 +1,12 @@
# coding: utf-8 # coding: utf-8
from django.contrib import admin from django.contrib import admin
from django.utils.translation import ugettext as _
class PopulationFilter(admin.SimpleListFilter): class PopulationFilter(admin.SimpleListFilter):
# Human-readable title which will be displayed in the # Human-readable title which will be displayed in the
# right admin sidebar just above the filter options. # right admin sidebar just above the filter options.
title = 'População' title = _('População')
# Parameter for the filter that will be used in the URL query. # Parameter for the filter that will be used in the URL query.
parameter_name = 'faixa' parameter_name = 'faixa'
@ -19,10 +20,10 @@ class PopulationFilter(admin.SimpleListFilter):
in the right sidebar. in the right sidebar.
""" """
return ( return (
('1', '< 100 Mil'), ('1', _('< 100 Mil')),
('2', '100 Mil a 1 Milhão'), ('2', _('100 Mil a 1 Milhão')),
('3', '1 Milhão a 100 Milhões'), ('3', _('1 Milhão a 100 Milhões')),
('4', '> 100 Milhões'), ('4', _('> 100 Milhões')),
) )
def queryset(self, request, queryset): def queryset(self, request, queryset):

200
sigi/apps/contatos/models.py

@ -1,9 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from sigi.apps.utils import SearchField from django.contrib.contenttypes.models import ContentType
from django.core.validators import MaxValueValidator, MinValueValidator from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models
from django.utils.translation import ugettext as _
from sigi.apps.utils import SearchField
class UnidadeFederativa(models.Model): class UnidadeFederativa(models.Model):
@ -11,33 +13,33 @@ class UnidadeFederativa(models.Model):
""" Modelo que representa um estado brasileiro """ Modelo que representa um estado brasileiro
""" """
REGIAO_CHOICES = ( REGIAO_CHOICES = (
('SL', 'Sul'), ('SL', _('Sul')),
('SD', 'Sudeste'), ('SD', _('Sudeste')),
('CO', 'Centro-Oeste'), ('CO', _('Centro-Oeste')),
('NE', 'Nordeste'), ('NE', _('Nordeste')),
('NO', 'Norte'), ('NO', _('Norte')),
) )
codigo_ibge = models.PositiveIntegerField( codigo_ibge = models.PositiveIntegerField(
u'código IBGE', u'código IBGE',
primary_key=True, primary_key=True,
unique=True, unique=True,
help_text='Código do estado segundo IBGE.' help_text=_('Código do estado segundo IBGE.')
) )
nome = models.CharField('Nome UF', max_length=25) nome = models.CharField(_('Nome UF'), max_length=25)
# Campo de busca em caixa baixa sem acento # Campo de busca em caixa baixa sem acento
search_text = SearchField(field_names=['nome']) search_text = SearchField(field_names=['nome'])
sigla = models.CharField( sigla = models.CharField(
max_length=2, max_length=2,
unique=True, unique=True,
help_text="Exemplo: <em>MG</em>.", help_text=_("Exemplo: <em>MG</em>."),
) )
regiao = models.CharField('região', max_length=2, choices=REGIAO_CHOICES) regiao = models.CharField(_('região'), max_length=2, choices=REGIAO_CHOICES)
populacao = models.PositiveIntegerField('população') populacao = models.PositiveIntegerField(_('população'))
class Meta: class Meta:
ordering = ('nome',) ordering = (_('nome'),)
verbose_name = 'Unidade Federativa' verbose_name = _('Unidade Federativa')
verbose_name_plural = 'Unidades Federativas' verbose_name_plural = _('Unidades Federativas')
def __unicode__(self): def __unicode__(self):
return self.nome return self.nome
@ -48,41 +50,41 @@ class Municipio(models.Model):
""" Modelo para representar as cidades brasileiras """ Modelo para representar as cidades brasileiras
""" """
codigo_ibge = models.PositiveIntegerField( codigo_ibge = models.PositiveIntegerField(
u'código IBGE', _(u'código IBGE'),
primary_key=True, primary_key=True,
unique=True, unique=True,
help_text='Código do município segundo IBGE.' help_text=_('Código do município segundo IBGE.')
) )
# agrupamento baseado em similaridades econômicas e sociais # agrupamento baseado em similaridades econômicas e sociais
codigo_mesorregiao = models.PositiveIntegerField( codigo_mesorregiao = models.PositiveIntegerField(
u'código mesorregião', _(u'código mesorregião'),
blank=True, blank=True,
null=True null=True
) )
# agrupamento baseado em similaridades econômicas e sociais # agrupamento baseado em similaridades econômicas e sociais
codigo_microrregiao = models.PositiveIntegerField( codigo_microrregiao = models.PositiveIntegerField(
u'código microrregião', _(u'código microrregião'),
blank=True, blank=True,
null=True null=True
) )
# codio designado pelo Tribunal Superior Eleitoral # codio designado pelo Tribunal Superior Eleitoral
codigo_tse = models.PositiveIntegerField( codigo_tse = models.PositiveIntegerField(
u'código TSE', _(u'código TSE'),
unique=True, unique=True,
null=True, null=True,
help_text='Código do município segundo TSE.' help_text=_('Código do município segundo TSE.')
) )
nome = models.CharField(max_length=50) nome = models.CharField(max_length=50)
search_text = SearchField(field_names=['nome', 'uf']) search_text = SearchField(field_names=[_('nome'), _('uf')])
uf = models.ForeignKey(UnidadeFederativa, verbose_name='UF') uf = models.ForeignKey(UnidadeFederativa, verbose_name=_('UF'))
# verdadeiro se o município é capital do estado # verdadeiro se o município é capital do estado
is_capital = models.BooleanField('capital', default=False) is_capital = models.BooleanField(_('capital'), default=False)
populacao = models.PositiveIntegerField(u'população') populacao = models.PositiveIntegerField(_(u'população'))
populacao.list_filter_range = [10000, 100000, 1000000] populacao.list_filter_range = [10000, 100000, 1000000]
is_polo = models.BooleanField(u'pólo', default=False) is_polo = models.BooleanField(_(u'pólo'), default=False)
data_criacao = models.DateField(u'data de criação do município', null=True, blank=True) data_criacao = models.DateField(_(u'data de criação do município'), null=True, blank=True)
# posição geográfica do município # posição geográfica do município
latitude = models.DecimalField( latitude = models.DecimalField(
@ -90,28 +92,28 @@ class Municipio(models.Model):
decimal_places=8, decimal_places=8,
null=True, null=True,
blank=True, blank=True,
help_text='Exemplo: <em>-20,464</em>.' help_text=_('Exemplo: <em>-20,464</em>.')
) )
longitude = models.DecimalField( longitude = models.DecimalField(
max_digits=11, max_digits=11,
decimal_places=8, decimal_places=8,
null=True, null=True,
blank=True, blank=True,
help_text='Exemplo: <em>-45,426</em>.' help_text=_('Exemplo: <em>-45,426</em>.')
) )
idh = models.DecimalField(u'IDH', help_text=u'Índice de desenvolvimento Humano', max_digits=4, decimal_places=3, idh = models.DecimalField(_(u'IDH'), help_text=_(u'Índice de desenvolvimento Humano'), max_digits=4, decimal_places=3,
validators=[MinValueValidator(0), MaxValueValidator(1)]) validators=[MinValueValidator(0), MaxValueValidator(1)])
idh.list_filter_range = [0.500, 0.800] idh.list_filter_range = [0.500, 0.800]
pib_total = models.DecimalField(u'PIB total', max_digits=18, decimal_places=3, blank=True, null=True) pib_total = models.DecimalField(_(u'PIB total'), max_digits=18, decimal_places=3, blank=True, null=True)
pib_percapita = models.DecimalField(u'PIB per capita', max_digits=18, decimal_places=3, blank=True, null=True) pib_percapita = models.DecimalField(_(u'PIB per capita'), max_digits=18, decimal_places=3, blank=True, null=True)
pib_ano = models.IntegerField(u'Ano de apuração do PIB', blank=True, null=True) pib_ano = models.IntegerField(_(u'Ano de apuração do PIB'), blank=True, null=True)
class Meta: class Meta:
ordering = ('nome', 'codigo_ibge') ordering = (_('nome'), _('codigo_ibge'))
verbose_name = 'município' verbose_name = _('município')
verbose_name_plural = 'municípios' verbose_name_plural = _('municípios')
def __unicode__(self): def __unicode__(self):
return "%s - %s" % (self.nome, self.uf) return "%s - %s" % (self.nome, self.uf)
@ -126,15 +128,15 @@ class Telefone(models.Model):
""" Modelo genérico para agrupar telefones dos modulos do sistema """ Modelo genérico para agrupar telefones dos modulos do sistema
""" """
TELEFONE_CHOICES = ( TELEFONE_CHOICES = (
('F', 'Fixo'), ('F', _('Fixo')),
('M', 'Móvel'), ('M', _('Móvel')),
('X', 'Fax'), ('X', _('Fax')),
('I', 'Indefinido'), ('I', _('Indefinido')),
) )
numero = models.CharField( numero = models.CharField(
'número', _('número'),
max_length=64, # TODO: diminuir tamanho de campo após migração de dados max_length=64, # TODO: diminuir tamanho de campo após migração de dados
help_text='Exemplo: <em>(31)8851-9898</em>.', help_text=_('Exemplo: <em>(31)8851-9898</em>.'),
) )
tipo = models.CharField( tipo = models.CharField(
max_length=1, max_length=1,
@ -142,7 +144,7 @@ class Telefone(models.Model):
default='I' default='I'
) )
nota = models.CharField(max_length=70, null=True, blank=True) nota = models.CharField(max_length=70, null=True, blank=True)
ult_alteracao = models.DateTimeField(u'Última alteração', null=True, blank=True, editable=False, auto_now=True) ult_alteracao = models.DateTimeField(_(u'Última alteração'), null=True, blank=True, editable=False, auto_now=True)
# guarda o tipo do objeto (classe) vinculado a esse registro # guarda o tipo do objeto (classe) vinculado a esse registro
content_type = models.ForeignKey(ContentType) content_type = models.ForeignKey(ContentType)
@ -163,16 +165,16 @@ class Contato(models.Model):
""" Modelo generico para registrar contatos vinculados aos """ Modelo generico para registrar contatos vinculados aos
modulos do sistema modulos do sistema
""" """
nome = models.CharField('nome completo', max_length=120) nome = models.CharField(_('nome completo'), max_length=120)
nome.alphabetic_filter = True nome.alphabetic_filter = True
nota = models.CharField(max_length=70, blank=True) nota = models.CharField(max_length=70, blank=True)
email = models.EmailField('e-mail', blank=True) email = models.EmailField(_('e-mail'), blank=True)
telefones = generic.GenericRelation(Telefone) telefones = generic.GenericRelation(Telefone)
municipio = models.ForeignKey( municipio = models.ForeignKey(
Municipio, Municipio,
verbose_name='município', verbose_name=_('município'),
blank=True, blank=True,
null=True, null=True,
) )
@ -185,8 +187,8 @@ class Contato(models.Model):
class Meta: class Meta:
ordering = ('nome',) ordering = ('nome',)
verbose_name = 'contato Interlegis' verbose_name = _('contato Interlegis')
verbose_name_plural = 'contatos Interlegis' verbose_name_plural = _('contatos Interlegis')
def __unicode__(self): def __unicode__(self):
return self.nome return self.nome
@ -194,51 +196,51 @@ class Contato(models.Model):
class Endereco(models.Model): class Endereco(models.Model):
TIPO_CHOICES = ( TIPO_CHOICES = (
('aeroporto', 'Aeroporto'), ('aeroporto', _('Aeroporto')),
('alameda', 'Alameda'), ('alameda', _('Alameda')),
('area', u'Área'), ('area', _(u'Área')),
('avenida', 'Avenida'), ('avenida', _('Avenida')),
('campo', 'Campo'), ('campo', _('Campo')),
('chacara', u'Chácara'), ('chacara', _(u'Chácara')),
('colonia', u'Colônia'), ('colonia', _(u'Colônia')),
('condominio', u'Condomínio'), ('condominio', _(u'Condomínio')),
('conjunto', 'Conjunto'), ('conjunto', _('Conjunto')),
('distrito', 'Distrito'), ('distrito', _('Distrito')),
('esplanada', 'Esplanada'), ('esplanada', _('Esplanada')),
('estacao', u'Estação'), ('estacao', _(u'Estação')),
('estrada', 'Estrada'), ('estrada', _('Estrada')),
('favela', 'Favela'), ('favela', _('Favela')),
('fazenda', 'Fazenda'), ('fazenda', _('Fazenda')),
('feira', 'Feira'), ('feira', _('Feira')),
('jardim', 'Jardim'), ('jardim', _('Jardim')),
('ladeira', 'Ladeira'), ('ladeira', _('Ladeira')),
('lago', 'Lago'), ('lago', _('Lago')),
('lagoa', 'Lagoa'), ('lagoa', _('Lagoa')),
('largo', 'Largo'), ('largo', _('Largo')),
('loteamento', 'Loteamento'), ('loteamento', _('Loteamento')),
('morro', 'Morro'), ('morro', _('Morro')),
('nucleo', u'Núcleo'), ('nucleo', _(u'Núcleo')),
('parque', 'Parque'), ('parque', _('Parque')),
('passarela', 'Passarela'), ('passarela', _('Passarela')),
('patio', u'Pátio'), ('patio', _(u'Pátio')),
('praca', u'Praça'), ('praca', _(u'Praça')),
('quadra', 'Quadra'), ('quadra', _('Quadra')),
('recanto', 'Recanto'), ('recanto', _('Recanto')),
('residencial', 'Residencial'), ('residencial', _('Residencial')),
('rodovia', 'Rodovia'), ('rodovia', _('Rodovia')),
('rua', 'Rua'), ('rua', _('Rua')),
('setor', 'Setor'), ('setor', _('Setor')),
('sitio', u'Sítio'), ('sitio', _(u'Sítio')),
('travessa', 'Travessa'), ('travessa', _('Travessa')),
('trecho', 'Trecho'), ('trecho', _('Trecho')),
('trevo', 'Trevo'), ('trevo', _('Trevo')),
('vale', 'Vale'), ('vale', _('Vale')),
('vereda', 'Vereda'), ('vereda', _('Vereda')),
('via', 'Via'), ('via', _('Via')),
('viaduto', 'Viaduto'), ('viaduto', _('Viaduto')),
('viela', 'Viela'), ('viela', _('Viela')),
('vila', 'Vila'), ('vila', _('Vila')),
('outro', 'Outro'), ('outro', _('Outro')),
) )
# tipo do endereço obtido no site dos correios # tipo do endereço obtido no site dos correios
@ -254,16 +256,16 @@ class Endereco(models.Model):
bairro = models.CharField(max_length=100, blank=True) bairro = models.CharField(max_length=100, blank=True)
cep = models.CharField( cep = models.CharField(
'CEP', _('CEP'),
max_length=9, max_length=9,
blank=True, blank=True,
null=True, null=True,
help_text="Formato: <em>XXXXX-XXX</em>." help_text=_("Formato: <em>XXXXX-XXX</em>.")
) )
municipio = models.ForeignKey( municipio = models.ForeignKey(
Municipio, Municipio,
verbose_name='município', verbose_name=_(u'município'),
blank=True, blank=True,
null=True, null=True,
) )
@ -277,8 +279,8 @@ class Endereco(models.Model):
class Meta: class Meta:
ordering = ('logradouro', 'numero') ordering = ('logradouro', 'numero')
verbose_name = u'endereço' verbose_name = _(u'endereço')
verbose_name_plural = u'endereços' verbose_name_plural = _(u'endereços')
def __unicode__(self): def __unicode__(self):
return self.tipo + ' ' + self.logradouro + ', ' + self.numero \ return self.tipo + ' ' + self.logradouro + ', ' + self.numero \

15
sigi/apps/convenios/admin.py

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib import admin from django.contrib import admin
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.utils.translation import ugettext as _
from geraldo.generators import PDFGenerator from geraldo.generators import PDFGenerator
from sigi.apps.convenios.models import Projeto, Convenio, EquipamentoPrevisto, Anexo, Tramitacao from sigi.apps.convenios.models import Projeto, Convenio, EquipamentoPrevisto, Anexo, Tramitacao
@ -42,12 +43,12 @@ class ConvenioAdmin(BaseModelAdmin):
(None, (None,
{'fields': ('casa_legislativa', 'num_processo_sf', 'num_convenio', 'projeto', 'observacao')} {'fields': ('casa_legislativa', 'num_processo_sf', 'num_convenio', 'projeto', 'observacao')}
), ),
('Datas', (_('Datas'),
{'fields': ('data_adesao', 'data_retorno_assinatura', {'fields': ('data_adesao', 'data_retorno_assinatura',
'data_termo_aceite', 'data_pub_diario', 'data_termo_aceite', 'data_pub_diario',
'data_devolucao_via', 'data_postagem_correio')} 'data_devolucao_via', 'data_postagem_correio')}
), ),
('Datas - Convenio sem assinatura', (_('Datas - Convenio sem assinatura'),
{'fields': ('data_devolucao_sem_assinatura', 'data_retorno_sem_assinatura',)} {'fields': ('data_devolucao_sem_assinatura', 'data_retorno_sem_assinatura',)}
), ),
) )
@ -68,7 +69,7 @@ class ConvenioAdmin(BaseModelAdmin):
def get_uf(self, obj): def get_uf(self, obj):
return obj.casa_legislativa.municipio.uf.sigla return obj.casa_legislativa.municipio.uf.sigla
get_uf.short_description = 'UF' get_uf.short_description = _('UF')
get_uf.admin_order_field = 'casa_legislativa__municipio__uf__sigla' get_uf.admin_order_field = 'casa_legislativa__municipio__uf__sigla'
def changelist_view(self, request, extra_context=None): def changelist_view(self, request, extra_context=None):
@ -103,7 +104,7 @@ class ConvenioAdmin(BaseModelAdmin):
report = ConvenioReport(queryset=queryset) report = ConvenioReport(queryset=queryset)
report.generate_by(PDFGenerator, filename=response) report.generate_by(PDFGenerator, filename=response)
return response return response
relatorio.short_description = u'Exportar convênios selecionados para PDF' relatorio.short_description = _(u'Exportar convênios selecionados para PDF')
def adicionar_convenios(self, request, queryset): def adicionar_convenios(self, request, queryset):
if 'carrinho_convenios' in request.session: if 'carrinho_convenios' in request.session:
@ -114,11 +115,11 @@ class ConvenioAdmin(BaseModelAdmin):
q2 = len(request.session['carrinho_convenios']) q2 = len(request.session['carrinho_convenios'])
quant = q2 - q1 quant = q2 - q1
if quant: if quant:
self.message_user(request, str(q2 - q1) + " Convênios adicionados no carrinho") self.message_user(request, str(q2 - q1) + _(" Convênios adicionados no carrinho"))
else: else:
self.message_user(request, "Os Convênios selecionados já foram adicionadas anteriormente") self.message_user(request, _("Os Convênios selecionados já foram adicionadas anteriormente"))
return HttpResponseRedirect('.') return HttpResponseRedirect('.')
adicionar_convenios.short_description = u"Armazenar convênios no carrinho para exportar" adicionar_convenios.short_description = _(u"Armazenar convênios no carrinho para exportar")
def get_actions(self, request): def get_actions(self, request):
actions = super(ConvenioAdmin, self).get_actions(request) actions = super(ConvenioAdmin, self).get_actions(request)

69
sigi/apps/convenios/models.py

@ -1,7 +1,8 @@
# style="list-style-type: noneo -*- coding: utf-8 -*- # style="list-style-type: noneo -*- coding: utf-8 -*-
from datetime import datetime from datetime import datetime
from django.db import models from django.db import models
from django.contrib.contenttypes import generic from django.utils.translation import ugettext as _
from sigi.apps.utils import SearchField from sigi.apps.utils import SearchField
@ -29,67 +30,67 @@ class Convenio(models.Model):
""" """
casa_legislativa = models.ForeignKey( casa_legislativa = models.ForeignKey(
'casas.CasaLegislativa', 'casas.CasaLegislativa',
verbose_name='Casa Legislativa' verbose_name=_('Casa Legislativa')
) )
# campo de busca em caixa baixa e sem acentos # campo de busca em caixa baixa e sem acentos
search_text = SearchField(field_names=['casa_legislativa']) search_text = SearchField(field_names=['casa_legislativa'])
projeto = models.ForeignKey('Projeto') projeto = models.ForeignKey(_('Projeto'))
# numero designado pelo Senado Federal para o convênio # numero designado pelo Senado Federal para o convênio
num_processo_sf = models.CharField( num_processo_sf = models.CharField(
'número do processo SF (Senado Federal)', _('número do processo SF (Senado Federal)'),
max_length=20, max_length=20,
blank=True, blank=True,
help_text='Formatos:<br/>Antigo: <em>XXXXXX/XX-X</em>.<br/><em>SIGAD: XXXXX.XXXXXX/XXXX-XX</em>' help_text=_('Formatos:<br/>Antigo: <em>XXXXXX/XX-X</em>.<br/><em>SIGAD: XXXXX.XXXXXX/XXXX-XX</em>')
) )
num_convenio = models.CharField( num_convenio = models.CharField(
'número do convênio', _('número do convênio'),
max_length=10, max_length=10,
blank=True blank=True
) )
data_adesao = models.DateField( data_adesao = models.DateField(
'Aderidas', _('Aderidas'),
null=True, null=True,
blank=True, blank=True,
) )
data_retorno_assinatura = models.DateField( data_retorno_assinatura = models.DateField(
'Conveniadas', _('Conveniadas'),
null=True, null=True,
blank=True, blank=True,
help_text='Convênio firmado.' help_text=_('Convênio firmado.')
) )
data_pub_diario = models.DateField( data_pub_diario = models.DateField(
'data da publicação no Diário Oficial', _('data da publicação no Diário Oficial'),
null=True, null=True,
blank=True blank=True
) )
data_termo_aceite = models.DateField( data_termo_aceite = models.DateField(
'Equipadas', _('Equipadas'),
null=True, null=True,
blank=True, blank=True,
help_text='Equipamentos recebidos.' help_text=_('Equipamentos recebidos.')
) )
data_devolucao_via = models.DateField( data_devolucao_via = models.DateField(
'data de devolução da via', _('data de devolução da via'),
null=True, null=True,
blank=True, blank=True,
help_text=u'Data de devolução da via do convênio à Câmara Municipal.' help_text=_(u'Data de devolução da via do convênio à Câmara Municipal.')
) )
data_postagem_correio = models.DateField( data_postagem_correio = models.DateField(
'data postagem correio', _('data postagem correio'),
null=True, null=True,
blank=True, blank=True,
) )
data_devolucao_sem_assinatura = models.DateField( data_devolucao_sem_assinatura = models.DateField(
'data de devolução por falta de assinatura', _('data de devolução por falta de assinatura'),
null=True, null=True,
blank=True, blank=True,
help_text=u'Data de devolução por falta de assinatura', help_text=_(u'Data de devolução por falta de assinatura'),
) )
data_retorno_sem_assinatura = models.DateField( data_retorno_sem_assinatura = models.DateField(
'data do retorno sem assinatura', _('data do retorno sem assinatura'),
null=True, null=True,
blank=True, blank=True,
help_text=u'Data do retorno do convênio sem assinatura', help_text=_(u'Data do retorno do convênio sem assinatura'),
) )
observacao = models.CharField( observacao = models.CharField(
null=True, null=True,
@ -107,13 +108,13 @@ class Convenio(models.Model):
class Meta: class Meta:
get_latest_by = 'id' get_latest_by = 'id'
ordering = ('id',) ordering = ('id',)
verbose_name = u'convênio' verbose_name = _(u'convênio')
def __unicode__(self): def __unicode__(self):
if self.data_retorno_assinatura is not None: if self.data_retorno_assinatura is not None:
return u"Convênio nº %s - projeto %s, em %s" % (self.num_convenio, self.projeto.sigla, self.data_retorno_assinatura) return _(u"Convênio nº %s - projeto %s, em %s") % (self.num_convenio, self.projeto.sigla, self.data_retorno_assinatura)
else: else:
return u"Adesão ao projeto %s, em %s" % (self.projeto.sigla, self.data_adesao) return _(u"Adesão ao projeto %s, em %s") % (self.projeto.sigla, self.data_adesao)
class EquipamentoPrevisto(models.Model): class EquipamentoPrevisto(models.Model):
@ -122,13 +123,13 @@ class EquipamentoPrevisto(models.Model):
disponibilizados para as Casas Legislativas disponibilizados para as Casas Legislativas
(foi usado na prmeira etapa do programa) (foi usado na prmeira etapa do programa)
""" """
convenio = models.ForeignKey(Convenio, verbose_name=u'convênio') convenio = models.ForeignKey(Convenio, verbose_name=_(u'convênio'))
equipamento = models.ForeignKey('inventario.Equipamento') equipamento = models.ForeignKey('inventario.Equipamento')
quantidade = models.PositiveSmallIntegerField(default=1) quantidade = models.PositiveSmallIntegerField(default=1)
class Meta: class Meta:
verbose_name = 'equipamento previsto' verbose_name = _('equipamento previsto')
verbose_name_plural = 'equipamentos previstos' verbose_name_plural = _('equipamentos previstos')
def __unicode__(self): def __unicode__(self):
return u'%s %s(s)' % (self.quantidade, self.equipamento) return u'%s %s(s)' % (self.quantidade, self.equipamento)
@ -139,12 +140,12 @@ class Anexo(models.Model):
""" Modelo para giardar os documentos gerados """ Modelo para giardar os documentos gerados
no processo de convênio no processo de convênio
""" """
convenio = models.ForeignKey(Convenio, verbose_name=u'convênio') convenio = models.ForeignKey(Convenio, verbose_name=_(u'convênio'))
# caminho no sistema para o documento anexo # caminho no sistema para o documento anexo
arquivo = models.FileField(upload_to='apps/convenios/anexo/arquivo',) arquivo = models.FileField(upload_to='apps/convenios/anexo/arquivo',)
descricao = models.CharField('descrição', max_length='70') descricao = models.CharField(_('descrição'), max_length='70')
data_pub = models.DateTimeField( data_pub = models.DateTimeField(
'data da publicação do anexo', _('data da publicação do anexo'),
default=datetime.now default=datetime.now
) )
@ -173,21 +174,21 @@ class Tramitacao(models.Model):
""" Modelo para registrar as vias do processo de convênio e a Unidade """ Modelo para registrar as vias do processo de convênio e a Unidade
responsável pelo tramite (ex. colher assinaturas do secretário do senado) responsável pelo tramite (ex. colher assinaturas do secretário do senado)
""" """
convenio = models.ForeignKey(Convenio, verbose_name=u'convênio') convenio = models.ForeignKey(Convenio, verbose_name=_(u'convênio'))
unid_admin = models.ForeignKey(UnidadeAdministrativa, verbose_name=u'Unidade Administrativa') unid_admin = models.ForeignKey(UnidadeAdministrativa, verbose_name=_(u'Unidade Administrativa'))
data = models.DateField() data = models.DateField()
observacao = models.CharField( observacao = models.CharField(
'observação', _('observação'),
max_length='512', max_length='512',
null=True, null=True,
blank=True, blank=True,
) )
class Meta: class Meta:
verbose_name_plural = u'Tramitações' verbose_name_plural = _(u'Tramitações')
def __unicode__(self): def __unicode__(self):
if self.observacao: if self.observacao:
return unicode("%s em %s (%s)" % (self.unid_admin, self.data, self.observacao)) return unicode(_("%s em %s (%s)") % (self.unid_admin, self.data, self.observacao))
else: else:
return unicode("%s em %s" % (self.unid_admin, self.data)) return unicode(_("%s em %s") % (self.unid_admin, self.data))

67
sigi/apps/convenios/reports.py

@ -1,18 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os from django.utils.translation import ugettext as _
from ctypes import alignment from geraldo import ReportBand, ObjectValue, Label, ReportGroup, FIELD_ACTION_SUM
from operator import attrgetter
from geraldo import Report, ReportBand, ObjectValue, DetailBand, Label, \
landscape, SystemField, BAND_WIDTH, ReportGroup, \
FIELD_ACTION_SUM, FIELD_ACTION_COUNT, FIELD_ACTION_AVG
from geraldo.graphics import Image
from reportlab.lib.units import cm from reportlab.lib.units import cm
from reportlab.lib.pagesizes import A4
from reportlab.lib.enums import TA_CENTER, TA_RIGHT
from sigi.apps.relatorios.reports import ReportDefault from sigi.apps.relatorios.reports import ReportDefault
#from abc import ABCMeta #from abc import ABCMeta
@ -33,7 +26,7 @@ class SemEquipamentosReport(object):
class ConvenioReport(ReportDefault): class ConvenioReport(ReportDefault):
title = u'Relatório de Convênios' title = _(u'Relatório de Convênios')
class band_page_header(ReportDefault.band_page_header): class band_page_header(ReportDefault.band_page_header):
@ -44,47 +37,47 @@ class ConvenioReport(ReportDefault):
elements += [ elements += [
Label( Label(
text="UF", text=_("UF"),
left=label_left[0] * cm, left=label_left[0] * cm,
top=label_top + 0.4 * cm, top=label_top + 0.4 * cm,
), ),
Label( Label(
text="Municipio", text=_("Municipio"),
left=label_left[1] * cm, left=label_left[1] * cm,
top=label_top + 0.4 * cm, top=label_top + 0.4 * cm,
), ),
Label( Label(
text="Data de Adesão", text=_("Data de Adesão"),
left=label_left[2] * cm, left=label_left[2] * cm,
top=label_top, top=label_top,
width=2 * cm, width=2 * cm,
), ),
Label( Label(
text="Número do Convênio", text=_("Número do Convênio"),
left=label_left[3] * cm, left=label_left[3] * cm,
top=label_top, top=label_top,
width=2 * cm, width=2 * cm,
), ),
Label( Label(
text="Data do Convênio", text=_("Data do Convênio"),
left=label_left[4] * cm, left=label_left[4] * cm,
top=label_top, top=label_top,
width=2 * cm, width=2 * cm,
), ),
Label( Label(
text="Data de Publicação", text=_("Data de Publicação"),
left=label_left[5] * cm, left=label_left[5] * cm,
top=label_top, top=label_top,
width=2 * cm, width=2 * cm,
), ),
Label( Label(
text="Data de Aceite", text=_("Data de Aceite"),
left=label_left[6] * cm, left=label_left[6] * cm,
top=label_top, top=label_top,
width=2 * cm, width=2 * cm,
), ),
Label( Label(
text="Projeto", text=_("Projeto"),
left=label_left[7] * cm, left=label_left[7] * cm,
top=label_top + 0.4 * cm, top=label_top + 0.4 * cm,
width=2 * cm, width=2 * cm,
@ -147,7 +140,7 @@ class ConvenioReport(ReportDefault):
height=0.7 * cm, height=0.7 * cm,
elements=[ elements=[
ObjectValue(attribute_name='casa_legislativa.municipio.uf', ObjectValue(attribute_name='casa_legislativa.municipio.uf',
get_Value=lambda instance: 'CasaLegislativa: ' + (instance.casa_legislativa.uf) get_Value=lambda instance: _('CasaLegislativa: ') + (instance.casa_legislativa.uf)
) )
], ],
borders={'top': True}, borders={'top': True},
@ -167,41 +160,41 @@ class ConvenioReportSemAceite(ConvenioReport):
elements += [ elements += [
Label( Label(
text="UF", text=_("UF"),
left=label_left[0] * cm, left=label_left[0] * cm,
top=label_top + 0.4 * cm, top=label_top + 0.4 * cm,
), ),
Label( Label(
text="Município", text=_("Município"),
left=label_left[1] * cm, left=label_left[1] * cm,
top=label_top + 0.4 * cm, top=label_top + 0.4 * cm,
), ),
Label( Label(
text="Data de Adesão", text=_("Data de Adesão"),
left=label_left[3] * cm, left=label_left[3] * cm,
top=label_top, top=label_top,
width=2 * cm, width=2 * cm,
), ),
Label( Label(
text="Número do Convênio", text=_("Número do Convênio"),
left=label_left[4] * cm, left=label_left[4] * cm,
top=label_top, top=label_top,
width=2 * cm, width=2 * cm,
), ),
Label( Label(
text="Data do Convênio", text=_("Data do Convênio"),
left=label_left[5] * cm, left=label_left[5] * cm,
top=label_top, top=label_top,
width=2 * cm, width=2 * cm,
), ),
Label( Label(
text="Data de Publicação", text=_("Data de Publicação"),
left=label_left[6] * cm, left=label_left[6] * cm,
top=label_top, top=label_top,
width=2 * cm, width=2 * cm,
), ),
Label( Label(
text="Projeto", text=_("Projeto"),
left=label_left[7] * cm, left=label_left[7] * cm,
top=label_top + 0.4 * cm, top=label_top + 0.4 * cm,
width=2 * cm, width=2 * cm,
@ -254,7 +247,7 @@ float_duas_casas = lambda instance: '%.2f' % (instance)
class ConvenioReportRegiao(ReportDefault): class ConvenioReportRegiao(ReportDefault):
title = u'Relatório de Convênios por Região' title = _(u'Relatório de Convênios por Região')
class band_page_header(ReportDefault.band_page_header): class band_page_header(ReportDefault.band_page_header):
label_top = ReportDefault.band_page_header.label_top label_top = ReportDefault.band_page_header.label_top
@ -264,11 +257,11 @@ class ConvenioReportRegiao(ReportDefault):
elements = list(ReportDefault.band_page_header.elements) elements = list(ReportDefault.band_page_header.elements)
elements += [ elements += [
Label(text="UF", left=label_left[0] * cm, top=label_top,), Label(text=_("UF"), left=label_left[0] * cm, top=label_top,),
Label(text="Total", left=label_left[1] * cm, top=label_top,), Label(text=_("Total"), left=label_left[1] * cm, top=label_top,),
Label(text="Aderidas", left=label_left[2] * cm, top=label_top,), Label(text=_("Aderidas"), left=label_left[2] * cm, top=label_top,),
Label(text="%", left=label_left[3] * cm, top=label_top), Label(text="%", left=label_left[3] * cm, top=label_top),
Label(text="Ñ Aderidas", left=label_left[4] * cm, top=label_top,), Label(text=_("Ñ Aderidas"), left=label_left[4] * cm, top=label_top,),
Label(text="%", left=label_left[5] * cm, top=label_top), Label(text="%", left=label_left[5] * cm, top=label_top),
] ]
@ -290,7 +283,7 @@ class ConvenioReportRegiao(ReportDefault):
class band_summary(ReportBand): class band_summary(ReportBand):
label_left = [0.5, 6, 8, 10, 12, 14] label_left = [0.5, 6, 8, 10, 12, 14]
elements = [ elements = [
Label(text="Total", top=0.1 * cm, left=label_left[0] * cm), Label(text=_("Total"), top=0.1 * cm, left=label_left[0] * cm),
ObjectValue(attribute_name='quant_casas', action=FIELD_ACTION_SUM, left=label_left[1] * cm, ), ObjectValue(attribute_name='quant_casas', action=FIELD_ACTION_SUM, left=label_left[1] * cm, ),
ObjectValue(attribute_name='quant_casas_aderidas', action=FIELD_ACTION_SUM, left=label_left[2] * cm), ObjectValue(attribute_name='quant_casas_aderidas', action=FIELD_ACTION_SUM, left=label_left[2] * cm),
# ObjectValue(attribute_name='porc_casas_aderidas', action=FIELD_ACTION_AVG, left=label_left[3]*cm, # ObjectValue(attribute_name='porc_casas_aderidas', action=FIELD_ACTION_AVG, left=label_left[3]*cm,
@ -305,16 +298,16 @@ class ConvenioReportRegiao(ReportDefault):
class ConvenioPorCMReport(ConvenioReport): class ConvenioPorCMReport(ConvenioReport):
title = u'Relatório de Convênios por Câmara Municipal' title = _(u'Relatório de Convênios por Câmara Municipal')
class ConvenioPorALReport(ConvenioReport): class ConvenioPorALReport(ConvenioReport):
title = u'Relatório de Convênios por Assembléia Legislativa' title = _(u'Relatório de Convênios por Assembléia Legislativa')
class ConvenioReportSemAceiteCM(ConvenioReportSemAceite): class ConvenioReportSemAceiteCM(ConvenioReportSemAceite):
title = u'Relatório de Convênios por Câmara Municipal' title = _(u'Relatório de Convênios por Câmara Municipal')
class ConvenioReportSemAceiteAL(ConvenioReportSemAceite): class ConvenioReportSemAceiteAL(ConvenioReportSemAceite):
title = u'Relatório de Convênios por Assembléia Legislativa' title = _(u'Relatório de Convênios por Assembléia Legislativa')

78
sigi/apps/convenios/views.py

@ -1,26 +1,20 @@
#-*- coding:utf-8 -*- #-*- coding:utf-8 -*-
import csv
import datetime
import ho.pisa as pisa
from django.conf import settings
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, get_list_or_404 from django.shortcuts import render, get_list_or_404
from django.template import Context, loader
from django.utils.translation import ugettext as _
from geraldo.generators import PDFGenerator from geraldo.generators import PDFGenerator
from sigi.apps.convenios.models import Convenio, Projeto
from sigi.apps.convenios.reports import ConvenioReport \
, ConvenioPorCMReport \
, ConvenioPorALReport \
, ConvenioReportSemAceiteAL \
, ConvenioReportSemAceiteCM
from sigi.apps.casas.models import CasaLegislativa from sigi.apps.casas.models import CasaLegislativa
from sigi.apps.contatos.models import UnidadeFederativa from sigi.apps.contatos.models import UnidadeFederativa
from sigi.apps.convenios.models import Convenio, Projeto
import ho.pisa as pisa from sigi.apps.convenios.reports import ConvenioPorCMReport, ConvenioPorALReport, ConvenioReportSemAceiteAL, ConvenioReportSemAceiteCM
from django.template import Context, loader
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.conf import settings
import datetime
import csv
def query_ordena(qs, o, ot): def query_ordena(qs, o, ot):
@ -230,12 +224,12 @@ def casas_estado_to_tabela(casas, convenios, regiao):
) )
cabecalho_topo = ( cabecalho_topo = (
u'UF', _(u'UF'),
u'Câmaras municipais', _(u'Câmaras municipais'),
u'Não Aderidas', _(u'Não Aderidas'),
u'Aderidas', _(u'Aderidas'),
u'Conveniadas', _(u'Conveniadas'),
u'Equipadas' _(u'Equipadas')
) )
return { return {
@ -252,11 +246,11 @@ def report_regiao(request, regiao='NE'):
regiao = request.POST['regiao'] regiao = request.POST['regiao']
REGIAO_CHOICES = { REGIAO_CHOICES = {
'SL': 'Sul', 'SL': _('Sul'),
'SD': 'Sudeste', 'SD': _('Sudeste'),
'CO': 'Centro-Oeste', 'CO': _('Centro-Oeste'),
'NE': 'Nordeste', 'NE': _('Nordeste'),
'NO': 'Norte', 'NO': _('Norte'),
} }
projetos = Projeto.objects.all() projetos = Projeto.objects.all()
@ -267,7 +261,7 @@ def report_regiao(request, regiao='NE'):
# Geral # Geral
convenios = Convenio.objects.filter(casa_legislativa__tipo__sigla='CM') convenios = Convenio.objects.filter(casa_legislativa__tipo__sigla='CM')
tabela = casas_estado_to_tabela(camaras, convenios, regiao) tabela = casas_estado_to_tabela(camaras, convenios, regiao)
tabela["projeto"] = "Geral" tabela["projeto"] = _("Geral")
tabelas.append(tabela) tabelas.append(tabela)
@ -301,47 +295,47 @@ def export_csv(request):
if not convenios: if not convenios:
return HttpResponseRedirect('../') return HttpResponseRedirect('../')
atributos = [u"No. Processo", u"No. Convênio", u"Projeto", u"Casa Legislativa", u"Data de Adesão", u"Data de Convênio", atributos = [_(u"No. Processo"), _(u"No. Convênio"), _(u"Projeto"), _(u"Casa Legislativa"), _(u"Data de Adesão"), _(u"Data de Convênio"),
u"Data da Publicacao no D.O.", u"Data Equipada", ] _(u"Data da Publicacao no D.O."), _(u"Data Equipada"), ]
if request.POST: if request.POST:
atributos = request.POST.getlist("itens_csv_selected") atributos = request.POST.getlist("itens_csv_selected")
col_titles = atributos col_titles = atributos
if u"Casa Legislativa" in col_titles: if _(u"Casa Legislativa") in col_titles:
pos = col_titles.index(u"Casa Legislativa") + 1 pos = col_titles.index(_(u"Casa Legislativa")) + 1
col_titles.insert(pos, u"uf") col_titles.insert(pos, _(u"uf"))
csv_writer.writerow([s.encode("utf-8") for s in col_titles]) csv_writer.writerow([s.encode("utf-8") for s in col_titles])
for convenio in convenios: for convenio in convenios:
lista = [] lista = []
for atributo in atributos: for atributo in atributos:
if u"No. Processo" == atributo: if _(u"No. Processo") == atributo:
lista.append(convenio.num_processo_sf.encode("utf-8")) lista.append(convenio.num_processo_sf.encode("utf-8"))
elif u"No. Convênio" == atributo: elif _(u"No. Convênio") == atributo:
lista.append(convenio.num_convenio.encode("utf-8")) lista.append(convenio.num_convenio.encode("utf-8"))
elif u"Projeto" == atributo: elif _(u"Projeto") == atributo:
lista.append(convenio.projeto.nome.encode("utf-8")) lista.append(convenio.projeto.nome.encode("utf-8"))
elif u"Casa Legislativa" == atributo: elif _(u"Casa Legislativa") == atributo:
lista.append(convenio.casa_legislativa.nome.encode("utf-8")) lista.append(convenio.casa_legislativa.nome.encode("utf-8"))
lista.append(convenio.casa_legislativa.municipio.uf.sigla.encode("utf-8")) lista.append(convenio.casa_legislativa.municipio.uf.sigla.encode("utf-8"))
elif u"Data de Adesão" == atributo: elif _(u"Data de Adesão") == atributo:
data = '' data = ''
if convenio.data_adesao: if convenio.data_adesao:
data = convenio.data_adesao.strftime("%d/%m/%Y") data = convenio.data_adesao.strftime("%d/%m/%Y")
lista.append(data.encode("utf-8")) lista.append(data.encode("utf-8"))
elif u"Data de Convênio" == atributo: elif _(u"Data de Convênio") == atributo:
data = '' data = ''
if convenio.data_retorno_assinatura: if convenio.data_retorno_assinatura:
data = convenio.data_retorno_assinatura.strftime("%d/%m/%Y") data = convenio.data_retorno_assinatura.strftime("%d/%m/%Y")
lista.append(data.encode("utf-8")) lista.append(data.encode("utf-8"))
elif u"Data da Publicacao no D.O." == atributo: elif _(u"Data da Publicacao no D.O.") == atributo:
data = '' data = ''
if convenio.data_pub_diario: if convenio.data_pub_diario:
data = convenio.data_pub_diario.strftime("%d/%m/%Y") data = convenio.data_pub_diario.strftime("%d/%m/%Y")
lista.append(data.encode("utf-8")) lista.append(data.encode("utf-8"))
data = '' data = ''
elif u"Data Equipada" == atributo: elif _(u"Data Equipada") == atributo:
if convenio.data_termo_aceite: if convenio.data_termo_aceite:
data = convenio.data_termo_aceite.strftime("%d/%m/%Y") data = convenio.data_termo_aceite.strftime("%d/%m/%Y")
lista.append(data.encode("utf-8")) lista.append(data.encode("utf-8"))

16
sigi/apps/diagnosticos/admin.py

@ -2,7 +2,9 @@
from datetime import datetime from datetime import datetime
from django.contrib import admin from django.contrib import admin
from django.db.utils import OperationalError, ProgrammingError from django.db.utils import OperationalError, ProgrammingError
from django.utils.translation import ugettext as _
from eav.admin import BaseEntityAdmin, BaseSchemaAdmin from eav.admin import BaseEntityAdmin, BaseSchemaAdmin
from sigi.apps.diagnosticos.forms import DiagnosticoForm from sigi.apps.diagnosticos.forms import DiagnosticoForm
from sigi.apps.diagnosticos.models import Diagnostico, Pergunta, Escolha, Equipe, Anexo, Categoria from sigi.apps.diagnosticos.models import Diagnostico, Pergunta, Escolha, Equipe, Anexo, Categoria
from sigi.apps.utils.base_admin import BaseModelAdmin from sigi.apps.utils.base_admin import BaseModelAdmin
@ -19,15 +21,15 @@ def publicar_diagnostico(self, request, queryset):
email = diagnostico.responsavel.user.email email = diagnostico.responsavel.user.email
if email: if email:
diagnostico.email_diagnostico_publicado(email, request.get_host()) diagnostico.email_diagnostico_publicado(email, request.get_host())
self.message_user(request, "Diagnóstico(s) publicado(s) com sucesso!") self.message_user(request, _("Diagnóstico(s) publicado(s) com sucesso!"))
publicar_diagnostico.short_description = u""" publicar_diagnostico.short_description = _(u"""
Definir diagnósticos como publicado""" Definir diagnósticos como publicado""")
def despublicar_diagnostico(self, request, queryset): def despublicar_diagnostico(self, request, queryset):
queryset.update(publicado=False) queryset.update(publicado=False)
despublicar_diagnostico.short_description = u""" despublicar_diagnostico.short_description = _(u"""
Definir diagnósticos como não publicado""" Definir diagnósticos como não publicado""")
class EquipeInline(admin.TabularInline): class EquipeInline(admin.TabularInline):
@ -84,7 +86,7 @@ class DiagnosticoAdmin(BaseEntityAdmin):
def get_uf(self, obj): def get_uf(self, obj):
return '%s' % (obj.casa_legislativa.municipio.uf) return '%s' % (obj.casa_legislativa.municipio.uf)
get_uf.short_description = 'UF' get_uf.short_description = _('UF')
get_uf.admin_order_field = 'casa_legislativa__municipio__uf__nome' get_uf.admin_order_field = 'casa_legislativa__municipio__uf__nome'
def lookup_allowed(self, lookup, value): def lookup_allowed(self, lookup, value):
@ -126,7 +128,7 @@ class EscolhaInline(admin.TabularInline):
model = Escolha model = Escolha
fk_name = 'schema' fk_name = 'schema'
raw_id_fields = ('schema_to_open',) raw_id_fields = ('schema_to_open',)
verbose_name = 'Escolhas (apenas para choices ou multiple choices)' verbose_name = _('Escolhas (apenas para choices ou multiple choices)')
extra = 0 extra = 0

16
sigi/apps/diagnosticos/forms.py

@ -1,18 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from copy import deepcopy from copy import deepcopy
from django import forms from django import forms
from django.forms.forms import BoundField from django.contrib.contenttypes.generic import generic_inlineformset_factory
from django.forms import (BooleanField, CharField, DateField, from django.forms import (BooleanField, CharField, DateField,
FloatField, ModelChoiceField, Textarea, FloatField, ModelChoiceField, Textarea,
ModelMultipleChoiceField) ModelMultipleChoiceField)
from django.contrib.contenttypes.generic import generic_inlineformset_factory from django.forms.forms import BoundField
from django.utils.translation import ugettext as _
from eav.fields import RangeField
from eav.forms import BaseDynamicEntityForm
from sigi.apps.casas.models import CasaLegislativa, Funcionario from sigi.apps.casas.models import CasaLegislativa, Funcionario
from sigi.apps.contatos.models import Telefone from sigi.apps.contatos.models import Telefone
from sigi.apps.diagnosticos.models import Diagnostico from sigi.apps.diagnosticos.models import Diagnostico
from sigi.apps.diagnosticos.widgets import EavCheckboxSelectMultiple, EavRadioSelect from sigi.apps.diagnosticos.widgets import EavCheckboxSelectMultiple, EavRadioSelect
from eav.forms import BaseDynamicEntityForm
from eav.fields import RangeField
class DiagnosticoForm(BaseDynamicEntityForm): class DiagnosticoForm(BaseDynamicEntityForm):
@ -131,7 +133,7 @@ class DiagnosticoMobileForm(BaseDynamicEntityForm):
class CasaLegislativaMobileForm(forms.ModelForm): class CasaLegislativaMobileForm(forms.ModelForm):
data_instalacao = forms.DateField(label=u'Data de instalação da Casa Legislativa', required=False) data_instalacao = forms.DateField(label=_(u'Data de instalação da Casa Legislativa'), required=False)
data_criacao = forms.DateField() data_criacao = forms.DateField()
class Meta: class Meta:
@ -141,7 +143,7 @@ class CasaLegislativaMobileForm(forms.ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(CasaLegislativaMobileForm, self).__init__(*args, **kwargs) super(CasaLegislativaMobileForm, self).__init__(*args, **kwargs)
self.fields['data_criacao'] = forms.DateField( self.fields['data_criacao'] = forms.DateField(
label=u'Data de criação do Município', label=_(u'Data de criação do Município'),
initial=self.instance.municipio.data_criacao, initial=self.instance.municipio.data_criacao,
required=False) required=False)

38
sigi/apps/diagnosticos/models.py

@ -1,11 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from datetime import datetime from datetime import datetime
from django.db import models from django.db import models
from django.utils.translation import ugettext as _
from eav.models import BaseChoice, BaseEntity, BaseSchema, BaseAttribute
from sigi.apps.casas.models import CasaLegislativa
from sigi.apps.utils import SearchField from sigi.apps.utils import SearchField
from sigi.apps.utils.email import enviar_email from sigi.apps.utils.email import enviar_email
from eav.models import BaseChoice, BaseEntity, BaseSchema, BaseAttribute
class Diagnostico(BaseEntity): class Diagnostico(BaseEntity):
@ -15,7 +15,7 @@ class Diagnostico(BaseEntity):
""" """
casa_legislativa = models.ForeignKey( casa_legislativa = models.ForeignKey(
'casas.CasaLegislativa', 'casas.CasaLegislativa',
verbose_name='Casa Legislativa') verbose_name=_('Casa Legislativa'))
# campo de busca em caixa baixa e sem acento # campo de busca em caixa baixa e sem acento
search_text = SearchField(field_names=['casa_legislativa']) search_text = SearchField(field_names=['casa_legislativa'])
@ -39,10 +39,10 @@ class Diagnostico(BaseEntity):
) )
responsavel = models.ForeignKey('servidores.Servidor', responsavel = models.ForeignKey('servidores.Servidor',
verbose_name=u'responsável') verbose_name=_(u'responsável'))
class Meta: class Meta:
verbose_name, verbose_name_plural = u'diagnóstico', u'diagnósticos' verbose_name, verbose_name_plural = _(u'diagnóstico'), _(u'diagnósticos')
@property @property
def membros(self): def membros(self):
@ -85,7 +85,7 @@ class Diagnostico(BaseEntity):
* host - O Host do sistema, para ser usado na * host - O Host do sistema, para ser usado na
construção do endereço do diagnóstico construção do endereço do diagnóstico
""" """
enviar_email(from_email, u"Diagnóstico publicado", enviar_email(from_email, _(u"Diagnóstico publicado"),
'diagnosticos/email_diagnostico_publicado.txt', 'diagnosticos/email_diagnostico_publicado.txt',
{ {
'responsavel': self.responsavel.nome_completo, 'responsavel': self.responsavel.nome_completo,
@ -93,7 +93,7 @@ class Diagnostico(BaseEntity):
'data_diagnostico': self.data_visita_inicio, 'data_diagnostico': self.data_visita_inicio,
'host': host, 'host': host,
'url_diagnostico': self.get_absolute_url(), 'url_diagnostico': self.get_absolute_url(),
'status': u"Publicado", 'status': _(u"Publicado"),
}) })
def email_diagnostico_alterado(self, from_email, host): def email_diagnostico_alterado(self, from_email, host):
@ -103,7 +103,7 @@ class Diagnostico(BaseEntity):
* host - O Host do sistema, para ser usado na * host - O Host do sistema, para ser usado na
construção do endereço do diagnóstico construção do endereço do diagnóstico
""" """
enviar_email(from_email, u"Diagnóstico alterado", enviar_email(from_email, _(u"Diagnóstico alterado"),
'diagnosticos/email_diagnostico_alterado.txt', 'diagnosticos/email_diagnostico_alterado.txt',
{ {
'servidor': self.responsavel.nome_completo, 'servidor': self.responsavel.nome_completo,
@ -111,7 +111,7 @@ class Diagnostico(BaseEntity):
'data_diagnostico': self.data_visita_inicio, 'data_diagnostico': self.data_visita_inicio,
'host': host, 'host': host,
'url_diagnostico': self.get_absolute_url(), 'url_diagnostico': self.get_absolute_url(),
'status': "Alterado", 'status': _("Alterado"),
}) })
def get_schemata(self, category=None, *args, **kwargs): def get_schemata(self, category=None, *args, **kwargs):
@ -188,7 +188,7 @@ class Pergunta(BaseSchema):
class Meta: class Meta:
ordering = ('title',) ordering = ('title',)
verbose_name, verbose_name_plural = 'pergunta', 'perguntas' verbose_name, verbose_name_plural = _('pergunta'), _('perguntas')
class Escolha(BaseChoice): class Escolha(BaseChoice):
@ -197,14 +197,14 @@ class Escolha(BaseChoice):
cadastradas neste modelo cadastradas neste modelo
""" """
schema = models.ForeignKey(Pergunta, schema = models.ForeignKey(Pergunta,
related_name='choices', verbose_name='pergunta') related_name='choices', verbose_name=_('pergunta'))
schema_to_open = models.ForeignKey(Pergunta, related_name='', schema_to_open = models.ForeignKey(Pergunta, related_name='',
verbose_name='pergunta para abrir', blank=True, null=True) verbose_name=_('pergunta para abrir'), blank=True, null=True)
ordem = models.PositiveIntegerField(blank=True, null=True) ordem = models.PositiveIntegerField(blank=True, null=True)
class Meta: class Meta:
ordering = ('schema', 'ordem') ordering = ('schema', 'ordem')
verbose_name, verbose_name_plural = 'escolha', 'escolhas' verbose_name, verbose_name_plural = _('escolha'), _('escolhas')
class Resposta(BaseAttribute): class Resposta(BaseAttribute):
@ -213,12 +213,12 @@ class Resposta(BaseAttribute):
de um diagnosico de um diagnosico
""" """
schema = models.ForeignKey(Pergunta, related_name='attrs', schema = models.ForeignKey(Pergunta, related_name='attrs',
verbose_name='pergunta') verbose_name=_('pergunta'))
choice = models.ForeignKey(Escolha, verbose_name='escolha', choice = models.ForeignKey(Escolha, verbose_name=_('escolha'),
blank=True, null=True) blank=True, null=True)
class Meta: class Meta:
verbose_name, verbose_name_plural = 'resposta', 'respostas' verbose_name, verbose_name_plural = _('resposta'), _('respostas')
class Equipe(models.Model): class Equipe(models.Model):
@ -229,7 +229,7 @@ class Equipe(models.Model):
membro = models.ForeignKey('servidores.Servidor') membro = models.ForeignKey('servidores.Servidor')
class Meta: class Meta:
verbose_name, verbose_name_plural = u'equipe', u'equipe' verbose_name, verbose_name_plural = _(u'equipe'), _(u'equipe')
def __unicode__(self): def __unicode__(self):
return self.membro.__unicode__() return self.membro.__unicode__()
@ -242,8 +242,8 @@ class Anexo(models.Model):
""" """
diagnostico = models.ForeignKey(Diagnostico, verbose_name=u'diagnóstico') diagnostico = models.ForeignKey(Diagnostico, verbose_name=u'diagnóstico')
arquivo = models.FileField(upload_to='apps/diagnostico/anexo/arquivo',) arquivo = models.FileField(upload_to='apps/diagnostico/anexo/arquivo',)
descricao = models.CharField('descrição', max_length='70') descricao = models.CharField(_('descrição'), max_length='70')
data_pub = models.DateTimeField('data da publicação do anexo', data_pub = models.DateTimeField(_('data da publicação do anexo'),
default=datetime.now) default=datetime.now)
class Meta: class Meta:

23
sigi/apps/diagnosticos/views.py

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json as simplejson # XXX trocar isso por simplesmente import json e refatorar o codigo
from itertools import cycle from itertools import cycle
from django.http import HttpResponse from django.http import HttpResponse
import json as simplejson # XXX trocar isso por simplesmente import json e refatorar o codigo
from django.shortcuts import render_to_response, get_object_or_404 from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext from django.template import RequestContext
from django.utils.translation import ugettext as _
from django.views.decorators.cache import never_cache from django.views.decorators.cache import never_cache
from sigi.apps.diagnosticos.urls import LOGIN_REDIRECT_URL
from sigi.apps.utils.decorators import login_required
from sigi.apps.diagnosticos.decorators import validate_diagnostico
from sigi.apps.diagnosticos.models import Diagnostico, Categoria, Pergunta
from sigi.apps.casas.models import Funcionario from sigi.apps.casas.models import Funcionario
from sigi.apps.contatos.models import Telefone
from sigi.apps.diagnosticos.decorators import validate_diagnostico
from sigi.apps.diagnosticos.forms import (DiagnosticoMobileForm, from sigi.apps.diagnosticos.forms import (DiagnosticoMobileForm,
CasaLegislativaMobileForm, FuncionariosMobileForm) CasaLegislativaMobileForm, FuncionariosMobileForm)
from sigi.apps.contatos.models import Telefone from sigi.apps.diagnosticos.models import Diagnostico, Categoria, Pergunta
from sigi.apps.diagnosticos.urls import LOGIN_REDIRECT_URL
from sigi.apps.utils.decorators import login_required
from sigi.shortcuts import render_to_pdf from sigi.shortcuts import render_to_pdf
@ -186,7 +186,9 @@ def categoria_contatos(request, id_diagnostico):
for form_telefones in form.telefones.forms: for form_telefones in form.telefones.forms:
tel = form_telefones.instance tel = form_telefones.instance
if tel._state.adding and tel.numero != '': if tel._state.adding and tel.numero != '':
s += '<p>Novo telefone %s: %s</p>' % (form_telefones.instance.get_tipo_display(), form_telefones.instance.numero) s += _('<p>Novo telefone %(type)s: %(number)s</p>') % dict(
type=form_telefones.instance.get_tipo_display(),
number=form_telefones.instance.numero)
resposta['clean'] += ('id_' + form_telefones.prefix + '-numero',) resposta['clean'] += ('id_' + form_telefones.prefix + '-numero',)
if s != '': if s != '':
resposta['fones'][form.prefix] = s resposta['fones'][form.prefix] = s
@ -205,8 +207,9 @@ def categoria_contatos(request, id_diagnostico):
Telefone.objects.get(pk=form_telefones.fields['id'].initial).delete() Telefone.objects.get(pk=form_telefones.fields['id'].initial).delete()
if form.prefix not in resposta['fones']: if form.prefix not in resposta['fones']:
resposta['fones'][form.prefix] = '' resposta['fones'][form.prefix] = ''
resposta['fones'][form.prefix] += u'<p>O telefone %s %s foi excluído da base de dados</p>' % ( resposta['fones'][form.prefix] += _(u'<p>O telefone %(type)s %(number)s foi excluído da base de dados</p>') % dict(
form_telefones.instance.get_tipo_display(), form_telefones.instance.numero) type=form_telefones.instance.get_tipo_display(),
number=form_telefones.instance.numero)
else: else:
for key, value in form_telefones.errors.iteritems(): for key, value in form_telefones.errors.iteritems():
key = form_telefones.prefix + "-id-errors" key = form_telefones.prefix + "-id-errors"

16
sigi/apps/financeiro/models.py

@ -1,18 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.db import models from django.db import models
from django.utils.translation import ugettext as _
from sigi.apps.convenios.models import Projeto from sigi.apps.convenios.models import Projeto
class Desembolso(models.Model): class Desembolso(models.Model):
projeto = models.ForeignKey(Projeto, verbose_name=u'Projeto') projeto = models.ForeignKey(Projeto, verbose_name=_(u'Projeto'))
descricao = models.CharField(u'Descrição da despesa', max_length=100) descricao = models.CharField(_(u'Descrição da despesa'), max_length=100)
data = models.DateField(u'Data do desembolso') data = models.DateField(_(u'Data do desembolso'))
valor_reais = models.DecimalField(u'Valor em R$', max_digits=18, decimal_places=2) valor_reais = models.DecimalField(_(u'Valor em R$'), max_digits=18, decimal_places=2)
valor_dolar = models.DecimalField(u'Valor em US$', max_digits=18, decimal_places=2) valor_dolar = models.DecimalField(_(u'Valor em US$'), max_digits=18, decimal_places=2)
class Meta: class Meta:
verbose_name = 'Desembolso' verbose_name = _('Desembolso')
verbose_name_plural = 'Desembolsos' verbose_name_plural = _('Desembolsos')
def __unicode__(self): def __unicode__(self):
return u"%s (US$ %s)" % (self.descricao, self.valor_dolar) return u"%s (US$ %s)" % (self.descricao, self.valor_dolar)

29
sigi/apps/inventario/models.py

@ -1,19 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.db import models
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.db import models
from django.utils.translation import ugettext as _
class Fornecedor(models.Model): class Fornecedor(models.Model):
nome = models.CharField(max_length=40) nome = models.CharField(max_length=40)
nome.alphabetic_filter = True nome.alphabetic_filter = True
email = models.EmailField('e-mail', blank=True) email = models.EmailField(_('e-mail'), blank=True)
pagina_web = models.URLField('página web', blank=True) pagina_web = models.URLField(_('página web'), blank=True)
telefones = generic.GenericRelation('contatos.Telefone') telefones = generic.GenericRelation('contatos.Telefone')
contatos = generic.GenericRelation('contatos.Contato') contatos = generic.GenericRelation('contatos.Contato')
class Meta: class Meta:
ordering = ('nome',) ordering = ('nome',)
verbose_name_plural = 'fornecedores' verbose_name_plural = _('fornecedores')
def __unicode__(self): def __unicode__(self):
return self.nome return self.nome
@ -35,8 +36,8 @@ class TipoEquipamento(models.Model):
class Meta: class Meta:
ordering = ('tipo',) ordering = ('tipo',)
verbose_name = 'tipo de equipamento' verbose_name = _('tipo de equipamento')
verbose_name_plural = 'tipos de equipamentos' verbose_name_plural = _('tipos de equipamentos')
def __unicode__(self): def __unicode__(self):
return self.tipo return self.tipo
@ -45,14 +46,14 @@ class TipoEquipamento(models.Model):
class ModeloEquipamento(models.Model): class ModeloEquipamento(models.Model):
tipo = models.ForeignKey( tipo = models.ForeignKey(
TipoEquipamento, TipoEquipamento,
verbose_name='tipo de equipamento' verbose_name=_('tipo de equipamento')
) )
modelo = models.CharField(max_length=30) modelo = models.CharField(max_length=30)
class Meta: class Meta:
ordering = ('modelo',) ordering = ('modelo',)
verbose_name = 'modelo de equipamento' verbose_name = _('modelo de equipamento')
verbose_name_plural = 'modelos de equipamentos' verbose_name_plural = _('modelos de equipamentos')
def __unicode__(self): def __unicode__(self):
return self.modelo return self.modelo
@ -75,20 +76,20 @@ class Bem(models.Model):
equipamento = models.ForeignKey(Equipamento) equipamento = models.ForeignKey(Equipamento)
fornecedor = models.ForeignKey(Fornecedor) fornecedor = models.ForeignKey(Fornecedor)
num_serie = models.CharField( num_serie = models.CharField(
'número de série', _('número de série'),
max_length=64, max_length=64,
help_text='Número fornecido pelo fabricante.', help_text=_('Número fornecido pelo fabricante.'),
unique=True unique=True
) )
recebido_por = models.CharField( recebido_por = models.CharField(
max_length=64, max_length=64,
blank=True, blank=True,
help_text='Nome de quem recebeu o equipamento.' help_text=_('Nome de quem recebeu o equipamento.')
) )
observacoes = models.TextField('observações', blank=True) observacoes = models.TextField(_('observações'), blank=True)
class Meta: class Meta:
verbose_name_plural = 'bens' verbose_name_plural = _('bens')
def __unicode__(self): def __unicode__(self):
return unicode('%s (%s)') % (self.equipamento, self.casa_legislativa) return unicode('%s (%s)') % (self.equipamento, self.casa_legislativa)

3
sigi/apps/mesas/admin.py

@ -2,6 +2,7 @@
from django.contrib import admin from django.contrib import admin
from django.http import HttpResponse from django.http import HttpResponse
from django.utils.html import escape from django.utils.html import escape
from django.utils.translation import ugettext as _
from sigi.apps.mesas.models import (Legislatura, Coligacao, ComposicaoColigacao, from sigi.apps.mesas.models import (Legislatura, Coligacao, ComposicaoColigacao,
SessaoLegislativa, MesaDiretora, Cargo, SessaoLegislativa, MesaDiretora, Cargo,
@ -26,7 +27,7 @@ class LegislaturaAdmin(BaseModelAdmin):
def uf(self, obj): def uf(self, obj):
return obj.casa_legislativa.municipio.uf.sigla return obj.casa_legislativa.municipio.uf.sigla
uf.short_description = 'UF' uf.short_description = _('UF')
uf.admin_order_field = 'casa_legislativa__municipio__uf' uf.admin_order_field = 'casa_legislativa__municipio__uf'
def lookup_allowed(self, lookup, value): def lookup_allowed(self, lookup, value):

60
sigi/apps/mesas/models.py

@ -1,15 +1,17 @@
# coding: utf-8 # coding: utf-8
from django.db import models from django.db import models
from django.utils.translation import ugettext as _
from sigi.apps.casas.models import CasaLegislativa from sigi.apps.casas.models import CasaLegislativa
class Legislatura(models.Model): class Legislatura(models.Model):
casa_legislativa = models.ForeignKey(CasaLegislativa) casa_legislativa = models.ForeignKey(CasaLegislativa)
numero = models.PositiveSmallIntegerField(u'número legislatura') numero = models.PositiveSmallIntegerField(_(u'número legislatura'))
data_inicio = models.DateField(u'início') data_inicio = models.DateField(_(u'início'))
data_fim = models.DateField(u'fim') data_fim = models.DateField(_(u'fim'))
data_eleicao = models.DateField(u'data da eleição') data_eleicao = models.DateField(_(u'data da eleição'))
total_parlamentares = models.PositiveIntegerField(u"Total de parlamentares") total_parlamentares = models.PositiveIntegerField(_(u"Total de parlamentares"))
casa_legislativa.convenio_uf_filter = True casa_legislativa.convenio_uf_filter = True
casa_legislativa.convenio_cl_tipo_filter = True casa_legislativa.convenio_cl_tipo_filter = True
@ -19,34 +21,34 @@ class Legislatura(models.Model):
ordering = ['casa_legislativa__municipio__uf__sigla', '-data_inicio'] ordering = ['casa_legislativa__municipio__uf__sigla', '-data_inicio']
def __unicode__(self): def __unicode__(self):
return u"%sª legislatura da %s (%s-%s)" % (self.numero, self.casa_legislativa.__unicode__(), self.data_inicio.year, self.data_fim.year) return _(u"%sª legislatura da %s (%s-%s)") % (self.numero, self.casa_legislativa.__unicode__(), self.data_inicio.year, self.data_fim.year)
class Coligacao(models.Model): class Coligacao(models.Model):
nome = models.CharField(max_length=50) nome = models.CharField(max_length=50)
legislatura = models.ForeignKey(Legislatura) legislatura = models.ForeignKey(Legislatura)
numero_votos = models.PositiveIntegerField( numero_votos = models.PositiveIntegerField(
u'número de votos', _(u'número de votos'),
blank=True, blank=True,
null=True, null=True,
) )
class Meta: class Meta:
ordering = ('legislatura', 'nome') ordering = ('legislatura', 'nome')
verbose_name = 'coligação' verbose_name = _('coligação')
verbose_name_plural = 'coligações' verbose_name_plural = _('coligações')
def __unicode__(self): def __unicode__(self):
return self.nome return self.nome
class ComposicaoColigacao(models.Model): class ComposicaoColigacao(models.Model):
coligacao = models.ForeignKey(Coligacao, verbose_name='coligação') coligacao = models.ForeignKey(Coligacao, verbose_name=_('coligação'))
partido = models.ForeignKey('parlamentares.Partido') partido = models.ForeignKey('parlamentares.Partido')
class Meta: class Meta:
verbose_name = 'composição da coligação' verbose_name = _('composição da coligação')
verbose_name_plural = 'composições das coligações' verbose_name_plural = _('composições das coligações')
def __unicode__(self): def __unicode__(self):
return str(self.id) return str(self.id)
@ -54,13 +56,13 @@ class ComposicaoColigacao(models.Model):
class SessaoLegislativa(models.Model): class SessaoLegislativa(models.Model):
SESSAO_CHOICES = ( SESSAO_CHOICES = (
('O', 'Ordinária'), ('O', _('Ordinária')),
('E', 'Extraordinária'), ('E', _('Extraordinária')),
) )
numero = models.PositiveSmallIntegerField(u'número da sessão', unique=True) numero = models.PositiveSmallIntegerField(_(u'número da sessão'), unique=True)
mesa_diretora = models.ForeignKey( mesa_diretora = models.ForeignKey(
'MesaDiretora', 'MesaDiretora',
verbose_name='Mesa Diretora' verbose_name=_('Mesa Diretora')
) )
legislatura = models.ForeignKey(Legislatura) legislatura = models.ForeignKey(Legislatura)
tipo = models.CharField( tipo = models.CharField(
@ -68,23 +70,23 @@ class SessaoLegislativa(models.Model):
choices=SESSAO_CHOICES, choices=SESSAO_CHOICES,
default='O' default='O'
) )
data_inicio = models.DateField(u'início') data_inicio = models.DateField(_(u'início'))
data_fim = models.DateField('fim') data_fim = models.DateField(_('fim'))
data_inicio_intervalo = models.DateField( data_inicio_intervalo = models.DateField(
u'início de intervalo', _(u'início de intervalo'),
blank=True, blank=True,
null=True null=True
) )
data_fim_intervalo = models.DateField( data_fim_intervalo = models.DateField(
'fim de intervalo', _('fim de intervalo'),
blank=True, blank=True,
null=True null=True
) )
class Meta: class Meta:
ordering = ('legislatura', 'numero') ordering = ('legislatura', 'numero')
verbose_name = 'Sessão Legislativa' verbose_name = _('Sessão Legislativa')
verbose_name_plural = 'Sessões Legislativas' verbose_name_plural = _('Sessões Legislativas')
def __unicode__(self): def __unicode__(self):
return str(self.numero) return str(self.numero)
@ -93,19 +95,19 @@ class SessaoLegislativa(models.Model):
class MesaDiretora(models.Model): class MesaDiretora(models.Model):
casa_legislativa = models.ForeignKey( casa_legislativa = models.ForeignKey(
'casas.CasaLegislativa', 'casas.CasaLegislativa',
verbose_name='Casa Legislativa' verbose_name=_('Casa Legislativa')
) )
class Meta: class Meta:
verbose_name = 'Mesa Diretora' verbose_name = _('Mesa Diretora')
verbose_name_plural = 'Mesas Diretoras' verbose_name_plural = _('Mesas Diretoras')
def __unicode__(self): def __unicode__(self):
return 'Mesa Diretora da %s' % unicode(self.casa_legislativa) return _('Mesa Diretora da %s') % unicode(self.casa_legislativa)
class Cargo(models.Model): class Cargo(models.Model):
descricao = models.CharField(u'descrição', max_length=30) descricao = models.CharField(_(u'descrição'), max_length=30)
class Meta: class Meta:
ordering = ('descricao',) ordering = ('descricao',)
@ -122,8 +124,8 @@ class MembroMesaDiretora(models.Model):
class Meta: class Meta:
ordering = ('parlamentar',) ordering = ('parlamentar',)
unique_together = ('cargo', 'mesa_diretora') unique_together = ('cargo', 'mesa_diretora')
verbose_name = 'membro de Mesa Diretora' verbose_name = _('membro de Mesa Diretora')
verbose_name_plural = 'membros de Mesas Diretora' verbose_name_plural = _('membros de Mesas Diretora')
def __unicode__(self): def __unicode__(self):
return '%s (%s)' % (unicode(self.parlamentar), unicode(self.cargo)) return '%s (%s)' % (unicode(self.parlamentar), unicode(self.cargo))

4
sigi/apps/metas/admin.py

@ -1,9 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib import admin from django.contrib import admin
from django.utils.translation import ugettext as _
from sigi.apps.metas.models import PlanoDiretor from sigi.apps.metas.models import PlanoDiretor
from sigi.apps.utils.base_admin import BaseModelAdmin from sigi.apps.utils.base_admin import BaseModelAdmin
class MetaAdmin(BaseModelAdmin): class MetaAdmin(BaseModelAdmin):
list_display = ('projeto', 'titulo', 'data_inicio', 'data_fim', 'valor_meta', 'valor_executado', 'percentual_concluido',) list_display = ('projeto', 'titulo', 'data_inicio', 'data_fim', 'valor_meta', 'valor_executado', 'percentual_concluido',)
fields = ('projeto', 'titulo', 'descricao', 'data_inicio', 'data_fim', 'algoritmo', 'valor_meta',) fields = ('projeto', 'titulo', 'descricao', 'data_inicio', 'data_fim', 'algoritmo', 'valor_meta',)
@ -18,7 +20,7 @@ class PlanoDiretorAdmin(BaseModelAdmin):
def get_uf(self, obj): def get_uf(self, obj):
return obj.casa_legislativa.municipio.uf.nome return obj.casa_legislativa.municipio.uf.nome
get_uf.short_description = u"UF" get_uf.short_description = _(u"UF")
get_uf.admin_order_field = 'casa_legislativa__municipio__uf__nome' get_uf.admin_order_field = 'casa_legislativa__municipio__uf__nome'
def lookup_allowed(self, lookup, value): def lookup_allowed(self, lookup, value):

4
sigi/apps/metas/management/commands/gera_map_data.py

@ -22,11 +22,13 @@
# 02110-1301, USA. # 02110-1301, USA.
# #
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.utils.translation import ugettext as _
from sigi.apps.metas.views import gera_map_data_file from sigi.apps.metas.views import gera_map_data_file
class Command(BaseCommand): class Command(BaseCommand):
help = u'Gera arquivo de dados de plotagem do mapa de atuação do Interlegis.' help = _(u'Gera arquivo de dados de plotagem do mapa de atuação do Interlegis.')
def handle(self, *args, **options): def handle(self, *args, **options):
result = gera_map_data_file(cronjob=True) result = gera_map_data_file(cronjob=True)

54
sigi/apps/metas/models.py

@ -1,32 +1,34 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from datetime import date, datetime from datetime import date
from django.db import models from django.db import models
from django.utils.translation import ugettext as _
from sigi.apps.casas.models import CasaLegislativa
from sigi.apps.convenios.models import Projeto, Convenio from sigi.apps.convenios.models import Projeto, Convenio
from sigi.apps.diagnosticos.models import Diagnostico from sigi.apps.diagnosticos.models import Diagnostico
from sigi.apps.casas.models import CasaLegislativa
from sigi.apps.financeiro.models import Desembolso from sigi.apps.financeiro.models import Desembolso
class Meta(models.Model): class Meta(models.Model):
ALGORITMO_CHOICES = ( ALGORITMO_CHOICES = (
('SUM_GASTOS', u'Soma dos desembolsos'), ('SUM_GASTOS', _(u'Soma dos desembolsos')),
('COUNT_EQUI', u'Quantidade de casas equipadas'), ('COUNT_EQUI', _(u'Quantidade de casas equipadas')),
('COUNT_ADER', u'Quantidade de casas aderidas'), ('COUNT_ADER', _(u'Quantidade de casas aderidas')),
('COUNT_DIAG', u'Quantidade de casas diagnosticadas'), ('COUNT_DIAG', _(u'Quantidade de casas diagnosticadas')),
('COUNT_PDIR', u'Quantidade de planos diretores'), ('COUNT_PDIR', _(u'Quantidade de planos diretores')),
('COUNT_CONV', u'Quantidade de casas conveniadas'), ('COUNT_CONV', _(u'Quantidade de casas conveniadas')),
) )
projeto = models.ForeignKey(Projeto, verbose_name=u'Projeto', help_text=u'Projeto ao qual a meta se refere') projeto = models.ForeignKey(Projeto, verbose_name=_(u'Projeto'), help_text=_(u'Projeto ao qual a meta se refere'))
titulo = models.CharField(u'Título', max_length=40, help_text=u'Título da meta que aparecerá no dashboard') titulo = models.CharField(_(u'Título'), max_length=40, help_text=_(u'Título da meta que aparecerá no dashboard'))
descricao = models.TextField(u'Descrição') descricao = models.TextField(_(u'Descrição'))
data_inicio = models.DateField(u'Data inicial', help_text=u'Início do período de cômputo da meta') data_inicio = models.DateField(_(u'Data inicial'), help_text=_(u'Início do período de cômputo da meta'))
data_fim = models.DateField(u'Data final', help_text=u'Prazo final para cumprimento da meta') data_fim = models.DateField(_(u'Data final'), help_text=_(u'Prazo final para cumprimento da meta'))
algoritmo = models.CharField(u'Algoritmo de cálculo', max_length=10, choices=ALGORITMO_CHOICES) algoritmo = models.CharField(_(u'Algoritmo de cálculo'), max_length=10, choices=ALGORITMO_CHOICES)
valor_meta = models.FloatField(u'Valor da meta', help_text=u'Valor que deve ser atingido até o prazo final da meta') valor_meta = models.FloatField(_(u'Valor da meta'), help_text=_(u'Valor que deve ser atingido até o prazo final da meta'))
class Meta: class Meta:
verbose_name = 'Meta BID' verbose_name = _('Meta BID')
verbose_name_plural = 'Metas BID' verbose_name_plural = _('Metas BID')
def __unicode__(self): def __unicode__(self):
return self.titulo return self.titulo
@ -109,19 +111,19 @@ class Meta(models.Model):
class PlanoDiretor(models.Model): class PlanoDiretor(models.Model):
STATUS_CHOICE = ( STATUS_CHOICE = (
('E', u'Entregue'), ('E', _(u'Entregue')),
('I', u'Implantado'), ('I', _(u'Implantado')),
) )
projeto = models.ForeignKey(Projeto, verbose_name=u'Projeto') projeto = models.ForeignKey(Projeto, verbose_name=_(u'Projeto'))
casa_legislativa = models.ForeignKey(CasaLegislativa, verbose_name=u'Casa Legislativa') casa_legislativa = models.ForeignKey(CasaLegislativa, verbose_name=_(u'Casa Legislativa'))
casa_legislativa.casa_uf_filter = True casa_legislativa.casa_uf_filter = True
status = models.CharField(u'Status', max_length=1, choices=STATUS_CHOICE, default='E') status = models.CharField(_(u'Status'), max_length=1, choices=STATUS_CHOICE, default='E')
data_entrega = models.DateField(u'Data de entrega', blank=True, null=True) data_entrega = models.DateField(_(u'Data de entrega'), blank=True, null=True)
data_implantacao = models.DateField(u'Data de implantação', blank=True, null=True) data_implantacao = models.DateField(_(u'Data de implantação'), blank=True, null=True)
class Meta: class Meta:
verbose_name = 'Plano Diretor' verbose_name = _('Plano Diretor')
verbose_name_plural = 'Planos Diretores' verbose_name_plural = _('Planos Diretores')
def __unicode__(self): def __unicode__(self):
return self.casa_legislativa.nome return self.casa_legislativa.nome

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

@ -1,9 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django import template from django import template
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
from sigi.apps.casas.models import CasaLegislativa from sigi.apps.casas.models import CasaLegislativa
register = template.Library() register = template.Library()
@ -15,21 +17,21 @@ def descricao_servicos(value):
result = "" result = ""
for sv in value.servico_set.all(): 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')) 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(): 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): 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) 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): 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')) 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): 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')) 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(): 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 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 >>", else _(u"<< sem data inicial >>"),
dg.data_visita_fim.strftime('%d/%m/%Y') if dg.data_visita_fim dg.data_visita_fim.strftime('%d/%m/%Y') if dg.data_visita_fim
else u"<< sem data final >>") else _(u"<< sem data final >>"))
return mark_safe(result) return mark_safe(result)
descricao_servicos.is_safe = True descricao_servicos.is_safe = True

52
sigi/apps/metas/views.py

@ -1,27 +1,29 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import csv import csv
import json as simplejson # XXX trocar isso por simplesmente import json e refatorar o codigo
import os import os
from functools import reduce
from django.http import HttpResponse from django.contrib.auth.decorators import login_required
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
import json as simplejson # XXX trocar isso por simplesmente import json e refatorar o codigo from django.db.models import Q
from django.utils.datastructures import SortedDict from django.db.models.aggregates import Sum
from django.http import HttpResponse
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
from django.db.models import Q from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext as _
from django.views.decorators.cache import cache_page 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, STATIC_URL
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.casas.models import CasaLegislativa
from sigi.apps.utils import to_ascii from sigi.apps.contatos.models import UnidadeFederativa
from sigi.apps.convenios.models import Projeto
from sigi.apps.financeiro.models import Desembolso from sigi.apps.financeiro.models import Desembolso
from sigi.apps.metas.templatetags.mapa_tags import descricao_servicos from sigi.apps.servicos.models import TipoServico
from functools import reduce from sigi.apps.utils import to_ascii
from sigi.settings import MEDIA_ROOT, STATIC_URL
from sigi.shortcuts import render_to_pdf
JSON_FILE_NAME = os.path.join(MEDIA_ROOT, 'apps/metas/map_data.json') JSON_FILE_NAME = os.path.join(MEDIA_ROOT, 'apps/metas/map_data.json')
@ -308,28 +310,30 @@ def gera_map_data_file(cronjob=False):
} }
for sv in c.servico_set.all(): for sv in c.servico_set.all():
casa['info'].append(u"%s ativado em %s <a href='%s' target='_blank'><img src='%simg/link.gif' alt='link'></a>" % ( casa['info'].append(
sv.tipo_servico.nome, sv.data_ativacao.strftime('%d/%m/%Y') if sv.data_ativacao else _(u"%(name)s ativado em %(date)s") % dict(
u'<sem data de ativação>', sv.url, STATIC_URL)) 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) casa['seit'].append(sv.tipo_servico.sigla)
for cv in c.convenio_set.all(): for cv in c.convenio_set.all():
if (cv.data_retorno_assinatura is None) and (cv.equipada and cv.data_termo_aceite 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['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) casa['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): 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['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) casa['convenios'].append(cv.projeto.sigla)
if (cv.data_retorno_assinatura is not None) and (cv.equipada and cv.data_termo_aceite 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['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['equipadas'].append(cv.projeto.sigla)
casa['convenios'].append(cv.projeto.sigla) casa['convenios'].append(cv.projeto.sigla)
for dg in c.diagnostico_set.all(): for dg in c.diagnostico_set.all():
casa['diagnosticos'].append('P' if dg.publicado else 'A') 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 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"<sem data de início>", 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>")) 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']) casa['info'] = "<br/>".join(casa['info'])
@ -348,6 +352,6 @@ def gera_map_data_file(cronjob=False):
pass # ... ou os dados poderão ser usados de qualquer forma pass # ... ou os dados poderão ser usados de qualquer forma
if cronjob: if cronjob:
return "Arquivo %s gerado em %d segundos" % (JSON_FILE_NAME, time.time() - start) return _("Arquivo %s gerado em %d segundos") % (JSON_FILE_NAME, time.time() - start)
return json_data return json_data

9
sigi/apps/ocorrencias/admin.py

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib import admin from django.contrib import admin
from django.contrib.admin.views.main import ChangeList from django.contrib.admin.views.main import ChangeList
from django.utils.translation import ugettext as _
from filters import OcorrenciaListFilter from filters import OcorrenciaListFilter
from sigi.apps.ocorrencias.models import Ocorrencia, Comentario, Anexo, Categoria, TipoContato from sigi.apps.ocorrencias.models import Ocorrencia, Comentario, Anexo, Categoria, TipoContato
@ -13,7 +14,7 @@ class ComentarioViewInline(admin.TabularInline):
extra = 0 extra = 0
max_num = 0 max_num = 0
can_delete = False can_delete = False
verbose_name, verbose_name_plural = u"Comentário anterior", u"Comentários anteriores" verbose_name, verbose_name_plural = _(u"Comentário anterior"), _(u"Comentários anteriores")
fields = ('usuario', 'data_criacao', 'novo_status', 'encaminhar_setor', 'descricao', ) fields = ('usuario', 'data_criacao', 'novo_status', 'encaminhar_setor', 'descricao', )
readonly_fields = ('novo_status', 'encaminhar_setor', 'descricao', 'data_criacao', 'usuario',) readonly_fields = ('novo_status', 'encaminhar_setor', 'descricao', 'data_criacao', 'usuario',)
@ -21,7 +22,7 @@ class ComentarioViewInline(admin.TabularInline):
class ComentarioInline(admin.StackedInline): class ComentarioInline(admin.StackedInline):
model = Comentario model = Comentario
extra = 1 extra = 1
verbose_name, verbose_name_plural = u"Comentário novo", u"Comentários novos" verbose_name, verbose_name_plural = _(u"Comentário novo"), _(u"Comentários novos")
fieldsets = ((None, {'fields': (('novo_status', 'encaminhar_setor',), 'descricao', )}),) fieldsets = ((None, {'fields': (('novo_status', 'encaminhar_setor',), 'descricao', )}),)
def get_queryset(self, queryset): def get_queryset(self, queryset):
@ -114,12 +115,12 @@ class OcorrenciaAdmin(BaseModelAdmin):
def get_uf(self, obj): def get_uf(self, obj):
return obj.casa_legislativa.municipio.uf return obj.casa_legislativa.municipio.uf
get_uf.short_description = u'UF' get_uf.short_description = _(u'UF')
get_uf.admin_order_field = 'casa_legislativa__municipio__uf' get_uf.admin_order_field = 'casa_legislativa__municipio__uf'
def get_municipio(self, obj): def get_municipio(self, obj):
return obj.casa_legislativa.municipio.nome return obj.casa_legislativa.municipio.nome
get_municipio.short_description = u'Município' get_municipio.short_description = _(u'Município')
get_municipio.admin_order_field = 'casa_legislativa__municipio__nome' get_municipio.admin_order_field = 'casa_legislativa__municipio__nome'

8
sigi/apps/ocorrencias/filters.py

@ -1,17 +1,19 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib import admin from django.contrib import admin
from django.utils.translation import ugettext as _
from sigi.apps.servidores.models import Servidor from sigi.apps.servidores.models import Servidor
class OcorrenciaListFilter(admin.SimpleListFilter): class OcorrenciaListFilter(admin.SimpleListFilter):
title = u'Relacionadas a Mim' title = _(u'Relacionadas a Mim')
parameter_name = 'minhas' parameter_name = 'minhas'
def lookups(self, request, model_admin): def lookups(self, request, model_admin):
return ( return (
('S', u'Atribuídos ao meu setor'), ('S', _(u'Atribuídos ao meu setor')),
('M', u'Registrados por mim'), ('M', _(u'Registrados por mim')),
) )
def queryset(self, request, queryset): def queryset(self, request, queryset):

81
sigi/apps/ocorrencias/models.py

@ -1,24 +1,25 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.db import models from django.db import models
from django.utils.translation import ugettext as _
class Categoria(models.Model): class Categoria(models.Model):
nome = models.CharField(u"Categoria", max_length=50) nome = models.CharField(_(u"Categoria"), max_length=50)
descricao = models.TextField(u'descrição', blank=True, null=True) descricao = models.TextField(_(u'descrição'), blank=True, null=True)
setor_responsavel = models.ForeignKey('servidores.Servico', verbose_name=u"Setor responsável") setor_responsavel = models.ForeignKey('servidores.Servico', verbose_name=_(u"Setor responsável"))
class Meta: class Meta:
verbose_name, verbose_name_plural = u'Categoria', u'Categorias' verbose_name, verbose_name_plural = _(u'Categoria'), _(u'Categorias')
def __unicode__(self): def __unicode__(self):
return self.nome return self.nome
class TipoContato(models.Model): class TipoContato(models.Model):
descricao = models.CharField(u"Descrição", max_length=50) descricao = models.CharField(_(u"Descrição"), max_length=50)
class Meta: class Meta:
verbose_name, verbose_name_plural = u"Tipo de contato", u"Tipos de contato" verbose_name, verbose_name_plural = _(u"Tipo de contato"), _(u"Tipos de contato")
def __unicode__(self): def __unicode__(self):
return self.descricao return self.descricao
@ -26,40 +27,40 @@ class TipoContato(models.Model):
class Ocorrencia(models.Model): class Ocorrencia(models.Model):
STATUS_CHOICES = ( STATUS_CHOICES = (
(1, u'Aberto'), (1, _(u'Aberto')),
(2, u'Reaberto'), (2, _(u'Reaberto')),
(3, u'Resolvido'), (3, _(u'Resolvido')),
(4, u'Fechado'), (4, _(u'Fechado')),
(5, u'Duplicado'), (5, _(u'Duplicado')),
) )
PRIORITY_CHOICES = ( PRIORITY_CHOICES = (
(1, u'Altíssimo'), (1, _(u'Altíssimo')),
(2, u'Alto'), (2, _(u'Alto')),
(3, u'Normal'), (3, _(u'Normal')),
(4, u'Baixo'), (4, _(u'Baixo')),
(5, u'Baixíssimo'), (5, _(u'Baixíssimo')),
) )
casa_legislativa = models.ForeignKey('casas.CasaLegislativa', verbose_name=u'Casa Legislativa') casa_legislativa = models.ForeignKey('casas.CasaLegislativa', verbose_name=_(u'Casa Legislativa'))
casa_legislativa.convenio_uf_filter = True casa_legislativa.convenio_uf_filter = True
casa_legislativa.convenio_cl_tipo_filter = True casa_legislativa.convenio_cl_tipo_filter = True
data_criacao = models.DateField(u'Data de criação', null=True, blank=True, auto_now_add=True) data_criacao = models.DateField(_(u'Data de criação'), null=True, blank=True, auto_now_add=True)
data_modificacao = models.DateField(u'Data de modificação', null=True, blank=True, auto_now=True) data_modificacao = models.DateField(_(u'Data de modificação'), null=True, blank=True, auto_now=True)
categoria = models.ForeignKey(Categoria, verbose_name=u'Categoria') categoria = models.ForeignKey(Categoria, verbose_name=_(u'Categoria'))
tipo_contato = models.ForeignKey(TipoContato, verbose_name=u"Tipo de contato") tipo_contato = models.ForeignKey(TipoContato, verbose_name=_(u"Tipo de contato"))
assunto = models.CharField(u'Assunto', max_length=200) assunto = models.CharField(_(u'Assunto'), max_length=200)
assunto.grupo_filter = True assunto.grupo_filter = True
status = models.IntegerField(u'Status', choices=STATUS_CHOICES, default=1,) status = models.IntegerField(_(u'Status'), choices=STATUS_CHOICES, default=1,)
status.multichoice_filter = True status.multichoice_filter = True
prioridade = models.IntegerField(u'Prioridade', choices=PRIORITY_CHOICES, default=3, ) prioridade = models.IntegerField(_(u'Prioridade'), choices=PRIORITY_CHOICES, default=3, )
descricao = models.TextField(u'descrição', blank=True,) descricao = models.TextField(_(u'descrição'), blank=True,)
resolucao = models.TextField(u'resolução', blank=True,) resolucao = models.TextField(_(u'resolução'), blank=True,)
servidor_registro = models.ForeignKey('servidores.Servidor', verbose_name=u"Servidor que registrou a ocorrência") servidor_registro = models.ForeignKey('servidores.Servidor', verbose_name=_(u"Servidor que registrou a ocorrência"))
setor_responsavel = models.ForeignKey('servidores.Servico', verbose_name=u"Setor responsável") setor_responsavel = models.ForeignKey('servidores.Servico', verbose_name=_(u"Setor responsável"))
class Meta: class Meta:
verbose_name, verbose_name_plural = u'ocorrência', u'ocorrências' verbose_name, verbose_name_plural = _(u'ocorrência'), _(u'ocorrências')
ordering = ['prioridade', 'data_modificacao', 'data_criacao', ] ordering = ['prioridade', 'data_modificacao', 'data_criacao', ]
def __unicode__(self): def __unicode__(self):
@ -67,23 +68,23 @@ class Ocorrencia(models.Model):
class Comentario(models.Model): class Comentario(models.Model):
ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=u'Ocorrência') ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=_(u'Ocorrência'))
data_criacao = models.DateTimeField(u'Data de criação', null=True, blank=True, auto_now_add=True) data_criacao = models.DateTimeField(_(u'Data de criação'), null=True, blank=True, auto_now_add=True)
descricao = models.TextField(u'Descrição', blank=True, null=True) descricao = models.TextField(_(u'Descrição'), blank=True, null=True)
usuario = models.ForeignKey('servidores.Servidor', verbose_name=u'Usuário') usuario = models.ForeignKey('servidores.Servidor', verbose_name=_(u'Usuário'))
novo_status = models.IntegerField(u'Novo status', choices=Ocorrencia.STATUS_CHOICES, blank=True, null=True) novo_status = models.IntegerField(_(u'Novo status'), choices=Ocorrencia.STATUS_CHOICES, blank=True, null=True)
encaminhar_setor = models.ForeignKey('servidores.Servico', verbose_name=u'Encaminhar para setor', blank=True, null=True) encaminhar_setor = models.ForeignKey('servidores.Servico', verbose_name=_(u'Encaminhar para setor'), blank=True, null=True)
class Anexo(models.Model): class Anexo(models.Model):
ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=u'ocorrência') ocorrencia = models.ForeignKey(Ocorrencia, verbose_name=_(u'ocorrência'))
arquivo = models.FileField(u'Arquivo anexado', upload_to='apps/ocorrencia/anexo/arquivo',) arquivo = models.FileField(_(u'Arquivo anexado'), upload_to='apps/ocorrencia/anexo/arquivo',)
descricao = models.CharField(u'descrição do anexo', max_length='70') descricao = models.CharField(_(u'descrição do anexo'), max_length='70')
data_pub = models.DateTimeField(u'data da publicação do anexo', null=True, blank=True, auto_now_add=True) data_pub = models.DateTimeField(_(u'data da publicação do anexo'), null=True, blank=True, auto_now_add=True)
class Meta: class Meta:
ordering = ('-data_pub',) ordering = ('-data_pub',)
verbose_name, verbose_name_plural = u'Anexo', u'Anexos' verbose_name, verbose_name_plural = _(u'Anexo'), _(u'Anexos')
def __unicode__(self): def __unicode__(self):
return u"%(arquivo_name)s: %(descricao)s" % {'arquivo_name': self.arquivo.name, 'descricao': self.descricao} return u"%(arquivo_name)s: %(descricao)s" % {'arquivo_name': self.arquivo.name, 'descricao': self.descricao}

13
sigi/apps/parlamentares/admin.py

@ -2,6 +2,7 @@
from django.contrib import admin from django.contrib import admin
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.utils.translation import ugettext as _
from sigi.apps.contatos.models import Telefone from sigi.apps.contatos.models import Telefone
from sigi.apps.parlamentares.models import Partido, Parlamentar, Mandato from sigi.apps.parlamentares.models import Partido, Parlamentar, Mandato
@ -28,7 +29,7 @@ class PartidoAdmin(BaseModelAdmin):
class ParlamentarNomeCompletoFilter(AlphabeticFilter): class ParlamentarNomeCompletoFilter(AlphabeticFilter):
title = 'Inicial do Nome Completo' title = _('Inicial do Nome Completo')
parameter_name = 'nome_completo' parameter_name = 'nome_completo'
@ -42,10 +43,10 @@ class ParlamentarAdmin(BaseModelAdmin):
(None, { (None, {
'fields': ('nome_completo', 'nome_parlamentar', 'sexo'), 'fields': ('nome_completo', 'nome_parlamentar', 'sexo'),
}), }),
# ('Endereço', { # (_('Endereço'), {
# 'fields': ('logradouro', 'bairro', 'municipio', 'cep'), # 'fields': ('logradouro', 'bairro', 'municipio', 'cep'),
# }), # }),
('Outras informações', { (_('Outras informações'), {
'fields': ('data_nascimento', 'email', 'pagina_web', 'foto'), 'fields': ('data_nascimento', 'email', 'pagina_web', 'foto'),
}), }),
) )
@ -63,12 +64,12 @@ class ParlamentarAdmin(BaseModelAdmin):
q2 = len(request.session['carrinho_parlamentar']) q2 = len(request.session['carrinho_parlamentar'])
quant = q2 - q1 quant = q2 - q1
if quant: if quant:
self.message_user(request, "%s Parlamentares adicionados no carrinho" % (quant)) self.message_user(request, _("%s Parlamentares adicionados no carrinho") % (quant))
else: else:
self.message_user(request, "Os parlamentares selecionadas já foram adicionadas anteriormente") self.message_user(request, _("Os parlamentares selecionadas já foram adicionadas anteriormente"))
return HttpResponseRedirect('.') return HttpResponseRedirect('.')
adiciona_parlamentar.short_description = u"Armazenar parlamentar no carrinho para exportar" adiciona_parlamentar.short_description = _(u"Armazenar parlamentar no carrinho para exportar")
class MandatoAdmin(BaseModelAdmin): class MandatoAdmin(BaseModelAdmin):

28
sigi/apps/parlamentares/models.py

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.db import models from django.db import models
from django.contrib.contenttypes import generic from django.utils.translation import ugettext as _
class Partido(models.Model): class Partido(models.Model):
@ -16,8 +16,8 @@ class Partido(models.Model):
class Parlamentar(models.Model): class Parlamentar(models.Model):
SEXO_CHOICES = ( SEXO_CHOICES = (
('M', 'Masculino'), ('M', _('Masculino')),
('F', 'Feminino'), ('F', _('Feminino')),
) )
nome_completo = models.CharField(max_length=128) nome_completo = models.CharField(max_length=128)
nome_parlamentar = models.CharField(max_length=35, blank=True) nome_parlamentar = models.CharField(max_length=35, blank=True)
@ -34,17 +34,17 @@ class Parlamentar(models.Model):
choices=SEXO_CHOICES, choices=SEXO_CHOICES,
) )
data_nascimento = models.DateField( data_nascimento = models.DateField(
'data de nascimento', _('data de nascimento'),
blank=True, blank=True,
null=True, null=True,
) )
email = models.EmailField('e-mail', blank=True) email = models.EmailField(_('e-mail'), blank=True)
pagina_web = models.URLField(u'página web', pagina_web = models.URLField(_(u'página web'),
blank=True) blank=True)
class Meta: class Meta:
ordering = ('nome_completo',) ordering = ('nome_completo',)
verbose_name_plural = 'parlamentares' verbose_name_plural = _('parlamentares')
def __unicode__(self): def __unicode__(self):
if self.nome_parlamentar: if self.nome_parlamentar:
@ -54,23 +54,23 @@ class Parlamentar(models.Model):
class Mandato(models.Model): class Mandato(models.Model):
SUPLENCIA_CHOICES = ( SUPLENCIA_CHOICES = (
('T', 'Titular'), ('T', _('Titular')),
('S', 'Suplente'), ('S', _('Suplente')),
) )
parlamentar = models.ForeignKey(Parlamentar) parlamentar = models.ForeignKey(Parlamentar)
legislatura = models.ForeignKey('mesas.Legislatura') legislatura = models.ForeignKey('mesas.Legislatura')
partido = models.ForeignKey(Partido) partido = models.ForeignKey(Partido)
cargo = models.ForeignKey('mesas.Cargo') cargo = models.ForeignKey('mesas.Cargo')
inicio_mandato = models.DateField(u'início de mandato') inicio_mandato = models.DateField(_(u'início de mandato'))
fim_mandato = models.DateField('fim de mandato') fim_mandato = models.DateField(_('fim de mandato'))
is_afastado = models.BooleanField( is_afastado = models.BooleanField(
'afastado', _('afastado'),
default=False, default=False,
help_text=u'Marque caso parlamentar não esteja ativo.' help_text=_(u'Marque caso parlamentar não esteja ativo.')
) )
# suplencia = models.CharField( # suplencia = models.CharField(
# u'suplência', # _(u'suplência'),
# max_length=1, # max_length=1,
# choices=SUPLENCIA_CHOICES, # choices=SUPLENCIA_CHOICES,
# ) # )

97
sigi/apps/parlamentares/reports.py

@ -1,14 +1,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.utils.translation import ugettext as _
from geraldo import Report, DetailBand, Label, ObjectValue, ReportGroup, ReportBand, landscape, SubReport, BAND_WIDTH, SystemField
from geraldo.graphics import Image
from reportlab.lib.enums import TA_CENTER
from reportlab.lib.pagesizes import A4 from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm from reportlab.lib.units import cm
from reportlab.lib.enums import TA_CENTER, TA_RIGHT
from geraldo import Report, DetailBand, Label, ObjectValue, ManyElements, \
ReportGroup, ReportBand, landscape, SubReport, BAND_WIDTH, SystemField
from sigi.apps.relatorios.reports import ReportDefault from sigi.apps.relatorios.reports import ReportDefault
from geraldo.graphics import Image
def string_to_cm(texto): def string_to_cm(texto):
tamanho = 0 tamanho = 0
@ -85,7 +84,7 @@ class ParlamentaresLabels(Report):
my_elements = [ my_elements = [
Label( Label(
text=u'A Sua Excelência o(a) Senhor(a)', text=_(u'A Sua Excelência o(a) Senhor(a)'),
top=(self.start + self.delta) * cm, left=self.y * cm, width=(self.largura_etiqueta - self.y) * cm, top=(self.start + self.delta) * cm, left=self.y * cm, width=(self.largura_etiqueta - self.y) * cm,
), ),
ObjectValue( ObjectValue(
@ -126,32 +125,32 @@ def logradouro_parlamentar(instance):
try: try:
return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.logradouro return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.logradouro
except: except:
return u"<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>" return _(u"<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>")
def bairro_parlamentar(instance): def bairro_parlamentar(instance):
try: try:
return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.bairro return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.bairro
except: except:
return u"<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>" return _(u"<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>")
def municipio_parlamentar(instance): def municipio_parlamentar(instance):
try: try:
return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.municipio return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.municipio
except: except:
return u"<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>" return _(u"<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>")
def cep_parlamentar(instance): def cep_parlamentar(instance):
try: try:
return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.cep return instance.mandato_set.latest('inicio_mandato').legislatura.casa_legislativa.cep
except: except:
return u"<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>" return _(u"<<PARLAMENTAR SEM MANDATO - impossivel definir endereço>>")
class CasasLegislativasReport(ReportDefault): class CasasLegislativasReport(ReportDefault):
title = u'Relatório de Casas Legislativas' title = _(u'Relatório de Casas Legislativas')
height = 80 * cm height = 80 * cm
page_size = landscape(A4) page_size = landscape(A4)
@ -170,10 +169,10 @@ class CasasLegislativasReport(ReportDefault):
left=1 * cm, right=1 * cm, top=0.1 * cm, bottom=1 * cm, left=1 * cm, right=1 * cm, top=0.1 * cm, bottom=1 * cm,
width=3 * cm, height=3 * cm, width=3 * cm, height=3 * cm,
), ),
Label(text=u"SENADO FEDERAL", top=1 * cm, left=0, width=BAND_WIDTH, Label(text=_(u"SENADO FEDERAL"), top=1 * cm, left=0, width=BAND_WIDTH,
style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER} style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER}
), ),
Label(text=u"SINTER - Secretaria Especial do Interlegis", top=1.5 * cm, left=0, width=BAND_WIDTH, Label(text=_(u"SINTER - Secretaria Especial do Interlegis"), top=1.5 * cm, left=0, width=BAND_WIDTH,
style={'fontName': 'Helvetica-Bold', 'fontSize': 13, 'alignment': TA_CENTER} style={'fontName': 'Helvetica-Bold', 'fontSize': 13, 'alignment': TA_CENTER}
), ),
SystemField( SystemField(
@ -181,32 +180,32 @@ class CasasLegislativasReport(ReportDefault):
style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER} style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER}
), ),
Label( Label(
text=u"UF", text=_(u"UF"),
left=label_left[0] * cm, left=label_left[0] * cm,
top=label_top, top=label_top,
), ),
Label( Label(
text=u"Municipio", text=_(u"Municipio"),
left=label_left[1] * cm, left=label_left[1] * cm,
top=label_top, top=label_top,
), ),
Label( Label(
text=u"Presidente", text=_(u"Presidente"),
left=label_left[2] * cm, left=label_left[2] * cm,
top=label_top, top=label_top,
), ),
Label( Label(
text=u"Endereço", text=_(u"Endereço"),
left=label_left[3] * cm, left=label_left[3] * cm,
top=label_top, top=label_top,
), ),
Label( Label(
text=u"Endereço na Internet", text=_(u"Endereço na Internet"),
left=label_left[4] * cm, left=label_left[4] * cm,
top=label_top, top=label_top,
), ),
Label( Label(
text=u"Email", text=_(u"Email"),
left=label_left[5] * cm, left=label_left[5] * cm,
top=label_top, top=label_top,
), ),
@ -265,7 +264,7 @@ class CasasLegislativasReport(ReportDefault):
class InfoCasaLegislativa(ReportDefault): class InfoCasaLegislativa(ReportDefault):
title = u'Casa Legislativa' title = _(u'Casa Legislativa')
class band_summary(ReportBand): class band_summary(ReportBand):
pass pass
@ -274,7 +273,7 @@ class InfoCasaLegislativa(ReportDefault):
height = 1 * cm height = 1 * cm
elements = [ elements = [
SystemField(expression=u'%(now:%d/%m/%Y)s às %(now:%H:%M)s', top=0.3 * cm), SystemField(expression=_(u'%(now:%d/%m/%Y)s às %(now:%H:%M)s'), top=0.3 * cm),
] ]
class band_detail(ReportDefault.band_detail): class band_detail(ReportDefault.band_detail):
@ -312,7 +311,7 @@ class InfoCasaLegislativa(ReportDefault):
elements = [ elements = [
Label( Label(
text=u"Tipo: ", text=_(u"Tipo: "),
left=posicao_left[0] * cm, left=posicao_left[0] * cm,
top=posicao_top[0] * cm, top=posicao_top[0] * cm,
), ),
@ -323,7 +322,7 @@ class InfoCasaLegislativa(ReportDefault):
width=6 * cm, width=6 * cm,
), ),
Label( Label(
text=u"Região: ", text=_(u"Região: "),
left=posicao_left[2] * cm, left=posicao_left[2] * cm,
top=posicao_top[1] * cm, top=posicao_top[1] * cm,
), ),
@ -332,11 +331,11 @@ class InfoCasaLegislativa(ReportDefault):
left=posicao_left[3] * cm, left=posicao_left[3] * cm,
top=posicao_top[1] * cm, top=posicao_top[1] * cm,
get_value=lambda instance: get_value=lambda instance:
{'SL': 'Sul', 'SD': 'Sudeste', 'CO': 'Centro-Oeste', 'NE': 'Nordeste', 'NO': 'Norte', } {'SL': _('Sul'), 'SD': _('Sudeste'), 'CO': _('Centro-Oeste'), 'NE': _('Nordeste'), 'NO': _('Norte'), }
[instance.municipio.uf.regiao] [instance.municipio.uf.regiao]
), ),
Label( Label(
text=u"U.F.: ", text=_(u"U.F.: "),
left=posicao_left[4] * cm, left=posicao_left[4] * cm,
top=posicao_top[2] * cm, top=posicao_top[2] * cm,
), ),
@ -346,7 +345,7 @@ class InfoCasaLegislativa(ReportDefault):
top=posicao_top[2] * cm, top=posicao_top[2] * cm,
), ),
Label( Label(
text=u"Município: ", text=_(u"Município: "),
left=posicao_left[6] * cm, left=posicao_left[6] * cm,
top=posicao_top[3] * cm, top=posicao_top[3] * cm,
), ),
@ -358,7 +357,7 @@ class InfoCasaLegislativa(ReportDefault):
), ),
# Linha 3 # Linha 3
Label( Label(
text=u"Endereço: ", text=_(u"Endereço: "),
left=posicao_left[8] * cm, left=posicao_left[8] * cm,
top=posicao_top[4] * cm, top=posicao_top[4] * cm,
), ),
@ -369,7 +368,7 @@ class InfoCasaLegislativa(ReportDefault):
width=20 * cm, width=20 * cm,
), ),
Label( Label(
text=u"Bairro: ", text=_(u"Bairro: "),
left=posicao_left[10] * cm, left=posicao_left[10] * cm,
top=posicao_top[5] * cm, top=posicao_top[5] * cm,
), ),
@ -379,7 +378,7 @@ class InfoCasaLegislativa(ReportDefault):
top=posicao_top[5] * cm, top=posicao_top[5] * cm,
), ),
Label( Label(
text=u"CEP: ", text=_(u"CEP: "),
left=posicao_left[12] * cm, left=posicao_left[12] * cm,
top=posicao_top[6] * cm, top=posicao_top[6] * cm,
), ),
@ -389,7 +388,7 @@ class InfoCasaLegislativa(ReportDefault):
top=posicao_top[6] * cm, top=posicao_top[6] * cm,
), ),
Label( Label(
text=u"CNPJ: ", text=_(u"CNPJ: "),
left=posicao_left[14] * cm, left=posicao_left[14] * cm,
top=posicao_top[7] * cm, top=posicao_top[7] * cm,
), ),
@ -399,7 +398,7 @@ class InfoCasaLegislativa(ReportDefault):
top=posicao_top[7] * cm, top=posicao_top[7] * cm,
), ),
Label( Label(
text=u"Telefone: ", text=_(u"Telefone: "),
left=posicao_left[16] * cm, left=posicao_left[16] * cm,
top=posicao_top[8] * cm, top=posicao_top[8] * cm,
), ),
@ -409,7 +408,7 @@ class InfoCasaLegislativa(ReportDefault):
top=posicao_top[8] * cm, top=posicao_top[8] * cm,
), ),
Label( Label(
text=u"Presidente: ", text=_(u"Presidente: "),
left=posicao_left[18] * cm, left=posicao_left[18] * cm,
top=posicao_top[9] * cm, top=posicao_top[9] * cm,
), ),
@ -438,14 +437,14 @@ class InfoCasaLegislativa(ReportDefault):
height=2.5 * cm, height=2.5 * cm,
elements=[ elements=[
Label( Label(
text=u"Telefone(s)", text=_(u"Telefone(s)"),
style={'fontSize': 14, 'alignment': TA_CENTER}, style={'fontSize': 14, 'alignment': TA_CENTER},
width=BAND_WIDTH, width=BAND_WIDTH,
top=1 * cm, top=1 * cm,
), ),
Label(text=u"Número", left=tel_left[0] * cm, top=tel_top), Label(text=_(u"Número"), left=tel_left[0] * cm, top=tel_top),
Label(text=u"Tipo", left=tel_left[1] * cm, top=tel_top), Label(text=_(u"Tipo"), left=tel_left[1] * cm, top=tel_top),
Label(text=u"Nota", left=tel_left[2] * cm, top=tel_top), Label(text=_(u"Nota"), left=tel_left[2] * cm, top=tel_top),
], ],
borders={'bottom': True}, borders={'bottom': True},
), ),
@ -456,7 +455,7 @@ class InfoCasaLegislativa(ReportDefault):
ObjectValue(attribute_name='__unicode__', left=tel_left[0] * cm), ObjectValue(attribute_name='__unicode__', left=tel_left[0] * cm),
ObjectValue(attribute_name='tipo', left=tel_left[1] * cm, ObjectValue(attribute_name='tipo', left=tel_left[1] * cm,
get_value=lambda instance: get_value=lambda instance:
{'F': 'Fixo', 'M': u'Móvel', 'X': 'Fax', 'I': 'Indefinido'}[instance.tipo], {'F': _('Fixo'), 'M': _(u'Móvel'), 'X': _('Fax'), 'I': _('Indefinido')}[instance.tipo],
), ),
ObjectValue(attribute_name='nota', left=tel_left[2] * cm), ObjectValue(attribute_name='nota', left=tel_left[2] * cm),
], ],
@ -471,14 +470,14 @@ class InfoCasaLegislativa(ReportDefault):
height=2.5 * cm, height=2.5 * cm,
elements=[ elements=[
Label( Label(
text=u"Contato(s)", text=_(u"Contato(s)"),
style={'fontSize': 14, 'alignment': TA_CENTER}, style={'fontSize': 14, 'alignment': TA_CENTER},
width=BAND_WIDTH, width=BAND_WIDTH,
top=1 * cm, top=1 * cm,
), ),
Label(text=u"Nome", left=cont_left[0] * cm, top=cont_top), Label(text=_(u"Nome"), left=cont_left[0] * cm, top=cont_top),
Label(text=u"Nota", left=cont_left[1] * cm, top=cont_top), Label(text=_(u"Nota"), left=cont_left[1] * cm, top=cont_top),
Label(text=u"E-mail", left=cont_left[2] * cm, top=cont_top), Label(text=_(u"E-mail"), left=cont_left[2] * cm, top=cont_top),
], ],
borders={'bottom': True, 'top': True}, borders={'bottom': True, 'top': True},
), ),
@ -501,18 +500,18 @@ class InfoCasaLegislativa(ReportDefault):
height=2.5 * cm, height=2.5 * cm,
elements=[ elements=[
Label( Label(
text=u"Convênio(s)", text=_(u"Convênio(s)"),
style={'fontSize': 14, 'alignment': TA_CENTER}, style={'fontSize': 14, 'alignment': TA_CENTER},
width=BAND_WIDTH, width=BAND_WIDTH,
top=1 * cm, top=1 * cm,
), ),
Label(text=u"Projeto", left=convenio_left[0] * cm, top=convenio_top), Label(text=_(u"Projeto"), left=convenio_left[0] * cm, top=convenio_top),
Label(text=u"Nº Convenio", left=convenio_left[1] * cm, top=convenio_top), Label(text=_(u"Nº Convenio"), left=convenio_left[1] * cm, top=convenio_top),
Label(text=u"Nº Processo SF", left=convenio_left[2] * cm, top=convenio_top), Label(text=_(u"Nº Processo SF"), left=convenio_left[2] * cm, top=convenio_top),
Label(text=u"Adesão", left=convenio_left[3] * cm, top=convenio_top), Label(text=_(u"Adesão"), left=convenio_left[3] * cm, top=convenio_top),
Label(text=u"Convênio", left=convenio_left[4] * cm, top=convenio_top), Label(text=_(u"Convênio"), left=convenio_left[4] * cm, top=convenio_top),
Label(text=u"Equipada", left=convenio_left[5] * cm, top=convenio_top), Label(text=_(u"Equipada"), left=convenio_left[5] * cm, top=convenio_top),
Label(text=u"Data D.O.", left=convenio_left[6] * cm, top=convenio_top), Label(text=_(u"Data D.O."), left=convenio_left[6] * cm, top=convenio_top),
], ],
borders={'bottom': True} borders={'bottom': True}
), ),

25
sigi/apps/relatorios/reports.py

@ -1,20 +1,19 @@
#-*- coding:utf-8 -*- #-*- coding:utf-8 -*-
import os import os
from geraldo import Report, ReportBand, ObjectValue, DetailBand, Label, \ from django.utils.translation import ugettext as _
landscape, SystemField, BAND_WIDTH, ReportGroup, \ from geraldo import Report, ReportBand, ObjectValue, DetailBand, Label, SystemField, BAND_WIDTH, FIELD_ACTION_COUNT, Line
FIELD_ACTION_SUM, FIELD_ACTION_COUNT, Line
from geraldo.graphics import Image from geraldo.graphics import Image
from reportlab.lib.units import cm from reportlab.lib.colors import navy
from reportlab.lib.pagesizes import A4
from reportlab.lib.enums import TA_CENTER, TA_RIGHT from reportlab.lib.enums import TA_CENTER, TA_RIGHT
from reportlab.lib.colors import navy, red from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
class ReportDefault(Report): class ReportDefault(Report):
#__metaclass__ = ABCMeta #__metaclass__ = ABCMeta
title = u'Relatório' title = _(u'Relatório')
author = u'Interlegis' author = _(u'Interlegis')
print_if_empty = True print_if_empty = True
page_size = A4 page_size = A4
@ -35,10 +34,10 @@ class ReportDefault(Report):
left=1 * cm, right=1 * cm, top=0.1 * cm, bottom=1 * cm, left=1 * cm, right=1 * cm, top=0.1 * cm, bottom=1 * cm,
width=3 * cm, height=3 * cm, width=3 * cm, height=3 * cm,
), ),
Label(text="SENADO FEDERAL", top=1 * cm, left=0, width=BAND_WIDTH, Label(text=_("SENADO FEDERAL"), top=1 * cm, left=0, width=BAND_WIDTH,
style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER} style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER}
), ),
Label(text="SINTER - Secretaria Especial do Interlegis", top=1.5 * cm, left=0, width=BAND_WIDTH, Label(text=_("SINTER - Secretaria Especial do Interlegis"), top=1.5 * cm, left=0, width=BAND_WIDTH,
style={'fontName': 'Helvetica-Bold', 'fontSize': 13, 'alignment': TA_CENTER} style={'fontName': 'Helvetica-Bold', 'fontSize': 13, 'alignment': TA_CENTER}
), ),
SystemField( SystemField(
@ -52,8 +51,8 @@ class ReportDefault(Report):
height = 1 * cm height = 1 * cm
elements = [ elements = [
SystemField(expression=u'%(now:%d/%m/%Y)s às %(now:%H:%M)s', top=0.3 * cm), SystemField(expression=_(u'%(now:%d/%m/%Y)s às %(now:%H:%M)s'), top=0.3 * cm),
SystemField(expression=u'Página %(page_number)d de %(page_count)d', top=0.3 * cm, SystemField(expression=_(u'Página %(page_number)d de %(page_count)d'), top=0.3 * cm,
width=BAND_WIDTH, style={'alignment': TA_RIGHT} width=BAND_WIDTH, style={'alignment': TA_RIGHT}
), ),
] ]
@ -67,7 +66,7 @@ class ReportDefault(Report):
class band_summary(ReportBand): class band_summary(ReportBand):
height = 0.8 * cm height = 0.8 * cm
elements = [ elements = [
Label(text="Total:", top=0.1 * cm, left=0), Label(text=_("Total:"), top=0.1 * cm, left=0),
ObjectValue(attribute_name='id', top=0.1 * cm, left=1 * cm, ObjectValue(attribute_name='id', top=0.1 * cm, left=1 * cm,
action=FIELD_ACTION_COUNT, display_format='%s'), action=FIELD_ACTION_COUNT, display_format='%s'),
] ]

24
sigi/apps/servicos/admin.py

@ -58,13 +58,13 @@ class ServicoAdmin(BaseModelAdmin):
fieldsets = ((None, { fieldsets = ((None, {
'fields': ('casa_legislativa', 'data_ativacao',) 'fields': ('casa_legislativa', 'data_ativacao',)
}), }),
('Serviço', { (_('Serviço'), {
'fields': ('tipo_servico', ('url', 'hospedagem_interlegis'), ('nome_servidor', 'porta_servico', 'senha_inicial'),) 'fields': ('tipo_servico', ('url', 'hospedagem_interlegis'), ('nome_servidor', 'porta_servico', 'senha_inicial'),)
}), }),
('Contatos', { (_('Contatos'), {
'fields': ('contato_tecnico', 'contato_administrativo',) 'fields': ('contato_tecnico', 'contato_administrativo',)
}), }),
('Alterações', { (_('Alterações'), {
'fields': ('data_alteracao', 'data_desativacao', 'motivo_desativacao',) 'fields': ('data_alteracao', 'data_desativacao', 'motivo_desativacao',)
})) }))
readonly_fields = ('casa_legislativa', 'data_ativacao', 'data_alteracao') readonly_fields = ('casa_legislativa', 'data_ativacao', 'data_alteracao')
@ -76,17 +76,17 @@ class ServicoAdmin(BaseModelAdmin):
def get_codigo_interlegis(self, obj): def get_codigo_interlegis(self, obj):
return obj.casa_legislativa.codigo_interlegis return obj.casa_legislativa.codigo_interlegis
get_codigo_interlegis.short_description = u'Código Interlegis' get_codigo_interlegis.short_description = _(u'Código Interlegis')
get_codigo_interlegis.admin_order_field = 'casa_legislativa__codigo_interlegis' get_codigo_interlegis.admin_order_field = 'casa_legislativa__codigo_interlegis'
def get_uf(self, obj): def get_uf(self, obj):
return u'%s' % (obj.casa_legislativa.municipio.uf) return u'%s' % (obj.casa_legislativa.municipio.uf)
get_uf.short_description = 'UF' get_uf.short_description = _('UF')
get_uf.admin_order_field = 'casa_legislativa__municipio__uf' get_uf.admin_order_field = 'casa_legislativa__municipio__uf'
def getUrl(self, obj): def getUrl(self, obj):
return u'<a href="%s" target="_blank">%s</a>' % (obj.url, obj.url) return u'<a href="%s" target="_blank">%s</a>' % (obj.url, obj.url)
getUrl.short_description = 'Url' getUrl.short_description = _('Url')
getUrl.allow_tags = True getUrl.allow_tags = True
def get_link_erro(self, obj): def get_link_erro(self, obj):
@ -98,15 +98,15 @@ class ServicoAdmin(BaseModelAdmin):
url += obj.tipo_servico.string_pesquisa url += obj.tipo_servico.string_pesquisa
return u'<a href="%s" target="_blank">%s</a>' % (url, obj.erro_atualizacao) return u'<a href="%s" target="_blank">%s</a>' % (url, obj.erro_atualizacao)
get_link_erro.allow_tags = True get_link_erro.allow_tags = True
get_link_erro.short_description = u"Erro na atualização" get_link_erro.short_description = _(u"Erro na atualização")
get_link_erro.admin_order_field = 'erro_atualizacao' get_link_erro.admin_order_field = 'erro_atualizacao'
def calcular_data_uso(self, request, queryset): def calcular_data_uso(self, request, queryset):
for servico in queryset: for servico in queryset:
servico.atualiza_data_uso() servico.atualiza_data_uso()
self.message_user(request, "Atualização concluída. Os sites que não responderam foram deixados com a data em branco") self.message_user(request, _("Atualização concluída. Os sites que não responderam foram deixados com a data em branco"))
return HttpResponseRedirect('.') return HttpResponseRedirect('.')
calcular_data_uso.short_description = u"Atualizar a data do último uso do(s) serviço(s)" calcular_data_uso.short_description = _(u"Atualizar a data do último uso do(s) serviço(s)")
def get_actions(self, request): def get_actions(self, request):
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict
@ -191,12 +191,12 @@ class CasaAtendidaAdmin(BaseModelAdmin):
def get_servicos(self, obj): def get_servicos(self, obj):
result = [] result = []
for servico in obj.servico_set.all(): for servico in obj.servico_set.all():
result.append(u"%s (%s). Contato: %s" % (servico.tipo_servico.nome, 'ativo' if servico.data_desativacao is None result.append(_(u"%s (%s). Contato: %s") % (servico.tipo_servico.nome, _('ativo') if servico.data_desativacao is None
else 'Desativado', servico.contato_administrativo.nome)) else _('Desativado'), servico.contato_administrativo.nome))
return "<ul><li>" + "</li><li>".join(result) + "</li></ul>" return "<ul><li>" + "</li><li>".join(result) + "</li></ul>"
get_servicos.allow_tags = True get_servicos.allow_tags = True
get_servicos.short_description = u"Serviços" get_servicos.short_description = _(u"Serviços")
def lookup_allowed(self, lookup, value): def lookup_allowed(self, lookup, value):
return super(CasaAtendidaAdmin, self).lookup_allowed(lookup, value) or \ return super(CasaAtendidaAdmin, self).lookup_allowed(lookup, value) or \

4
sigi/apps/servicos/management/commands/atualiza_uso_servico.py

@ -22,11 +22,13 @@
# 02110-1301, USA. # 02110-1301, USA.
# #
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.utils.translation import ugettext as _
from sigi.apps.servicos.models import Servico from sigi.apps.servicos.models import Servico
class Command(BaseCommand): class Command(BaseCommand):
help = u'Atualiza a informação de data de último serviço dos serviços SEIT hospedados no Interlegis.' help = _(u'Atualiza a informação de data de último serviço dos serviços SEIT hospedados no Interlegis.')
def handle(self, *args, **options): def handle(self, *args, **options):
verbosity = int(options['verbosity']) verbosity = int(options['verbosity'])

98
sigi/apps/servicos/models.py

@ -1,22 +1,22 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from datetime import date
from django.db import models from django.db import models
from sigi.apps.casas.models import CasaLegislativa, Funcionario from sigi.apps.casas.models import CasaLegislativa, Funcionario
from datetime import date from django.utils.translation import ugettext as _
from django.core.mail import send_mail
from sigi.settings import DEFAULT_FROM_EMAIL
class TipoServico(models.Model): class TipoServico(models.Model):
email_help = u'''Use:<br/> email_help = u'''Use:<br/>
{url} para incluir a URL do serviço,<br/> {url} para incluir a URL do serviço,<br/>
{senha} para incluir a senha inicial do serviço''' {senha} para incluir a senha inicial do serviço'''
nome = models.CharField(u'Nome', max_length=60) nome = models.CharField(_(u'Nome'), max_length=60)
sigla = models.CharField(u'Sigla', max_length='12') sigla = models.CharField(_(u'Sigla'), max_length='12')
string_pesquisa = models.CharField(u'String de pesquisa', blank=True, max_length=200, string_pesquisa = models.CharField(_(u'String de pesquisa'), blank=True, max_length=200,
help_text=u'Sufixo para pesquisa RSS para averiguar a data da última atualização do serviço') help_text=_(u'Sufixo para pesquisa RSS para averiguar a data da última atualização do serviço'))
template_email_ativa = models.TextField(u'Template de email de ativação', help_text=email_help, blank=True) template_email_ativa = models.TextField(_(u'Template de email de ativação'), help_text=email_help, blank=True)
template_email_altera = models.TextField(u'Template de email de alteração', help_text=email_help, blank=True) template_email_altera = models.TextField(_(u'Template de email de alteração'), help_text=email_help, blank=True)
template_email_desativa = models.TextField(u'Template de email de desativação', help_text=email_help + u'<br/>{motivo} para incluir o motivo da desativação do serviço', blank=True) template_email_desativa = models.TextField(_(u'Template de email de desativação'), help_text=email_help + _(u'<br/>{motivo} para incluir o motivo da desativação do serviço'), blank=True)
@property @property
def qtde_casas_atendidas(self): def qtde_casas_atendidas(self):
@ -24,32 +24,32 @@ class TipoServico(models.Model):
return self.servico_set.filter(data_desativacao=None).count() return self.servico_set.filter(data_desativacao=None).count()
class Meta: class Meta:
verbose_name = u'Tipo de serviço' verbose_name = _(u'Tipo de serviço')
verbose_name_plural = u'Tipos de serviço' verbose_name_plural = _(u'Tipos de serviço')
def __unicode__(self): def __unicode__(self):
return self.nome return self.nome
class Servico(models.Model): class Servico(models.Model):
casa_legislativa = models.ForeignKey(CasaLegislativa, verbose_name=u'Casa Legislativa') casa_legislativa = models.ForeignKey(CasaLegislativa, verbose_name=_(u'Casa Legislativa'))
tipo_servico = models.ForeignKey(TipoServico, verbose_name=u'Tipo de serviço') tipo_servico = models.ForeignKey(TipoServico, verbose_name=_(u'Tipo de serviço'))
contato_tecnico = models.ForeignKey(Funcionario, verbose_name=u'Contato técnico', related_name='contato_tecnico') contato_tecnico = models.ForeignKey(Funcionario, verbose_name=_(u'Contato técnico'), related_name='contato_tecnico')
contato_administrativo = models.ForeignKey(Funcionario, verbose_name=u'Contato administrativo', related_name='contato_administrativo') contato_administrativo = models.ForeignKey(Funcionario, verbose_name=_(u'Contato administrativo'), related_name='contato_administrativo')
url = models.URLField(u'URL do serviço', blank=True) url = models.URLField(_(u'URL do serviço'), blank=True)
hospedagem_interlegis = models.BooleanField(u'Hospedagem no Interlegis?', default=False) hospedagem_interlegis = models.BooleanField(_(u'Hospedagem no Interlegis?'), default=False)
nome_servidor = models.CharField(u'Hospedado em', max_length=60, blank=True, nome_servidor = models.CharField(_(u'Hospedado em'), max_length=60, blank=True,
help_text=u'Se hospedado no Interlegis, informe o nome do servidor.<br/>Senão, informe o nome do provedor de serviços.') help_text=_(u'Se hospedado no Interlegis, informe o nome do servidor.<br/>Senão, informe o nome do provedor de serviços.'))
porta_servico = models.PositiveSmallIntegerField(u'Porta de serviço (instância)', blank=True, null=True) porta_servico = models.PositiveSmallIntegerField(_(u'Porta de serviço (instância)'), blank=True, null=True)
senha_inicial = models.CharField(u'Senha inicial', max_length=33, blank=True) senha_inicial = models.CharField(_(u'Senha inicial'), max_length=33, blank=True)
data_ativacao = models.DateField(u'Data de ativação', default=date.today) data_ativacao = models.DateField(_(u'Data de ativação'), default=date.today)
data_alteracao = models.DateField(u'Data da última alteração', blank=True, null=True, auto_now=True) data_alteracao = models.DateField(_(u'Data da última alteração'), blank=True, null=True, auto_now=True)
data_desativacao = models.DateField(u'Data de desativação', blank=True, null=True) data_desativacao = models.DateField(_(u'Data de desativação'), blank=True, null=True)
motivo_desativacao = models.TextField(u'Motivo da desativação', blank=True) motivo_desativacao = models.TextField(_(u'Motivo da desativação'), blank=True)
data_ultimo_uso = models.DateField(u'Data da última utilização', blank=True, null=True, data_ultimo_uso = models.DateField(_(u'Data da última utilização'), blank=True, null=True,
help_text=u'Data em que o serviço foi utilizado pela Casa Legislativa pela última vez<br/><strong>NÃO É ATUALIZADO AUTOMATICAMENTE!</strong>') help_text=_(u'Data em que o serviço foi utilizado pela Casa Legislativa pela última vez<br/><strong>NÃO É ATUALIZADO AUTOMATICAMENTE!</strong>'))
erro_atualizacao = models.CharField(u"Erro na atualização", blank=True, max_length=200, erro_atualizacao = models.CharField(_(u"Erro na atualização"), blank=True, max_length=200,
help_text=u"Erro ocorrido na última tentativa de atualizar a data de último acesso") help_text=_(u"Erro ocorrido na última tentativa de atualizar a data de último acesso"))
# casa_legislativa.casa_uf_filter = True # casa_legislativa.casa_uf_filter = True
@ -87,14 +87,14 @@ class Servico(models.Model):
opener = urllib2.build_opener(proxy) opener = urllib2.build_opener(proxy)
req = opener.open(fullurl=url, timeout=5) req = opener.open(fullurl=url, timeout=5)
except Exception as e: except Exception as e:
reset(erro=str(e), comment=u'Não foi possível conectar com o servidor. Pode estar fora do ar ou não ser um ' + reset(erro=str(e), comment=_(u'Não foi possível conectar com o servidor. Pode estar fora do ar ou não ser um ') +
self.tipo_servico.nome) self.tipo_servico.nome)
return return
try: try:
rss = req.read() rss = req.read()
except Exception as e: except Exception as e:
reset(erro=str(e), comment=u'Não foi possível receber os dados do servidor. O acesso pode ter sido negado.') reset(erro=str(e), comment=_(u'Não foi possível receber os dados do servidor. O acesso pode ter sido negado.'))
return return
try: try:
@ -108,12 +108,12 @@ class Servico(models.Model):
self.erro_atualizacao = "" self.erro_atualizacao = ""
self.save() self.save()
except Exception as e: except Exception as e:
reset(erro=str(e), comment=u'A resposta do servidor não é compatível com %s. Pode ser outro software que está sendo usado' % reset(erro=str(e), comment=_(u'A resposta do servidor não é compatível com %s. Pode ser outro software que está sendo usado') %
self.tipo_servico.nome) self.tipo_servico.nome)
return return
def __unicode__(self): def __unicode__(self):
return "%s (%s)" % (self.tipo_servico.nome, 'ativo' if self.data_desativacao is None else 'Desativado') return "%s (%s)" % (self.tipo_servico.nome, _('ativo') if self.data_desativacao is None else _('Desativado'))
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
# Reter o objeto original para verificar mudanças # Reter o objeto original para verificar mudanças
@ -123,11 +123,11 @@ class Servico(models.Model):
if self.id is None: if self.id is None:
# Novo serviço, email de ativação # Novo serviço, email de ativação
subject = u'INTERLEGIS - Ativação de serviço %s' % (self.tipo_servico.nome,) subject = _(u'INTERLEGIS - Ativação de serviço %s') % (self.tipo_servico.nome,)
body = self.tipo_servico.template_email_ativa body = self.tipo_servico.template_email_ativa
elif self.data_desativacao is not None and original.data_desativacao is None: elif self.data_desativacao is not None and original.data_desativacao is None:
# Serviço foi desativado. Email de desativação # Serviço foi desativado. Email de desativação
subject = u'INTERLEGIS - Desativação de serviço %s' % (self.tipo_servico.nome,) subject = _(u'INTERLEGIS - Desativação de serviço %s') % (self.tipo_servico.nome,)
body = self.tipo_servico.template_email_desativa body = self.tipo_servico.template_email_desativa
elif (self.tipo_servico != original.tipo_servico or elif (self.tipo_servico != original.tipo_servico or
self.contato_tecnico != original.contato_tecnico or self.contato_tecnico != original.contato_tecnico or
@ -135,7 +135,7 @@ class Servico(models.Model):
self.nome_servidor != original.nome_servidor or self.nome_servidor != original.nome_servidor or
self.senha_inicial != original.senha_inicial): self.senha_inicial != original.senha_inicial):
# Serviço foi alterado # Serviço foi alterado
subject = u'INTERLEGIS - Alteração de serviço %s' % (self.tipo_servico.nome,) subject = _(u'INTERLEGIS - Alteração de serviço %s') % (self.tipo_servico.nome,)
body = self.tipo_servico.template_email_altera body = self.tipo_servico.template_email_altera
else: else:
# Salvar o Servico # Salvar o Servico
@ -157,17 +157,17 @@ class Servico(models.Model):
class LogServico(models.Model): class LogServico(models.Model):
servico = models.ForeignKey(Servico, verbose_name='Serviço') servico = models.ForeignKey(Servico, verbose_name=_('Serviço'))
descricao = models.CharField('Breve descrição da ação', max_length=60) descricao = models.CharField(_('Breve descrição da ação'), max_length=60)
data = models.DateField('Data da ação', default=date.today) data = models.DateField(_('Data da ação'), default=date.today)
log = models.TextField('Log da ação') log = models.TextField(_('Log da ação'))
def __unicode__(self): def __unicode__(self):
return "%s (%s)" % (self.descricao, self.data) return "%s (%s)" % (self.descricao, self.data)
class Meta: class Meta:
verbose_name = 'Log do serviço' verbose_name = _('Log do serviço')
verbose_name_plural = 'Logs do serviço' verbose_name_plural = _('Logs do serviço')
class CasaAtendidaManager(models.Manager): class CasaAtendidaManager(models.Manager):
@ -182,7 +182,7 @@ class CasaAtendida(CasaLegislativa):
class Meta: class Meta:
proxy = True proxy = True
verbose_name_plural = 'Casas atendidas' verbose_name_plural = _('Casas atendidas')
objects = CasaAtendidaManager() objects = CasaAtendidaManager()
@ -191,16 +191,16 @@ class CasaManifesta(models.Model):
casa_legislativa = models.OneToOneField(CasaLegislativa) casa_legislativa = models.OneToOneField(CasaLegislativa)
data_manifestacao = models.DateTimeField(auto_now_add=True) data_manifestacao = models.DateTimeField(auto_now_add=True)
data_atualizacao = models.DateTimeField(auto_now=True) data_atualizacao = models.DateTimeField(auto_now=True)
informante = models.CharField(u'Nome do informante', max_length=100, blank=True) informante = models.CharField(_(u'Nome do informante'), max_length=100, blank=True)
cargo = models.CharField(u'Cargo do informante', max_length=100, blank=True) cargo = models.CharField(_(u'Cargo do informante'), max_length=100, blank=True)
email = models.EmailField(u'E-mail de contato', blank=True) email = models.EmailField(_(u'E-mail de contato'), blank=True)
class ServicoManifesto(models.Model): class ServicoManifesto(models.Model):
casa_manifesta = models.ForeignKey(CasaManifesta) casa_manifesta = models.ForeignKey(CasaManifesta)
servico = models.ForeignKey(TipoServico) servico = models.ForeignKey(TipoServico)
url = models.URLField(blank=True) url = models.URLField(blank=True)
hospedagem_interlegis = models.BooleanField(u'Hospedagem no Interlegis?', default=False) hospedagem_interlegis = models.BooleanField(_(u'Hospedagem no Interlegis?'), default=False)
class Meta: class Meta:
unique_together = ('casa_manifesta', 'servico') unique_together = ('casa_manifesta', 'servico')
@ -213,4 +213,4 @@ class RegistroServico(models.Model):
data_registro = models.DateTimeField(auto_now=True) data_registro = models.DateTimeField(auto_now=True)
class Meta: class Meta:
verbose_name_plural = u'Registro de serviços' verbose_name_plural = _(u'Registro de serviços')

35
sigi/apps/servicos/views.py

@ -1,20 +1,19 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json as simplejson # XXX trocar isso por simplesmente import json e refatorar o codigo
from django import forms from django import forms
from django.db.models import Q
from django.forms.forms import BoundField
from django.http import HttpResponse from django.http import HttpResponse
import json as simplejson # XXX trocar isso por simplesmente import json e refatorar o codigo
from django.shortcuts import render_to_response, get_object_or_404 from django.shortcuts import render_to_response, get_object_or_404
from django.db.models import Q
from sigi.apps.servicos.models import TipoServico, CasaAtendida, CasaManifesta, ServicoManifesto
from sigi.apps.contatos.models import UnidadeFederativa
from sigi.apps.casas.models import CasaLegislativa
from django.template.context import RequestContext from django.template.context import RequestContext
from django.utils.encoding import force_unicode from django.utils.translation import ugettext as _
from django.forms.forms import BoundField
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
from django.contrib.admin.helpers import AdminForm
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from sigi.apps.casas.models import CasaLegislativa
from sigi.apps.contatos.models import UnidadeFederativa
from sigi.apps.servicos.models import TipoServico, CasaAtendida, CasaManifesta, ServicoManifesto
class MapaView(TemplateView): class MapaView(TemplateView):
@ -84,9 +83,9 @@ def casa_manifesta_view(request):
fieldsets = ((None, ('informante', 'cargo', 'email'),),) fieldsets = ((None, ('informante', 'cargo', 'email'),),)
for ts in TipoServico.objects.all(): for ts in TipoServico.objects.all():
campos['possui_%s' % ts.pk] = forms.BooleanField(label=u'Possui o serviço de %s' % ts.nome, required=False) campos['possui_%s' % ts.pk] = forms.BooleanField(label=_(u'Possui o serviço de %s') % ts.nome, required=False)
campos['url_%s' % ts.pk] = forms.URLField(label=u'Informe a URL', required=False) campos['url_%s' % ts.pk] = forms.URLField(label=_(u'Informe a URL'), required=False)
campos['hospedagem_interlegis_%s' % ts.pk] = forms.BooleanField(label=u'Serviço está hospedado no Interlegis', required=False) campos['hospedagem_interlegis_%s' % ts.pk] = forms.BooleanField(label=_(u'Serviço está hospedado no Interlegis'), required=False)
fieldsets += ((ts.nome, ('possui_%s' % ts.pk, 'url_%s' % ts.pk, 'hospedagem_interlegis_%s' % ts.pk)),) fieldsets += ((ts.nome, ('possui_%s' % ts.pk, 'url_%s' % ts.pk, 'hospedagem_interlegis_%s' % ts.pk)),)
CasaManifestaForm = type('', (CasaManifestaProtoForm,), campos) CasaManifestaForm = type('', (CasaManifestaProtoForm,), campos)
@ -100,20 +99,20 @@ def casa_manifesta_view(request):
cm.cargo = cmf.cleaned_data['cargo'] cm.cargo = cmf.cleaned_data['cargo']
cm.email = cmf.cleaned_data['email'] cm.email = cmf.cleaned_data['email']
cm.save() cm.save()
thanks.append((u'Informante', cmf.cleaned_data['informante'])) thanks.append((_(u'Informante'), cmf.cleaned_data['informante']))
thanks.append((u'Cargo', cmf.cleaned_data['cargo'])) thanks.append((_(u'Cargo'), cmf.cleaned_data['cargo']))
thanks.append((u'E-mail', cmf.cleaned_data['email'])) thanks.append((_(u'E-mail'), cmf.cleaned_data['email']))
for ts in TipoServico.objects.all(): for ts in TipoServico.objects.all():
if cmf.cleaned_data['possui_%s' % ts.pk]: if cmf.cleaned_data['possui_%s' % ts.pk]:
sm, created = ServicoManifesto.objects.get_or_create(casa_manifesta=cm, servico=ts) sm, created = ServicoManifesto.objects.get_or_create(casa_manifesta=cm, servico=ts)
sm.url = cmf.cleaned_data['url_%s' % ts.pk] sm.url = cmf.cleaned_data['url_%s' % ts.pk]
sm.hospedagem_interlegis = cmf.cleaned_data['hospedagem_interlegis_%s' % ts.pk] sm.hospedagem_interlegis = cmf.cleaned_data['hospedagem_interlegis_%s' % ts.pk]
sm.save() sm.save()
thanks.append((ts.nome, u'Possui o serviço acessível em %s %s' % (sm.url, u'hospedado no Interlegis' if thanks.append((ts.nome, _(u'Possui o serviço acessível em %s %s') % (sm.url, u'hospedado no Interlegis' if
sm.hospedagem_interlegis else ''))) sm.hospedagem_interlegis else '')))
else: else:
ServicoManifesto.objects.filter(casa_manifesta=cm, servico=ts).delete() ServicoManifesto.objects.filter(casa_manifesta=cm, servico=ts).delete()
thanks.append((ts.nome, u'Não possui')) thanks.append((ts.nome, _(u'Não possui')))
extra_context = {'casa': casa, 'thanks': thanks} extra_context = {'casa': casa, 'thanks': thanks}
else: else:
extra_context = {'casa': casa, 'cmf': cmf} extra_context = {'casa': casa, 'cmf': cmf}

13
sigi/apps/servidores/admin.py

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib import admin from django.contrib import admin
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.utils.translation import ugettext as _
from sigi.apps.contatos.models import Endereco, Telefone from sigi.apps.contatos.models import Endereco, Telefone
from sigi.apps.servidores.forms import FeriasForm, LicencaForm, FuncaoForm from sigi.apps.servidores.forms import FeriasForm, LicencaForm, FuncaoForm
@ -30,7 +31,7 @@ class FeriasAdmin(BaseModelAdmin):
class ServidorFilter(AlphabeticFilter): class ServidorFilter(AlphabeticFilter):
title = 'Nome do Servidor' title = _('Nome do Servidor')
parameter_name = 'servidor__nome_completo' parameter_name = 'servidor__nome_completo'
@ -64,7 +65,7 @@ class ServidorAdmin(BaseModelAdmin):
return servidor.user.is_active return servidor.user.is_active
is_active.admin_order_field = 'user__is_active' is_active.admin_order_field = 'user__is_active'
is_active.boolean = True is_active.boolean = True
is_active.short_description = 'ativo' is_active.short_description = _('ativo')
list_display = ('nome_completo', 'is_active', 'foto', 'servico', ) list_display = ('nome_completo', 'is_active', 'foto', 'servico', )
list_filter = ('user__is_active', 'sexo', 'servico',) list_filter = ('user__is_active', 'sexo', 'servico',)
@ -74,16 +75,16 @@ class ServidorAdmin(BaseModelAdmin):
raw_id_fields = ('user',) raw_id_fields = ('user',)
inlines = (TelefonesInline, EnderecoInline) inlines = (TelefonesInline, EnderecoInline)
fieldsets = ( fieldsets = (
(u'Autenticação', { (_(u'Autenticação'), {
'fields': ('user',), 'fields': ('user',),
}), }),
('Cadastro', { (_('Cadastro'), {
'fields': ('nome_completo', 'foto', 'email_pessoal', 'rg', 'cpf', 'sexo', 'data_nascimento', 'matricula', 'ramal', 'data_nomeacao', 'ato_numero', 'ato_exoneracao') 'fields': ('nome_completo', 'foto', 'email_pessoal', 'rg', 'cpf', 'sexo', 'data_nascimento', 'matricula', 'ramal', 'data_nomeacao', 'ato_numero', 'ato_exoneracao')
}), }),
('Lotação', { (_('Lotação'), {
'fields': ('servico', 'turno', 'de_fora'), 'fields': ('servico', 'turno', 'de_fora'),
}), }),
(u'Observações', { (_(u'Observações'), {
'fields': ('apontamentos', 'obs'), 'fields': ('apontamentos', 'obs'),
}), }),
) )

21
sigi/apps/servidores/forms.py

@ -1,10 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django import forms from django import forms
from django.utils.translation import ugettext as _
from sigi.apps.utils.validators import valida_data, valida_periodo_data
from sigi.apps.servidores.models import Ferias, Licenca, Funcao, Servidor from sigi.apps.servidores.models import Ferias, Licenca, Funcao, Servidor
from sigi.apps.utils.validators import valida_data, valida_periodo_data
class FeriasForm(forms.ModelForm): class FeriasForm(forms.ModelForm):
@ -16,8 +15,8 @@ class FeriasForm(forms.ModelForm):
def clean(self): def clean(self):
data = self.cleaned_data data = self.cleaned_data
if valida_data(data.get('inicio_ferias'), data.get('fim_ferias')): if valida_data(data.get('inicio_ferias'), data.get('fim_ferias')):
raise forms.ValidationError(u"""A data de início deve ser menor raise forms.ValidationError(_(u"""A data de início deve ser menor
que a data final. Verifique novamente""") que a data final. Verifique novamente"""))
return data return data
@ -30,8 +29,8 @@ class LicencaForm(forms.ModelForm):
def clean(self): def clean(self):
data = self.cleaned_data data = self.cleaned_data
if valida_data(data.get('inicio_licenca'), data.get('fim_licenca')): if valida_data(data.get('inicio_licenca'), data.get('fim_licenca')):
raise forms.ValidationError(u"""A data de início deve ser menor raise forms.ValidationError(_(u"""A data de início deve ser menor
que a data final. Verifique novamente""") que a data final. Verifique novamente"""))
return data return data
@ -44,9 +43,9 @@ class FuncaoForm(forms.ModelForm):
def clean(self): def clean(self):
data = self.cleaned_data data = self.cleaned_data
if valida_data(data.get('inicio_funcao'), data.get('fim_funcao')): if valida_data(data.get('inicio_funcao'), data.get('fim_funcao')):
raise forms.ValidationError(u"""A data de início deve ser menor raise forms.ValidationError(_(u"""A data de início deve ser menor
que a data final. Verifique que a data final. Verifique
novamente""") novamente"""))
# Verifica na função anterior, se o seu período é igual # Verifica na função anterior, se o seu período é igual
# ou está entre o período da função atual. # ou está entre o período da função atual.
@ -60,7 +59,7 @@ class FuncaoForm(forms.ModelForm):
if valida_periodo_data(funcao_anterior.inicio_funcao, if valida_periodo_data(funcao_anterior.inicio_funcao,
funcao_anterior.fim_funcao, data.get('inicio_funcao'), funcao_anterior.fim_funcao, data.get('inicio_funcao'),
data.get('fim_funcao')): data.get('fim_funcao')):
raise forms.ValidationError(u"""Você não pode exercer raise forms.ValidationError(_(u"""Você não pode exercer
uma função no mesmo período que a anterior, como também, uma função no mesmo período que a anterior, como também,
não pode ser entre o período da mesma.""") não pode ser entre o período da mesma."""))
return data return data

13
sigi/apps/servidores/management/commands/migra.py

@ -1,12 +1,15 @@
# coding= utf-8 # coding= utf-8
import sys
import csv import csv
import re import re
from datetime import datetime from datetime import datetime
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User from django.contrib.auth.models import User
from sigi.apps.servidores.models import Servidor, Servico, Subsecretaria, Funcao, Ferias, Licenca from django.core.management.base import BaseCommand
from django.utils.translation import ugettext as _
from sigi.apps.contatos.models import Municipio from sigi.apps.contatos.models import Municipio
from sigi.apps.servidores.models import Servidor, Servico, Subsecretaria
# Funcao.objects.all().delete() # Funcao.objects.all().delete()
# Ferias.objects.all().delete() # Ferias.objects.all().delete()
@ -21,7 +24,7 @@ class MigrationError(Exception):
class Command(BaseCommand): class Command(BaseCommand):
help = 'Migra usuários do antigo Sistema de RH' help = _('Migra usuários do antigo Sistema de RH')
def to_date(self, data): def to_date(self, data):
return datetime.strptime(data, "%Y-%m-%d 00:00:00") return datetime.strptime(data, "%Y-%m-%d 00:00:00")
@ -222,7 +225,7 @@ class Command(BaseCommand):
funcao.bap_saida = p['bap_saida'] funcao.bap_saida = p['bap_saida']
funcao.save() funcao.save()
if re.search(r'estagi.ri[o|a]', p['cargo'], re.I): if re.search(r'estagi.ri[o|a]', p['cargo'], re.I): # XXX i18n
# TODO inserir dados de estagio # TODO inserir dados de estagio
pass pass

11
sigi/apps/servidores/models.py

@ -1,8 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib.auth.models import User
from django.contrib.contenttypes import generic
from django.db import models from django.db import models
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.contrib.contenttypes import generic from django.utils.translation import ugettext as _
from django.contrib.auth.models import User
class Subsecretaria(models.Model): class Subsecretaria(models.Model):
@ -27,7 +28,7 @@ class Servico(models.Model):
""" Modelo para representação dos Serviços de uma Subsecretaria """ Modelo para representação dos Serviços de uma Subsecretaria
""" """
nome = models.CharField(u'Setor', max_length=250, null=True) nome = models.CharField(_(u'Setor'), max_length=250, null=True)
sigla = models.CharField(max_length=10, null=True) sigla = models.CharField(max_length=10, null=True)
subsecretaria = models.ForeignKey(Subsecretaria, null=True) subsecretaria = models.ForeignKey(Subsecretaria, null=True)
# servidor responsavel por chefiar o serviço # servidor responsavel por chefiar o serviço
@ -35,8 +36,8 @@ class Servico(models.Model):
class Meta: class Meta:
ordering = ('nome',) ordering = ('nome',)
verbose_name = 'serviço' verbose_name = _('serviço')
verbose_name_plural = 'serviços' verbose_name_plural = _('serviços')
def __unicode__(self): def __unicode__(self):
return '%s (%s)' % (unicode(self.nome), unicode(self.sigla)) return '%s (%s)' % (unicode(self.nome), unicode(self.sigla))

2
sigi/apps/utils/admin_widgets.py

@ -1,6 +1,6 @@
from django.contrib.admin.widgets import AdminFileWidget from django.contrib.admin.widgets import AdminFileWidget
from django.utils.translation import ugettext as _
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
class AdminImageWidget(AdminFileWidget): class AdminImageWidget(AdminFileWidget):

14
sigi/apps/utils/email.py

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.template.loader import render_to_string
from django.core.mail import EmailMessage
from django.conf import settings from django.conf import settings
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
from django.utils.translation import ugettext as _
def enviar_email(from_email, subject, template, tags): def enviar_email(from_email, subject, template, tags):
@ -16,13 +16,13 @@ def enviar_email(from_email, subject, template, tags):
template. template.
""" """
if from_email is None: if from_email is None:
raise ValueError("Insira o email do remetente.") raise ValueError(_("Insira o email do remetente."))
elif subject is None: elif subject is None:
raise ValueError("Insira o assunto da mensagem.") raise ValueError(_("Insira o assunto da mensagem."))
elif template is None: elif template is None:
raise ValueError(u"Template da mensagem não encontrado") raise ValueError(_(u"Template da mensagem não encontrado"))
elif tags is None: elif tags is None:
raise ValueError("Insira o conteúdo da mensagem.") raise ValueError(_("Insira o conteúdo da mensagem."))
# Gerando a mensagem # Gerando a mensagem
mensagem = render_to_string(template, tags) mensagem = render_to_string(template, tags)

24
sigi/context_processors.py

@ -1,12 +1,14 @@
#-*- coding:utf-8 -*- #-*- coding:utf-8 -*-
from itertools import cycle from itertools import cycle
import datetime import datetime
from django.utils.translation import ugettext as _
from sigi.apps.casas.models import CasaLegislativa from sigi.apps.casas.models import CasaLegislativa
from sigi.apps.convenios.models import Convenio, Projeto from sigi.apps.convenios.models import Convenio, Projeto
from sigi.apps.servicos.models import TipoServico
from sigi.apps.diagnosticos.models import Diagnostico from sigi.apps.diagnosticos.models import Diagnostico
from sigi.apps.metas.models import Meta from sigi.apps.metas.models import Meta
from sigi.apps.servicos.models import TipoServico
def charts_data(request): def charts_data(request):
@ -81,14 +83,14 @@ def busca_informacoes_camara():
# Cabecalho da esquerda na tabela # Cabecalho da esquerda na tabela
cabecalho_esquerda = ( cabecalho_esquerda = (
u'Câmaras municipais', _(u'Câmaras municipais'),
u'Câmaras municipais não aderidas', _(u'Câmaras municipais não aderidas'),
u'Câmaras municipais aderidas', _(u'Câmaras municipais aderidas'),
u'Câmaras municipais com convênios assinados', _(u'Câmaras municipais com convênios assinados'),
u'Câmaras municipais convênios em andamento', _(u'Câmaras municipais convênios em andamento'),
u'Câmaras municipais equipadas', _(u'Câmaras municipais equipadas'),
u'Diagnósticos digitados', _(u'Diagnósticos digitados'),
u'Diagnósticos publicados' _(u'Diagnósticos publicados')
) )
linhas = ( linhas = (
@ -178,6 +180,6 @@ def busca_informacoes_seit():
def busca_informacoes_diagnostico(): def busca_informacoes_diagnostico():
return [ return [
{'title': 'Diagnósticos digitados', 'count': Diagnostico.objects.count()}, {'title': _('Diagnósticos digitados'), 'count': Diagnostico.objects.count()},
{'title': 'Diagnósticos publicados', 'count': Diagnostico.objects.filter(publicado=True).count()}, {'title': _('Diagnósticos publicados'), 'count': Diagnostico.objects.filter(publicado=True).count()},
] ]

14
sigi/shortcuts.py

@ -1,11 +1,13 @@
import cStringIO as StringIO import cStringIO as StringIO
import os
from cgi import escape
import ho.pisa as pisa import ho.pisa as pisa
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
from django.conf import settings from django.conf import settings
from cgi import escape from django.http import HttpResponse
import os from django.template import Context
from django.template.loader import get_template
from django.utils.translation import ugettext as _
def fetch_resources(uri, rel): def fetch_resources(uri, rel):
@ -22,4 +24,4 @@ def render_to_pdf(template_src, context_dict):
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode('utf-8')), result, link_callback=fetch_resources) pdf = pisa.pisaDocument(StringIO.StringIO(html.encode('utf-8')), result, link_callback=fetch_resources)
if not pdf.err: if not pdf.err:
return HttpResponse(result.getvalue(), content_type='application/pdf') return HttpResponse(result.getvalue(), content_type='application/pdf')
return HttpResponse('We had some errors<pre>%s</pre>' % escape(html)) return HttpResponse(_('We had some errors<pre>%s</pre>') % escape(html))

Loading…
Cancel
Save