From a2d540d8d57e050c7fcc647241acfa117ae5ab15 Mon Sep 17 00:00:00 2001 From: Felipe Vieira Date: Tue, 6 Dec 2011 22:12:37 +0000 Subject: [PATCH] melhorando admim e resolvendo bugs --- .../diagnosticos/diagnostico/change_form.css | 3 ++ sigi/apps/diagnosticos/admin.py | 31 +++++++++---------- sigi/apps/diagnosticos/decorators.py | 8 ++--- sigi/apps/diagnosticos/models.py | 27 +++++++++------- sigi/apps/diagnosticos/views.py | 4 +-- sigi/apps/servidores/models.py | 18 +++++------ 6 files changed, 46 insertions(+), 45 deletions(-) diff --git a/media/css/admin/diagnosticos/diagnostico/change_form.css b/media/css/admin/diagnosticos/diagnostico/change_form.css index ced3991..7582e05 100644 --- a/media/css/admin/diagnosticos/diagnostico/change_form.css +++ b/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; +} diff --git a/sigi/apps/diagnosticos/admin.py b/sigi/apps/diagnosticos/admin.py index 02a5064..b5f1c2a 100644 --- a/sigi/apps/diagnosticos/admin.py +++ b/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': ()}) ] diff --git a/sigi/apps/diagnosticos/decorators.py b/sigi/apps/diagnosticos/decorators.py index 2429237..4cfc844 100644 --- a/sigi/apps/diagnosticos/decorators.py +++ b/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 diff --git a/sigi/apps/diagnosticos/models.py b/sigi/apps/diagnosticos/models.py index d8d33f1..e504988 100644 --- a/sigi/apps/diagnosticos/models.py +++ b/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): diff --git a/sigi/apps/diagnosticos/views.py b/sigi/apps/diagnosticos/views.py index ad6945f..695ab97 100644 --- a/sigi/apps/diagnosticos/views.py +++ b/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, diff --git a/sigi/apps/servidores/models.py b/sigi/apps/servidores/models.py index 327af23..8999206 100644 --- a/sigi/apps/servidores/models.py +++ b/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