Browse Source

melhorando admim e resolvendo bugs

diagnosticos
Felipe Vieira 13 years ago
parent
commit
a2d540d8d5
  1. 3
      media/css/admin/diagnosticos/diagnostico/change_form.css
  2. 31
      sigi/apps/diagnosticos/admin.py
  3. 8
      sigi/apps/diagnosticos/decorators.py
  4. 27
      sigi/apps/diagnosticos/models.py
  5. 4
      sigi/apps/diagnosticos/views.py
  6. 18
      sigi/apps/servidores/models.py

3
media/css/admin/diagnosticos/diagnostico/change_form.css

@ -9,3 +9,6 @@ form .aligned ul {
form .aligned ul li {
list-style: none;
}
form .form-row.data_visita_inicio {
float: left;
}

31
sigi/apps/diagnosticos/admin.py

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from datetime import datetime
from django.contrib import admin
from eav.admin import BaseEntityAdmin, BaseSchemaAdmin
from sigi.apps.diagnosticos.models import Diagnostico, Pergunta, Escolha, Equipe, Anexo, Categoria
@ -8,33 +9,28 @@ from sigi.apps.diagnosticos.forms import DiagnosticoForm
"""
Actions do Admin
"""
# Ação de alterar o status das publicações no modo Draft para Publicado.
def alterar_status_publicacao(self, request, queryset):
def publicar_diagnostico(self, request, queryset):
for registro in queryset:
diagnostico = Diagnostico.objects.get(pk=registro.id)
diagnostico.status = True
diagnostico.publicado = True
diagnostico.data_publicacao= datetime.now()
diagnostico.save()
# Enviando o email avisando que o diagnóstico foi publicado
diagnostico.email_diagnostico_publicado(diagnostico.responsavel.email_pessoal, request.get_host())
self.message_user(request, "Diagnóstico(s) publicado(s) com sucesso!")
alterar_status_publicacao.short_description = u"""
publicar_diagnostico.short_description = u"""
Definir diagnósticos como publicado"""
# Ação de alterar o status das publicações no modo Publicado para Draft.
def alterar_status_draft(self, request, queryset):
queryset.update(status=False)
alterar_status_draft.short_description = u"""
def despublicar_diagnostico(self, request, queryset):
queryset.update(publicado=False)
despublicar_diagnostico.short_description = u"""
Definir diagnósticos como não publicado"""
class EquipeInline(admin.TabularInline):
model = Equipe
extra = 4
class AnexosInline(admin.TabularInline):
model = Anexo
@ -53,14 +49,15 @@ class AnexoAdmin(admin.ModelAdmin):
class DiagnosticoAdmin(BaseEntityAdmin):
form = DiagnosticoForm
date_hierarchy = 'data_questionario'
actions = [alterar_status_publicacao, alterar_status_draft]
actions = [publicar_diagnostico, despublicar_diagnostico]
inlines = (EquipeInline, AnexosInline)
list_display = ('casa_legislativa', 'data_questionario', 'responsavel', 'status')
raw_id_fields = ('casa_legislativa', 'responsavel')
search_fields = ('casa_legislativa__nome', 'responsavel',)
list_display = ('casa_legislativa', 'data_visita_inicio', 'data_visita_fim', 'responsavel', 'publicado')
list_filter = ('publicado', 'data_publicacao', 'data_visita_inicio', 'data_visita_fim')
raw_id_fields = ('casa_legislativa',)
eav_fieldsets = [
(u'00. Identificação do Diagnóstico', {'fields': ('responsavel', 'data_visita', 'data_questionario', 'data_relatorio_questionario')}),
(u'00. Identificação do Diagnóstico', {'fields': ('responsavel', 'data_visita_inicio', 'data_visita_fim',)}),
(u'01. Identificação da Casa Legislativa', {'fields': ('casa_legislativa',)}),
(u'02. Identificação de Competências da Casa Legislativa', {'fields': ()})
]

8
sigi/apps/diagnosticos/decorators.py

@ -9,16 +9,16 @@ def validate_diagnostico(func):
""" Retorna 404 caso o diagnostico esteja publicado
ou o usuario nao seja um membro da equipe
"""
msg = None
try:
diagnostico = Diagnostico.objects.filter(status=False).get(pk=id_diagnostico)
if (request.user.servidor in diagnostico.get_membros()):
diagnostico = Diagnostico.objects.filter(publicado=False).get(pk=id_diagnostico)
print diagnostico.membros
if (request.user.servidor in diagnostico.membros):
# continua o processamento normal da view
return func(request, id_diagnostico, *args, **kwargs)
except Diagnostico.DoesNotExist:
pass
# renderiza a pagina de 404
context = RequestContext(request, {'msg': msg})
context = RequestContext(request, {})
return render_to_response('mobile/404.html', context)
return decorator

27
sigi/apps/diagnosticos/models.py

@ -20,22 +20,22 @@ class Diagnostico(BaseEntity):
search_text = SearchField(field_names=['casa_legislativa'])
casa_legislativa.convenio_uf_filter = True
casa_legislativa.convenio_cl_tipo_filter = True
data_visita = models.DateField(
'data da visita',
data_visita_inicio = models.DateField(
u'data inicial da visita',
null=True,
blank=True,
)
data_questionario = models.DateField(
u'data do questionário',
data_visita_fim = models.DateField(
u'data final da visita',
null=True,
blank=True,
)
data_relatorio_questionario = models.DateField(
'data do relatório do questionario',
publicado = models.BooleanField(default=False)
data_publicacao = models.DateField(
u'data de publicação do diagnóstico',
null=True,
blank=True,
)
status = models.BooleanField(u'status do diagnóstico', default=False)
responsavel = models.ForeignKey('servidores.Servidor',
verbose_name=u'responsável')
@ -43,10 +43,15 @@ class Diagnostico(BaseEntity):
class Meta:
verbose_name, verbose_name_plural = u'diagnóstico', u'diagnósticos'
def get_membros(self):
membros = list(self.equipe_set.all())
membros.append(self.responsavel)
return membros
@property
def membros(self):
""" Retorna a lista de membros do diagnostico,
isto é responsavel + equipe
"""
membros = set([self.responsavel])
for equipe in self.equipe_set.all():
membros.add(equipe.membro)
return list(membros)
@property
def contatos_respondidos(self):

4
sigi/apps/diagnosticos/views.py

@ -22,7 +22,7 @@ def lista(request):
que contenham o status de não publicado.
"""
servidor = request.user.servidor
diagnosticos = servidor.get_diagnosticos(publicado=False)
diagnosticos = servidor.diagnosticos
context = RequestContext(request, {'diagnosticos': diagnosticos})
return render_to_response('diagnosticos/diagnosticos_list.html', context)
@ -72,7 +72,7 @@ def categoria_detalhes(request, id_diagnostico, id_categoria):
context = RequestContext(request)
return render_to_response('mobile/404.html', {})
diagnostico = Diagnostico.objects.filter(status=False).get(pk=id_diagnostico)
diagnostico = Diagnostico.objects.filter(publicado=False).get(pk=id_diagnostico)
if request.method == "POST":
form = DiagnosticoMobileForm(request.POST,

18
sigi/apps/servidores/models.py

@ -123,28 +123,24 @@ class Servidor(models.Model):
"""
pass
def get_diagnosticos(self, publicado=None):
@property
def diagnosticos(self):
""" Retorna todos os diagnosticos que este servidor
participou
* publicado: Se for True/False filtra os diagnosticos
se for None retorna todos os diagnosticos
participa, isto é, como responsavel ou parte da equipe
"""
if isinstance(publicado, bool):
diagnosticos = list(self.diagnostico_set.filter(status=publicado).all())
else:
diagnosticos = list(self.diagnostico_set.all())
diagnosticos = set(self.diagnostico_set.filter(publicado=True).all())
for equipe in self.equipe_set.all():
diagnosticos.append(equipe.diagnostico)
diagnosticos.add(equipe.diagnostico)
return diagnosticos
return list(diagnosticos)
def __unicode__(self):
return self.nome_completo
# Soluçao alternativa para extender o usuário do django
# Acesso do servidor de um objeto user
User.profile = property(lambda user: Servidor.objects.get(user))
User.servidor = property(lambda user: Servidor.objects.get(user=user))
# Sinal para ao criar um usuário criar um servidor
# baseado no nome contino no LDAP

Loading…
Cancel
Save