From 44c2775b14343bc30f9adb5b93837fec370ff62a Mon Sep 17 00:00:00 2001 From: Felipe Vieira Date: Thu, 24 Nov 2011 15:02:55 +0000 Subject: [PATCH] adicionando categoria e eav_fieldset de perguntas --- sigi/apps/diagnosticos/admin.py | 37 +++++++++++++++++++++++++++++--- sigi/apps/diagnosticos/models.py | 9 +++++--- sigi/sites.py | 8 ++++--- 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/sigi/apps/diagnosticos/admin.py b/sigi/apps/diagnosticos/admin.py index e79f997..691df27 100644 --- a/sigi/apps/diagnosticos/admin.py +++ b/sigi/apps/diagnosticos/admin.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from django.contrib import admin from eav.admin import BaseEntityAdmin, BaseSchemaAdmin -from sigi.apps.diagnosticos.models import Diagnostico, Pergunta, Escolha, Equipe, Anexo +from sigi.apps.diagnosticos.models import Diagnostico, Pergunta, Escolha, Equipe, Anexo, Categoria from sigi.apps.diagnosticos.forms import DiagnosticoForm class EquipeInline(admin.TabularInline): @@ -26,7 +26,38 @@ class DiagnosticoAdmin(BaseEntityAdmin): inlines = (EquipeInline, AnexosInline) raw_id_fields = ('casa_legislativa',) + # separa as perguntas (title e name) dentro das categorias existente para ordenar + dict_categoria = {} + for pergunta in Pergunta.objects.all(): + if pergunta.categoria: + categoria = pergunta.categoria.nome + else: + categoria = None + + if categoria in dict_categoria.keys(): + dict_categoria[categoria].append((pergunta.title.strip(), pergunta.name)) + else: + dict_categoria[categoria] = [(pergunta.title.strip(), pergunta.name)] + + # cria o eav fieldset ordenando as categorias e as perguntas + # para ser exibido no admin + eav_fieldsets = [] + for categoria in sorted(dict_categoria.keys()): + # ordena as perguntas pelo title e utiliza o name no fieldset + perguntas = [pergunta[1] for pergunta in sorted(dict_categoria[categoria])] + + eav_fieldsets.append((categoria, { + 'fields': tuple(perguntas) + })) + +class PerguntaAdmin (BaseSchemaAdmin): + list_display = ('title', 'categoria', 'datatype', 'help_text', 'required') + +class EscolhaAdmin(admin.ModelAdmin): + list_display = ('title', 'schema') + admin.site.register(Diagnostico, DiagnosticoAdmin) -admin.site.register(Pergunta, BaseSchemaAdmin) -admin.site.register(Escolha) +admin.site.register(Pergunta, PerguntaAdmin) +admin.site.register(Escolha, EscolhaAdmin) admin.site.register(Anexo, AnexoAdmin) +admin.site.register(Categoria) diff --git a/sigi/apps/diagnosticos/models.py b/sigi/apps/diagnosticos/models.py index 3a184c8..771b7d5 100644 --- a/sigi/apps/diagnosticos/models.py +++ b/sigi/apps/diagnosticos/models.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from datetime import datetime from django.db import models +from django.utils.translation import ugettext_lazy as _ from sigi.apps.utils import SearchField from eav.models import BaseChoice, BaseEntity, BaseSchema, BaseAttribute @@ -52,8 +53,9 @@ class Categoria(models.Model): """ Modelo para representar a categoria de uma pergunta e sua ordem na hora de exibir no formulário """ - nome= models.CharField(max_length=50) - ordem = models.PositiveSmallIntegerField(blank=True, null=True) + nome= models.CharField(max_length=255) + def __unicode__(self): + return self.nome class Pergunta(BaseSchema): """ Modelo que representa uma pergunta no questionário @@ -61,7 +63,7 @@ class Pergunta(BaseSchema): Uma pergunta tem o nome e o tipo da resposta """ - categoria = models.ForeignKey(Categoria,blank=True, null=True) + categoria = models.ForeignKey(Categoria) class Meta: verbose_name, verbose_name_plural = 'pergunta', 'perguntas' @@ -70,6 +72,7 @@ class Escolha(BaseChoice): cadastradas neste modelo """ schema = models.ForeignKey(Pergunta, related_name='choices', verbose_name='pergunta') + schema_to_open = models.ForeignKey(Pergunta, related_name='', verbose_name='pergunta para abrir', blank=True, null=True) class Meta: verbose_name, verbose_name_plural = 'escolha', 'escolhas' diff --git a/sigi/sites.py b/sigi/sites.py index 2bd2404..0b48749 100644 --- a/sigi/sites.py +++ b/sigi/sites.py @@ -24,8 +24,9 @@ from sigi.apps.mesas.admin import (Legislatura, LegislaturaAdmin, Coligacao, from sigi.apps.parlamentares.admin import (Partido, PartidoAdmin, Parlamentar, ParlamentarAdmin, Mandato, MandatoAdmin) from sigi.apps.diagnosticos.admin import (Diagnostico, DiagnosticoAdmin, Pergunta, - BaseSchemaAdmin, Escolha, Anexo as AnexoDiagnostico, - AnexoAdmin as AnexoDiagnosticoAdmin) + PerguntaAdmin, Escolha, Anexo as AnexoDiagnostico, + AnexoAdmin as AnexoDiagnosticoAdmin, Categoria as + CategoriaDiagnostico) from sigi.apps.servidores.admin import (Servidor, ServidorAdmin, Funcao, FuncaoAdmin, Ferias, FeriasAdmin, Licenca, LicencaAdmin) from sigi.apps.ocorrencias.admin import (Ocorrencia, OcorrenciaAdmin, Anexo as AnexoOcorrencia, @@ -93,9 +94,10 @@ default.register(Mandato, MandatoAdmin) # sigi.apps.diagnosticos default.register(Diagnostico, DiagnosticoAdmin) -default.register(Pergunta, BaseSchemaAdmin) +default.register(Pergunta, PerguntaAdmin) default.register(Escolha) default.register(AnexoDiagnostico, AnexoDiagnosticoAdmin) +default.register(CategoriaDiagnostico) # sigi.apps.servidores default.register(Servidor, ServidorAdmin)