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 { form .aligned ul li {
list-style: none; list-style: none;
} }
form .form-row.data_visita_inicio {
float: left;
}

31
sigi/apps/diagnosticos/admin.py

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from datetime import datetime
from django.contrib import admin from django.contrib import admin
from eav.admin import BaseEntityAdmin, BaseSchemaAdmin from eav.admin import BaseEntityAdmin, BaseSchemaAdmin
from sigi.apps.diagnosticos.models import Diagnostico, Pergunta, Escolha, Equipe, Anexo, Categoria 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 Actions do Admin
""" """
def publicar_diagnostico(self, request, queryset):
# Ação de alterar o status das publicações no modo Draft para Publicado.
def alterar_status_publicacao(self, request, queryset):
for registro in queryset: for registro in queryset:
diagnostico = Diagnostico.objects.get(pk=registro.id) diagnostico = Diagnostico.objects.get(pk=registro.id)
diagnostico.status = True diagnostico.publicado = True
diagnostico.data_publicacao= datetime.now()
diagnostico.save() diagnostico.save()
# Enviando o email avisando que o diagnóstico foi publicado # Enviando o email avisando que o diagnóstico foi publicado
diagnostico.email_diagnostico_publicado(diagnostico.responsavel.email_pessoal, request.get_host()) diagnostico.email_diagnostico_publicado(diagnostico.responsavel.email_pessoal, 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!")
alterar_status_publicacao.short_description = u""" publicar_diagnostico.short_description = u"""
Definir diagnósticos como publicado""" Definir diagnósticos como publicado"""
# Ação de alterar o status das publicações no modo Publicado para Draft. def despublicar_diagnostico(self, request, queryset):
def alterar_status_draft(self, request, queryset): queryset.update(publicado=False)
queryset.update(status=False) despublicar_diagnostico.short_description = u"""
alterar_status_draft.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):
model = Equipe model = Equipe
extra = 4
class AnexosInline(admin.TabularInline): class AnexosInline(admin.TabularInline):
model = Anexo model = Anexo
@ -53,14 +49,15 @@ class AnexoAdmin(admin.ModelAdmin):
class DiagnosticoAdmin(BaseEntityAdmin): class DiagnosticoAdmin(BaseEntityAdmin):
form = DiagnosticoForm form = DiagnosticoForm
date_hierarchy = 'data_questionario' actions = [publicar_diagnostico, despublicar_diagnostico]
actions = [alterar_status_publicacao, alterar_status_draft]
inlines = (EquipeInline, AnexosInline) inlines = (EquipeInline, AnexosInline)
list_display = ('casa_legislativa', 'data_questionario', 'responsavel', 'status') search_fields = ('casa_legislativa__nome', 'responsavel',)
raw_id_fields = ('casa_legislativa', '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 = [ 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'01. Identificação da Casa Legislativa', {'fields': ('casa_legislativa',)}),
(u'02. Identificação de Competências da Casa Legislativa', {'fields': ()}) (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 """ Retorna 404 caso o diagnostico esteja publicado
ou o usuario nao seja um membro da equipe ou o usuario nao seja um membro da equipe
""" """
msg = None
try: try:
diagnostico = Diagnostico.objects.filter(status=False).get(pk=id_diagnostico) diagnostico = Diagnostico.objects.filter(publicado=False).get(pk=id_diagnostico)
if (request.user.servidor in diagnostico.get_membros()): print diagnostico.membros
if (request.user.servidor in diagnostico.membros):
# continua o processamento normal da view # continua o processamento normal da view
return func(request, id_diagnostico, *args, **kwargs) return func(request, id_diagnostico, *args, **kwargs)
except Diagnostico.DoesNotExist: except Diagnostico.DoesNotExist:
pass pass
# renderiza a pagina de 404 # renderiza a pagina de 404
context = RequestContext(request, {'msg': msg}) context = RequestContext(request, {})
return render_to_response('mobile/404.html', context) return render_to_response('mobile/404.html', context)
return decorator return decorator

27
sigi/apps/diagnosticos/models.py

@ -20,22 +20,22 @@ class Diagnostico(BaseEntity):
search_text = SearchField(field_names=['casa_legislativa']) search_text = SearchField(field_names=['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_visita = models.DateField( data_visita_inicio = models.DateField(
'data da visita', u'data inicial da visita',
null=True, null=True,
blank=True, blank=True,
) )
data_questionario = models.DateField( data_visita_fim = models.DateField(
u'data do questionário', u'data final da visita',
null=True, null=True,
blank=True, blank=True,
) )
data_relatorio_questionario = models.DateField( publicado = models.BooleanField(default=False)
'data do relatório do questionario', data_publicacao = models.DateField(
u'data de publicação do diagnóstico',
null=True, null=True,
blank=True, blank=True,
) )
status = models.BooleanField(u'status do diagnóstico', default=False)
responsavel = models.ForeignKey('servidores.Servidor', responsavel = models.ForeignKey('servidores.Servidor',
verbose_name=u'responsável') verbose_name=u'responsável')
@ -43,10 +43,15 @@ class Diagnostico(BaseEntity):
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'
def get_membros(self): @property
membros = list(self.equipe_set.all()) def membros(self):
membros.append(self.responsavel) """ Retorna a lista de membros do diagnostico,
return membros isto é responsavel + equipe
"""
membros = set([self.responsavel])
for equipe in self.equipe_set.all():
membros.add(equipe.membro)
return list(membros)
@property @property
def contatos_respondidos(self): 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. que contenham o status de não publicado.
""" """
servidor = request.user.servidor servidor = request.user.servidor
diagnosticos = servidor.get_diagnosticos(publicado=False) diagnosticos = servidor.diagnosticos
context = RequestContext(request, {'diagnosticos': diagnosticos}) context = RequestContext(request, {'diagnosticos': diagnosticos})
return render_to_response('diagnosticos/diagnosticos_list.html', context) return render_to_response('diagnosticos/diagnosticos_list.html', context)
@ -72,7 +72,7 @@ def categoria_detalhes(request, id_diagnostico, id_categoria):
context = RequestContext(request) context = RequestContext(request)
return render_to_response('mobile/404.html', {}) 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": if request.method == "POST":
form = DiagnosticoMobileForm(request.POST, form = DiagnosticoMobileForm(request.POST,

18
sigi/apps/servidores/models.py

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

Loading…
Cancel
Save