mirror of https://github.com/interlegis/sigi.git
Gilson Filho
13 years ago
8 changed files with 195 additions and 16 deletions
@ -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 |
|||
|
@ -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 %} |
@ -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 %} |
@ -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…
Reference in new issue