Browse Source

Inserindo as perguntas e classificando-as em categorias, como estão devidamente relacionadas.

diagnosticos
Gilson Filho 13 years ago
parent
commit
42a0a9a3bd
  1. 67
      sigi/apps/diagnosticos/forms.py
  2. 3
      sigi/apps/diagnosticos/models.py
  3. 9
      sigi/apps/diagnosticos/urls.py
  4. 35
      sigi/apps/diagnosticos/views.py
  5. 33
      sigi/templates/diagnosticos/diagnosticos_categorias_form.html
  6. 32
      sigi/templates/diagnosticos/diagnosticos_categorias_list.html
  7. 15
      sigi/templates/diagnosticos/diagnosticos_list.html
  8. 15
      sigi/templates/mobile/404.html

67
sigi/apps/diagnosticos/forms.py

@ -1,5 +1,72 @@
# -*- coding: utf8 -*-
from copy import deepcopy
from models import Diagnostico
from eav.forms import BaseDynamicEntityForm
class DiagnosticoForm(BaseDynamicEntityForm):
"""Classe responsável por contruir o formulário,
vinculando ao modelo Diagnostico
"""
model = Diagnostico
class DiagnosticoMobileForm(BaseDynamicEntityForm):
"""Classe responsável por construir o formulário
para ser usado no ambiente mobile, a partir do
do modelo Diagnostico, como também organizar sua
estrutura via categorias.
"""
class Meta:
model = Diagnostico
def __init__(self, data=None, category=None, *args, **kwargs):
super(BaseDynamicEntityForm, self).__init__(data, *args, **kwargs)
self._build_dynamics_fields(category)
def _build_dynamics_fields(self, category):
"""Método da classe ``BaseDynamicEntityForm`` sobrescrita,
para que as perguntas sejam agrupadas dentro das suas
categorias.
"""
# Caso seja as duas primeiras categorias, utilize
# os campos do modelo
if category in (0, 1, ):
self.fields = deepcopy(self.base_fields)
else:
self.field = dict()
# Se determinada pergunta é da categoria pesquisada,
# então, gere o campo no formulário.
for schema in self.instance.get_schemata():
if not schema.categoria_id == int(category):
continue
defaults = {
'label': schema.title.capitalize(),
'required': schema.required,
'help_text': schema.help_text,
}
datatype = schema.datatype
if datatype == schema.TYPE_MANY:
choices = getattr(self.instance, schema.name)
defaults.update({'queryset': schema.get_choices(),
'initial': [x.pk for x in choices]})
extra = self.FIELD_EXTRA.get(datatype, {})
if hasattr(extra, '__call__'):
extra = extra(schema)
defaults.update(extra)
MappedField = self.FIELD_CLASSES[datatype]
self.fields[schema.name] = MappedField(**defaults)
# fill initial data (if attribute was already defined)
value = getattr(self.instance, schema.name)
# m2m is already done above
if value and not datatype == schema.TYPE_MANY:
self.initial[schema.name] = value

3
sigi/apps/diagnosticos/models.py

@ -32,6 +32,7 @@ class Diagnostico(BaseEntity):
null=True,
blank=True
)
status = models.BooleanField(u'status do diagnóstico', default=False)
responsavel = models.ForeignKey('servidores.Servidor', verbose_name=u'responsável')
class Meta:
@ -61,7 +62,7 @@ class Pergunta(BaseSchema):
Uma pergunta tem o nome e o tipo da resposta
"""
categoria = models.ForeignKey(Categoria)
categoria = models.ForeignKey(Categoria, related_name='perguntas')
class Meta:
ordering = ('title',)

9
sigi/apps/diagnosticos/urls.py

@ -2,5 +2,14 @@
from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('',
# Lista de Diagnósticos
url(r'^$', 'sigi.apps.diagnosticos.views.lista', name='lista_diagnosticos'),
# Lista de Categorias
url(r'^(?P<id_diagnostico>\d+)/categorias/$', 'sigi.apps.diagnosticos.views.categorias', name='lista_categorias'),
# Detalhes da Categoria
url(r'^(?P<id_diagnostico>\d+)/categorias/(?P<id_categoria>\d+)/$',
'sigi.apps.diagnosticos.views.categoria_detalhes',
name='detalhes_categoria'),
)

35
sigi/apps/diagnosticos/views.py

@ -3,7 +3,8 @@
from django.shortcuts import render_to_response
from django.template import RequestContext
from sigi.apps.diagnosticos.models import Diagnostico
from sigi.apps.diagnosticos.models import Diagnostico, Categoria
from sigi.apps.diagnosticos.forms import DiagnosticoMobileForm
def lista(request):
@ -17,3 +18,35 @@ def lista(request):
context = RequestContext(request, {'diagnosticos': diagnosticos})
return render_to_response('diagnosticos/diagnosticos_list.html', context)
def categorias(request, id_diagnostico):
"""Consulta as categorias do diagnostico selecionado
a partir da sua identificação
"""
categorias = Categoria.objects.all()
context = RequestContext(request, {'categorias': categorias,
'diagnostico': id_diagnostico})
return render_to_response('diagnosticos/diagnosticos_categorias_list.html',
context)
def categoria_detalhes(request, id_diagnostico, id_categoria):
"""Captura as perguntas da categoria
selecionada.
"""
try:
diagnostico = Diagnostico.objects.get(pk=id_diagnostico)
categoria = Categoria.objects.get(pk=id_categoria)
except Diagnostico.DoesNotExist, Categoria.DoesNotExist:
context = RequestContext(request)
return render_to_response('mobile/404.html', {})
# Criando o formulário e passando o diagnóstico selecionado
# para ser editado pelo form.
form = DiagnosticoMobileForm(instance=diagnostico, category=id_categoria)
context = RequestContext(request, {'form': form, 'categoria': categoria})
return render_to_response('diagnosticos/diagnosticos_categorias_form.html',
context)

33
sigi/templates/diagnosticos/diagnosticos_categorias_form.html

@ -0,0 +1,33 @@
{% extends "base_mobile.html" %}
{% block cabecalho %}
<h1>{{ categoria.nome }}</h1>
<a href="{% url lista_categorias categoria.id %}" data-icon="arrow-l"
data-direction="reverse" data-theme="c" class="ui-btn-left">Voltar</a>
{% endblock cabecalho %}
{% block corpo %}
{% if form %}
<form action="." method="post">
{% for field in form %}
<div data-role="fieldcontain">
<label for="{{ field.name }}">{{ field.label }}</label>
{{ field }}
</div>
{% endfor %}
</form>
{% else %}
<h2>Nenhuma existem perguntas para essa categoria.</h2>
{% endif %}
{% endblock corpo %}
{% block rodape %}
<div data-role="footer" data-position="fixed">
<div data-role="navbar">
<ul>
<li><a href="{% url lista_categorias categoria.id %}" data-icon="grid" class="ui-state-persist ui-btn-active">Listar</a></li>
<li><a href="{% url lista_diagnosticos %}" data-icon="home">Home</a></li>
</ul>
</div>
</div> <!-- footer -->
{% endblock rodape %}

32
sigi/templates/diagnosticos/diagnosticos_categorias_list.html

@ -0,0 +1,32 @@
{% extends "base_mobile.html" %}
{% block cabecalho %}
<h1>Categorias</h1>
<a href="{% url lista_diagnosticos %}" data-icon="arrow-l" data-direction="reverse" data-theme="c" class="ui-btn-left">Voltar</a>
{% endblock cabecalho %}
{% block corpo %}
{% if categorias %}
<ul data-role="listview">
{% for categoria in categorias %}
<li>
<a href="{% url detalhes_categoria diagnostico categoria.id %}">
<h4>{{ categoria.nome }}</h4>
</a>
</li>
{% endfor %}
</ul>
{% else %}
<h2>Nenhuma categoria existente.</h2>
{% endif %}
{% endblock corpo %}
{% block rodape %}
<div data-role="footer" data-position="fixed">
<div data-role="navbar">
<ul>
<li><a href="{% url lista_diagnosticos %}" data-icon="home">Home</a></li>
</ul>
</div>
</div> <!-- footer -->
{% endblock rodape %}

15
sigi/templates/diagnosticos/diagnosticos_list.html

@ -8,10 +8,9 @@
{% block corpo %}
{% if diagnosticos %}
<ul data-role="listview">
{% for diagnostico in diagnosticos %}
<li>
<a href="#">
<a href="{% url lista_categorias diagnostico.id %}">
<h4>{{ diagnostico.casa_legislativa.nome }}</h4>
<p><strong>Data:</strong> {{ diagnostico.data_questionario|date:"d/m/Y" }}</p>
<p><strong>Responsável:</strong> Nenhum Ainda</p>
@ -24,14 +23,4 @@
{% endif %}
{% endblock corpo %}
{% block rodape %}
<div data-role="footer" data-position="fixed">
<div data-role="navbar">
<ul>
<li><a href="#" data-icon="grid" class="ui-state-persist">Listar</a></li>
<li><a href="#" data-icon="home" class="ui-btn-active">Home</a></li>
<li><a href="#" data-icon="plus">Anexar Arquivos</a></li>
</ul>
</div>
</div> <!-- footer -->
{% endblock rodape %}
{% block rodape %}{% endblock rodape %}

15
sigi/templates/mobile/404.html

@ -0,0 +1,15 @@
{% extends "base_mobile.html" %}
{% block cabecalho %}
<h1>Ocorreu um erro</h1>
{% endblock cabecalho %}
{% block corpo %}
<p>A página que está procurando não existe. </p>
<p>Verifique se o diagnóstico, categoria ou pergunta está cadastrado no sistema.</p>
<a href="{% url lista_diagnosticos %}" data-icon="arrow-l"
data-direction="reverse" data-role="button" data-theme="c" class="ui-btn-left">Voltar</a>
{% endblock corpo %}
{% block rodape %}
{% endblock rodape %}
Loading…
Cancel
Save