Browse Source

Apply autopep8

autopep8 --in-place --exclude migrations -r .
pull/6/head
Marcio Mazza 10 years ago
parent
commit
529146a7e8
  1. 12
      base/models.py
  2. 63
      comissoes/models.py
  3. 2
      comissoes/urls.py
  4. 3
      comissoes/views.py
  5. 9
      legacy/migration.py
  6. 36
      legacy/models.py
  7. 21
      legacy/scripts/scrap_original_forms.py
  8. 7
      legacy/scripts/study.py
  9. 24
      lexml/models.py
  10. 201
      materia/models.py
  11. 72
      norma/models.py
  12. 149
      parlamentares/models.py
  13. 77
      protocoloadm/models.py
  14. 3
      sapl/urls.py
  15. 3
      sapl/utils.py
  16. 38
      sessao/models.py

12
base/models.py

@ -14,13 +14,17 @@ class CasaLegislativa(models.Model):
uf = models.CharField(max_length=100, verbose_name=_('UF'))
telefone = models.CharField(max_length=100, verbose_name=_('Telefone'))
fax = models.CharField(max_length=100, verbose_name=_('Fax'))
cor_fundo = models.CharField(max_length=100, verbose_name=_('Cor de fundo'))
cor_borda = models.CharField(max_length=100, verbose_name=_('Cor da borda'))
cor_principal = models.CharField(max_length=100, verbose_name=_('Cor principal'))
cor_fundo = models.CharField(
max_length=100, verbose_name=_('Cor de fundo'))
cor_borda = models.CharField(
max_length=100, verbose_name=_('Cor da borda'))
cor_principal = models.CharField(
max_length=100, verbose_name=_('Cor principal'))
logotipo = models.CharField(max_length=100, verbose_name=_('Logotipo'))
endereco_web = models.CharField(max_length=100, verbose_name=_('HomePage'))
email = models.CharField(max_length=100, verbose_name=_('E-mail'))
informacao_geral = models.CharField(max_length=100, verbose_name=_('Informação Geral'))
informacao_geral = models.CharField(
max_length=100, verbose_name=_('Informação Geral'))
class Meta:
verbose_name = _('Casa Legislativa')

63
comissoes/models.py

@ -12,9 +12,11 @@ class TipoComissao(models.Model):
'P', _('Permanente'),
)
nome = models.CharField(max_length=50, verbose_name=_('Nome'))
natureza = models.CharField(max_length=1, verbose_name=_('Natureza'), choices=NATUREZA_CHOICES)
natureza = models.CharField(
max_length=1, verbose_name=_('Natureza'), choices=NATUREZA_CHOICES)
sigla = models.CharField(max_length=10, verbose_name=_('Sigla'))
dispositivo_regimental = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Dispositivo Regimental'))
dispositivo_regimental = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Dispositivo Regimental'))
class Meta:
verbose_name = _('Tipo de Comissão')
@ -29,21 +31,36 @@ class Comissao(models.Model):
nome = models.CharField(max_length=60, verbose_name=_('Nome'))
sigla = models.CharField(max_length=10, verbose_name=_('Sigla'))
data_criacao = models.DateField(verbose_name=_('Data de Criação'))
data_extincao = models.DateField(blank=True, null=True, verbose_name=_('Data de Extinção'))
apelido_temp = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('Apelido'))
data_instalacao_temp = models.DateField(blank=True, null=True, verbose_name=_('Data Instalação'))
data_final_prevista_temp = models.DateField(blank=True, null=True, verbose_name=_('Data Prevista Término'))
data_prorrogada_temp = models.DateField(blank=True, null=True, verbose_name=_('Novo Prazo'))
data_fim_comissao = models.DateField(blank=True, null=True, verbose_name=_('Data Término'))
secretario = models.CharField(max_length=30, blank=True, null=True, verbose_name=_('Secretário'))
telefone_reuniao = models.CharField(max_length=15, blank=True, null=True, verbose_name=_('Tel. Sala Reunião'))
endereco_secretaria = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('Endereço Secretaria'))
telefone_secretaria = models.CharField(max_length=15, blank=True, null=True, verbose_name=_('Tel. Secretaria'))
fax_secretaria = models.CharField(max_length=15, blank=True, null=True, verbose_name=_('Fax Secretaria'))
agenda_reuniao = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('Data/Hora Reunião'))
local_reuniao = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('Local Reunião'))
finalidade = models.TextField(blank=True, null=True, verbose_name=_('Finalidade'))
email = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('E-mail'))
data_extincao = models.DateField(
blank=True, null=True, verbose_name=_('Data de Extinção'))
apelido_temp = models.CharField(
max_length=100, blank=True, null=True, verbose_name=_('Apelido'))
data_instalacao_temp = models.DateField(
blank=True, null=True, verbose_name=_('Data Instalação'))
data_final_prevista_temp = models.DateField(
blank=True, null=True, verbose_name=_('Data Prevista Término'))
data_prorrogada_temp = models.DateField(
blank=True, null=True, verbose_name=_('Novo Prazo'))
data_fim_comissao = models.DateField(
blank=True, null=True, verbose_name=_('Data Término'))
secretario = models.CharField(
max_length=30, blank=True, null=True, verbose_name=_('Secretário'))
telefone_reuniao = models.CharField(
max_length=15, blank=True, null=True, verbose_name=_('Tel. Sala Reunião'))
endereco_secretaria = models.CharField(
max_length=100, blank=True, null=True, verbose_name=_('Endereço Secretaria'))
telefone_secretaria = models.CharField(
max_length=15, blank=True, null=True, verbose_name=_('Tel. Secretaria'))
fax_secretaria = models.CharField(
max_length=15, blank=True, null=True, verbose_name=_('Fax Secretaria'))
agenda_reuniao = models.CharField(
max_length=100, blank=True, null=True, verbose_name=_('Data/Hora Reunião'))
local_reuniao = models.CharField(
max_length=100, blank=True, null=True, verbose_name=_('Local Reunião'))
finalidade = models.TextField(
blank=True, null=True, verbose_name=_('Finalidade'))
email = models.CharField(
max_length=100, blank=True, null=True, verbose_name=_('E-mail'))
unidade_deliberativa = models.BooleanField()
class Meta:
@ -56,7 +73,8 @@ class Comissao(models.Model):
class Periodo(models.Model): # PeriodoCompComissao
data_inicio = models.DateField(verbose_name=_('Data Início'))
data_fim = models.DateField(blank=True, null=True, verbose_name=_('Data Fim'))
data_fim = models.DateField(
blank=True, null=True, verbose_name=_('Data Fim'))
class Meta:
verbose_name = _('Período de composição de Comissão')
@ -96,9 +114,12 @@ class Participacao(models.Model): # ComposicaoComissao
cargo = models.ForeignKey(CargoComissao)
titular = models.BooleanField(verbose_name=_('Titular'))
data_designacao = models.DateField(verbose_name=_('Data Designação'))
data_desligamento = models.DateField(blank=True, null=True, verbose_name=_('Data Desligamento'))
motivo_desligamento = models.CharField(max_length=150, blank=True, null=True, verbose_name=_('Motivo Desligamento'))
observacao = models.CharField(max_length=150, blank=True, null=True, verbose_name=_('Observação'))
data_desligamento = models.DateField(
blank=True, null=True, verbose_name=_('Data Desligamento'))
motivo_desligamento = models.CharField(
max_length=150, blank=True, null=True, verbose_name=_('Motivo Desligamento'))
observacao = models.CharField(
max_length=150, blank=True, null=True, verbose_name=_('Observação'))
class Meta:
verbose_name = _('Participação em Comissão')

2
comissoes/urls.py

@ -1,7 +1,7 @@
from django.conf.urls import patterns, url
from comissoes.views import (ListaComissoes,
CriarComissao)
CriarComissao)
urlpatterns = patterns(
'comissoes.views',

3
comissoes/views.py

@ -4,17 +4,20 @@ from django.shortcuts import render, get_object_or_404
from comissoes.models import Comissao
class ListaComissoes(ListView):
model = Comissao
context_object_name = 'comissoes'
template_name = 'comissoes/lista_comissao.html'
class CriarComissao(CreateView):
model = Comissao
success_url = reverse_lazy('ListaComissoes')
#template_name = 'comissoes/criar_comissao.html'
#fields = ['']
class DetalheComissao(ListView):
model = Comissao
context_object_name = 'comissoes'

9
legacy/migration.py

@ -48,7 +48,8 @@ def get_renames():
field_renames = {}
model_renames = {}
for app in appconfs:
app_rename_data = yaml.load(pkg_resources.resource_string(app.module.__name__, 'legacy.yaml'))
app_rename_data = yaml.load(
pkg_resources.resource_string(app.module.__name__, 'legacy.yaml'))
for model_name, renames in app_rename_data.items():
match = MODEL_RENAME_PATTERN.match(model_name)
if match:
@ -118,7 +119,8 @@ def get_participacao_composicao(obj):
model_field = Composicao._meta.get_field(new_field)
value = get_fk_related(model_field, value)
setattr(new, new_field, value)
previous = Composicao.objects.filter(comissao=new.comissao, periodo=new.periodo)
previous = Composicao.objects.filter(
comissao=new.comissao, periodo=new.periodo)
if previous:
assert len(previous) == 1
return previous[0]
@ -240,7 +242,8 @@ class DataMigrator(object):
for item in obj:
self._do_migrate(item)
else:
raise TypeError('Parameter must be a Model, AppConfig or a sequence of them')
raise TypeError(
'Parameter must be a Model, AppConfig or a sequence of them')
def migrate_model(self, model):
print('Migrating %s...' % model.__name__)

36
legacy/models.py

@ -139,7 +139,8 @@ class Comissao(models.Model):
end_secretaria = models.CharField(max_length=100, blank=True, null=True)
num_tel_secretaria = models.CharField(max_length=15, blank=True, null=True)
num_fax_secretaria = models.CharField(max_length=15, blank=True, null=True)
des_agenda_reuniao = models.CharField(max_length=100, blank=True, null=True)
des_agenda_reuniao = models.CharField(
max_length=100, blank=True, null=True)
loc_reuniao = models.CharField(max_length=100, blank=True, null=True)
txt_finalidade = models.TextField(blank=True, null=True)
end_email = models.CharField(max_length=100, blank=True, null=True)
@ -171,7 +172,8 @@ class ComposicaoComissao(models.Model):
ind_titular = models.IntegerField()
dat_designacao = models.DateField()
dat_desligamento = models.DateField(blank=True, null=True)
des_motivo_desligamento = models.CharField(max_length=150, blank=True, null=True)
des_motivo_desligamento = models.CharField(
max_length=150, blank=True, null=True)
obs_composicao = models.CharField(max_length=150, blank=True, null=True)
ind_excluido = models.IntegerField()
@ -227,7 +229,8 @@ class DocumentoAcessorio(models.Model):
tip_documento = models.IntegerField()
nom_documento = models.CharField(max_length=30)
dat_documento = models.DateField(blank=True, null=True)
nom_autor_documento = models.CharField(max_length=50, blank=True, null=True)
nom_autor_documento = models.CharField(
max_length=50, blank=True, null=True)
txt_ementa = models.TextField(blank=True, null=True)
txt_indexacao = models.TextField(blank=True, null=True)
ind_excluido = models.IntegerField()
@ -244,7 +247,8 @@ class DocumentoAcessorioAdministrativo(models.Model):
nom_documento = models.CharField(max_length=30)
nom_arquivo = models.CharField(max_length=100)
dat_documento = models.DateField(blank=True, null=True)
nom_autor_documento = models.CharField(max_length=50, blank=True, null=True)
nom_autor_documento = models.CharField(
max_length=50, blank=True, null=True)
txt_assunto = models.TextField(blank=True, null=True)
txt_indexacao = models.TextField(blank=True, null=True)
ind_excluido = models.IntegerField()
@ -385,7 +389,8 @@ class LexmlRegistroPublicador(models.Model):
class Localidade(models.Model):
cod_localidade = models.IntegerField(primary_key=True)
nom_localidade = models.CharField(max_length=50, blank=True, null=True)
nom_localidade_pesq = models.CharField(max_length=50, blank=True, null=True)
nom_localidade_pesq = models.CharField(
max_length=50, blank=True, null=True)
tip_localidade = models.CharField(max_length=1, blank=True, null=True)
sgl_uf = models.CharField(max_length=2, blank=True, null=True)
sgl_regiao = models.CharField(max_length=2, blank=True, null=True)
@ -468,7 +473,8 @@ class MesaSessaoPlenaria(models.Model):
class Meta:
managed = False
db_table = 'mesa_sessao_plenaria'
unique_together = (('cod_cargo', 'cod_sessao_leg', 'cod_parlamentar', 'cod_sessao_plen'),)
unique_together = (
('cod_cargo', 'cod_sessao_leg', 'cod_parlamentar', 'cod_sessao_plen'),)
class NivelInstrucao(models.Model):
@ -490,7 +496,8 @@ class NormaJuridica(models.Model):
tip_esfera_federacao = models.CharField(max_length=1)
dat_norma = models.DateField(blank=True, null=True)
dat_publicacao = models.DateField(blank=True, null=True)
des_veiculo_publicacao = models.CharField(max_length=30, blank=True, null=True)
des_veiculo_publicacao = models.CharField(
max_length=30, blank=True, null=True)
num_pag_inicio_publ = models.IntegerField(blank=True, null=True)
num_pag_fim_publ = models.IntegerField(blank=True, null=True)
txt_ementa = models.TextField()
@ -627,9 +634,12 @@ class Parlamentar(models.Model):
num_rg = models.CharField(max_length=15, blank=True, null=True)
num_tit_eleitor = models.CharField(max_length=15, blank=True, null=True)
cod_casa = models.IntegerField()
num_gab_parlamentar = models.CharField(max_length=10, blank=True, null=True)
num_tel_parlamentar = models.CharField(max_length=50, blank=True, null=True)
num_fax_parlamentar = models.CharField(max_length=50, blank=True, null=True)
num_gab_parlamentar = models.CharField(
max_length=10, blank=True, null=True)
num_tel_parlamentar = models.CharField(
max_length=50, blank=True, null=True)
num_fax_parlamentar = models.CharField(
max_length=50, blank=True, null=True)
end_residencial = models.CharField(max_length=100, blank=True, null=True)
cod_localidade_resid = models.IntegerField(blank=True, null=True)
num_cep_resid = models.CharField(max_length=9, blank=True, null=True)
@ -683,7 +693,8 @@ class Proposicao(models.Model):
txt_descricao = models.CharField(max_length=100)
cod_mat_ou_doc = models.IntegerField(blank=True, null=True)
dat_devolucao = models.DateTimeField(blank=True, null=True)
txt_justif_devolucao = models.CharField(max_length=200, blank=True, null=True)
txt_justif_devolucao = models.CharField(
max_length=200, blank=True, null=True)
num_proposicao = models.IntegerField(blank=True, null=True)
ind_excluido = models.IntegerField()
@ -876,7 +887,8 @@ class TipoComissao(models.Model):
nom_tipo_comissao = models.CharField(max_length=50)
sgl_natureza_comissao = models.CharField(max_length=1)
sgl_tipo_comissao = models.CharField(max_length=10)
des_dispositivo_regimental = models.CharField(max_length=50, blank=True, null=True)
des_dispositivo_regimental = models.CharField(
max_length=50, blank=True, null=True)
ind_excluido = models.IntegerField()
class Meta:

21
legacy/scripts/scrap_original_forms.py

@ -11,15 +11,18 @@ from .migration import appconfs
from .utils import listify, getsourcelines
assert appconfs # to prevent removal by automatic organize imports on this file
# to prevent removal by automatic organize imports on this file
assert appconfs
def _read_line(tr):
for td in tr.find_all('td'):
label = td.text.strip().split('\n')[0].strip('\xa0' + string.whitespace)
label = td.text.strip().split('\n')[0].strip(
'\xa0' + string.whitespace)
if label.endswith('(*)'):
label = label[:-3].strip()
names = [c.attrs['name'] for c in td.findAll() if isinstance(c, Tag) and 'name' in c.attrs]
names = [c.attrs['name']
for c in td.findAll() if isinstance(c, Tag) and 'name' in c.attrs]
if names:
name = names[0].split('_', 1)[-1]
yield name, label
@ -41,7 +44,8 @@ def extract_title_and_fieldsets(model):
# children are either tags or strings...
assert set(type(c) for c in form.children) == {Tag, NavigableString}
# ... and all strings are empty
assert all(not c.strip() for c in form.children if isinstance(c, NavigableString))
assert all(not c.strip()
for c in form.children if isinstance(c, NavigableString))
title = soup.find('h1', {'class': 'firstHeading'})
title = title.text.strip() if title else None
@ -66,7 +70,8 @@ def print_title_and_fieldsets(model):
for fieldset in fieldsets:
print(fieldset['legend'])
for line in fieldset['lines']:
print(' ' + ' | '.join('%s : %s' % (id, label) for id, label in line))
print(' ' + ' | '.join('%s : %s' % (id, label)
for id, label in line))
def extract_verbose_names(model):
@ -143,10 +148,12 @@ def source_with_verbose_names(model):
title_singular = ' '.join(re.findall('[A-Z][^A-Z]*', model.__name__))
title_singular = re.sub('cao\\b', 'ção', title_singular)
title_singular = re.sub('ao\\b', 'ão', title_singular)
title_plural = add_s(title_singular.replace('ção', 'ções').replace('ão', 'ões'))
title_plural = add_s(
title_singular.replace('ção', 'ções').replace('ão', 'ões'))
elif title.endswith('s'):
title_singular = remove_s(title.replace('ções', 'ção').replace('ões', 'ão'))
title_singular = remove_s(
title.replace('ções', 'ção').replace('ões', 'ão'))
title_plural = title
else:
title_singular = title

7
legacy/scripts/study.py

@ -5,6 +5,9 @@ from .migration_base import legacy_app
for model in apps.get_app_config('legacy').get_models():
if 'ind_excluido' in [f.name for f in model._meta.fields]:
print(model, model.objects.values_list('ind_excluido', flat=True).distinct())
print(model, model.objects.values_list(
'ind_excluido', flat=True).distinct())
legacy_models_without_ind_excluido = [m for m in legacy_app.models.values() if not any(f.name == 'ind_excluido' for f in m._meta.fields)]
legacy_models_without_ind_excluido = [
m for m in legacy_app.models.values()
if not any(f.name == 'ind_excluido' for f in m._meta.fields)]

24
lexml/models.py

@ -7,11 +7,15 @@ class LexmlProvedor(models.Model): # LexmlRegistroProvedor
id_provedor = models.IntegerField(verbose_name=_('Id do provedor'))
nome = models.CharField(max_length=255, verbose_name=_('Nome do provedor'))
sigla = models.CharField(max_length=15)
email_responsavel = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('E-mail do responsável'))
nome_responsavel = models.CharField(max_length=255, blank=True, null=True, verbose_name=_('Nome do responsável'))
email_responsavel = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('E-mail do responsável'))
nome_responsavel = models.CharField(
max_length=255, blank=True, null=True, verbose_name=_('Nome do responsável'))
tipo = models.CharField(max_length=50)
id_responsavel = models.IntegerField(blank=True, null=True, verbose_name=_('Id do responsável'))
xml = models.TextField(blank=True, null=True, verbose_name=_('XML fornecido pela equipe do LexML:'))
id_responsavel = models.IntegerField(
blank=True, null=True, verbose_name=_('Id do responsável'))
xml = models.TextField(
blank=True, null=True, verbose_name=_('XML fornecido pela equipe do LexML:'))
class Meta:
verbose_name = _('Provedor Lexml')
@ -23,10 +27,14 @@ class LexmlProvedor(models.Model): # LexmlRegistroProvedor
class LexmlPublicador(models.Model):
id_publicador = models.IntegerField(verbose_name=_('Id do publicador'))
nome = models.CharField(max_length=255, verbose_name=_('Nome do publicador'))
email_responsavel = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('E-mail do responsável'))
sigla = models.CharField(max_length=255, blank=True, null=True, verbose_name=_('Sigla do Publicador'))
nome_responsavel = models.CharField(max_length=255, blank=True, null=True, verbose_name=_('Nome do responsável'))
nome = models.CharField(
max_length=255, verbose_name=_('Nome do publicador'))
email_responsavel = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('E-mail do responsável'))
sigla = models.CharField(
max_length=255, blank=True, null=True, verbose_name=_('Sigla do Publicador'))
nome_responsavel = models.CharField(
max_length=255, blank=True, null=True, verbose_name=_('Nome do responsável'))
tipo = models.CharField(max_length=50)
id_responsavel = models.IntegerField(verbose_name=_('Id do responsável'))

201
materia/models.py

@ -55,26 +55,46 @@ class MateriaLegislativa(models.Model):
tipo = models.ForeignKey(TipoMateriaLegislativa, verbose_name=_('Tipo'))
numero = models.IntegerField(verbose_name=_('Número'))
ano = models.SmallIntegerField(verbose_name=_('Ano'))
numero_protocolo = models.IntegerField(blank=True, null=True, verbose_name=_('Núm. Protocolo'))
data_apresentacao = models.DateField(blank=True, null=True, verbose_name=_('Data Apresentação'))
tipo_apresentacao = models.CharField(max_length=1, blank=True, null=True, verbose_name=_('Tipo de Apresentação'), choices=TIPO_APRESENTACAO_CHOICES)
regime_tramitacao = models.ForeignKey(RegimeTramitacao, verbose_name=_('Regime Tramitação'))
data_publicacao = models.DateField(blank=True, null=True, verbose_name=_('Data Publicação'))
tipo_origem_externa = models.ForeignKey(TipoMateriaLegislativa, blank=True, null=True, related_name='+', verbose_name=_('Tipo'))
numero_origem_externa = models.CharField(max_length=5, blank=True, null=True, verbose_name=_('Número'))
ano_origem_externa = models.SmallIntegerField(blank=True, null=True, verbose_name=_('Ano'))
data_origem_externa = models.DateField(blank=True, null=True, verbose_name=_('Data'))
local_origem_externa = models.ForeignKey(Origem, blank=True, null=True, verbose_name=_('Local Origem'))
apelido = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Apelido'))
dias_prazo = models.IntegerField(blank=True, null=True, verbose_name=_('Dias Prazo'))
data_fim_prazo = models.DateField(blank=True, null=True, verbose_name=_('Data Fim Prazo'))
numero_protocolo = models.IntegerField(
blank=True, null=True, verbose_name=_('Núm. Protocolo'))
data_apresentacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Apresentação'))
tipo_apresentacao = models.CharField(
max_length=1, blank=True, null=True,
verbose_name=_('Tipo de Apresentação'),
choices=TIPO_APRESENTACAO_CHOICES)
regime_tramitacao = models.ForeignKey(
RegimeTramitacao, verbose_name=_('Regime Tramitação'))
data_publicacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Publicação'))
tipo_origem_externa = models.ForeignKey(
TipoMateriaLegislativa, blank=True, null=True, related_name='+', verbose_name=_('Tipo'))
numero_origem_externa = models.CharField(
max_length=5, blank=True, null=True, verbose_name=_('Número'))
ano_origem_externa = models.SmallIntegerField(
blank=True, null=True, verbose_name=_('Ano'))
data_origem_externa = models.DateField(
blank=True, null=True, verbose_name=_('Data'))
local_origem_externa = models.ForeignKey(
Origem, blank=True, null=True, verbose_name=_('Local Origem'))
apelido = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Apelido'))
dias_prazo = models.IntegerField(
blank=True, null=True, verbose_name=_('Dias Prazo'))
data_fim_prazo = models.DateField(
blank=True, null=True, verbose_name=_('Data Fim Prazo'))
em_tramitacao = models.BooleanField(verbose_name=_('Em Tramitação?'))
polemica = models.NullBooleanField(blank=True, verbose_name=_('Matéria Polêmica?'))
objeto = models.CharField(max_length=150, blank=True, null=True, verbose_name=_('Objeto'))
complementar = models.NullBooleanField(blank=True, verbose_name=_('É Complementar?'))
polemica = models.NullBooleanField(
blank=True, verbose_name=_('Matéria Polêmica?'))
objeto = models.CharField(
max_length=150, blank=True, null=True, verbose_name=_('Objeto'))
complementar = models.NullBooleanField(
blank=True, verbose_name=_('É Complementar?'))
ementa = models.TextField(verbose_name=_('Ementa'))
indexacao = models.TextField(blank=True, null=True, verbose_name=_('Indexação'))
observacao = models.TextField(blank=True, null=True, verbose_name=_('Observação'))
indexacao = models.TextField(
blank=True, null=True, verbose_name=_('Indexação'))
observacao = models.TextField(
blank=True, null=True, verbose_name=_('Observação'))
resultado = models.TextField(blank=True, null=True)
# XXX novo
anexadas = models.ManyToManyField('self', through='Anexada',
@ -92,7 +112,8 @@ class MateriaLegislativa(models.Model):
class AcompanhamentoMateria(models.Model): # AcompMateria
materia = models.ForeignKey(MateriaLegislativa)
email = models.CharField(max_length=100, verbose_name=_('Endereço de E-mail'))
email = models.CharField(
max_length=100, verbose_name=_('Endereço de E-mail'))
hash = models.CharField(max_length=8)
class Meta:
@ -100,14 +121,15 @@ class AcompanhamentoMateria(models.Model): # AcompMateria
verbose_name_plural = _('Acompanhamentos de Matéria')
def __str__(self):
return str(self.materia) #FIXME
return str(self.materia) # FIXME
class Anexada(models.Model):
materia_principal = models.ForeignKey(MateriaLegislativa, related_name='+')
materia_anexada = models.ForeignKey(MateriaLegislativa, related_name='+')
data_anexacao = models.DateField(verbose_name=_('Data Anexação'))
data_desanexacao = models.DateField(blank=True, null=True, verbose_name=_('Data Desanexação'))
data_desanexacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Desanexação'))
class Meta:
verbose_name = _('Anexada')
@ -146,7 +168,8 @@ class Autor(models.Model):
comissao = models.ForeignKey(Comissao, blank=True, null=True)
parlamentar = models.ForeignKey(Parlamentar, blank=True, null=True)
tipo = models.ForeignKey(TipoAutor, verbose_name=_('Tipo'))
nome = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Autor'))
nome = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Autor'))
cargo = models.CharField(max_length=50, blank=True, null=True)
username = models.CharField(max_length=50, blank=True, null=True)
@ -196,7 +219,8 @@ class DespachoInicial(models.Model):
class TipoDocumento(models.Model):
descricao = models.CharField(max_length=50, verbose_name=_('Tipo Documento'))
descricao = models.CharField(
max_length=50, verbose_name=_('Tipo Documento'))
class Meta:
verbose_name = _('Tipo de Documento')
@ -211,7 +235,8 @@ class DocumentoAcessorio(models.Model):
tipo = models.ForeignKey(TipoDocumento, verbose_name=_('Tipo'))
nome = models.CharField(max_length=30, verbose_name=_('Descrição'))
data = models.DateField(blank=True, null=True, verbose_name=_('Data'))
autor = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Autor'))
autor = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Autor'))
ementa = models.TextField(blank=True, null=True, verbose_name=_('Ementa'))
indexacao = models.TextField(blank=True, null=True)
@ -240,10 +265,12 @@ class MateriaAssunto(models.Model):
class Numeracao(models.Model):
materia = models.ForeignKey(MateriaLegislativa)
numero_ordem = models.IntegerField()
tipo_materia = models.ForeignKey(TipoMateriaLegislativa, verbose_name=_('Tipo de Matéria'))
tipo_materia = models.ForeignKey(
TipoMateriaLegislativa, verbose_name=_('Tipo de Matéria'))
numero_materia = models.CharField(max_length=5, verbose_name=_('Número'))
ano_materia = models.SmallIntegerField(verbose_name=_('Ano'))
data_materia = models.DateField(blank=True, null=True, verbose_name=_('Data'))
data_materia = models.DateField(
blank=True, null=True, verbose_name=_('Data'))
class Meta:
verbose_name = _('Numeração')
@ -257,9 +284,12 @@ class Numeracao(models.Model):
class Orgao(models.Model):
nome = models.CharField(max_length=60, verbose_name=_('Nome'))
sigla = models.CharField(max_length=10, verbose_name=_('Sigla'))
unidade_deliberativa = models.BooleanField(verbose_name=_('Unidade Deliberativa'))
endereco = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('Endereço'))
telefone = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Telefone'))
unidade_deliberativa = models.BooleanField(
verbose_name=_('Unidade Deliberativa'))
endereco = models.CharField(
max_length=100, blank=True, null=True, verbose_name=_('Endereço'))
telefone = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Telefone'))
class Meta:
verbose_name = _('Órgão')
@ -270,7 +300,8 @@ class Orgao(models.Model):
class TipoFimRelatoria(models.Model):
descricao = models.CharField(max_length=50, verbose_name=_('Tipo Fim Relatoria'))
descricao = models.CharField(
max_length=50, verbose_name=_('Tipo Fim Relatoria'))
class Meta:
verbose_name = _('Tipo Fim de Relatoria')
@ -283,10 +314,14 @@ class TipoFimRelatoria(models.Model):
class Relatoria(models.Model):
materia = models.ForeignKey(MateriaLegislativa)
parlamentar = models.ForeignKey(Parlamentar, verbose_name=_('Parlamentar'))
tipo_fim_relatoria = models.ForeignKey(TipoFimRelatoria, blank=True, null=True, verbose_name=_('Motivo Fim Relatoria'))
comissao = models.ForeignKey(Comissao, blank=True, null=True, verbose_name=_('Localização Atual'))
data_designacao_relator = models.DateField(verbose_name=_('Data Designação'))
data_destituicao_relator = models.DateField(blank=True, null=True, verbose_name=_('Data Destituição'))
tipo_fim_relatoria = models.ForeignKey(
TipoFimRelatoria, blank=True, null=True, verbose_name=_('Motivo Fim Relatoria'))
comissao = models.ForeignKey(
Comissao, blank=True, null=True, verbose_name=_('Localização Atual'))
data_designacao_relator = models.DateField(
verbose_name=_('Data Designação'))
data_destituicao_relator = models.DateField(
blank=True, null=True, verbose_name=_('Data Destituição'))
class Meta:
verbose_name = _('Relatoria')
@ -307,7 +342,8 @@ class Parecer(models.Model):
relatoria = models.ForeignKey(Relatoria)
materia = models.ForeignKey(MateriaLegislativa)
tipo_conclusao = models.CharField(max_length=3, blank=True, null=True)
tipo_apresentacao = models.CharField(max_length=1, choices=APRESENTACAO_CHOICES)
tipo_apresentacao = models.CharField(
max_length=1, choices=APRESENTACAO_CHOICES)
parecer = models.TextField(blank=True, null=True)
class Meta:
@ -327,12 +363,15 @@ class TipoProposicao(models.Model):
)
descricao = models.CharField(max_length=50, verbose_name=_('Descrição'))
materia_ou_documento = models.CharField(max_length=1, verbose_name=_('Gera'), choices=MAT_OU_DOC_CHOICES)
materia_ou_documento = models.CharField(
max_length=1, verbose_name=_('Gera'), choices=MAT_OU_DOC_CHOICES)
modelo = models.CharField(max_length=50, verbose_name=_('Modelo XML'))
# mutually exclusive (depend on materia_ou_documento)
tipo_materia = models.ForeignKey(TipoMateriaLegislativa, blank=True, null=True, verbose_name=_('Tipo Matéria'))
tipo_documento = models.ForeignKey(TipoDocumento, blank=True, null=True, verbose_name=_('Tipo Documento'))
tipo_materia = models.ForeignKey(
TipoMateriaLegislativa, blank=True, null=True, verbose_name=_('Tipo Matéria'))
tipo_documento = models.ForeignKey(
TipoDocumento, blank=True, null=True, verbose_name=_('Tipo Documento'))
class Meta:
verbose_name = _('Tipo de Proposição')
@ -347,16 +386,23 @@ class Proposicao(models.Model):
autor = models.ForeignKey(Autor)
tipo = models.ForeignKey(TipoProposicao, verbose_name=_('Tipo'))
# XXX data_envio was not null, but actual data said otherwise!!!
data_envio = models.DateTimeField(null=True, verbose_name=_('Data de Envio'))
data_recebimento = models.DateTimeField(blank=True, null=True, verbose_name=_('Data de Incorporação'))
data_envio = models.DateTimeField(
null=True, verbose_name=_('Data de Envio'))
data_recebimento = models.DateTimeField(
blank=True, null=True, verbose_name=_('Data de Incorporação'))
descricao = models.CharField(max_length=100, verbose_name=_('Descrição'))
data_devolucao = models.DateTimeField(blank=True, null=True, verbose_name=_('Data de devolução'))
justificativa_devolucao = models.CharField(max_length=200, blank=True, null=True, verbose_name=_('Justificativa da Devolução'))
numero_proposicao = models.IntegerField(blank=True, null=True, verbose_name=_(''))
data_devolucao = models.DateTimeField(
blank=True, null=True, verbose_name=_('Data de devolução'))
justificativa_devolucao = models.CharField(
max_length=200, blank=True, null=True, verbose_name=_('Justificativa da Devolução'))
numero_proposicao = models.IntegerField(
blank=True, null=True, verbose_name=_(''))
# mutually exclusive (depend on tipo.materia_ou_documento)
materia = models.ForeignKey(MateriaLegislativa, blank=True, null=True, verbose_name=_('Matéria'))
documento = models.ForeignKey(DocumentoAcessorio, blank=True, null=True, verbose_name=_('Documento'))
materia = models.ForeignKey(
MateriaLegislativa, blank=True, null=True, verbose_name=_('Matéria'))
documento = models.ForeignKey(
DocumentoAcessorio, blank=True, null=True, verbose_name=_('Documento'))
class Meta:
verbose_name = _('Proposição')
@ -374,8 +420,11 @@ class StatusTramitacao(models.Model):
sigla = models.CharField(max_length=10, verbose_name=_('Sigla'))
descricao = models.CharField(max_length=60, verbose_name=_('Descrição'))
# TODO make specific migration considering both ind_fim_tramitacao, ind_retorno_tramitacao
indicador = models.CharField(max_length=1, verbose_name=_('Indicador da Tramitação'), choices=INDICADOR_CHOICES)
# TODO make specific migration considering both ind_fim_tramitacao,
# ind_retorno_tramitacao
indicador = models.CharField(
max_length=1, verbose_name=_('Indicador da Tramitação'),
choices=INDICADOR_CHOICES)
class Meta:
verbose_name = _('Status de Tramitação')
@ -388,9 +437,12 @@ class StatusTramitacao(models.Model):
class UnidadeTramitacao(models.Model):
comissao = models.ForeignKey(Comissao, blank=True, null=True, verbose_name=_('Comissão'))
orgao = models.ForeignKey(Orgao, blank=True, null=True, verbose_name=_('Órgão'))
parlamentar = models.ForeignKey(Parlamentar, blank=True, null=True, verbose_name=_('Parlamentar'))
comissao = models.ForeignKey(
Comissao, blank=True, null=True, verbose_name=_('Comissão'))
orgao = models.ForeignKey(
Orgao, blank=True, null=True, verbose_name=_('Órgão'))
parlamentar = models.ForeignKey(
Parlamentar, blank=True, null=True, verbose_name=_('Parlamentar'))
class Meta:
verbose_name = _('Unidade de Tramitação')
@ -404,29 +456,38 @@ class UnidadeTramitacao(models.Model):
class Tramitacao(models.Model):
TURNO_CHOICES, \
PRIMEIRO, SEGUNDO, UNICO, SUPLEMENTAR, FINAL, \
VOTACAO_UNICA, PRIMEIRA_VOTACAO, SEGUNDA_TERCEIRA_VOTACAO = make_choices(
'P', _('Primeiro'),
'S', _('Segundo'),
'Ú', _('Único'),
'L', _('Suplementar'),
'F', _('Final'),
'A', _('Votação única em Regime de Urgência'),
'B', _('1ª Votação'),
'C', _('2ª e 3ª Votação'),
)
status = models.ForeignKey(StatusTramitacao, blank=True, null=True, verbose_name=_('Status'))
PRIMEIRO, SEGUNDO, UNICO, SUPLEMENTAR, FINAL, \
VOTACAO_UNICA, PRIMEIRA_VOTACAO, SEGUNDA_TERCEIRA_VOTACAO = make_choices(
'P', _('Primeiro'),
'S', _('Segundo'),
'Ú', _('Único'),
'L', _('Suplementar'),
'F', _('Final'),
'A', _('Votação única em Regime de Urgência'),
'B', _('1ª Votação'),
'C', _('2ª e 3ª Votação'),
)
status = models.ForeignKey(
StatusTramitacao, blank=True, null=True, verbose_name=_('Status'))
materia = models.ForeignKey(MateriaLegislativa)
data_tramitacao = models.DateField(blank=True, null=True, verbose_name=_('Data Tramitação'))
unidade_tramitacao_local = models.ForeignKey(UnidadeTramitacao, blank=True, null=True, related_name='+', verbose_name=_('Unidade Local'))
data_encaminhamento = models.DateField(blank=True, null=True, verbose_name=_('Data Encaminhamento'))
unidade_tramitacao_destino = models.ForeignKey(UnidadeTramitacao, blank=True, null=True, related_name='+', verbose_name=_('Unidade Destino'))
data_tramitacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Tramitação'))
unidade_tramitacao_local = models.ForeignKey(
UnidadeTramitacao, blank=True, null=True, related_name='+', verbose_name=_('Unidade Local'))
data_encaminhamento = models.DateField(
blank=True, null=True, verbose_name=_('Data Encaminhamento'))
unidade_tramitacao_destino = models.ForeignKey(
UnidadeTramitacao, blank=True, null=True, related_name='+', verbose_name=_('Unidade Destino'))
ultima = models.BooleanField()
urgente = models.BooleanField(verbose_name=_('Urgente ?'))
turno = models.CharField(max_length=1, blank=True, null=True, verbose_name=_('Turno'), choices=TURNO_CHOICES)
texto = models.TextField(blank=True, null=True, verbose_name=_('Texto da Ação'))
data_fim_prazo = models.DateField(blank=True, null=True, verbose_name=_('Data Fim Prazo'))
turno = models.CharField(
max_length=1, blank=True, null=True, verbose_name=_('Turno'),
choices=TURNO_CHOICES)
texto = models.TextField(
blank=True, null=True, verbose_name=_('Texto da Ação'))
data_fim_prazo = models.DateField(
blank=True, null=True, verbose_name=_('Data Fim Prazo'))
class Meta:
verbose_name = _('Tramitação')

72
norma/models.py

@ -8,7 +8,8 @@ from sapl.utils import make_choices
class AssuntoNorma(models.Model):
assunto = models.CharField(max_length=50, verbose_name=_('Assunto'))
descricao = models.CharField(max_length=250, blank=True, null=True, verbose_name=_('Descrição'))
descricao = models.CharField(
max_length=250, blank=True, null=True, verbose_name=_('Descrição'))
class Meta:
verbose_name = _('Assunto de Norma')
@ -35,7 +36,8 @@ class TipoNormaJuridica(models.Model):
'resolucao',
'regimento.interno',
))
equivalente_lexml = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Equivalente LexML'), choices=EQUIVALENTE_LEXML_CHOICES)
equivalente_lexml = models.CharField(max_length=50, blank=True, null=True,
verbose_name=_('Equivalente LexML'), choices=EQUIVALENTE_LEXML_CHOICES)
sigla = models.CharField(max_length=3, verbose_name=_('Sigla'))
descricao = models.CharField(max_length=50, verbose_name=_('Descrição'))
@ -58,17 +60,26 @@ class NormaJuridica(models.Model):
materia = models.ForeignKey(MateriaLegislativa, blank=True, null=True)
numero = models.IntegerField(verbose_name=_('Número'))
ano = models.SmallIntegerField(verbose_name=_('Ano'))
esfera_federacao = models.CharField(max_length=1, verbose_name=_('Esfera Federação'), choices=ESFERA_FEDERACAO_CHOICES)
esfera_federacao = models.CharField(max_length=1,
verbose_name=_('Esfera Federação'), choices=ESFERA_FEDERACAO_CHOICES)
data = models.DateField(blank=True, null=True, verbose_name=_('Data'))
data_publicacao = models.DateField(blank=True, null=True, verbose_name=_('Data Publicação'))
veiculo_publicacao = models.CharField(max_length=30, blank=True, null=True, verbose_name=_('Veículo Publicação'))
pagina_inicio_publicacao = models.IntegerField(blank=True, null=True, verbose_name=_('Pg. Início'))
pagina_fim_publicacao = models.IntegerField(blank=True, null=True, verbose_name=_('Pg. Fim'))
data_publicacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Publicação'))
veiculo_publicacao = models.CharField(
max_length=30, blank=True, null=True, verbose_name=_('Veículo Publicação'))
pagina_inicio_publicacao = models.IntegerField(
blank=True, null=True, verbose_name=_('Pg. Início'))
pagina_fim_publicacao = models.IntegerField(
blank=True, null=True, verbose_name=_('Pg. Fim'))
ementa = models.TextField(verbose_name=_('Ementa'))
indexacao = models.TextField(blank=True, null=True, verbose_name=_('Indexação'))
observacao = models.TextField(blank=True, null=True, verbose_name=_('Observação'))
complemento = models.NullBooleanField(blank=True, verbose_name=_('Complementar ?'))
assunto = models.ForeignKey(AssuntoNorma) # XXX was a CharField (attention on migrate)
indexacao = models.TextField(
blank=True, null=True, verbose_name=_('Indexação'))
observacao = models.TextField(
blank=True, null=True, verbose_name=_('Observação'))
complemento = models.NullBooleanField(
blank=True, verbose_name=_('Complementar ?'))
# XXX was a CharField (attention on migrate)
assunto = models.ForeignKey(AssuntoNorma)
data_vigencia = models.DateField(blank=True, null=True)
timestamp = models.DateTimeField()
@ -85,18 +96,30 @@ class NormaJuridica(models.Model):
class LegislacaoCitada(models.Model):
materia = models.ForeignKey(MateriaLegislativa)
norma = models.ForeignKey(NormaJuridica)
disposicoes = models.CharField(max_length=15, blank=True, null=True, verbose_name=_('Disposição'))
parte = models.CharField(max_length=8, blank=True, null=True, verbose_name=_('Parte'))
livro = models.CharField(max_length=7, blank=True, null=True, verbose_name=_('Livro'))
titulo = models.CharField(max_length=7, blank=True, null=True, verbose_name=_('Título'))
capitulo = models.CharField(max_length=7, blank=True, null=True, verbose_name=_('Capítulo'))
secao = models.CharField(max_length=7, blank=True, null=True, verbose_name=_('Seção'))
subsecao = models.CharField(max_length=7, blank=True, null=True, verbose_name=_('Subseção'))
artigo = models.CharField(max_length=4, blank=True, null=True, verbose_name=_('Artigo'))
paragrafo = models.CharField(max_length=3, blank=True, null=True, verbose_name=_('Parágrafo'))
inciso = models.CharField(max_length=10, blank=True, null=True, verbose_name=_('Inciso'))
alinea = models.CharField(max_length=3, blank=True, null=True, verbose_name=_('Alínea'))
item = models.CharField(max_length=3, blank=True, null=True, verbose_name=_('Item'))
disposicoes = models.CharField(
max_length=15, blank=True, null=True, verbose_name=_('Disposição'))
parte = models.CharField(
max_length=8, blank=True, null=True, verbose_name=_('Parte'))
livro = models.CharField(
max_length=7, blank=True, null=True, verbose_name=_('Livro'))
titulo = models.CharField(
max_length=7, blank=True, null=True, verbose_name=_('Título'))
capitulo = models.CharField(
max_length=7, blank=True, null=True, verbose_name=_('Capítulo'))
secao = models.CharField(
max_length=7, blank=True, null=True, verbose_name=_('Seção'))
subsecao = models.CharField(
max_length=7, blank=True, null=True, verbose_name=_('Subseção'))
artigo = models.CharField(
max_length=4, blank=True, null=True, verbose_name=_('Artigo'))
paragrafo = models.CharField(
max_length=3, blank=True, null=True, verbose_name=_('Parágrafo'))
inciso = models.CharField(
max_length=10, blank=True, null=True, verbose_name=_('Inciso'))
alinea = models.CharField(
max_length=3, blank=True, null=True, verbose_name=_('Alínea'))
item = models.CharField(
max_length=3, blank=True, null=True, verbose_name=_('Item'))
class Meta:
verbose_name = _('Matéria Legislativa')
@ -117,7 +140,8 @@ class VinculoNormaJuridica(models.Model):
# TODO M2M ???
norma_referente = models.ForeignKey(NormaJuridica, related_name='+')
norma_referida = models.ForeignKey(NormaJuridica, related_name='+')
tipo_vinculo = models.CharField(max_length=1, blank=True, null=True, choices=TIPO_VINCULO_CHOICES)
tipo_vinculo = models.CharField(
max_length=1, blank=True, null=True, choices=TIPO_VINCULO_CHOICES)
class Meta:
verbose_name = _('Vínculo entre Normas Jurídicas')

149
parlamentares/models.py

@ -28,11 +28,14 @@ class SessaoLegislativa(models.Model):
legislatura = models.ForeignKey(Legislatura)
numero = models.IntegerField(verbose_name=_('Número'))
tipo = models.CharField(max_length=1, verbose_name=_('Tipo'), choices=TIPO_SESSAO_CHOICES)
tipo = models.CharField(
max_length=1, verbose_name=_('Tipo'), choices=TIPO_SESSAO_CHOICES)
data_inicio = models.DateField(verbose_name=_('Data Início'))
data_fim = models.DateField(verbose_name=_('Data Fim'))
data_inicio_intervalo = models.DateField(blank=True, null=True, verbose_name=_('Início Intervalo'))
data_fim_intervalo = models.DateField(blank=True, null=True, verbose_name=_('Fim Intervalo'))
data_inicio_intervalo = models.DateField(
blank=True, null=True, verbose_name=_('Início Intervalo'))
data_fim_intervalo = models.DateField(
blank=True, null=True, verbose_name=_('Fim Intervalo'))
class Meta:
verbose_name = _('Sessão Legislativa')
@ -45,7 +48,8 @@ class SessaoLegislativa(models.Model):
class Coligacao(models.Model):
legislatura = models.ForeignKey(Legislatura, verbose_name=_('Legislatura'))
nome = models.CharField(max_length=50, verbose_name=_('Nome'))
numero_votos = models.IntegerField(blank=True, null=True, verbose_name=_('Nº Votos Recebidos'))
numero_votos = models.IntegerField(
blank=True, null=True, verbose_name=_('Nº Votos Recebidos'))
class Meta:
verbose_name = _('Coligação')
@ -58,8 +62,10 @@ class Coligacao(models.Model):
class Partido(models.Model):
sigla = models.CharField(max_length=9, verbose_name=_('Sigla'))
nome = models.CharField(max_length=50, verbose_name=_('Nome'))
data_criacao = models.DateField(blank=True, null=True, verbose_name=_('Data Criação'))
data_extincao = models.DateField(blank=True, null=True, verbose_name=_('Data Extinção'))
data_criacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Criação'))
data_extincao = models.DateField(
blank=True, null=True, verbose_name=_('Data Extinção'))
class Meta:
verbose_name = _('Partido')
@ -80,7 +86,7 @@ class ComposicaoColigacao(models.Model):
verbose_name = ('Composição Coligação')
verbose_name_plural = ('Composição Coligações')
def __str__ (self):
def __str__(self):
return str(self.coligacao) # FIXME
@ -128,8 +134,10 @@ class Municipio(models.Model): # Localidade
)
nome = models.CharField(max_length=50, blank=True, null=True)
uf = models.CharField(max_length=2, blank=True, null=True, choices=UF_CHOICES)
regiao = models.CharField(max_length=2, blank=True, null=True, choices=REGIAO_CHOICES)
uf = models.CharField(
max_length=2, blank=True, null=True, choices=UF_CHOICES)
regiao = models.CharField(
max_length=2, blank=True, null=True, choices=REGIAO_CHOICES)
class Meta:
verbose_name = _('Município')
@ -140,8 +148,10 @@ class Municipio(models.Model): # Localidade
'nome': self.nome, 'uf': self.uf, 'regiao': self.regiao
}
class NivelInstrucao(models.Model):
descricao = models.CharField(max_length=50, verbose_name=_('Nível de Instrução'))
descricao = models.CharField(
max_length=50, verbose_name=_('Nível de Instrução'))
class Meta:
verbose_name = _('Nível Instrução')
@ -152,7 +162,8 @@ class NivelInstrucao(models.Model):
class SituacaoMilitar(models.Model):
descricao = models.CharField(max_length=50, verbose_name=_('Situação Militar'))
descricao = models.CharField(
max_length=50, verbose_name=_('Situação Militar'))
class Meta:
verbose_name = _('Tipo Situação Militar')
@ -168,30 +179,52 @@ class Parlamentar(models.Model):
SEXO_CHOICE = ((FEMININO, _('Feminino')),
(MASCULINO, _('Masculino')))
nivel_instrucao = models.ForeignKey(NivelInstrucao, blank=True, null=True, verbose_name=_('Nível Instrução'))
situacao_militar = models.ForeignKey(SituacaoMilitar, blank=True, null=True, verbose_name=_('Situação Militar'))
nome_completo = models.CharField(max_length=50, verbose_name=_('Nome Completo'))
nome_parlamentar = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Nome Parlamentar'))
sexo = models.CharField(max_length=1, verbose_name=_('Sexo'), choices=SEXO_CHOICE)
data_nascimento = models.DateField(blank=True, null=True, verbose_name=_('Data Nascimento'))
cpf = models.CharField(max_length=14, blank=True, null=True, verbose_name=_('C.P.F'))
rg = models.CharField(max_length=15, blank=True, null=True, verbose_name=_('R.G.'))
titulo_eleitor = models.CharField(max_length=15, blank=True, null=True, verbose_name=_('Título de Eleitor'))
nivel_instrucao = models.ForeignKey(
NivelInstrucao, blank=True, null=True, verbose_name=_('Nível Instrução'))
situacao_militar = models.ForeignKey(
SituacaoMilitar, blank=True, null=True, verbose_name=_('Situação Militar'))
nome_completo = models.CharField(
max_length=50, verbose_name=_('Nome Completo'))
nome_parlamentar = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Nome Parlamentar'))
sexo = models.CharField(
max_length=1, verbose_name=_('Sexo'), choices=SEXO_CHOICE)
data_nascimento = models.DateField(
blank=True, null=True, verbose_name=_('Data Nascimento'))
cpf = models.CharField(
max_length=14, blank=True, null=True, verbose_name=_('C.P.F'))
rg = models.CharField(
max_length=15, blank=True, null=True, verbose_name=_('R.G.'))
titulo_eleitor = models.CharField(
max_length=15, blank=True, null=True, verbose_name=_('Título de Eleitor'))
cod_casa = models.IntegerField()
numero_gab_parlamentar = models.CharField(max_length=10, blank=True, null=True, verbose_name=_('Nº Gabinete'))
telefone = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Telefone'))
fax = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Fax'))
endereco_residencia = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('Endereço Residencial'))
municipio_residencia = models.ForeignKey(Municipio, blank=True, null=True, verbose_name=_('Município'))
cep_residencia = models.CharField(max_length=9, blank=True, null=True, verbose_name=_('CEP'))
telefone_residencia = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Telefone Residencial'))
fax_residencia = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Fax Residencial'))
endereco_web = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('HomePage'))
profissao = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Profissão'))
email = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('Correio Eletrônico'))
locais_atuacao = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('Locais de Atuação'))
numero_gab_parlamentar = models.CharField(
max_length=10, blank=True, null=True, verbose_name=_('Nº Gabinete'))
telefone = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Telefone'))
fax = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Fax'))
endereco_residencia = models.CharField(
max_length=100, blank=True, null=True, verbose_name=_('Endereço Residencial'))
municipio_residencia = models.ForeignKey(
Municipio, blank=True, null=True, verbose_name=_('Município'))
cep_residencia = models.CharField(
max_length=9, blank=True, null=True, verbose_name=_('CEP'))
telefone_residencia = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Telefone Residencial'))
fax_residencia = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Fax Residencial'))
endereco_web = models.CharField(
max_length=100, blank=True, null=True, verbose_name=_('HomePage'))
profissao = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Profissão'))
email = models.CharField(
max_length=100, blank=True, null=True, verbose_name=_('Correio Eletrônico'))
locais_atuacao = models.CharField(
max_length=100, blank=True, null=True, verbose_name=_('Locais de Atuação'))
ativo = models.BooleanField(verbose_name=_('Ativo na Casa?'))
biografia = models.TextField(blank=True, null=True, verbose_name=_('Biografia'))
biografia = models.TextField(
blank=True, null=True, verbose_name=_('Biografia'))
unidade_deliberativa = models.BooleanField()
class Meta:
@ -209,23 +242,29 @@ class TipoDependente(models.Model):
verbose_name = _('Tipo de Dependente')
verbose_name_plural = _('Tipos de Dependente')
def __str__ (self):
def __str__(self):
return self.descricao
class Dependente(models.Model):
FEMININO = 'F'
MASCULINO = 'M'
SEXO_CHOICE = ((FEMININO, _('Feminino')),
(MASCULINO, _('Masculino')))
(MASCULINO, _('Masculino')))
tipo = models.ForeignKey(TipoDependente, verbose_name=_('Tipo'))
parlamentar = models.ForeignKey(Parlamentar)
nome = models.CharField(max_length=50, verbose_name=_('Nome'))
sexo = models.CharField(max_length=1, verbose_name=_('Sexo'), choices=SEXO_CHOICE)
data_nascimento = models.DateField(blank=True, null=True, verbose_name=_('Data Nascimento'))
cpf = models.CharField(max_length=14, blank=True, null=True, verbose_name=_('CPF'))
rg = models.CharField(max_length=15, blank=True, null=True, verbose_name=_('RG'))
titulo_eleitor = models.CharField(max_length=15, blank=True, null=True, verbose_name=_('Nº Título Eleitor'))
sexo = models.CharField(
max_length=1, verbose_name=_('Sexo'), choices=SEXO_CHOICE)
data_nascimento = models.DateField(
blank=True, null=True, verbose_name=_('Data Nascimento'))
cpf = models.CharField(
max_length=14, blank=True, null=True, verbose_name=_('CPF'))
rg = models.CharField(
max_length=15, blank=True, null=True, verbose_name=_('RG'))
titulo_eleitor = models.CharField(
max_length=15, blank=True, null=True, verbose_name=_('Nº Título Eleitor'))
class Meta:
verbose_name = _('Dependente')
@ -239,7 +278,8 @@ class Filiacao(models.Model):
data = models.DateField(verbose_name=_('Data Filiação'))
parlamentar = models.ForeignKey(Parlamentar)
partido = models.ForeignKey(Partido, verbose_name=_('Partido'))
data_desfiliacao = models.DateField(blank=True, null=True, verbose_name=_('Data Desfiliação'))
data_desfiliacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Desfiliação'))
class Meta:
verbose_name = _('Filiação')
@ -255,7 +295,8 @@ class TipoAfastamento(models.Model):
descricao = models.CharField(max_length=50, verbose_name=_('Descrição'))
afastamento = models.BooleanField(verbose_name=_('Indicador'))
fim_mandato = models.BooleanField(verbose_name=_('Indicador'))
dispositivo = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Dispositivo'))
dispositivo = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Dispositivo'))
class Meta:
verbose_name = _('Tipo de Afastamento')
@ -264,23 +305,30 @@ class TipoAfastamento(models.Model):
def __str__(self):
return self.descricao
class Mandato(models.Model):
parlamentar = models.ForeignKey(Parlamentar)
tipo_afastamento = models.ForeignKey(TipoAfastamento, blank=True, null=True)
tipo_afastamento = models.ForeignKey(
TipoAfastamento, blank=True, null=True)
legislatura = models.ForeignKey(Legislatura, verbose_name=_('Legislatura'))
coligacao = models.ForeignKey(Coligacao, blank=True, null=True, verbose_name=_('Coligação'))
coligacao = models.ForeignKey(
Coligacao, blank=True, null=True, verbose_name=_('Coligação'))
# TODO what is this field??????
tipo_causa_fim_mandato = models.IntegerField(blank=True, null=True)
data_fim_mandato = models.DateField(blank=True, null=True, verbose_name=_('Fim do Mandato'))
votos_recebidos = models.IntegerField(blank=True, null=True, verbose_name=_('Votos Recebidos'))
data_expedicao_diploma = models.DateField(blank=True, null=True, verbose_name=_('Expedição do Diploma'))
observacao = models.TextField(blank=True, null=True, verbose_name=_('Observação'))
data_fim_mandato = models.DateField(
blank=True, null=True, verbose_name=_('Fim do Mandato'))
votos_recebidos = models.IntegerField(
blank=True, null=True, verbose_name=_('Votos Recebidos'))
data_expedicao_diploma = models.DateField(
blank=True, null=True, verbose_name=_('Expedição do Diploma'))
observacao = models.TextField(
blank=True, null=True, verbose_name=_('Observação'))
class Meta:
verbose_name = _('Mandato')
verbose_name_plural = _('Mandatos')
def __str__ (self):
def __str__(self):
return _(u'%(parlamentar)s %(legislatura)s') % {
'parlamentar': self.parlamentar, 'legislatura': self.legislatura
}
@ -288,7 +336,8 @@ class Mandato(models.Model):
class CargoMesa(models.Model):
# TODO M2M ????
descricao = models.CharField(max_length=50, verbose_name=_('Cargo na Mesa'))
descricao = models.CharField(
max_length=50, verbose_name=_('Cargo na Mesa'))
unico = models.BooleanField(verbose_name=_('Cargo Único'))
class Meta:

77
protocoloadm/models.py

@ -19,18 +19,24 @@ class TipoDocumentoAdministrativo(models.Model):
class DocumentoAdministrativo(models.Model):
tipo = models.ForeignKey(TipoDocumentoAdministrativo, verbose_name=_('Tipo Documento'))
tipo = models.ForeignKey(
TipoDocumentoAdministrativo, verbose_name=_('Tipo Documento'))
numero = models.IntegerField(verbose_name=_('Número'))
ano = models.SmallIntegerField(verbose_name=_('Ano'))
data = models.DateField(verbose_name=_('Data'))
numero_protocolo = models.IntegerField(blank=True, null=True, verbose_name=_('Núm. Protocolo'))
interessado = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Interessado'))
numero_protocolo = models.IntegerField(
blank=True, null=True, verbose_name=_('Núm. Protocolo'))
interessado = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Interessado'))
autor = models.ForeignKey(Autor, blank=True, null=True)
dias_prazo = models.IntegerField(blank=True, null=True, verbose_name=_('Dias Prazo'))
data_fim_prazo = models.DateField(blank=True, null=True, verbose_name=_('Data Fim Prazo'))
dias_prazo = models.IntegerField(
blank=True, null=True, verbose_name=_('Dias Prazo'))
data_fim_prazo = models.DateField(
blank=True, null=True, verbose_name=_('Data Fim Prazo'))
tramitacao = models.BooleanField(verbose_name=_('Em Tramitação?'))
assunto = models.TextField(verbose_name=_('Assunto'))
observacao = models.TextField(blank=True, null=True, verbose_name=_('Observação'))
observacao = models.TextField(
blank=True, null=True, verbose_name=_('Observação'))
class Meta:
verbose_name = _('Documento Administrativo')
@ -44,12 +50,15 @@ class DocumentoAdministrativo(models.Model):
class DocumentoAcessorioAdministrativo(models.Model):
documento = models.ForeignKey(DocumentoAdministrativo)
tipo = models.ForeignKey(TipoDocumentoAdministrativo, verbose_name=_('Tipo'))
tipo = models.ForeignKey(
TipoDocumentoAdministrativo, verbose_name=_('Tipo'))
nome = models.CharField(max_length=30, verbose_name=_('Nome'))
arquivo = models.CharField(max_length=100, verbose_name=_('Arquivo'))
data = models.DateField(blank=True, null=True, verbose_name=_('Data'))
autor = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Autor'))
assunto = models.TextField(blank=True, null=True, verbose_name=_('Assunto'))
autor = models.CharField(
max_length=50, blank=True, null=True, verbose_name=_('Autor'))
assunto = models.TextField(
blank=True, null=True, verbose_name=_('Assunto'))
indexacao = models.TextField(blank=True, null=True)
class Meta:
@ -59,25 +68,33 @@ class DocumentoAcessorioAdministrativo(models.Model):
def __str__(self):
return self.nome
class Protocolo(models.Model):
numero = models.IntegerField(blank=True, null=True, verbose_name=_('Número do Protocolo'))
numero = models.IntegerField(
blank=True, null=True, verbose_name=_('Número do Protocolo'))
ano = models.SmallIntegerField()
data = models.DateField()
hora = models.TimeField()
timestamp = models.DateTimeField()
tipo_protocolo = models.IntegerField(verbose_name=_('Tipo de Protocolo'))
tipo_processo = models.IntegerField()
interessado = models.CharField(max_length=60, blank=True, null=True, verbose_name=_('Interessado'))
interessado = models.CharField(
max_length=60, blank=True, null=True, verbose_name=_('Interessado'))
autor = models.ForeignKey(Autor, blank=True, null=True)
assunto_ementa = models.TextField(blank=True, null=True)
tipo_documento = models.ForeignKey(TipoDocumentoAdministrativo, blank=True, null=True, verbose_name=_('Tipo de documento'))
tipo_materia = models.ForeignKey(TipoMateriaLegislativa, blank=True, null=True, verbose_name=_('Tipo Matéria'))
numero_paginas = models.IntegerField(blank=True, null=True, verbose_name=_('Número de Páginas'))
observacao = models.TextField(blank=True, null=True, verbose_name=_('Observação'))
tipo_documento = models.ForeignKey(
TipoDocumentoAdministrativo, blank=True, null=True, verbose_name=_('Tipo de documento'))
tipo_materia = models.ForeignKey(
TipoMateriaLegislativa, blank=True, null=True, verbose_name=_('Tipo Matéria'))
numero_paginas = models.IntegerField(
blank=True, null=True, verbose_name=_('Número de Páginas'))
observacao = models.TextField(
blank=True, null=True, verbose_name=_('Observação'))
anulado = models.BooleanField()
user_anulacao = models.CharField(max_length=20, blank=True, null=True)
ip_anulacao = models.CharField(max_length=15, blank=True, null=True)
justificativa_anulacao = models.CharField(max_length=60, blank=True, null=True)
justificativa_anulacao = models.CharField(
max_length=60, blank=True, null=True)
timestamp_anulacao = models.DateTimeField(blank=True, null=True)
class Meta:
@ -93,8 +110,11 @@ class StatusTramitacaoAdministrativo(models.Model):
sigla = models.CharField(max_length=10, verbose_name=_('Sigla'))
descricao = models.CharField(max_length=60, verbose_name=_('Descrição'))
# TODO make specific migration considering both ind_fim_tramitacao, ind_retorno_tramitacao
indicador = models.CharField(max_length=1, verbose_name=_('Indicador da Tramitação'), choices=INDICADOR_CHOICES)
# TODO make specific migration considering both ind_fim_tramitacao,
# ind_retorno_tramitacao
indicador = models.CharField(
max_length=1, verbose_name=_('Indicador da Tramitação'),
choices=INDICADOR_CHOICES)
class Meta:
verbose_name = _('Status de Tramitação')
@ -105,15 +125,22 @@ class StatusTramitacaoAdministrativo(models.Model):
class TramitacaoAdministrativo(models.Model):
status = models.ForeignKey(StatusTramitacaoAdministrativo, blank=True, null=True, verbose_name=_('Status'))
status = models.ForeignKey(
StatusTramitacaoAdministrativo, blank=True, null=True, verbose_name=_('Status'))
documento = models.ForeignKey(DocumentoAdministrativo)
data_tramitacao = models.DateField(blank=True, null=True, verbose_name=_('Data Tramitação'))
unidade_tramitacao_local = models.ForeignKey(UnidadeTramitacao, blank=True, null=True, related_name='+', verbose_name=_('Unidade Local'))
data_encaminhamento = models.DateField(blank=True, null=True, verbose_name=_('Data Encaminhamento'))
unidade_tramitacao_destino = models.ForeignKey(UnidadeTramitacao, blank=True, null=True, related_name='+', verbose_name=_('Unidade Destino'))
data_tramitacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Tramitação'))
unidade_tramitacao_local = models.ForeignKey(
UnidadeTramitacao, blank=True, null=True, related_name='+', verbose_name=_('Unidade Local'))
data_encaminhamento = models.DateField(
blank=True, null=True, verbose_name=_('Data Encaminhamento'))
unidade_tramitacao_destino = models.ForeignKey(
UnidadeTramitacao, blank=True, null=True, related_name='+', verbose_name=_('Unidade Destino'))
ultima = models.BooleanField()
texto = models.TextField(blank=True, null=True, verbose_name=_('Texto da Ação'))
data_fim_prazo = models.DateField(blank=True, null=True, verbose_name=_('Data Fim do Prazo'))
texto = models.TextField(
blank=True, null=True, verbose_name=_('Texto da Ação'))
data_fim_prazo = models.DateField(
blank=True, null=True, verbose_name=_('Data Fim do Prazo'))
class Meta:
verbose_name = _('Tramitação de Documento Administrativo')

3
sapl/urls.py

@ -16,9 +16,6 @@ Including another URLconf
from django.conf.urls import include, url
from django.contrib import admin
#from comissoes.views import (ListaComissoes,
#CriarComissao)
#from comissoes import views
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),

3
sapl/utils.py

@ -7,7 +7,8 @@ def register_all_models_in_admin(module_name):
app = apps.get_app_config(appname)
for model in app.get_models():
class CustomModelAdmin(admin.ModelAdmin):
list_display = [f.name for f in model._meta.fields if f.name != 'id']
list_display = [f.name for f in model._meta.fields
if f.name != 'id']
if not admin.site.is_registered(model):
admin.site.register(model, CustomModelAdmin)

38
sessao/models.py

@ -26,18 +26,25 @@ class SessaoPlenaria(models.Model):
cod_andamento_sessao = models.IntegerField(blank=True, null=True)
tipo = models.ForeignKey(TipoSessaoPlenaria, verbose_name=_('Tipo'))
sessao_legislativa = models.ForeignKey(SessaoLegislativa, verbose_name=_('Sessão Legislativa'))
sessao_legislativa = models.ForeignKey(
SessaoLegislativa, verbose_name=_('Sessão Legislativa'))
legislatura = models.ForeignKey(Legislatura, verbose_name=_('Legislatura'))
# XXX seems to be empty
tipo_expediente = models.CharField(max_length=10)
data_inicio = models.DateField(verbose_name=_('Abertura'))
dia = models.CharField(max_length=15)
hora_inicio = models.CharField(max_length=5, verbose_name=_('Horário'))
hora_fim = models.CharField(max_length=5, blank=True, null=True, verbose_name=_('Horário'))
hora_fim = models.CharField(
max_length=5, blank=True, null=True, verbose_name=_('Horário'))
numero = models.IntegerField(verbose_name=_('Número'))
data_fim = models.DateField(blank=True, null=True, verbose_name=_('Encerramento'))
url_audio = models.CharField(max_length=150, blank=True, null=True, verbose_name=_('URL Arquivo Áudio (Formatos MP3 / AAC)'))
url_video = models.CharField(max_length=150, blank=True, null=True, verbose_name=_('URL Arquivo Vídeo (Formatos MP4 / FLV / WebM)'))
data_fim = models.DateField(
blank=True, null=True, verbose_name=_('Encerramento'))
url_audio = models.CharField(
max_length=150, blank=True, null=True,
verbose_name=_('URL Arquivo Áudio (Formatos MP3 / AAC)'))
url_video = models.CharField(
max_length=150, blank=True, null=True,
verbose_name=_('URL Arquivo Vídeo (Formatos MP4 / FLV / WebM)'))
class Meta:
verbose_name = _('Sessão Plenária')
@ -61,10 +68,12 @@ class AbstractOrdemDia(models.Model):
sessao_plenaria = models.ForeignKey(SessaoPlenaria)
materia = models.ForeignKey(MateriaLegislativa)
data_ordem = models.DateField(verbose_name=_('Data da Sessão'))
observacao = models.TextField(blank=True, null=True, verbose_name=_('Ementa'))
observacao = models.TextField(
blank=True, null=True, verbose_name=_('Ementa'))
numero_ordem = models.IntegerField(verbose_name=_('Nº Ordem'))
resultado = models.TextField(blank=True, null=True)
tipo_votacao = models.IntegerField(verbose_name=_('Tipo de votação'), choices=TIPO_VOTACAO_CHOICES)
tipo_votacao = models.IntegerField(
verbose_name=_('Tipo de votação'), choices=TIPO_VOTACAO_CHOICES)
class Meta:
abstract = True
@ -94,7 +103,8 @@ class TipoExpediente(models.Model):
class ExpedienteSessao(models.Model): # ExpedienteSessaoPlenaria
sessao_plenaria = models.ForeignKey(SessaoPlenaria)
tipo = models.ForeignKey(TipoExpediente)
conteudo = models.TextField(blank=True, null=True, verbose_name=_('Conteúdo do expediente'))
conteudo = models.TextField(
blank=True, null=True, verbose_name=_('Conteúdo do expediente'))
class Meta:
verbose_name = _('Expediente de Sessão Plenaria')
@ -120,8 +130,10 @@ class IntegranteMesa(models.Model): # MesaSessaoPlenaria
class AbstractOrador(models.Model): # Oradores
sessao_plenaria = models.ForeignKey(SessaoPlenaria)
parlamentar = models.ForeignKey(Parlamentar, verbose_name=_('Parlamentar'))
numero_ordem = models.IntegerField(verbose_name=_('Ordem de pronunciamento'))
url_discurso = models.CharField(max_length=150, blank=True, null=True, verbose_name=_('URL Vídeo'))
numero_ordem = models.IntegerField(
verbose_name=_('Ordem de pronunciamento'))
url_discurso = models.CharField(
max_length=150, blank=True, null=True, verbose_name=_('URL Vídeo'))
class Meta:
abstract = True
@ -178,13 +190,15 @@ class TipoResultadoVotacao(models.Model):
class RegistroVotacao(models.Model):
tipo_resultado_votacao = models.ForeignKey(TipoResultadoVotacao, verbose_name=_('Resultado da Votação'))
tipo_resultado_votacao = models.ForeignKey(
TipoResultadoVotacao, verbose_name=_('Resultado da Votação'))
materia = models.ForeignKey(MateriaLegislativa)
ordem = models.ForeignKey(OrdemDia)
numero_votos_sim = models.IntegerField(verbose_name=_('Sim'))
numero_votos_nao = models.IntegerField(verbose_name=_('Não'))
numero_abstencoes = models.IntegerField(verbose_name=_('Abstenções'))
observacao = models.TextField(blank=True, null=True, verbose_name=_('Observações'))
observacao = models.TextField(
blank=True, null=True, verbose_name=_('Observações'))
class Meta:
verbose_name = _('Votação')

Loading…
Cancel
Save