Browse Source

Aprimora filtro de convenios e adiciona filtro de serviços na listview das Casas

pull/11/head
Sesostris Vieira 5 years ago
parent
commit
5ae6322bf2
  1. 107
      sigi/apps/casas/admin.py
  2. 56
      sigi/apps/casas/views.py

107
sigi/apps/casas/admin.py

@ -1,8 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.core.urlresolvers import reverse
from django.contrib import admin from django.contrib import admin
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from image_cropping import ImageCroppingMixin from image_cropping import ImageCroppingMixin
@ -12,13 +14,13 @@ from sigi.apps.casas.views import report_complete, labels_report, export_csv, \
labels_report_sem_presidente, report, \ labels_report_sem_presidente, report, \
adicionar_casas_carrinho adicionar_casas_carrinho
from sigi.apps.contatos.models import Telefone from sigi.apps.contatos.models import Telefone
from sigi.apps.convenios.models import Convenio from sigi.apps.convenios.models import Convenio, Projeto
from sigi.apps.diagnosticos.models import Diagnostico from sigi.apps.diagnosticos.models import Diagnostico
from sigi.apps.inventario.models import Bem from sigi.apps.inventario.models import Bem
from sigi.apps.metas.models import PlanoDiretor from sigi.apps.metas.models import PlanoDiretor
from sigi.apps.ocorrencias.models import Ocorrencia from sigi.apps.ocorrencias.models import Ocorrencia
from sigi.apps.parlamentares.models import Legislatura from sigi.apps.parlamentares.models import Legislatura
from sigi.apps.servicos.models import Servico from sigi.apps.servicos.models import Servico, TipoServico
from sigi.apps.servidores.models import Servidor from sigi.apps.servidores.models import Servidor
from sigi.apps.utils import queryset_ascii from sigi.apps.utils import queryset_ascii
from sigi.apps.utils.base_admin import BaseModelAdmin from sigi.apps.utils.base_admin import BaseModelAdmin
@ -67,16 +69,19 @@ 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 = _(u'Tramitações') get_tramitacoes.short_description = _(u'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 = _(u'Anexos') get_anexos.short_description = _(u'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 = _(u'Equipamentos previstos') get_equipamentos.short_description = _(u'Equipamentos previstos')
get_equipamentos.allow_tags = True get_equipamentos.allow_tags = True
@ -173,6 +178,7 @@ class OcorrenciaInline(admin.TabularInline):
link_editar.short_description = _(u'Editar') link_editar.short_description = _(u'Editar')
link_editar.allow_tags = True link_editar.allow_tags = True
class GerentesContasFilter(admin.filters.RelatedFieldListFilter): class GerentesContasFilter(admin.filters.RelatedFieldListFilter):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -181,17 +187,76 @@ class GerentesContasFilter(admin.filters.RelatedFieldListFilter):
self.lookup_choices = [(x.id, x) for x in gerentes] self.lookup_choices = [(x.id, x) for x in gerentes]
class ConvenioFilter(admin.SimpleListFilter):
title = _(u"Tipo de convênio")
parameter_name = 'convenio'
def lookups(self, request, model_admin):
return (
('SC', _(u"Sem nenhum convênio")),
('CC', _(u"Com algum convênio"))
) + tuple([(p.pk, p.sigla) for p in Projeto.objects.all()])
def queryset(self, request, queryset):
if self.value() is not None:
if self.value() == 'SC':
queryset = queryset.filter(convenio=None)
elif self.value() == 'CC':
queryset = queryset.exclude(convenio=None)
else:
queryset = queryset.filter(convenio__projeto_id=self.value())
return queryset.distinct('municipio__uf__nome', 'nome')
class ServicoFilter(admin.SimpleListFilter):
title = _(u"Serviço")
parameter_name = 'servico'
def lookups(self, request, model_admin):
return (
('SS', _(u"Sem nenhum serviço")),
('CS', _(u"Com algum serviço")),
('CH', _(u"Com algum serviço de hospedagem")),
('CR', _(u"Apenas serviço de registro")),
) + tuple([(p.pk, p.nome) for p in TipoServico.objects.all()])
def queryset(self, request, queryset):
if self.value() is not None:
if self.value() == 'SS':
queryset = queryset.filter(servico=None)
elif self.value() == 'CS':
queryset = queryset.exclude(servico=None).filter(
servico__data_desativacao__isnull=True)
elif self.value() == 'CR':
queryset = queryset.exclude(servico__tipo_servico__modo='H') \
.exclude(servico=None)
elif self.value() == 'CH':
queryset = queryset.filter(
servico__tipo_servico__modo='H',
servico__data_desativacao__isnull=True
)
else:
queryset = queryset.filter(
servico__tipo_servico_id=self.value()
)
return queryset.distinct('municipio__uf__nome', 'nome')
class CasaLegislativaAdmin(ImageCroppingMixin, BaseModelAdmin): class CasaLegislativaAdmin(ImageCroppingMixin, BaseModelAdmin):
form = CasaLegislativaForm form = CasaLegislativaForm
actions = ['adicionar_casas', ] actions = ['adicionar_casas', ]
inlines = (TelefonesInline, PresidenteInline, FuncionariosInline, ConveniosInline, LegislaturaInline, inlines = (TelefonesInline, PresidenteInline, FuncionariosInline, ConveniosInline, LegislaturaInline,
DiagnosticoInline, BemInline, ServicoInline, PlanoDiretorInline, OcorrenciaInline, ) DiagnosticoInline, BemInline, ServicoInline, PlanoDiretorInline, OcorrenciaInline,)
list_display = ('nome', 'municipio', 'gerente_contas', 'get_convenios') list_display = ('nome', 'get_uf', 'get_gerente_contas', 'get_convenios',
'get_servicos')
list_display_links = ('nome',) list_display_links = ('nome',)
list_filter = ('tipo', ('gerente_contas', GerentesContasFilter), 'municipio__uf__nome', 'convenio__projeto', list_filter = ('tipo', ('gerente_contas', GerentesContasFilter),
'municipio__uf__nome', ConvenioFilter, ServicoFilter,
'inclusao_digital',) 'inclusao_digital',)
ordering = ('nome', 'municipio__uf') ordering = ('municipio__uf__nome', 'nome')
queyrset = queryset_ascii queryset = queryset_ascii
fieldsets = ( fieldsets = (
(None, { (None, {
'fields': ('tipo', 'nome', 'cnpj', 'num_parlamentares', 'gerente_contas') 'fields': ('tipo', 'nome', 'cnpj', 'num_parlamentares', 'gerente_contas')
@ -212,11 +277,31 @@ class CasaLegislativaAdmin(ImageCroppingMixin, BaseModelAdmin):
search_fields = ('search_text', 'cnpj', 'bairro', 'logradouro', search_fields = ('search_text', 'cnpj', 'bairro', 'logradouro',
'cep', 'municipio__nome', 'municipio__uf__nome', 'cep', 'municipio__nome', 'municipio__uf__nome',
'municipio__codigo_ibge', 'pagina_web', 'observacoes') 'municipio__codigo_ibge', 'pagina_web', 'observacoes')
def get_uf(self, obj):
return obj.municipio.uf.nome
get_uf.short_description = _(u'Unidade da Federação')
get_uf.admin_order_field = 'municipio__uf__nome'
def get_gerente_contas(self, obj):
return obj.gerente_contas
get_gerente_contas.short_description = _(u'Gerente de contas')
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 get_servicos(self, obj):
return '<ul>' + ''.join(['<li>%s</li>' % s.__unicode__()
for s in obj.servico_set.filter(
data_desativacao__isnull=True)]) + '</ul>'
get_servicos.short_description = _(u'Serviços')
get_servicos.allow_tags = True
def changelist_view(self, request, extra_context=None): def changelist_view(self, request, extra_context=None):
return super(CasaLegislativaAdmin, self).changelist_view( return super(CasaLegislativaAdmin, self).changelist_view(
@ -230,22 +315,27 @@ 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 = _(u"Gerar etiqueta(s) da(s) casa(s) selecionada(s)") etiqueta.short_description = _(u"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 = _(u"Gerar etiqueta(s) sem presidente da(s) casa(s) selecionada(s)") etiqueta_sem_presidente.short_description = _(u"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):
@ -271,5 +361,6 @@ class CasaLegislativaAdmin(ImageCroppingMixin, BaseModelAdmin):
del actions['delete_selected'] del actions['delete_selected']
return actions return actions
admin.site.register(CasaLegislativa, CasaLegislativaAdmin) admin.site.register(CasaLegislativa, CasaLegislativaAdmin)
admin.site.register(TipoCasaLegislativa) admin.site.register(TipoCasaLegislativa)

56
sigi/apps/casas/views.py

@ -49,7 +49,39 @@ def get_for_qs(get, qs):
for k, v in get.iteritems(): for k, v in get.iteritems():
if str(k) not in ('page', 'pop', 'q', '_popup', 'o', 'ot'): if str(k) not in ('page', 'pop', 'q', '_popup', 'o', 'ot'):
kwargs[str(k)] = v kwargs[str(k)] = v
if 'convenio' in kwargs:
if kwargs['convenio'] == 'SC':
qs = qs.filter(convenio=None)
elif kwargs['convenio'] == 'CC':
qs = qs.exclude(convenio=None)
else:
qs = qs.filter(convenio__projeto_id=kwargs['convenio'])
qs = qs.distinct('municipio__uf__nome', 'nome')
del(kwargs['convenio'])
if 'servico' in kwargs:
if kwargs['servico'] == 'SS':
qs = qs.filter(servico=None)
elif kwargs['servico'] == 'CS':
qs = qs.exclude(servico=None).filter(
servico__data_desativacao__isnull=True)
elif kwargs['servico'] == 'CR':
qs = qs.exclude(servico__tipo_servico__modo='H') \
.exclude(servico=None)
elif kwargs['servico'] == 'CH':
qs = qs.filter(
servico__tipo_servico__modo='H',
servico__data_desativacao__isnull=True
)
else:
qs = qs.filter(servico__tipo_servico_id=kwargs['servico'])
qs = qs.distinct('municipio__uf__nome', 'nome')
del(kwargs['servico'])
qs = qs.filter(**kwargs) qs = qs.filter(**kwargs)
if 'o' in get: if 'o' in get:
qs = query_ordena(qs, get['o']) qs = query_ordena(qs, get['o'])
@ -307,18 +339,19 @@ def export_csv(request):
return HttpResponseRedirect('../') return HttpResponseRedirect('../')
atributos = request.POST.getlist("itens_csv_selected") atributos = request.POST.getlist("itens_csv_selected")
atributos2 = [s.encode("utf-8") for s in atributos]
try: try:
atributos2.insert(atributos2.index(_(u'Município')), _(u'UF')) atributos.insert(atributos.index(_(u'Município')), _(u'UF'))
except ValueError: except ValueError:
pass pass
atributos2 = [s.encode("utf-8") for s in atributos]
writer.writerow(atributos2) writer.writerow(atributos2)
for casa in casas: for casa in casas:
lista = [] lista = []
contatos = casa.funcionario_set.filter(setor="contato_interlegis") contatos = casa.funcionario_set.exclude(nome="")
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"))
@ -353,18 +386,23 @@ def export_csv(request):
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:
lista.append(contatos[0].nome.encode("utf-8")) nomes = u", ".join([c.nome for c in contatos])
lista.append(nomes.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:
lista.append(contatos[0].cargo.encode("utf-8")) cargos = u", ".join([c.cargo if c.cargo else u"?"
for c in contatos])
lista.append(cargos.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:
lista.append(contatos[0].email.encode("utf-8")) emails = u", ".join([c.email if c.email else u"?"
for c in contatos])
lista.append(emails.encode("utf-8"))
else: else:
lista.append('') lista.append('')
else: else:

Loading…
Cancel
Save