mirror of https://github.com/interlegis/sigi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
7.1 KiB
193 lines
7.1 KiB
# -*- 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.diagnosticos.urls import LOGIN_REDIRECT_URL
|
|
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
|
|
from sigi.apps.diagnosticos.forms import (DiagnosticoMobileForm,
|
|
CasaLegislativaMobileForm, FuncionariosMobileForm)
|
|
|
|
|
|
@cache_page(5)
|
|
@login_required(login_url=LOGIN_REDIRECT_URL)
|
|
def lista(request):
|
|
"""Consulta os diagnosticos do servidor logado,
|
|
que contenham o status de não publicado.
|
|
"""
|
|
try:
|
|
servidor = request.user.get_profile()
|
|
diagnosticos = servidor.get_diagnosticos(publicado=False)
|
|
context = RequestContext(request, {'diagnosticos': diagnosticos})
|
|
return render_to_response('diagnosticos/diagnosticos_list.html', context)
|
|
except Servidor.DoesNotExist:
|
|
msg = "Para acessar os diagnóstico você precisa ter um servidor cadastrado na sua conta."
|
|
context = RequestContext(request, {'msg': msg})
|
|
return render_to_response('mobile/404.html', context)
|
|
|
|
|
|
@cache_page(5)
|
|
@validate_diagnostico
|
|
@login_required(login_url=LOGIN_REDIRECT_URL)
|
|
def categorias(request, id_diagnostico):
|
|
"""Consulta as categorias do diagnostico selecionado
|
|
a partir da sua identificação
|
|
"""
|
|
categorias = Categoria.objects.all()
|
|
diagnostico = Diagnostico.objects.get(pk=id_diagnostico)
|
|
|
|
# Estilizando a lista de categorias para que ajude a identificar
|
|
# qual categoria foi a ultima a ser usada, como também as outras
|
|
# que ainda não foram acessadas
|
|
ultima_categoria = request.session.get('ultima_categoria', 0)
|
|
|
|
context = RequestContext(request, {'categorias': categorias,
|
|
'diagnostico': diagnostico, 'ultima_categoria': ultima_categoria})
|
|
return render_to_response('diagnosticos/diagnosticos_categorias_list.html',
|
|
context)
|
|
|
|
|
|
@cache_page(5)
|
|
@validate_diagnostico
|
|
@login_required(login_url=LOGIN_REDIRECT_URL)
|
|
def categoria_detalhes(request, id_diagnostico, id_categoria):
|
|
"""Captura as perguntas da categoria
|
|
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.
|
|
"""
|
|
|
|
# Grava na sessão a categoria atual, para destacar que
|
|
# era foi a última visitada.
|
|
request.session['ultima_categoria'] = int(id_categoria)
|
|
|
|
try:
|
|
categoria = Categoria.objects.get(pk=id_categoria)
|
|
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)
|
|
if form.is_valid():
|
|
form.save()
|
|
resposta = {
|
|
'mensagem': 'sucesso'
|
|
}
|
|
else:
|
|
# Montando a estrutura das mensagens de erro no formato JSON
|
|
resposta = {
|
|
'mensagem': 'erro',
|
|
'erros': form.errors
|
|
}
|
|
json = simplejson.dumps(resposta)
|
|
return HttpResponse(json, mimetype="application/json")
|
|
else:
|
|
form = DiagnosticoMobileForm(instance=diagnostico,
|
|
category=id_categoria)
|
|
|
|
context = RequestContext(request, {'form': form, 'categoria': categoria,
|
|
'diagnostico': diagnostico})
|
|
return render_to_response('diagnosticos/diagnosticos_categorias_form.html',
|
|
context)
|
|
|
|
|
|
@cache_page(5)
|
|
@validate_diagnostico
|
|
@login_required(login_url=LOGIN_REDIRECT_URL)
|
|
def categoria_casa_legislativa(request, id_diagnostico):
|
|
|
|
# Grava na sessão a categoria atual, para destacar que
|
|
# era foi a última visitada.
|
|
request.session['ultima_categoria'] = 1
|
|
|
|
diagnostico = Diagnostico.objects.get(pk=id_diagnostico)
|
|
casa_legislativa = diagnostico.casa_legislativa
|
|
|
|
if request.method == "POST":
|
|
form = CasaLegislativaMobileForm(request.POST,
|
|
instance=casa_legislativa)
|
|
if form.is_valid():
|
|
form.save()
|
|
resposta = {
|
|
'mensagem': 'sucesso'
|
|
}
|
|
else:
|
|
# Montando a estrutura das mensagens de erro no formato JSON
|
|
resposta = {
|
|
'mensagem': 'erro',
|
|
'erros': form.errors
|
|
}
|
|
json = simplejson.dumps(resposta)
|
|
return HttpResponse(json, mimetype="application/json")
|
|
else:
|
|
form = CasaLegislativaMobileForm(instance=casa_legislativa)
|
|
|
|
context = RequestContext(request, {'form': form,
|
|
'diagnostico': diagnostico, 'casa_legislativa': casa_legislativa})
|
|
return render_to_response(
|
|
'diagnosticos/diagnosticos_categoria_casa_legislativa_form.html',
|
|
context)
|
|
|
|
|
|
@cache_page(5)
|
|
@validate_diagnostico
|
|
@login_required(login_url=LOGIN_REDIRECT_URL)
|
|
def categoria_contatos(request, id_diagnostico):
|
|
|
|
# Grava na sessão a categoria atual, para destacar que
|
|
# era foi a última visitada.
|
|
request.session['ultima_categoria'] = 2
|
|
|
|
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":
|
|
forms = [FuncionariosMobileForm(
|
|
request.POST, prefix=f.setor, instance=f) for f, c in funcionarios]
|
|
|
|
resposta = {
|
|
'mensagem': 'sucesso',
|
|
'erros' : {}
|
|
}
|
|
|
|
# valida e salva um formulario por vez
|
|
for form in forms:
|
|
if form.is_valid():
|
|
form.save()
|
|
else:
|
|
# Montando a estrutura das mensagens de erro no formato JSON
|
|
resposta['mensagem'] = 'erro'
|
|
resposta['erros'].update(form.errors)
|
|
for form_telefones in form.telefones.forms:
|
|
for key, value in form_telefones.errors.iteritems():
|
|
key = form_telefones.prefix + "-" + key
|
|
resposta['erros'][key] = value
|
|
|
|
json = simplejson.dumps(resposta)
|
|
return HttpResponse(json, mimetype="application/json")
|
|
else:
|
|
forms = [FuncionariosMobileForm(prefix=f.setor, instance=f)
|
|
for f, c in funcionarios]
|
|
|
|
context = RequestContext(request, {'forms': forms,
|
|
'diagnostico': diagnostico, 'casa_legislativa': casa_legislativa})
|
|
return render_to_response('diagnosticos/diagnosticos_categoria_contatos_form.html',
|
|
context)
|
|
|