Sistema de Informações Gerenciais do Interlegis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

223 lines
9.5 KiB

# -*- coding: utf-8 -*-
from django.contrib import admin
from sigi.apps.servicos.models import Servico, LogServico, CasaAtendida, TipoServico
from sigi.apps.casas.admin import FuncionariosInline
from django.http import Http404, HttpResponseRedirect
from django.forms.models import ModelForm
from django.utils.encoding import force_unicode
from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse
from sigi.apps.casas.models import CasaLegislativa
class LogServicoInline(admin.StackedInline):
model = LogServico
Fieldset = ((None, {'fields': (('data', 'descricao'), 'log')}))
extra = 1
class ServicoFormAdmin(ModelForm):
class Meta:
model = Servico
fields = '__all__'
def __init__(self, *args, **kwargs):
super(ServicoFormAdmin, self).__init__(*args, **kwargs)
self.fields['contato_tecnico'].choices = ()
self.fields['contato_administrativo'].choices = ()
if self.instance.casa_legislativa_id:
id_casa = self.instance.casa_legislativa_id
elif kwargs.has_key('initial') and kwargs['initial'].has_key('id_casa'):
id_casa = kwargs['initial']['id_casa']
self.instance.casa_legislativa_id = id_casa
else:
id_casa = None
if id_casa:
print id_casa
casa = CasaAtendida.objects.get(pk=id_casa)
contatos = [(f.id, unicode(f)) for f in casa.funcionario_set.all()]
self.fields['contato_tecnico'].choices = contatos
self.fields['contato_administrativo'].choices = contatos
class TipoServicoAdmin(admin.ModelAdmin):
list_display = ('id', 'sigla', 'nome', 'qtde_casas_atendidas', )
ordering = ['id']
class ServicoAdmin(admin.ModelAdmin):
form = ServicoFormAdmin
actions = ['calcular_data_uso',]
list_display = ('casa_legislativa', 'get_codigo_interlegis', 'get_uf', 'tipo_servico', 'hospedagem_interlegis',
'data_ativacao', 'data_desativacao', 'getUrl', 'data_ultimo_uso', 'get_link_erro')
fieldsets = (( None, {
'fields': ('casa_legislativa', 'data_ativacao',)
}),
( 'Serviço', {
'fields': ('tipo_servico', ('url', 'hospedagem_interlegis'), ('nome_servidor', 'porta_servico', 'senha_inicial'),)
}),
( 'Contatos', {
'fields': ('contato_tecnico', 'contato_administrativo',)
}),
( 'Alterações', {
'fields': ('data_alteracao', 'data_desativacao', 'motivo_desativacao',)
}))
readonly_fields = ('casa_legislativa', 'data_ativacao', 'data_alteracao')
list_filter = ('tipo_servico', 'hospedagem_interlegis', 'data_ultimo_uso', 'casa_legislativa__municipio__uf', )
list_display_links = []
ordering = ('casa_legislativa__municipio__uf', 'casa_legislativa', 'tipo_servico',)
inlines = (LogServicoInline,)
search_fields = ('casa_legislativa__search_text',)
def get_codigo_interlegis(self, obj):
return obj.casa_legislativa.codigo_interlegis
get_codigo_interlegis.short_description = u'Código Interlegis'
get_codigo_interlegis.admin_order_field = 'casa_legislativa__codigo_interlegis'
def get_uf(self, obj):
return u'%s' % (obj.casa_legislativa.municipio.uf)
get_uf.short_description = 'UF'
get_uf.admin_order_field = 'casa_legislativa__municipio__uf'
def getUrl(self, obj):
return u'<a href="%s" target="_blank">%s</a>' % (obj.url, obj.url)
getUrl.short_description = 'Url'
getUrl.allow_tags = True
def get_link_erro(self, obj):
if not obj.erro_atualizacao:
return u""
url = obj.url
if url[-1] != '/':
url += '/'
url += obj.tipo_servico.string_pesquisa
return u'<a href="%s" target="_blank">%s</a>' % (url, obj.erro_atualizacao)
get_link_erro.allow_tags = True
get_link_erro.short_description = u"Erro na atualização"
get_link_erro.admin_order_field = 'erro_atualizacao'
def calcular_data_uso(self, request, queryset):
for servico in queryset:
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" )
return HttpResponseRedirect('.')
calcular_data_uso.short_description = u"Atualizar a data do último uso do(s) serviço(s)"
def get_actions(self, request):
from django.utils.datastructures import SortedDict
actions = [self.get_action(action) for action in self.actions]
actions = filter(None, actions)
actions.sort(lambda a,b: cmp(a[2].lower(), b[2].lower()))
actions = SortedDict([ (name, (func, name, desc)) for func, name, desc in actions ])
return actions
def lookup_allowed(self, lookup, value):
return super(ServicoAdmin, self).lookup_allowed(lookup, value) or \
lookup in ['casa_legislativa__municipio__uf__codigo_ibge__exact']
def add_view(self, request, form_url='', extra_context=None):
id_casa = request.GET.get('id_casa', None)
if not id_casa:
raise Http404
return super(ServicoAdmin, self).add_view(request, form_url, extra_context=extra_context)
def response_add(self, request, obj):
opts = obj._meta
msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj)}
if request.POST.has_key("_addanother"):
self.message_user(request, msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name)))
return HttpResponseRedirect(request.path + '?id_casa=%s' % (obj.casa_legislativa.id,))
elif request.POST.has_key("_save"):
self.message_user(request, msg)
return HttpResponseRedirect(reverse('admin:servicos_casaatendida_change', args=[obj.casa_legislativa.id]))
return super(ServicoAdmin, self).response_add(request, obj)
def response_change(self, request, obj):
opts = obj._meta
msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj)}
if request.POST.has_key("_addanother"):
self.message_user(request, msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name)))
return HttpResponseRedirect("../add/?id_casa=%s" % (obj.casa_legislativa.id,))
elif request.POST.has_key("_save"):
self.message_user(request, msg)
return HttpResponseRedirect(reverse('admin:servicos_casaatendida_change', args=[obj.casa_legislativa.id]))
return super(ServicoAdmin, self).response_change(request, obj)
def save_form(self, request, form, change):
obj = super( ServicoAdmin, self).save_form(request, form, change)
if not change:
id_casa = request.GET.get('id_casa', None)
if not id_casa:
raise Http404
obj.casa_legislativa = CasaAtendida.objects.get(pk=id_casa)
return obj
class ContatosInline(FuncionariosInline):
can_delete = False # Equipe do SEIT não pode excluir pessoas de contato
class CasaAtendidaAdmin(admin.ModelAdmin):
actions = None
list_display = ('codigo_interlegis', 'nome', 'get_servicos',)
ordering = ['nome']
fieldsets = (
('Casa legislativa', {
'fields': (('codigo_interlegis', 'nome'), ('logradouro', 'bairro', 'municipio', 'cep'), ('email', 'pagina_web'))
})
,)
readonly_fields = ('nome', 'logradouro', 'bairro', 'municipio', 'cep')
inlines = (ContatosInline,)
list_filter = ('tipo', 'servico__tipo_servico', 'municipio__uf__nome',
'servico__casa_legislativa__convenio__projeto')
search_fields = ('search_text','cnpj', 'bairro', 'logradouro',
'cep', 'municipio__nome', 'municipio__uf__nome',
'municipio__codigo_ibge', 'pagina_web', 'observacoes')
def get_servicos(self, obj):
result = []
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
else 'Desativado', servico.contato_administrativo.nome))
return "<ul><li>" + "</li><li>".join(result) + "</li></ul>"
get_servicos.allow_tags = True
get_servicos.short_description = u"Serviços"
def lookup_allowed(self, lookup, value):
return super(CasaAtendidaAdmin, self).lookup_allowed(lookup, value) or \
lookup in ['municipio__uf__codigo_ibge__exact', 'servico__tipo_servico__id__exact', ]
def change_view(self, request, object_id, extra_context=None):
# Se a Casa ainda não é atendida, gerar o código interlegis para ela
# Assim ela passa a ser uma casa atendida
casa = CasaLegislativa.objects.get(id=object_id)
if casa.codigo_interlegis == '':
casa.gerarCodigoInterlegis()
return super(CasaAtendidaAdmin, self).change_view(request, object_id, extra_context=extra_context)
def has_add_permission(self, request):
return False # Nunca é permitido inserir uma nova Casa Legislativa por aqui
def has_delete_permission(self, request, obj=None):
return False # Nunca deletar casas por aqui
admin.site.register(Servico, ServicoAdmin)
admin.site.register(TipoServico, TipoServicoAdmin)
admin.site.register(CasaAtendida, CasaAtendidaAdmin)