Browse Source

Mudando o decorator para um lugar apropriado, como também inserindo um ID para ser usado ao renderizar a mensagem de erro do campo via AJAX

diagnosticos
Gilson Filho 13 years ago
parent
commit
ec45ccf295
  1. 25
      sigi/apps/diagnosticos/decorators.py
  2. 46
      sigi/apps/diagnosticos/views.py
  3. 31
      sigi/apps/utils/validators.py
  4. 2
      sigi/templates/diagnosticos/diagnosticos_categorias_form.html

25
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

46
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)

31
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

2
sigi/templates/diagnosticos/diagnosticos_categorias_form.html

@ -22,7 +22,7 @@
<div id="form" style="display:none;">
<form id="diagnostico" action="." method="post">
{% for field in form %}
<div data-role="fieldcontain">
<div data-role="fieldcontain" id="{{ field.name }}">
<label for="{{ field.name }}">{{ field.label }}</label>
{{ field }}
</div>

Loading…
Cancel
Save