Browse Source

Merge 214-layout-mais-sucinto

Fix #214
pull/237/head
Marcio Mazza 9 years ago
parent
commit
634d47a79d
  1. 20
      base/forms.py
  2. 0
      base/layouts.yaml
  3. 28
      comissoes/forms.py
  4. 26
      comissoes/layouts.yaml
  5. 52
      comissoes/views.py
  6. 2
      compilacao/forms.py
  7. 39
      compilacao/layouts.yaml
  8. 87
      compilacao/views.py
  9. 138
      crispy_layout_mixin.py
  10. 77
      crud.py
  11. 7
      crud_tests/layouts.yaml
  12. 20
      crud_tests/test_flux.py
  13. 9
      crud_tests/views.py
  14. 11
      lexml/layouts.yaml
  15. 23
      lexml/views.py
  16. 70
      materia/forms.py
  17. 111
      materia/layouts.yaml
  18. 221
      materia/views.py
  19. 20
      norma/forms.py
  20. 31
      norma/layouts.yaml
  21. 61
      norma/views.py
  22. 4
      painel/layouts.yaml
  23. 8
      painel/views.py
  24. 46
      parlamentares/forms.py
  25. 69
      parlamentares/layouts.yaml
  26. 142
      parlamentares/views.py
  27. 62
      protocoloadm/forms.py
  28. 48
      protocoloadm/layouts.yaml
  29. 78
      protocoloadm/views.py
  30. 1
      requirements/requirements.txt
  31. 37
      sapl/layout.py
  32. 14
      sessao/forms.py
  33. 41
      sessao/layouts.yaml
  34. 80
      sessao/views.py
  35. 2
      templates/crud/detail.html
  36. 29
      test_crispy_layout_mixin.py

20
base/forms.py

@ -3,8 +3,8 @@ from crispy_forms.layout import HTML, Fieldset, Layout
from django import forms
from django.forms import ModelForm
import sapl
from sapl.layout import form_actions
import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from .models import CasaLegislativa
@ -89,33 +89,33 @@ class CasaLegislativaTabelaAuxForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('codigo', 2),
('nome', 5),
('sigla', 5)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('endereco', 8),
('cep', 4)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('municipio', 10),
('uf', 2)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('telefone', 6),
('fax', 6)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('logotipo', 12)])
row6 = sapl.layout.to_row(
row6 = crispy_layout_mixin.to_row(
[('endereco_web', 12)])
row7 = sapl.layout.to_row(
row7 = crispy_layout_mixin.to_row(
[('email', 12)])
row8 = sapl.layout.to_row(
row8 = crispy_layout_mixin.to_row(
[('informacao_geral', 12)])
self.helper = FormHelper()

0
base/layouts.yaml

28
comissoes/forms.py

@ -3,9 +3,9 @@ from crispy_forms.layout import Fieldset, Layout
from django import forms
from django.forms import ModelForm
import sapl
import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from parlamentares.models import Filiacao
from sapl.layout import form_actions
from .models import Comissao, Participacao
@ -40,38 +40,38 @@ class CadastrarComissaoForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('nome', 8),
('sigla', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('tipo', 3),
('data_criacao', 3),
('unidade_deliberativa', 3),
('data_extincao', 3)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('local_reuniao', 4),
('agenda_reuniao', 4),
('telefone_reuniao', 4)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('endereco_secretaria', 4),
('telefone_secretaria', 4),
('fax_secretaria', 4)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('secretario', 6),
('email', 6)])
row6 = sapl.layout.to_row(
row6 = crispy_layout_mixin.to_row(
[('finalidade', 12)])
row7 = sapl.layout.to_row(
row7 = crispy_layout_mixin.to_row(
[('apelido_temp', 9),
('data_instalacao_temp', 3)])
row8 = sapl.layout.to_row(
row8 = crispy_layout_mixin.to_row(
[('data_final_prevista_temp', 4),
('data_prorrogada_temp', 4),
('data_fim_comissao', 4)])
@ -148,19 +148,19 @@ class ParticipacaoCadastroForm(ModelForm):
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('parlamentar_id', 4),
('cargo', 4),
('titular', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('data_designacao', 6),
('data_desligamento', 6)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('motivo_desligamento', 12)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('observacao', 12)])
self.helper.layout = Layout(

26
comissoes/layouts.yaml

@ -0,0 +1,26 @@
CargoComissao:
Período de composição de Comissão:
- nome:10 unico
Periodo:
Cargo de Comissão:
- data_inicio data_fim
TipoComissao:
Tipo Comissão:
- nome:9 sigla
- dispositivo_regimental:9 natureza
Comissao:
Dados Básicos:
- nome:9 sigla
- tipo data_criacao unidade_deliberativa data_extincao
Dados Complementares:
- local_reuniao agenda_reuniao telefone_reuniao
- endereco_secretaria telefone_secretaria fax_secretaria
- secretario:4 email
- finalidade
Temporária:
- apelido_temp:8 data_instalacao_temp
- data_final_prevista_temp data_prorrogada_temp data_fim_comissao

52
comissoes/views.py

@ -14,54 +14,10 @@ from .forms import (CadastrarComissaoForm, ComposicaoForm,
from .models import (CargoComissao, Comissao, Composicao, Participacao,
Periodo, TipoComissao)
cargo_crud = Crud(
CargoComissao, 'cargo_comissao', [
[_('Período de composição de Comissão'),
[('nome', 10), ('unico', 2)]],
])
periodo_composicao_crud = Crud(
Periodo, 'periodo_composicao_comissao', [
[_('Cargo de Comissão'),
[('data_inicio', 6), ('data_fim', 6)]],
])
tipo_comissao_crud = Crud(
TipoComissao, 'tipo_comissao', [
[_('Tipo Comissão'),
[('nome', 9), ('sigla', 3)],
[('dispositivo_regimental', 9), ('natureza', 3)]],
])
comissao_crud = Crud(
Comissao, 'modulo_comissoes', [
[_('Dados Básicos'),
[('nome', 9), ('sigla', 3)],
[('tipo', 3),
('data_criacao', 3),
('unidade_deliberativa', 3),
('data_extincao', 3)]],
[_('Dados Complementares'),
[('local_reuniao', 4),
('agenda_reuniao', 4),
('telefone_reuniao', 4)],
[('endereco_secretaria', 4),
('telefone_secretaria', 4),
('fax_secretaria', 4)],
[('secretario', 4), ('email', 8)],
[('finalidade', 12)]],
[_('Temporária'),
[('apelido_temp', 8),
('data_instalacao_temp', 4)],
[('data_final_prevista_temp', 4),
('data_prorrogada_temp', 4),
('data_fim_comissao', 4)]],
])
cargo_crud = Crud(CargoComissao, 'cargo_comissao')
periodo_composicao_crud = Crud(Periodo, 'periodo_composicao_comissao')
tipo_comissao_crud = Crud(TipoComissao, 'tipo_comissao')
comissao_crud = Crud(Comissao, 'modulo_comissoes')
class CadastrarComissaoView(FormMixin, GenericView):

2
compilacao/forms.py

@ -12,7 +12,7 @@ from compilacao.models import (NOTAS_PUBLICIDADE_CHOICES,
Publicacao, TextoArticulado, TipoNota,
TipoPublicacao, TipoTextoArticulado, TipoVide,
VeiculoPublicacao, Vide)
from sapl.layout import SaplFormLayout, to_column, to_row
from crispy_layout_mixin import SaplFormLayout, to_column, to_row
from sapl.utils import YES_NO_CHOICES
error_messages = {

39
compilacao/layouts.yaml

@ -0,0 +1,39 @@
TipoNota:
Tipo da Nota:
- sigla:2 nome
- modelo
TipoVide:
Tipo de Vide:
- sigla:2 nome
TipoPublicacao:
Tipo de Publicação:
- sigla:2 nome
VeiculoPublicacao:
Veículo de Publicação:
- sigla:2 nome
PerfilEstruturalTextoArticulado:
Perfil Estrutural de Textos Articulados:
- sigla:2 nome
TipoDispositivo:
Dados Básicos:
- nome:8 class_css
Configurações para Edição do Rótulo:
- rotulo_prefixo_texto rotulo_sufixo_texto rotulo_ordinal contagem_continua
Configurações para Renderização de Rótulo e Texto:
- rotulo_prefixo_html rotulo_sufixo_html
- texto_prefixo_html dispositivo_de_articulacao texto_sufixo_html
Configurações para Nota Automática:
- nota_automatica_prefixo_html nota_automatica_sufixo_html
Configurações para Variações Numéricas:
- formato_variacao0
- rotulo_separador_variacao01:5 formato_variacao1
- rotulo_separador_variacao12:5 formato_variacao2
- rotulo_separador_variacao23:5 formato_variacao3
- rotulo_separador_variacao34:5 formato_variacao4
- rotulo_separador_variacao45:5 formato_variacao5

87
compilacao/views.py

@ -42,86 +42,13 @@ DISPOSITIVO_SELECT_RELATED = (
'ta_publicado',
'ta',)
tipo_nota_crud = Crud(
TipoNota, 'tipo_nota', [
[_('Tipo da Nota'),
[('sigla', 2), ('nome', 10)],
[('modelo', 12)]],
])
tipo_vide_crud = Crud(
TipoVide, 'tipo_vide', [
[_('Tipo de Vide'),
[('sigla', 2), ('nome', 10)]],
])
tipo_publicacao_crud = Crud(
TipoPublicacao, 'tipo_publicacao', [
[_('Tipo de Publicação'),
[('sigla', 2), ('nome', 10)]],
])
veiculo_publicacao_crud = Crud(
VeiculoPublicacao, 'veiculo_publicacao', [
[_('Veículo de Publicação'),
[('sigla', 2), ('nome', 10)]],
])
perfil_estr_txt_norm = Crud(
PerfilEstruturalTextoArticulado, 'perfil_estrutural', [
[_('Perfil Estrutural de Textos Articulados'),
[('sigla', 2), ('nome', 10)]],
])
tipo_dispositivo_crud = Crud(
TipoDispositivo, 'tipo_dispositivo', [
[_('Dados Básicos'),
[('nome', 8), ('class_css', 4)]],
[_('Configurações para Edição do Rótulo'),
[('rotulo_prefixo_texto', 3),
('rotulo_sufixo_texto', 3),
('rotulo_ordinal', 3),
('contagem_continua', 3)],
],
[_('Configurações para Renderização de Rótulo e Texto'),
[('rotulo_prefixo_html', 6),
('rotulo_sufixo_html', 6), ],
[('texto_prefixo_html', 4),
('dispositivo_de_articulacao', 4),
('texto_sufixo_html', 4)],
],
[_('Configurações para Nota Automática'),
[('nota_automatica_prefixo_html', 6),
('nota_automatica_sufixo_html', 6),
],
],
[_('Configurações para Variações Numéricas'),
[('formato_variacao0', 12)],
[('rotulo_separador_variacao01', 5), ('formato_variacao1', 7), ],
[('rotulo_separador_variacao12', 5), ('formato_variacao2', 7), ],
[('rotulo_separador_variacao23', 5), ('formato_variacao3', 7), ],
[('rotulo_separador_variacao34', 5), ('formato_variacao4', 7), ],
[('rotulo_separador_variacao45', 5), ('formato_variacao5', 7), ],
],
])
tipo_nota_crud = Crud(TipoNota, 'tipo_nota')
tipo_vide_crud = Crud(TipoVide, 'tipo_vide')
tipo_publicacao_crud = Crud(TipoPublicacao, 'tipo_publicacao')
veiculo_publicacao_crud = Crud(VeiculoPublicacao, 'veiculo_publicacao')
perfil_estr_txt_norm = Crud(PerfilEstruturalTextoArticulado,
'perfil_estrutural')
tipo_dispositivo_crud = Crud(TipoDispositivo, 'tipo_dispositivo')
class IntegracaoTaView(TemplateView):

138
crispy_layout_mixin.py

@ -0,0 +1,138 @@
from math import ceil
from os.path import dirname, join
import rtyaml
from crispy_forms.bootstrap import FormActions
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Div, Fieldset, Layout, Submit
from django.utils.translation import ugettext as _
def to_column(name_span):
fieldname, span = name_span
return Div(fieldname, css_class='col-md-%d' % span)
def to_row(names_spans):
return Div(*map(to_column, names_spans), css_class='row-fluid')
def to_fieldsets(fields):
for field in fields:
if isinstance(field, list):
legend, *row_specs = field
rows = [to_row(name_span_list) for name_span_list in row_specs]
yield Fieldset(legend, *rows)
else:
yield field
def form_actions(more=[], save_label=_('Salvar')):
return FormActions(
Submit('salvar', save_label, css_class='pull-right'), *more)
class SaplFormLayout(Layout):
def __init__(self, *fields):
buttons = form_actions(more=[
HTML('<a href="{{ view.cancel_url }}"'
' class="btn btn-inverse">%s</a>' % _('Cancelar'))])
_fields = list(to_fieldsets(fields)) + [to_row([(buttons, 12)])]
super(SaplFormLayout, self).__init__(*_fields)
def get_field_display(obj, fieldname):
field = obj._meta.get_field(fieldname)
verbose_name = str(field.verbose_name)
if field.choices:
value = getattr(obj, 'get_%s_display' % fieldname)()
else:
value = getattr(obj, fieldname)
if value is None:
display = ''
elif 'date' in str(type(value)):
display = value.strftime("%d/%m/%Y") # TODO: localize
elif 'bool' in str(type(value)):
display = 'Sim' if value else 'Não'
else:
display = str(value)
return verbose_name, display
class CrispyLayoutFormMixin(object):
def get_layout(self):
filename = join(
dirname(self.model._meta.app_config.models_module.__file__),
'layouts.yaml')
return read_layout_from_yaml(filename, self.model.__name__)
@property
def fields(self):
'''Returns all fields in the layout'''
return [fieldname for legend_rows in self.get_layout()
for row in legend_rows[1:]
for fieldname, span in row]
def get_form(self, form_class=None):
form = super(CrispyLayoutFormMixin, self).get_form(form_class)
form.helper = FormHelper()
form.helper.layout = SaplFormLayout(*self.get_layout())
return form
@property
def list_field_names(self):
'''The list of field names to display on table
This base implementation returns the field names
in the first fieldset of the layout.
'''
rows = self.get_layout()[0][1:]
return [fieldname for row in rows for fieldname, __ in row]
def get_column(self, fieldname, span):
obj = self.get_object()
verbose_name, text = get_field_display(obj, fieldname)
return {
'id': fieldname,
'span': span,
'verbose_name': verbose_name,
'text': text,
}
@property
def layout_display(self):
return [
{'legend': legend,
'rows': [[self.get_column(fieldname, span)
for fieldname, span in row]
for row in rows]
} for legend, *rows in self.get_layout()]
def read_yaml_from_file(filename):
# TODO cache this at application level
with open(filename, 'r') as yamlfile:
return rtyaml.load(yamlfile)
def read_layout_from_yaml(filename, key):
# TODO cache this at application level
yaml = read_yaml_from_file(filename)
base = yaml[key]
def line_to_namespans(line):
split = [cell.split(':') for cell in line.split()]
namespans = [[s[0], int(s[1]) if len(s) > 1 else 0] for s in split]
remaining = 12 - sum(s for n, s in namespans)
nondefined = [ns for ns in namespans if not ns[1]]
while nondefined:
span = ceil(remaining / len(nondefined))
namespan = nondefined.pop(0)
namespan[1] = span
remaining = remaining - span
return list(map(tuple, namespans))
return [[legend] + [line_to_namespans(l) for l in lines]
for legend, lines in base.items()]

77
crud.py

@ -1,13 +1,11 @@
from braces.views import FormMessagesMixin
from crispy_forms.helper import FormHelper
from django import forms
from django.conf.urls import url
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from django.views.generic import (CreateView, DeleteView, DetailView, ListView,
UpdateView)
from sapl.layout import SaplFormLayout
from crispy_layout_mixin import CrispyLayoutFormMixin, get_field_display
def from_to(start, end):
@ -41,72 +39,6 @@ def make_pagination(index, num_pages):
return head + [None] + tail
def get_field_display(obj, fieldname):
field = obj._meta.get_field(fieldname)
verbose_name = str(field.verbose_name)
if field.choices:
value = getattr(obj, 'get_%s_display' % fieldname)()
else:
value = getattr(obj, fieldname)
if value is None:
display = ''
elif 'date' in str(type(value)):
display = value.strftime("%d/%m/%Y") # TODO: localize
elif 'bool' in str(type(value)):
display = 'Sim' if value else 'Não'
else:
display = str(value)
return verbose_name, display
class CrispyLayoutFormMixin(object):
def get_form_class(self):
layout = self.layout
class CrispyForm(forms.ModelForm):
class Meta:
model = self.model
exclude = self.exclude
def __init__(self, *args, **kwargs):
super(CrispyForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = SaplFormLayout(*layout)
return CrispyForm
@property
def list_field_names(self):
'''The list of field names to display on table
This base implementation returns the field names
in the first fieldset of the layout.
'''
rows = self.layout[0][1:]
return [fieldname for row in rows for fieldname, __ in row]
def get_column(self, fieldname, span):
obj = self.get_object()
verbose_name, text = get_field_display(obj, fieldname)
return {
'id': fieldname,
'span': span,
'verbose_name': verbose_name,
'text': text,
}
@property
def fieldsets(self):
return [
{'legend': legend,
'rows': [[self.get_column(fieldname, span)
for fieldname, span in row]
for row in rows]
} for legend, *rows in self.layout]
class BaseCrudMixin(CrispyLayoutFormMixin):
@property
@ -247,21 +179,18 @@ class CrudDeleteMixin(FormMessagesMixin):
class Crud(object):
def __init__(self, model, help_path, layout,
def __init__(self, model, help_path,
base_mixin=BaseCrudMixin,
list_mixin=CrudListMixin,
create_mixin=CrudCreateMixin,
detail_mixin=CrudDetailMixin,
update_mixin=CrudUpdateMixin,
delete_mixin=CrudDeleteMixin,
exclude=[]):
delete_mixin=CrudDeleteMixin):
class CrudMixin(base_mixin):
pass
CrudMixin.model = model
CrudMixin.help_path = help_path
CrudMixin.layout = layout
CrudMixin.exclude = exclude
class CrudListView(CrudMixin, list_mixin, ListView):
pass

7
crud_tests/layouts.yaml

@ -0,0 +1,7 @@
Country:
Basic Data:
- name:9 continent
- population is_cold
More Details:
- description

20
crud_tests/test_flux.py

@ -79,7 +79,9 @@ def test_get_field_display():
def test_layout_fieldnames(_layout, result):
class StubMixin(CrispyLayoutFormMixin):
layout = _layout
def get_layout(self):
return _layout
view = StubMixin()
assert view.list_field_names == result
@ -93,12 +95,14 @@ def test_layout_detail_fieldsets(monkeypatch):
is_cold=False)
class StubMixin(CrispyLayoutFormMixin):
layout = [['Basic Data',
[('name', 9), ('continent', 3)],
[('population', 6), ('is_cold', 6)]
],
['More Details', [('description', 12)]],
]
def get_layout(self):
return [['Basic Data',
[('name', 9), ('continent', 3)],
[('population', 6), ('is_cold', 6)]
],
['More Details', [('description', 12)]],
]
def get_object(self):
return stub
@ -108,7 +112,7 @@ def test_layout_detail_fieldsets(monkeypatch):
# to test None displayed as empty string
assert stub.population is None
assert view.fieldsets == [
assert view.layout_display == [
{'legend': 'Basic Data',
'rows': [[{'id': 'name',
'span': 9,

9
crud_tests/views.py

@ -8,11 +8,6 @@ class CountryCrudListMixin(CrudListMixin):
country_crud = Crud(
Country, 'help_path', [
['Basic Data',
[('name', 9), ('continent', 3)],
[('population', 6), ('is_cold', 6)]
],
['More Details', [('description', 12)]],
],
Country,
'help_path',
list_mixin=CountryCrudListMixin)

11
lexml/layouts.yaml

@ -0,0 +1,11 @@
LexmlProvedor:
Provedor Lexml:
- id_provedor:2 nome
- id_responsavel:2 nome_responsavel email_responsavel
- xml
LexmlPublicador:
Publicador Lexml:
- id_publicador:2 nome sigla
- id_responsavel:2 nome_responsavel email_responsavel

23
lexml/views.py

@ -4,24 +4,5 @@ from crud import Crud
from .models import LexmlProvedor, LexmlPublicador
lexml_provedor_crud = Crud(
LexmlProvedor, 'lexml_provedor', [
[_('Provedor Lexml'),
[('id_provedor', 2),
('nome', 10)],
[('id_responsavel', 2), ('nome_responsavel', 5),
('email_responsavel', 5)],
[('xml', 12)]],
])
lexml_publicador_crud = Crud(
LexmlPublicador, 'lexml_publicador', [
[_('Publicador Lexml'),
[('id_publicador', 2),
('nome', 5), ('sigla', 5)],
[('id_responsavel', 2), ('nome_responsavel', 5),
('email_responsavel', 5)]],
])
lexml_provedor_crud = Crud(LexmlProvedor, 'lexml_provedor')
lexml_publicador_crud = Crud(LexmlPublicador, 'lexml_publicador')

70
materia/forms.py

@ -6,10 +6,10 @@ from django import forms
from django.forms import ModelForm
from django.utils.safestring import mark_safe
import sapl
import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from norma.models import LegislacaoCitada, TipoNormaJuridica
from parlamentares.models import Parlamentar, Partido
from sapl.layout import form_actions
from .models import (AcompanhamentoMateria, Anexada, Autor, DespachoInicial,
DocumentoAcessorio, MateriaLegislativa, Numeracao, Origem,
@ -87,15 +87,15 @@ class ProposicaoForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('tipo', 12)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('descricao', 12)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('tipo_materia', 4),
('numero_materia', 4),
('ano_materia', 4)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('texto_original', 10)])
row4.append(
@ -118,7 +118,7 @@ class AcompanhamentoMateriaForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row([('email', 10)])
row1 = crispy_layout_mixin.to_row([('email', 10)])
row1.append(
Column(form_actions(save_label='Cadastrar'), css_class='col-md-2')
@ -167,15 +167,15 @@ class DocumentoAcessorioForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('tipo', 4),
('nome', 4),
('data', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('autor', 12)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('ementa', 12)])
self.helper = FormHelper()
@ -252,23 +252,23 @@ class TramitacaoForm(ModelForm):
'texto']
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('data_tramitacao', 6),
('unidade_tramitacao_local', 6)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('status', 5),
('turno', 5),
('urgente', 2)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('unidade_tramitacao_destino', 12)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('data_encaminhamento', 6),
('data_fim_prazo', 6)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('texto', 12)])
self.helper = FormHelper()
@ -339,24 +339,24 @@ class LegislacaoCitadaForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('tipo', 4),
('numero', 4),
('ano', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('disposicao', 3),
('parte', 3),
('livro', 3),
('titulo', 3)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('capitulo', 3),
('secao', 3),
('subsecao', 3),
('artigo', 3)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('paragrafo', 3),
('inciso', 3),
('alinea', 3),
@ -407,9 +407,9 @@ class NumeracaoForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('tipo_materia', 12)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('numero_materia', 4),
('ano_materia', 4),
('data_materia', 4)])
@ -474,11 +474,11 @@ class MateriaAnexadaForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('tipo', 4),
('numero', 4),
('ano', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('data_anexacao', 6),
('data_desanexacao', 6)])
@ -517,21 +517,21 @@ class FormularioSimplificadoForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('tipo', 4),
('numero', 4),
('ano', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('data_apresentacao', 4),
('numero_protocolo', 4),
('regime_tramitacao', 4)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('texto_original', 9),
('em_tramitacao', 3)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('ementa', 12)])
self.helper = FormHelper()
@ -731,29 +731,29 @@ class MateriaLegislativaPesquisaForm(forms.Form):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('tipo', 12)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('numero', 4),
('ano', 4),
('numero_protocolo', 4)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('data_apresentacao', 6),
('data_publicacao', 6)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('autor', 6),
('partido_autor', 6)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('tipo_autor', 6),
('relator', 6)])
row6 = sapl.layout.to_row(
row6 = crispy_layout_mixin.to_row(
[('local_origem_externa', 6),
('localizacao', 6)])
row7 = sapl.layout.to_row(
row7 = crispy_layout_mixin.to_row(
[('tramitacao', 4),
('situacao', 4),
('ordem', 4)])
row8 = sapl.layout.to_row(
row8 = crispy_layout_mixin.to_row(
[('assunto', 12)])
self.helper = FormHelper()

111
materia/layouts.yaml

@ -0,0 +1,111 @@
Origem:
Origem:
- nome:8 sigla
TipoMateriaLegislativa:
Tipo Matéria Legislativa:
- sigla:4 descricao
RegimeTramitacao:
Tipo de Documento:
- descricao
TipoDocumento:
Regime Tramitação:
- descricao
TipoFimRelatoria:
Tipo Fim de Relatoria:
- descricao
MateriaLegislativa:
Identificação Básica:
- tipo numero ano
- data_apresentacao numero_protocolo tipo_apresentacao
- texto_original
Outras Informações:
- apelido dias_prazo polemica
- objeto regime_tramitacao em_tramitacao
- data_fim_prazo data_publicacao complementar
Origem Externa:
- tipo_origem_externa numero_origem_externa ano_origem_externa
- local_origem_externa data_origem_externa
Dados Textuais:
- ementa
- indexacao
- observacao
Anexada:
Matéria Legislativa:
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME
- data_anexacao data_desanexacao
Matéria Anexada:
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME
- data_anexacao data_desanexacao
TipoAutor:
Tipo Autor:
- descricao
Autor:
Autor:
- tipo:3 nome
- username
Autoria:
Autoria:
- tip_autor_FIXME nom_autor_FIXME primeiro_autor
DocumentoAcessorio:
Documento Acessório:
- tipo nome
- data autor
- nom_arquivo_FIXME
- ementa
- txt_observacao_FIXME
Numeracao:
Numeração:
- tipo_materia numero_materia
- ano_materia data_materia
Orgao:
Órgão:
- nome:4 sigla telefone endereco unidade_deliberativa
Relatoria:
Relatoria:
- data_designacao_relator
- dados_FIXME
- data_destituicao_relator tipo_fim_relatoria
TipoProposicao:
Tipo Proposição:
- descricao
- materia_ou_documento tipo_documento
- modelo
Proposicao:
Proposição:
- tipo dat_criacao_FIXME data_recebimento
- descricao_FIXME
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME
- nom_arquivo_FIXME modelo_FIXME
StatusTramitacao:
Status Tramitação:
- indicador:3 sigla:2 descricao
UnidadeTramitacao:
Unidade Tramitação:
- orgao
- comissao
- parlamentar
Tramitacao:
Tramitação:
- cod_ult_tram_dest_FIXME unidade_tramitacao_local
- status turno urgente
- unidade_tramitacao_destino data_encaminhamento data_fim_prazo
- texto

221
materia/views.py

@ -37,200 +37,25 @@ from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria,
TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao,
Tramitacao, UnidadeTramitacao)
origem_crud = Crud(
Origem, 'origem', [
[_('Origem'),
[('nome', 8), ('sigla', 4)]],
])
tipo_materia_crud = Crud(
TipoMateriaLegislativa, 'tipo_materia_legislativa', [
[_('Tipo Matéria Legislativa'),
[('sigla', 4), ('descricao', 8)]],
])
regime_tramitacao_crud = Crud(
RegimeTramitacao, 'regime_tramitacao', [
[_('Tipo de Documento'),
[('descricao', 12)]],
])
tipo_documento_crud = Crud(
TipoDocumento, 'tipo_documento', [
[_('Regime Tramitação'),
[('descricao', 12)]],
])
tipo_fim_relatoria_crud = Crud(
TipoFimRelatoria, 'fim_relatoria', [
[_('Tipo Fim de Relatoria'),
[('descricao', 12)]],
])
materia_legislativa_crud = Crud(
MateriaLegislativa, '', [
[_('Identificação Básica'),
[('tipo', 4), ('numero', 4), ('ano', 4)],
[('data_apresentacao', 4),
('numero_protocolo', 4),
('tipo_apresentacao', 4)],
[('texto_original', 12)]],
[_('Outras Informações'),
[('apelido', 4), ('dias_prazo', 4), ('polemica', 4)],
[('objeto', 4), ('regime_tramitacao', 4), ('em_tramitacao', 4)],
[('data_fim_prazo', 4),
('data_publicacao', 4),
('complementar', 4)]],
[_('Origem Externa'),
[('tipo_origem_externa', 4),
('numero_origem_externa', 4),
('ano_origem_externa', 4)],
[('local_origem_externa', 6), ('data_origem_externa', 6)]],
[_('Dados Textuais'),
[('ementa', 12)],
[('indexacao', 12)],
[('observacao', 12)]],
], exclude=['anexadas'])
Anexada_crud = Crud(
Anexada, '', [
[_('Matéria Legislativa'),
[('tip_id_basica_FIXME', 4),
('num_ident_basica_FIXME', 4),
('ano_ident_basica_FIXME', 4)],
[('data_anexacao', 6), ('data_desanexacao', 6)]],
[_('Matéria Anexada'),
[('tip_id_basica_FIXME', 4),
('num_ident_basica_FIXME', 4),
('ano_ident_basica_FIXME', 4)],
[('data_anexacao', 6), ('data_desanexacao', 6)]],
])
tipo_autor_crud = Crud(
TipoAutor, 'tipo_autor', [
[_('Tipo Autor'),
[('descricao', 12)]],
])
autor_crud = Crud(
Autor, 'autor', [
[_('Autor'),
[('tipo', 3), ('nome', 9)],
[('username', 12)]],
])
autoria_crud = Crud(
Autoria, '', [
[_('Autoria'),
[('tip_autor_FIXME', 4),
('nom_autor_FIXME', 4),
('primeiro_autor', 4)]],
])
documento_acessorio_crud = Crud(
DocumentoAcessorio, '', [
[_('Documento Acessório'),
[('tipo', 6), ('nome', 6)],
[('data', 6), ('autor', 6)],
[('nom_arquivo_FIXME', 12)],
[('ementa', 12)],
[('txt_observacao_FIXME', 12)]],
])
numeracao_crud = Crud(
Numeracao, '', [
[_('Numeração'),
[('tipo_materia', 6), ('numero_materia', 6)],
[('ano_materia', 6), ('data_materia', 6)]],
])
orgao_crud = Crud(
Orgao, 'orgao', [
[_('Órgão'),
[('nome', 4),
('sigla', 2),
('telefone', 2),
('endereco', 2),
('unidade_deliberativa', 2)]],
])
relatoria_crud = Crud(
Relatoria, '', [
[_('Relatoria'),
[('data_designacao_relator', 12)],
[('dados_FIXME', 12)],
[('data_destituicao_relator', 6), ('tipo_fim_relatoria', 6)]],
])
tipo_proposicao_crud = Crud(
TipoProposicao, 'tipo_proposicao', [
[_('Tipo Proposição'),
[('descricao', 12)],
[('materia_ou_documento', 6), ('tipo_documento', 6)],
[('modelo', 12)]],
])
proposicao_crud = Crud(
Proposicao, '', [
[_('Proposição'),
[('tipo', 4), ('dat_criacao_FIXME', 4), ('data_recebimento', 4)],
[('descricao_FIXME', 12)],
[('tip_id_basica_FIXME', 4),
('num_ident_basica_FIXME', 4),
('ano_ident_basica_FIXME', 4)],
[('nom_arquivo_FIXME', 6), ('modelo_FIXME', 6)]],
])
status_tramitacao_crud = Crud(
StatusTramitacao, 'status_tramitacao', [
[_('Status Tramitação'),
[('indicador', 3),
('sigla', 2),
('descricao', 7)]],
])
unidade_tramitacao_crud = Crud(
UnidadeTramitacao, 'unidade_tramitacao', [
[_('Unidade Tramitação'),
[('orgao', 12)],
[('comissao', 12)],
[('parlamentar', 12)]],
])
tramitacao_crud = Crud(
Tramitacao, '', [
[_('Tramitação'),
[('cod_ult_tram_dest_FIXME', 6), ('unidade_tramitacao_local', 6)],
[('status', 4), ('turno', 4), ('urgente', 4)],
[('unidade_tramitacao_destino', 4),
('data_encaminhamento', 4),
('data_fim_prazo', 4)],
[('texto', 12)]],
])
origem_crud = Crud(Origem, 'origem')
tipo_materia_crud = Crud(TipoMateriaLegislativa, 'tipo_materia_legislativa')
regime_tramitacao_crud = Crud(RegimeTramitacao, 'regime_tramitacao')
tipo_documento_crud = Crud(TipoDocumento, 'tipo_documento')
tipo_fim_relatoria_crud = Crud(TipoFimRelatoria, 'fim_relatoria')
materia_legislativa_crud = Crud(MateriaLegislativa, '')
Anexada_crud = Crud(Anexada, '')
tipo_autor_crud = Crud(TipoAutor, 'tipo_autor')
autor_crud = Crud(Autor, 'autor')
autoria_crud = Crud(Autoria, '')
documento_acessorio_crud = Crud(DocumentoAcessorio, '')
numeracao_crud = Crud(Numeracao, '')
orgao_crud = Crud(Orgao, 'orgao')
relatoria_crud = Crud(Relatoria, '')
tipo_proposicao_crud = Crud(TipoProposicao, 'tipo_proposicao')
proposicao_crud = Crud(Proposicao, '')
status_tramitacao_crud = Crud(StatusTramitacao, 'status_tramitacao')
unidade_tramitacao_crud = Crud(UnidadeTramitacao, 'unidade_tramitacao')
tramitacao_crud = Crud(Tramitacao, '')
class FormularioSimplificadoView(FormMixin, GenericView):
@ -313,8 +138,8 @@ class MateriaAnexadaView(FormMixin, GenericView):
if mat_principal.tipo == mat_anexada.tipo:
msg = 'A matéria a ser anexada não pode ser do mesmo \
tipo da matéria principal.'
msg = _('A matéria a ser anexada não pode ser do mesmo'
' tipo da matéria principal.')
messages.add_message(request, messages.INFO, msg)
return self.render_to_response(
{'form': form,
@ -332,8 +157,8 @@ class MateriaAnexadaView(FormMixin, GenericView):
anexada.save()
except ObjectDoesNotExist:
msg = 'A matéria a ser anexada não existe no cadastro \
de matérias legislativas.'
msg = _('A matéria a ser anexada não existe no cadastro'
' de matérias legislativas.')
messages.add_message(request, messages.INFO, msg)
return self.render_to_response(
{'form': form,

20
norma/forms.py

@ -4,9 +4,9 @@ from django import forms
from django.forms import ModelForm
from django.utils.safestring import mark_safe
import sapl
import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from materia.models import TipoMateriaLegislativa
from sapl.layout import form_actions
from .models import NormaJuridica
@ -58,37 +58,37 @@ class NormaJuridicaForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('tipo', 4),
('numero', 4),
('ano', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('data', 4),
('esfera_federacao', 4),
('complemento', 4)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('tipo_materia', 4),
('numero_materia', 4),
('ano_materia', 4)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('data_publicacao', 3),
('veiculo_publicacao', 3),
('pagina_inicio_publicacao', 3),
('pagina_fim_publicacao', 3)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('texto_integral', 12)])
row6 = sapl.layout.to_row(
row6 = crispy_layout_mixin.to_row(
[('ementa', 12)])
row7 = sapl.layout.to_row(
row7 = crispy_layout_mixin.to_row(
[('indexacao', 12)])
row8 = sapl.layout.to_row(
row8 = crispy_layout_mixin.to_row(
[('observacao', 12)])
self.helper = FormHelper()

31
norma/layouts.yaml

@ -0,0 +1,31 @@
AssuntoNorma:
Assunto Norma Jurídica:
- assunto descricao
TipoNormaJuridica:
Tipo Norma Jurídica:
- descricao sigla equivalente_lexml
NormaJuridica:
Identificação Básica:
- tipo numero ano
- data esfera_federacao complemento
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME
- data_publicacao veiculo_publicacao pagina_inicio_publicacao pagina_fim_publicacao
- file_FIXME tip_situacao_norma_FIXME
- ementa
- indexacao
- observacao
NormaJuridica:
Identificação Básica:
- tipo:5 numero:2 ano:2 data
- ementa
LegislacaoCitada:
Legislação Citada:
- tip_norma_FIXME num_norma_FIXME ano_norma_FIXME
- disposicoes parte livro titulo
- capitulo secao subsecao artigo
- paragrafo inciso alinea item

61
norma/views.py

@ -15,62 +15,11 @@ from .forms import NormaJuridicaForm
from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
TipoNormaJuridica)
assunto_norma_crud = Crud(
AssuntoNorma, 'assunto_norma_juridica', [
[_('Assunto Norma Jurídica'),
[('assunto', 6), ('descricao', 6)]],
])
tipo_norma_crud = Crud(
TipoNormaJuridica, 'tipo_norma_juridica', [
[_('Tipo Norma Jurídica'),
[('descricao', 4),
('sigla', 4),
('equivalente_lexml', 4)]],
])
norma_crud = Crud(
NormaJuridica, '', [
[_('Identificação Básica'),
[('tipo', 4), ('numero', 4), ('ano', 4)],
[('data', 4), ('esfera_federacao', 4), ('complemento', 4)],
[('tip_id_basica_FIXME', 4),
('num_ident_basica_FIXME', 4),
('ano_ident_basica_FIXME', 4)],
[('data_publicacao', 3),
('veiculo_publicacao', 3),
('pagina_inicio_publicacao', 3),
('pagina_fim_publicacao', 3)],
[('file_FIXME', 6), ('tip_situacao_norma_FIXME', 6)],
[('ementa', 12)],
[('indexacao', 12)],
[('observacao', 12)]],
])
norma_temporario_crud = Crud(
NormaJuridica, 'normajuridica', [
[_('Identificação Básica'),
[('tipo', 5), ('numero', 2), ('ano', 2), ('data', 3)],
[('ementa', 12)]],
])
legislacao_citada_crud = Crud(
LegislacaoCitada, '', [
[_('Legislação Citada'),
[('tip_norma_FIXME', 4),
('num_norma_FIXME', 4),
('ano_norma_FIXME', 4)],
[('disposicoes', 3), ('parte', 3), ('livro', 3), ('titulo', 3)],
[('capitulo', 3), ('secao', 3), ('subsecao', 3), ('artigo', 3)],
[('paragrafo', 3), ('inciso', 3), ('alinea', 3), ('item', 3)]],
])
assunto_norma_crud = Crud(AssuntoNorma, 'assunto_norma_juridica')
tipo_norma_crud = Crud(TipoNormaJuridica, 'tipo_norma_juridica')
norma_crud = Crud(NormaJuridica, '')
norma_temporario_crud = Crud(NormaJuridica, 'normajuridica')
legislacao_citada_crud = Crud(LegislacaoCitada, '')
class NormaIncluirView(FormMixin, GenericView):

4
painel/layouts.yaml

@ -0,0 +1,4 @@
Cronometro:
Cronometro:
- status:3 data_cronometro:6 tipo

8
painel/views.py

@ -14,13 +14,7 @@ from sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia,
from .models import Cronometro
cronometro_painel_crud = Crud(
Cronometro, '', [
[_('Cronometro'),
[('status', 3), ('data_cronometro', 6),
('tipo', 3)]],
])
cronometro_painel_crud = Crud(Cronometro, '')
def controlador_painel(request):

46
parlamentares/forms.py

@ -4,8 +4,8 @@ from django import forms
from django.forms import ModelForm
from django.utils.safestring import mark_safe
import sapl
from sapl.layout import form_actions
import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from .models import Dependente, Filiacao, Mandato, Parlamentar
@ -103,55 +103,55 @@ class ParlamentaresForm (ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('nome_parlamentar', 8), ('ativo', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('nome_completo', 12)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('nivel_instrucao', 4),
('sexo', 4),
('data_nascimento', 4)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('cpf', 4),
('rg', 4),
('titulo_eleitor', 4)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('situacao_militar', 6),
('profissao', 6)])
row6 = sapl.layout.to_row(
row6 = crispy_layout_mixin.to_row(
[('endereco_web', 12)])
row7 = sapl.layout.to_row(
row7 = crispy_layout_mixin.to_row(
[('email', 12)])
row8 = sapl.layout.to_row(
row8 = crispy_layout_mixin.to_row(
[('numero_gab_parlamentar', 4),
('telefone', 4),
('fax', 4)])
row9 = sapl.layout.to_row(
row9 = crispy_layout_mixin.to_row(
[('endereco_residencia', 6),
('cep_residencia', 6)])
row10 = sapl.layout.to_row(
row10 = crispy_layout_mixin.to_row(
[('municipio_residencia', 12)])
row11 = sapl.layout.to_row(
row11 = crispy_layout_mixin.to_row(
[('telefone_residencia', 6),
('fax_residencia', 6)])
row12 = sapl.layout.to_row(
row12 = crispy_layout_mixin.to_row(
[('locais_atuacao', 12)])
row13 = sapl.layout.to_row(
row13 = crispy_layout_mixin.to_row(
[('fotografia', 12)])
row14 = sapl.layout.to_row(
row14 = crispy_layout_mixin.to_row(
[('biografia', 12)])
self.helper = FormHelper()
@ -203,16 +203,16 @@ class MandatoForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('legislatura', 4),
('coligacao', 4),
('votos_recebidos', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('data_fim_mandato', 6),
('data_expedicao_diploma', 6)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('observacao', 12)])
self.helper = FormHelper()
@ -251,15 +251,15 @@ class DependenteForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('nome', 12)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('tipo', 4),
('sexo', 4),
('data_nascimento', 4)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('cpf', 4),
('rg', 4),
('titulo_eleitor', 4)])
@ -297,7 +297,7 @@ class FiliacaoForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('partido', 4),
('data', 4),
('data_desfiliacao', 4)])

69
parlamentares/layouts.yaml

@ -0,0 +1,69 @@
CargoMesa:
Cargo na Mesa:
- descricao:10 unico
Legislatura:
Legislatura:
- data_inicio data_fim data_eleicao
Coligacao:
Coligação:
- nome:5 legislatura:5 numero_votos
Partido:
Partido Político:
- nome:6 sigla data_criacao data_extincao
Dependente:
Dependentes:
- nome
- tipo sexo data_nascimento
- cpf rg titulo_eleitor
SessaoLegislativa:
Sessão Legislativa:
- numero:4 tipo:4 legislatura:4 data_inicio data_fim data_inicio_intervalo data_fim_intervalo
Parlamentar:
Cadastro do Parlamentar:
- nome_parlamentar:8 ativo
- nome_completo
- nivel_instrucao sexo data_nascimento
- cpf rg titulo_eleitor
- situacao_militar profissao
- endereco_web
- email
- numero_gab_parlamentar telefone fax
- endereco_residencia cep_residencia
- municipio_residencia
- telefone_residencia fax_residencia
- locais_atuacao
- fotografia
- biografia
Filiacao:
'Filiações Partidárias ':
- partido data data_desfiliacao
Mandato:
Mandato:
- legislatura coligacao votos_recebidos
- ind_titular_FIXME dat_inicio_mandato_FIXME data_fim_mandato data_expedicao_diploma
- observacao
TipoDependente:
Tipo de Dependente:
- descricao
NivelInstrucao:
Nível Instrução:
- descricao
TipoAfastamento:
Tipo de Afastamento:
- descricao:5 dispositivo:5 afastamento
SituacaoMilitar:
Tipo Situação Militar:
- descricao

142
parlamentares/views.py

@ -22,131 +22,19 @@ from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
TipoAfastamento, TipoDependente)
cargo_mesa_crud = Crud(
CargoMesa, 'cargo_mesa', [
[_('Cargo na Mesa'),
[('descricao', 10),
('unico', 2)]],
])
legislatura_crud = Crud(
Legislatura, 'tabelas_auxiliares#legislatura', [
[_('Legislatura'),
[('data_inicio', 4), ('data_fim', 4), ('data_eleicao', 4)]],
])
coligacao_crud = Crud(
Coligacao, 'coligacao', [
[_('Coligação'),
[('nome', 5),
('legislatura', 5),
('numero_votos', 2)]],
])
partido_crud = Crud(
Partido, 'partidos', [
[_('Partido Político'),
[('nome', 6),
('sigla', 2),
('data_criacao', 2),
('data_extincao', 2)]],
])
dependente_crud = Crud(
Dependente, '', [
[_('Dependentes'),
[('nome', 12)],
[('tipo', 4), ('sexo', 4), ('data_nascimento', 4)],
[('cpf', 4), ('rg', 4), ('titulo_eleitor', 4)]],
])
sessao_legislativa_crud = Crud(
SessaoLegislativa, 'sessao_legislativa', [
[_('Sessão Legislativa'),
[('numero', 4),
('tipo', 4),
('legislatura', 4),
('data_inicio', 6),
('data_fim', 6),
('data_inicio_intervalo', 6),
('data_fim_intervalo', 6)]],
])
parlamentar_crud = Crud(
Parlamentar, '', [
[_('Cadastro do Parlamentar'),
[('nome_parlamentar', 8), ('ativo', 4)],
[('nome_completo', 12)],
[('nivel_instrucao', 4), ('sexo', 4), ('data_nascimento', 4)],
[('cpf', 4), ('rg', 4), ('titulo_eleitor', 4)],
[('situacao_militar', 6), ('profissao', 6)],
[('endereco_web', 12)],
[('email', 12)],
[('numero_gab_parlamentar', 4), ('telefone', 4), ('fax', 4)],
[('endereco_residencia', 6), ('cep_residencia', 6)],
[('municipio_residencia', 12)],
[('telefone_residencia', 6), ('fax_residencia', 6)],
[('locais_atuacao', 12)],
[('fotografia', 12)],
[('biografia', 12)]],
])
filiacao_crud = Crud(
Filiacao, '', [
[_('Filiações Partidárias '),
[('partido', 4), ('data', 4), ('data_desfiliacao', 4)]],
])
mandato_crud = Crud(
Mandato, '', [
[_('Mandato'),
[('legislatura', 4), ('coligacao', 4), ('votos_recebidos', 4)],
[('ind_titular_FIXME', 3),
('dat_inicio_mandato_FIXME', 3),
('data_fim_mandato', 3),
('data_expedicao_diploma', 3)],
[('observacao', 12)]],
])
tipo_dependente_crud = Crud(
TipoDependente, 'tipo_dependente', [
[_('Tipo de Dependente'),
[('descricao', 12)]],
])
nivel_instrucao_crud = Crud(
NivelInstrucao, 'nivel_instrucao', [
[_('Nível Instrução'),
[('descricao', 12)]],
])
tipo_afastamento_crud = Crud(
TipoAfastamento, 'tipo_afastamento', [
[_('Tipo de Afastamento'),
[('descricao', 5), ('dispositivo', 5), ('afastamento', 2)]],
])
tipo_militar_crud = Crud(
SituacaoMilitar, 'tipo_situa_militar', [
[_('Tipo Situação Militar'),
[('descricao', 12)]],
])
cargo_mesa_crud = Crud(CargoMesa, 'cargo_mesa')
legislatura_crud = Crud(Legislatura, 'tabelas_auxiliares#legislatura')
coligacao_crud = Crud(Coligacao, 'coligacao')
partido_crud = Crud(Partido, 'partidos')
dependente_crud = Crud(Dependente, '')
sessao_legislativa_crud = Crud(SessaoLegislativa, 'sessao_legislativa')
parlamentar_crud = Crud(Parlamentar, '')
filiacao_crud = Crud(Filiacao, '')
mandato_crud = Crud(Mandato, '')
tipo_dependente_crud = Crud(TipoDependente, 'tipo_dependente')
nivel_instrucao_crud = Crud(NivelInstrucao, 'nivel_instrucao')
tipo_afastamento_crud = Crud(TipoAfastamento, 'tipo_afastamento')
tipo_militar_crud = Crud(SituacaoMilitar, 'tipo_situa_militar')
class ParlamentaresView(GenericView):
@ -156,8 +44,8 @@ class ParlamentaresView(GenericView):
form = ParlamentaresListForm()
if not Legislatura.objects.all():
mensagem = "Cadastre alguma Legislatura antes\
de cadastrar algum Parlamentar"
mensagem = _('Cadastre alguma Legislatura antes'
' de cadastrar algum Parlamentar')
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'legislaturas': [],

62
protocoloadm/forms.py

@ -6,9 +6,9 @@ from django import forms
from django.forms import ModelForm
from django.utils.safestring import mark_safe
import sapl
import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from materia.models import TipoMateriaLegislativa
from sapl.layout import form_actions
from .models import (Autor, DocumentoAcessorioAdministrativo,
DocumentoAdministrativo, TipoDocumentoAdministrativo,
@ -102,25 +102,25 @@ class ProtocoloForm(forms.Form):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('numero_protocolo', 6),
('ano', 6)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('inicial', 6),
('final', 6)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('tipo_documento', 4),
('tipo_protocolo', 4),
('tipo_materia', 4)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('interessado', 4),
('autor', 4),
('assunto', 4)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('natureza_processo', 12)])
self.helper = FormHelper()
@ -147,10 +147,10 @@ class AnularProcoloAdmForm(forms.Form):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('numero_protocolo', 6),
('ano_protocolo', 6)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('justificativa_anulacao', 12)])
self.helper = FormHelper()
@ -202,18 +202,18 @@ class ProtocoloDocumentForm(forms.Form):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('numeracao', 12)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('tipo_protocolo', 12)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('tipo_documento', 6),
('num_paginas', 6)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('assunto', 12)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('interessado', 12)])
row6 = sapl.layout.to_row(
row6 = crispy_layout_mixin.to_row(
[('observacao', 12)])
self.helper = FormHelper()
@ -274,16 +274,16 @@ class ProtocoloMateriaForm(forms.Form):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('numeracao', 12)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('tipo_materia', 6),
('num_paginas', 6)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('ementa', 12)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('autor', 12)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('observacao', 12)])
self.helper = FormHelper()
@ -348,15 +348,15 @@ class DocumentoAcessorioAdministrativoForm(ModelForm):
def __init__(self, excluir=False, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('tipo', 4),
('nome', 4),
('data', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('autor', 12)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('arquivo', 12)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('assunto', 12)])
more = []
@ -448,25 +448,25 @@ class DocumentoAdministrativoForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('tipo', 4), ('numero', 4), ('ano', 4)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('data', 6), ('numero_protocolo', 6)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('assunto', 12)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('interessado', 9), ('tramitacao', 3)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('texto_integral', 12)])
row6 = sapl.layout.to_row(
row6 = crispy_layout_mixin.to_row(
[('dias_prazo', 6), ('data_fim_prazo', 6)])
row7 = sapl.layout.to_row(
row7 = crispy_layout_mixin.to_row(
[('observacao', 12)])
self.helper = FormHelper()

48
protocoloadm/layouts.yaml

@ -0,0 +1,48 @@
TipoDocumentoAdministrativo:
Tipo Documento Administrativo:
- sigla:4 descricao
DocumentoAdministrativo:
Indentificação Básica:
- tipo numero ano
- data numero_protocolo
- assunto
- interessado tramitacao
- texto_integral
Outras Informações:
- dias_prazo data_fim_prazo
- observacao
DocumentoAcessorioAdministrativo:
Documento Acessório:
- tipo nome data
- autor
- arquivo
- assunto
StatusTramitacaoAdministrativo:
Status Tramitação Administrativo:
- indicador:3 sigla:2 descricao
TramitacaoAdministrativo:
Tramitação:
- data_tramitacao:4 unidade_tramitacao_local
- status:4 unidade_tramitacao_destino
- data_encaminhamento data_fim_prazo
- texto
Protocolo:
Indentificação Documento:
- tipo_protocolo
- tipo_documento numero_paginas
- assunto_ementa
- interessado
- observacao
Protocolo:
Indentificação da Matéria:
- tipo_materia numero_paginas
- assunto_ementa
- autor
- observacao

78
protocoloadm/views.py

@ -27,77 +27,17 @@ from .models import (Autor, DocumentoAcessorioAdministrativo,
StatusTramitacaoAdministrativo,
TipoDocumentoAdministrativo, TramitacaoAdministrativo)
tipo_documento_administrativo_crud = Crud(
TipoDocumentoAdministrativo, '', [
[_('Tipo Documento Administrativo'),
[('sigla', 4), ('descricao', 8)]],
])
documento_administrativo_crud = Crud(
DocumentoAdministrativo, '', [
[_('Indentificação Básica'),
[('tipo', 4), ('numero', 4), ('ano', 4)],
[('data', 6), ('numero_protocolo', 6)],
[('assunto', 12)],
[('interessado', 6), ('tramitacao', 6)],
[('texto_integral', 12)]],
[_('Outras Informações'),
[('dias_prazo', 6), ('data_fim_prazo', 6)],
[('observacao', 12)]],
])
tipo_documento_administrativo_crud = Crud(TipoDocumentoAdministrativo, '')
documento_administrativo_crud = Crud(DocumentoAdministrativo, '')
documento_acessorio_administrativo_crud = Crud(
DocumentoAcessorioAdministrativo, '', [
[_('Documento Acessório'),
[('tipo', 4), ('nome', 4), ('data', 4)],
[('autor', 12)],
[('arquivo', 12)],
[('assunto', 12)]],
])
DocumentoAcessorioAdministrativo, '')
status_tramitacao_administrativo_crud = Crud(
StatusTramitacaoAdministrativo, '', [
[_('Status Tramitação Administrativo'),
[('indicador', 3),
('sigla', 2),
('descricao', 7)]],
])
tramitacao_administrativo_crud = Crud(
TramitacaoAdministrativo, '', [
[_('Tramitação'),
[('data_tramitacao', 4), ('unidade_tramitacao_local', 8)],
[('status', 4), ('unidade_tramitacao_destino', 8)],
[('data_encaminhamento', 6), ('data_fim_prazo', 6)],
[('texto', 12)]],
])
protocolo_documento_crud = Crud(
Protocolo, '', [
[_('Indentificação Documento'),
[('tipo_protocolo', 12)],
[('tipo_documento', 6), ('numero_paginas', 6)],
[('assunto_ementa', 12)],
[('interessado', 12)],
[('observacao', 12)]],
])
protocolo_materia_crud = Crud(
Protocolo, '', [
[_('Indentificação da Matéria'),
[('tipo_materia', 6), ('numero_paginas', 6)],
[('assunto_ementa', 12)],
[('autor', 12)],
[('observacao', 12)]],
])
StatusTramitacaoAdministrativo, '')
tramitacao_administrativo_crud = Crud(TramitacaoAdministrativo, '')
protocolo_documento_crud = Crud(Protocolo, '')
# FIXME precisa de uma chave diferente para o layout
protocolo_materia_crud = Crud(Protocolo, '')
class ProtocoloListView(FormMixin, ListView):

1
requirements/requirements.txt

@ -15,4 +15,5 @@ libsass
psycopg2
pytz
pyyaml
rtyaml
unipath

37
sapl/layout.py

@ -1,37 +0,0 @@
from crispy_forms.bootstrap import FormActions
from crispy_forms.layout import HTML, Div, Fieldset, Layout, Submit
from django.utils.translation import ugettext as _
def to_column(name_span):
fieldname, span = name_span
return Div(fieldname, css_class='col-md-%d' % span)
def to_row(names_spans):
return Div(*map(to_column, names_spans), css_class='row-fluid')
def to_fieldsets(fields):
for field in fields:
if isinstance(field, list):
legend, *row_specs = field
rows = [to_row(name_span_list) for name_span_list in row_specs]
yield Fieldset(legend, *rows)
else:
yield field
def form_actions(more=[], save_label=_('Salvar')):
return FormActions(
Submit('salvar', save_label, css_class='pull-right'), *more)
class SaplFormLayout(Layout):
def __init__(self, *fields):
buttons = form_actions(more=[
HTML('<a href="{{ view.cancel_url }}"'
' class="btn btn-inverse">%s</a>' % _('Cancelar'))])
_fields = list(to_fieldsets(fields)) + [to_row([(buttons, 12)])]
super(SaplFormLayout, self).__init__(*_fields)

14
sessao/forms.py

@ -3,8 +3,8 @@ from crispy_forms.layout import Fieldset, Layout
from django import forms
from django.forms import ModelForm
import sapl
from sapl.layout import form_actions
import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from .models import SessaoPlenaria
@ -97,27 +97,27 @@ class SessaoForm(ModelForm):
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row(
row1 = crispy_layout_mixin.to_row(
[('numero', 3),
('tipo', 3),
('legislatura', 3),
('sessao_legislativa', 3)])
row2 = sapl.layout.to_row(
row2 = crispy_layout_mixin.to_row(
[('data_inicio', 4),
('hora_inicio', 4),
('iniciada', 4)])
row3 = sapl.layout.to_row(
row3 = crispy_layout_mixin.to_row(
[('data_fim', 4),
('hora_fim', 4),
('finalizada', 4)])
row4 = sapl.layout.to_row(
row4 = crispy_layout_mixin.to_row(
[('upload_pauta', 6),
('upload_ata', 6)])
row5 = sapl.layout.to_row(
row5 = crispy_layout_mixin.to_row(
[('url_audio', 6),
('url_video', 6)])

41
sessao/layouts.yaml

@ -0,0 +1,41 @@
TipoSessaoPlenaria:
Tipo de Sessão Plenária:
- nome quorum_minimo
SessaoPlenaria:
Dados Básicos:
- numero:1 tipo:3 legislatura sessao_legislativa
- data_inicio:5 hora_inicio:5 iniciada
- data_fim:5 hora_fim:5 finalizada
- upload_pauta upload_ata
- url_audio url_video
ExpedienteMateria:
Cadastro de Matérias do Expediente:
- data_ordem tip_sessao_FIXME numero_ordem
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME
- tipo_votacao
- observacao
OrdemDia:
Cadastro de Matérias da Ordem do Dia:
- data_ordem tip_sessao_FIXME numero_ordem
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME
- tipo_votacao
- observacao
TipoResultadoVotacao:
Tipo de Resultado da Votação:
- nome
TipoExpediente:
Tipo de Expediente:
- nome
RegistroVotacao:
Votação Simbólica:
- numero_votos_sim numero_votos_nao numero_abstencoes nao_votou_FIXME
- votacao_branco_FIXME ind_votacao_presidente_FIXME
- tipo_resultado_votacao
- observacao

80
sessao/views.py

@ -27,78 +27,14 @@ from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao,
TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria,
VotoParlamentar)
tipo_sessao_crud = Crud(
TipoSessaoPlenaria, 'tipo_sessao_plenaria', [
[_('Tipo de Sessão Plenária'),
[('nome', 6), ('quorum_minimo', 6)]],
])
sessao_crud = Crud(
SessaoPlenaria, '', [
[_('Dados Básicos'),
[('numero', 1),
('tipo', 3),
('legislatura', 4),
('sessao_legislativa', 4)],
[('data_inicio', 5), ('hora_inicio', 5), ('iniciada', 2)],
[('data_fim', 5), ('hora_fim', 5), ('finalizada', 2)],
[('upload_pauta', 6), ('upload_ata', 6)],
[('url_audio', 6), ('url_video', 6)]],
])
expediente_materia_crud = Crud(
ExpedienteMateria, '', [
[_('Cadastro de Matérias do Expediente'),
[('data_ordem', 4), ('tip_sessao_FIXME', 4), ('numero_ordem', 4)],
[('tip_id_basica_FIXME', 4),
('num_ident_basica_FIXME', 4),
('ano_ident_basica_FIXME', 4)],
[('tipo_votacao', 12)],
[('observacao', 12)]],
])
ordem_dia_crud = Crud(
OrdemDia, '', [
[_('Cadastro de Matérias da Ordem do Dia'),
[('data_ordem', 4), ('tip_sessao_FIXME', 4), ('numero_ordem', 4)],
[('tip_id_basica_FIXME', 4),
('num_ident_basica_FIXME', 4),
('ano_ident_basica_FIXME', 4)],
[('tipo_votacao', 12)],
[('observacao', 12)]],
])
tipo_sessao_crud = Crud(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
sessao_crud = Crud(SessaoPlenaria, '')
expediente_materia_crud = Crud(ExpedienteMateria, '')
ordem_dia_crud = Crud(OrdemDia, '')
tipo_resultado_votacao_crud = Crud(
TipoResultadoVotacao, 'tipo_resultado_votacao', [
[_('Tipo de Resultado da Votação'),
[('nome', 12)]],
])
tipo_expediente_crud = Crud(
TipoExpediente, 'tipo_expediente', [
[_('Tipo de Expediente'),
[('nome', 12)]],
])
registro_votacao_crud = Crud(
RegistroVotacao, '', [
[_('Votação Simbólica'),
[('numero_votos_sim', 3),
('numero_votos_nao', 3),
('numero_abstencoes', 3),
('nao_votou_FIXME', 3)],
[('votacao_branco_FIXME', 6),
('ind_votacao_presidente_FIXME', 6)],
[('tipo_resultado_votacao', 12)],
[('observacao', 12)]],
])
TipoResultadoVotacao, 'tipo_resultado_votacao')
tipo_expediente_crud = Crud(TipoExpediente, 'tipo_expediente')
registro_votacao_crud = Crud(RegistroVotacao, '')
class PresencaView(sessao_crud.CrudDetailView):
@ -646,7 +582,7 @@ class ExpedienteOrdemDiaView(sessao_crud.CrudDetailView):
return self.form_valid(form)
else:
context.update(
{'error_message': "Não foi possível salvar formulário!"})
{'error_message': _("Não foi possível salvar formulário!")})
return self.form_invalid(form)
def get_success_url(self):

2
templates/crud/detail.html

@ -14,7 +14,7 @@
</div>
{% block detail_content %}
{% for fieldset in view.fieldsets %}
{% for fieldset in view.layout_display %}
<h2 class="legend">{{ fieldset.legend }}</h2>
{% for row in fieldset.rows %}
<div class="row-fluid">

29
test_crispy_layout_mixin.py

@ -0,0 +1,29 @@
from crispy_layout_mixin import read_layout_from_yaml
def test_read_layout_from_yaml(tmpdir):
contents = '''
ModelName:
Cool Legend:
- name:9 place tiny
- field nature:2
- kind:1 date unit:5 status
More data:
- equalA equalB equalC
- highlander '''
file = tmpdir.join('zzz.yaml')
file.write(contents)
expected = [
['Cool Legend',
[('name', 9), ('place', 2), ('tiny', 1)],
[('field', 10), ('nature', 2)],
[('kind', 1), ('date', 3), ('unit', 5), ('status', 3)],
],
['More data',
[('equalA', 4), ('equalB', 4), ('equalC', 4)],
[('highlander', 12)],
],
]
assert read_layout_from_yaml(file.strpath, 'ModelName') == expected
Loading…
Cancel
Save