From ec45ccf295e4c9166bc028767685e049e2269f04 Mon Sep 17 00:00:00 2001 From: Gilson Filho Date: Thu, 1 Dec 2011 18:25:11 +0000 Subject: [PATCH] =?UTF-8?q?Mudando=20o=20decorator=20para=20um=20lugar=20a?= =?UTF-8?q?propriado,=20como=20tamb=C3=A9m=20inserindo=20um=20ID=20para=20?= =?UTF-8?q?ser=20usado=20ao=20renderizar=20a=20mensagem=20de=20erro=20do?= =?UTF-8?q?=20campo=20via=20AJAX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sigi/apps/diagnosticos/decorators.py | 25 ++++++++++ sigi/apps/diagnosticos/views.py | 46 ++++++++++--------- sigi/apps/utils/validators.py | 31 +++++++++++++ .../diagnosticos_categorias_form.html | 2 +- 4 files changed, 81 insertions(+), 23 deletions(-) create mode 100644 sigi/apps/diagnosticos/decorators.py diff --git a/sigi/apps/diagnosticos/decorators.py b/sigi/apps/diagnosticos/decorators.py new file mode 100644 index 0000000..776299f --- /dev/null +++ b/sigi/apps/diagnosticos/decorators.py @@ -0,0 +1,25 @@ +# -*- coding: utf8 -*- + +from sigi.apps.diagnosticos.models import Diagnostico +from sigi.apps.servidores.models import Servidor + +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 + """ + msg = None + 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 Servidor.DoesNotExist: + msg = "Para acessar os diagnóstico você precisa ter um servidor cadastrado na sua conta." + except Diagnostico.DoesNotExist: + pass + + # renderiza a pagina de 404 + context = RequestContext(request, {'msg': msg}) + return render_to_response('mobile/404.html', context) + return decorator diff --git a/sigi/apps/diagnosticos/views.py b/sigi/apps/diagnosticos/views.py index 296d572..9f7a30e 100644 --- a/sigi/apps/diagnosticos/views.py +++ b/sigi/apps/diagnosticos/views.py @@ -1,10 +1,13 @@ # -*- coding: utf8 -*- +from django.http import HttpResponse +from django.utils import simplejson from django.shortcuts import render_to_response from django.template import RequestContext from django.views.decorators.cache import cache_page from sigi.apps.utils.decorators import login_required +from sigi.apps.diagnosticos.decorators import validate_diagnostico from sigi.apps.diagnosticos.models import Diagnostico, Categoria from sigi.apps.casas.models import Funcionario from sigi.apps.servidores.models import Servidor @@ -12,27 +15,6 @@ 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 - """ - msg = None - 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 Servidor.DoesNotExist: - msg = "Para acessar os diagnóstico você precisa ter um servidor cadastrado na sua conta." - except Diagnostico.DoesNotExist: - pass - - # renderiza a pagina de 404 - context = RequestContext(request, {'msg': msg}) - return render_to_response('mobile/404.html', context) - return decorator - @cache_page(5) @login_required(login_url='/mobile/diagnosticos/login') def lista(request): @@ -71,7 +53,13 @@ def categorias(request, id_diagnostico): @login_required(login_url='/mobile/diagnosticos/login') def categoria_detalhes(request, id_diagnostico, id_categoria): """Captura as perguntas da categoria - selecionada. + selecionada. Durante o preenchimento das perguntas, o camada + template do projeto, vai requisitar a inserção dos campos via + AJAX a cada mudança de pergunta + + Caso alguma inserção não passe na validação do formulário em + questão, será enviado as mensagens de erro no formato JSON, + para que a camada de template do projeto trate-as de forma adequada. """ try: @@ -87,6 +75,20 @@ def categoria_detalhes(request, id_diagnostico, id_categoria): instance=diagnostico, category=id_categoria) if form.is_valid(): form.save() + else: + erros = [] + for field in form: + if field.errors: + campo = field.name + erros.append(field.errors) + resposta = { + 'mensagem': 'erro', + 'campo': campo, + 'erros': erros + } + json = simplejson.dumps(resposta) + print json + return HttpResponse(json, mimetype="application/json") else: form = DiagnosticoMobileForm(instance=diagnostico, category=id_categoria) diff --git a/sigi/apps/utils/validators.py b/sigi/apps/utils/validators.py index 6219698..e645609 100644 --- a/sigi/apps/utils/validators.py +++ b/sigi/apps/utils/validators.py @@ -13,3 +13,34 @@ def valida_data(data_inicio, data_final): else: return False +def valida_periodo_data(di01, df01, di02, df02): + """Função responsável por validar dois períodos de datas. + Isso é usado para verificar se determinado servidor exerceu + mais de uma função dentro de determinados períodos descritos + abaixo: + + 1 - A segunda função não pode ter exercido ao mesmo tempo que + a primeira função. Exemplo: + + Primeiro Função: 01/05/2011 -- 01/11/2011 + Segundo Função: 01/05/2011 -- 01/11/2011 + + 2 - A segunda função não pode ter exercido, dentro do período + da primeira função. Exemplo: + + Primeira Função: 01/05/2011 -- 01/11/2011 + Segunda Função: 02/05/2011 -- 30/10/2011 + """ + # Verificando a primeira situação + if di01 == di02 and df01 == df02: + return True + else: + return False + + # Verificando a segunda situação + if di01 >= di02 or df01 <= df02: + return True + else: + return False + + diff --git a/sigi/templates/diagnosticos/diagnosticos_categorias_form.html b/sigi/templates/diagnosticos/diagnosticos_categorias_form.html index b9643b9..703621a 100644 --- a/sigi/templates/diagnosticos/diagnosticos_categorias_form.html +++ b/sigi/templates/diagnosticos/diagnosticos_categorias_form.html @@ -22,7 +22,7 @@