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 models import Diagnostico |
||||
from eav.forms import BaseDynamicEntityForm |
from eav.forms import BaseDynamicEntityForm |
||||
|
|
||||
|
|
||||
class DiagnosticoForm(BaseDynamicEntityForm): |
class DiagnosticoForm(BaseDynamicEntityForm): |
||||
|
"""Classe responsável por contruir o formulário, |
||||
|
vinculando ao modelo Diagnostico |
||||
|
""" |
||||
model = 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