From 1f743a90d18cb225189f81232c838e1f97525ad4 Mon Sep 17 00:00:00 2001 From: Felipe Vieira Date: Thu, 1 Dec 2011 17:57:57 +0000 Subject: [PATCH] protegendo url de detalhes e lista de categorias --- sigi/apps/diagnosticos/models.py | 5 +++ sigi/apps/diagnosticos/views.py | 56 +++++++++++++++++++------------- sigi/apps/servidores/models.py | 22 +++++++++++-- 3 files changed, 58 insertions(+), 25 deletions(-) diff --git a/sigi/apps/diagnosticos/models.py b/sigi/apps/diagnosticos/models.py index 033c886..05b9430 100644 --- a/sigi/apps/diagnosticos/models.py +++ b/sigi/apps/diagnosticos/models.py @@ -41,6 +41,11 @@ 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 + def email_diagnostico_publicado(self, from_email, host): """Enviando email quando o diagnóstico for publicado. Os argumentos acima são: diff --git a/sigi/apps/diagnosticos/views.py b/sigi/apps/diagnosticos/views.py index 7b2fac3..906e035 100644 --- a/sigi/apps/diagnosticos/views.py +++ b/sigi/apps/diagnosticos/views.py @@ -11,6 +11,24 @@ from sigi.apps.diagnosticos.forms import (DiagnosticoMobileForm, CasaLegislativaMobileForm, FuncionariosMobileForm) +def validate_diagnostico(func): + def decorator(request, id_diagnostico, *args, **kwargs): + """ Retorna 404 caso o diagnostico esteja publicado + ou o usuario nao seja um membro da equipe + """ + try: + diagnostico = Diagnostico.objects.filter(status=False).get(pk=id_diagnostico) + if (request.user.get_profile() in diagnostico.get_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) + return render_to_response('mobile/404.html', {}) + return decorator + @cache_page(5) @login_required(login_url='/mobile/diagnosticos/login') def lista(request): @@ -28,17 +46,13 @@ def lista(request): @cache_page(5) +@validate_diagnostico @login_required(login_url='/mobile/diagnosticos/login') def categorias(request, id_diagnostico): """Consulta as categorias do diagnostico selecionado a partir da sua identificação """ - try: - diagnostico = Diagnostico.objects.filter(status=False).get(pk=id_diagnostico) - except Diagnostico.DoesNotExist: - context = RequestContext(request) - return render_to_response('mobile/404.html', {}) - + diagnostico = Diagnostico.objects.get(pk=id_diagnostico) categorias = Categoria.objects.all() context = RequestContext(request, {'categorias': categorias, @@ -48,6 +62,7 @@ def categorias(request, id_diagnostico): @cache_page(5) +@validate_diagnostico @login_required(login_url='/mobile/diagnosticos/login') def categoria_detalhes(request, id_diagnostico, id_categoria): """Captura as perguntas da categoria @@ -55,12 +70,13 @@ def categoria_detalhes(request, id_diagnostico, id_categoria): """ try: - diagnostico = Diagnostico.objects.filter(status=False).get(pk=id_diagnostico) categoria = Categoria.objects.get(pk=id_categoria) - except Diagnostico.DoesNotExist, Categoria.DoesNotExist: + except Categoria.DoesNotExist: context = RequestContext(request) return render_to_response('mobile/404.html', {}) + diagnostico = Diagnostico.objects.filter(status=False).get(pk=id_diagnostico) + if request.method == "POST": form = DiagnosticoMobileForm(request.POST, instance=diagnostico, category=id_categoria) @@ -77,14 +93,12 @@ def categoria_detalhes(request, id_diagnostico, id_categoria): @cache_page(5) +@validate_diagnostico @login_required(login_url='/mobile/diagnosticos/login') def categoria_casa_legislativa(request, id_diagnostico): - try: - diagnostico = Diagnostico.objects.filter(status=False).get(pk=id_diagnostico) - casa_legislativa = diagnostico.casa_legislativa - except Diagnostico.DoesNotExist: - context = RequestContext(request) - return render_to_response('mobile/404.html', {}) + + diagnostico = Diagnostico.objects.get(pk=id_diagnostico) + casa_legislativa = diagnostico.casa_legislativa if request.method == "POST": form = CasaLegislativaMobileForm(request.POST, @@ -102,16 +116,14 @@ def categoria_casa_legislativa(request, id_diagnostico): @cache_page(5) +@validate_diagnostico @login_required(login_url='/mobile/diagnosticos/login') def categoria_contatos(request, id_diagnostico): - try: - diagnostico = Diagnostico.objects.filter(status=False).get(pk=id_diagnostico) - casa = diagnostico.casa_legislativa - except Diagnostico.DoesNotExist: - context = RequestContext(request) - return render_to_response('mobile/404.html', {}) - funcionarios = [casa.funcionario_set.get_or_create(setor=n) + diagnostico = Diagnostico.objects.get(pk=id_diagnostico) + casa_legislativa = diagnostico.casa_legislativa + + funcionarios = [casa_legislativa.funcionario_set.get_or_create(setor=n) for n, l in Funcionario.SETOR_CHOICES] if request.method == "POST": @@ -127,6 +139,6 @@ def categoria_contatos(request, id_diagnostico): for f, c in funcionarios] context = RequestContext(request, {'forms': forms, - 'diagnostico': diagnostico, 'casa_legislativa': casa}) + 'diagnostico': diagnostico, 'casa_legislativa': casa_legislativa}) return render_to_response('diagnosticos/diagnosticos_categoria_contatos_form.html', context) diff --git a/sigi/apps/servidores/models.py b/sigi/apps/servidores/models.py index 9630507..3e3fe88 100644 --- a/sigi/apps/servidores/models.py +++ b/sigi/apps/servidores/models.py @@ -104,17 +104,17 @@ class Servidor(models.Model): ordering = ('nome_completo',) verbose_name_plural = 'servidores' - def is_chefe(): + def is_chefe(self): """ Verifica se o servidor é chefe ou diretor """ pass - def data_entrada(): + def data_entrada(self): """ Verifica a data de entrada da função mais antiga """ pass - def data_saida(): + def data_saida(self): """ Verifica a data de saída da função mais recente de um servidor desativado @@ -122,6 +122,22 @@ class Servidor(models.Model): """ pass + def get_diagnosticos(self, publicado=None): + """ Retorna todos os diagnosticos que este servidor + participou + * publicado: Se for True/False filtra os diagnosticos + se for None retorna todos os diagnosticos + """ + if isinstance(publicado, bool): + diagnosticos = list(self.diagnostico_set.filter(status=publicado).all()) + else: + diagnosticos = list(self.diagnostico_set.all()) + + for equipe in self.equipe_set.all(): + diagnosticos.append(equipe.diagnostico) + + return diagnosticos + def __unicode__(self): return self.nome_completo