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. 10
      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 import forms
from django.forms import ModelForm from django.forms import ModelForm
import sapl import crispy_layout_mixin
from sapl.layout import form_actions from crispy_layout_mixin import form_actions
from .models import CasaLegislativa from .models import CasaLegislativa
@ -89,33 +89,33 @@ class CasaLegislativaTabelaAuxForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('codigo', 2), [('codigo', 2),
('nome', 5), ('nome', 5),
('sigla', 5)]) ('sigla', 5)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('endereco', 8), [('endereco', 8),
('cep', 4)]) ('cep', 4)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('municipio', 10), [('municipio', 10),
('uf', 2)]) ('uf', 2)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('telefone', 6), [('telefone', 6),
('fax', 6)]) ('fax', 6)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('logotipo', 12)]) [('logotipo', 12)])
row6 = sapl.layout.to_row( row6 = crispy_layout_mixin.to_row(
[('endereco_web', 12)]) [('endereco_web', 12)])
row7 = sapl.layout.to_row( row7 = crispy_layout_mixin.to_row(
[('email', 12)]) [('email', 12)])
row8 = sapl.layout.to_row( row8 = crispy_layout_mixin.to_row(
[('informacao_geral', 12)]) [('informacao_geral', 12)])
self.helper = FormHelper() 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 import forms
from django.forms import ModelForm from django.forms import ModelForm
import sapl import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from parlamentares.models import Filiacao from parlamentares.models import Filiacao
from sapl.layout import form_actions
from .models import Comissao, Participacao from .models import Comissao, Participacao
@ -40,38 +40,38 @@ class CadastrarComissaoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('nome', 8), [('nome', 8),
('sigla', 4)]) ('sigla', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('tipo', 3), [('tipo', 3),
('data_criacao', 3), ('data_criacao', 3),
('unidade_deliberativa', 3), ('unidade_deliberativa', 3),
('data_extincao', 3)]) ('data_extincao', 3)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('local_reuniao', 4), [('local_reuniao', 4),
('agenda_reuniao', 4), ('agenda_reuniao', 4),
('telefone_reuniao', 4)]) ('telefone_reuniao', 4)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('endereco_secretaria', 4), [('endereco_secretaria', 4),
('telefone_secretaria', 4), ('telefone_secretaria', 4),
('fax_secretaria', 4)]) ('fax_secretaria', 4)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('secretario', 6), [('secretario', 6),
('email', 6)]) ('email', 6)])
row6 = sapl.layout.to_row( row6 = crispy_layout_mixin.to_row(
[('finalidade', 12)]) [('finalidade', 12)])
row7 = sapl.layout.to_row( row7 = crispy_layout_mixin.to_row(
[('apelido_temp', 9), [('apelido_temp', 9),
('data_instalacao_temp', 3)]) ('data_instalacao_temp', 3)])
row8 = sapl.layout.to_row( row8 = crispy_layout_mixin.to_row(
[('data_final_prevista_temp', 4), [('data_final_prevista_temp', 4),
('data_prorrogada_temp', 4), ('data_prorrogada_temp', 4),
('data_fim_comissao', 4)]) ('data_fim_comissao', 4)])
@ -148,19 +148,19 @@ class ParticipacaoCadastroForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.helper = FormHelper() self.helper = FormHelper()
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('parlamentar_id', 4), [('parlamentar_id', 4),
('cargo', 4), ('cargo', 4),
('titular', 4)]) ('titular', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('data_designacao', 6), [('data_designacao', 6),
('data_desligamento', 6)]) ('data_desligamento', 6)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('motivo_desligamento', 12)]) [('motivo_desligamento', 12)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('observacao', 12)]) [('observacao', 12)])
self.helper.layout = Layout( 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, from .models import (CargoComissao, Comissao, Composicao, Participacao,
Periodo, TipoComissao) Periodo, TipoComissao)
cargo_crud = Crud( cargo_crud = Crud(CargoComissao, 'cargo_comissao')
CargoComissao, 'cargo_comissao', [ periodo_composicao_crud = Crud(Periodo, 'periodo_composicao_comissao')
tipo_comissao_crud = Crud(TipoComissao, 'tipo_comissao')
[_('Período de composição de Comissão'), comissao_crud = Crud(Comissao, 'modulo_comissoes')
[('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)]],
])
class CadastrarComissaoView(FormMixin, GenericView): class CadastrarComissaoView(FormMixin, GenericView):

2
compilacao/forms.py

@ -12,7 +12,7 @@ from compilacao.models import (NOTAS_PUBLICIDADE_CHOICES,
Publicacao, TextoArticulado, TipoNota, Publicacao, TextoArticulado, TipoNota,
TipoPublicacao, TipoTextoArticulado, TipoVide, TipoPublicacao, TipoTextoArticulado, TipoVide,
VeiculoPublicacao, Vide) 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 from sapl.utils import YES_NO_CHOICES
error_messages = { 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_publicado',
'ta',) 'ta',)
tipo_nota_crud = Crud( tipo_nota_crud = Crud(TipoNota, 'tipo_nota')
TipoNota, 'tipo_nota', [ tipo_vide_crud = Crud(TipoVide, 'tipo_vide')
tipo_publicacao_crud = Crud(TipoPublicacao, 'tipo_publicacao')
[_('Tipo da Nota'), veiculo_publicacao_crud = Crud(VeiculoPublicacao, 'veiculo_publicacao')
[('sigla', 2), ('nome', 10)], perfil_estr_txt_norm = Crud(PerfilEstruturalTextoArticulado,
[('modelo', 12)]], 'perfil_estrutural')
]) tipo_dispositivo_crud = Crud(TipoDispositivo, 'tipo_dispositivo')
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), ],
],
])
class IntegracaoTaView(TemplateView): 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 braces.views import FormMessagesMixin
from crispy_forms.helper import FormHelper
from django import forms
from django.conf.urls import url from django.conf.urls import url
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import (CreateView, DeleteView, DetailView, ListView, from django.views.generic import (CreateView, DeleteView, DetailView, ListView,
UpdateView) UpdateView)
from sapl.layout import SaplFormLayout from crispy_layout_mixin import CrispyLayoutFormMixin, get_field_display
def from_to(start, end): def from_to(start, end):
@ -41,72 +39,6 @@ def make_pagination(index, num_pages):
return head + [None] + tail 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): class BaseCrudMixin(CrispyLayoutFormMixin):
@property @property
@ -247,21 +179,18 @@ class CrudDeleteMixin(FormMessagesMixin):
class Crud(object): class Crud(object):
def __init__(self, model, help_path, layout, def __init__(self, model, help_path,
base_mixin=BaseCrudMixin, base_mixin=BaseCrudMixin,
list_mixin=CrudListMixin, list_mixin=CrudListMixin,
create_mixin=CrudCreateMixin, create_mixin=CrudCreateMixin,
detail_mixin=CrudDetailMixin, detail_mixin=CrudDetailMixin,
update_mixin=CrudUpdateMixin, update_mixin=CrudUpdateMixin,
delete_mixin=CrudDeleteMixin, delete_mixin=CrudDeleteMixin):
exclude=[]):
class CrudMixin(base_mixin): class CrudMixin(base_mixin):
pass pass
CrudMixin.model = model CrudMixin.model = model
CrudMixin.help_path = help_path CrudMixin.help_path = help_path
CrudMixin.layout = layout
CrudMixin.exclude = exclude
class CrudListView(CrudMixin, list_mixin, ListView): class CrudListView(CrudMixin, list_mixin, ListView):
pass pass

7
crud_tests/layouts.yaml

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

10
crud_tests/test_flux.py

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

9
crud_tests/views.py

@ -8,11 +8,6 @@ class CountryCrudListMixin(CrudListMixin):
country_crud = Crud( country_crud = Crud(
Country, 'help_path', [ Country,
['Basic Data', 'help_path',
[('name', 9), ('continent', 3)],
[('population', 6), ('is_cold', 6)]
],
['More Details', [('description', 12)]],
],
list_mixin=CountryCrudListMixin) 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 from .models import LexmlProvedor, LexmlPublicador
lexml_provedor_crud = Crud( lexml_provedor_crud = Crud(LexmlProvedor, 'lexml_provedor')
LexmlProvedor, 'lexml_provedor', [ lexml_publicador_crud = Crud(LexmlPublicador, 'lexml_publicador')
[_('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)]],
])

70
materia/forms.py

@ -6,10 +6,10 @@ from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.safestring import mark_safe 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 norma.models import LegislacaoCitada, TipoNormaJuridica
from parlamentares.models import Parlamentar, Partido from parlamentares.models import Parlamentar, Partido
from sapl.layout import form_actions
from .models import (AcompanhamentoMateria, Anexada, Autor, DespachoInicial, from .models import (AcompanhamentoMateria, Anexada, Autor, DespachoInicial,
DocumentoAcessorio, MateriaLegislativa, Numeracao, Origem, DocumentoAcessorio, MateriaLegislativa, Numeracao, Origem,
@ -87,15 +87,15 @@ class ProposicaoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('tipo', 12)]) [('tipo', 12)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('descricao', 12)]) [('descricao', 12)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('tipo_materia', 4), [('tipo_materia', 4),
('numero_materia', 4), ('numero_materia', 4),
('ano_materia', 4)]) ('ano_materia', 4)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('texto_original', 10)]) [('texto_original', 10)])
row4.append( row4.append(
@ -118,7 +118,7 @@ class AcompanhamentoMateriaForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row([('email', 10)]) row1 = crispy_layout_mixin.to_row([('email', 10)])
row1.append( row1.append(
Column(form_actions(save_label='Cadastrar'), css_class='col-md-2') Column(form_actions(save_label='Cadastrar'), css_class='col-md-2')
@ -167,15 +167,15 @@ class DocumentoAcessorioForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('tipo', 4), [('tipo', 4),
('nome', 4), ('nome', 4),
('data', 4)]) ('data', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('autor', 12)]) [('autor', 12)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('ementa', 12)]) [('ementa', 12)])
self.helper = FormHelper() self.helper = FormHelper()
@ -252,23 +252,23 @@ class TramitacaoForm(ModelForm):
'texto'] 'texto']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('data_tramitacao', 6), [('data_tramitacao', 6),
('unidade_tramitacao_local', 6)]) ('unidade_tramitacao_local', 6)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('status', 5), [('status', 5),
('turno', 5), ('turno', 5),
('urgente', 2)]) ('urgente', 2)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('unidade_tramitacao_destino', 12)]) [('unidade_tramitacao_destino', 12)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('data_encaminhamento', 6), [('data_encaminhamento', 6),
('data_fim_prazo', 6)]) ('data_fim_prazo', 6)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('texto', 12)]) [('texto', 12)])
self.helper = FormHelper() self.helper = FormHelper()
@ -339,24 +339,24 @@ class LegislacaoCitadaForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('tipo', 4), [('tipo', 4),
('numero', 4), ('numero', 4),
('ano', 4)]) ('ano', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('disposicao', 3), [('disposicao', 3),
('parte', 3), ('parte', 3),
('livro', 3), ('livro', 3),
('titulo', 3)]) ('titulo', 3)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('capitulo', 3), [('capitulo', 3),
('secao', 3), ('secao', 3),
('subsecao', 3), ('subsecao', 3),
('artigo', 3)]) ('artigo', 3)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('paragrafo', 3), [('paragrafo', 3),
('inciso', 3), ('inciso', 3),
('alinea', 3), ('alinea', 3),
@ -407,9 +407,9 @@ class NumeracaoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('tipo_materia', 12)]) [('tipo_materia', 12)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('numero_materia', 4), [('numero_materia', 4),
('ano_materia', 4), ('ano_materia', 4),
('data_materia', 4)]) ('data_materia', 4)])
@ -474,11 +474,11 @@ class MateriaAnexadaForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('tipo', 4), [('tipo', 4),
('numero', 4), ('numero', 4),
('ano', 4)]) ('ano', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('data_anexacao', 6), [('data_anexacao', 6),
('data_desanexacao', 6)]) ('data_desanexacao', 6)])
@ -517,21 +517,21 @@ class FormularioSimplificadoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('tipo', 4), [('tipo', 4),
('numero', 4), ('numero', 4),
('ano', 4)]) ('ano', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('data_apresentacao', 4), [('data_apresentacao', 4),
('numero_protocolo', 4), ('numero_protocolo', 4),
('regime_tramitacao', 4)]) ('regime_tramitacao', 4)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('texto_original', 9), [('texto_original', 9),
('em_tramitacao', 3)]) ('em_tramitacao', 3)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('ementa', 12)]) [('ementa', 12)])
self.helper = FormHelper() self.helper = FormHelper()
@ -731,29 +731,29 @@ class MateriaLegislativaPesquisaForm(forms.Form):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('tipo', 12)]) [('tipo', 12)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('numero', 4), [('numero', 4),
('ano', 4), ('ano', 4),
('numero_protocolo', 4)]) ('numero_protocolo', 4)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('data_apresentacao', 6), [('data_apresentacao', 6),
('data_publicacao', 6)]) ('data_publicacao', 6)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('autor', 6), [('autor', 6),
('partido_autor', 6)]) ('partido_autor', 6)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('tipo_autor', 6), [('tipo_autor', 6),
('relator', 6)]) ('relator', 6)])
row6 = sapl.layout.to_row( row6 = crispy_layout_mixin.to_row(
[('local_origem_externa', 6), [('local_origem_externa', 6),
('localizacao', 6)]) ('localizacao', 6)])
row7 = sapl.layout.to_row( row7 = crispy_layout_mixin.to_row(
[('tramitacao', 4), [('tramitacao', 4),
('situacao', 4), ('situacao', 4),
('ordem', 4)]) ('ordem', 4)])
row8 = sapl.layout.to_row( row8 = crispy_layout_mixin.to_row(
[('assunto', 12)]) [('assunto', 12)])
self.helper = FormHelper() 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, TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao,
Tramitacao, UnidadeTramitacao) Tramitacao, UnidadeTramitacao)
origem_crud = Crud( origem_crud = Crud(Origem, 'origem')
Origem, 'origem', [ tipo_materia_crud = Crud(TipoMateriaLegislativa, 'tipo_materia_legislativa')
regime_tramitacao_crud = Crud(RegimeTramitacao, 'regime_tramitacao')
[_('Origem'), tipo_documento_crud = Crud(TipoDocumento, 'tipo_documento')
[('nome', 8), ('sigla', 4)]], tipo_fim_relatoria_crud = Crud(TipoFimRelatoria, 'fim_relatoria')
]) materia_legislativa_crud = Crud(MateriaLegislativa, '')
Anexada_crud = Crud(Anexada, '')
tipo_materia_crud = Crud( tipo_autor_crud = Crud(TipoAutor, 'tipo_autor')
TipoMateriaLegislativa, 'tipo_materia_legislativa', [ autor_crud = Crud(Autor, 'autor')
autoria_crud = Crud(Autoria, '')
[_('Tipo Matéria Legislativa'), documento_acessorio_crud = Crud(DocumentoAcessorio, '')
[('sigla', 4), ('descricao', 8)]], numeracao_crud = Crud(Numeracao, '')
]) orgao_crud = Crud(Orgao, 'orgao')
relatoria_crud = Crud(Relatoria, '')
regime_tramitacao_crud = Crud( tipo_proposicao_crud = Crud(TipoProposicao, 'tipo_proposicao')
RegimeTramitacao, 'regime_tramitacao', [ proposicao_crud = Crud(Proposicao, '')
status_tramitacao_crud = Crud(StatusTramitacao, 'status_tramitacao')
[_('Tipo de Documento'), unidade_tramitacao_crud = Crud(UnidadeTramitacao, 'unidade_tramitacao')
[('descricao', 12)]], tramitacao_crud = Crud(Tramitacao, '')
])
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)]],
])
class FormularioSimplificadoView(FormMixin, GenericView): class FormularioSimplificadoView(FormMixin, GenericView):
@ -313,8 +138,8 @@ class MateriaAnexadaView(FormMixin, GenericView):
if mat_principal.tipo == mat_anexada.tipo: if mat_principal.tipo == mat_anexada.tipo:
msg = 'A matéria a ser anexada não pode ser do mesmo \ msg = _('A matéria a ser anexada não pode ser do mesmo'
tipo da matéria principal.' ' tipo da matéria principal.')
messages.add_message(request, messages.INFO, msg) messages.add_message(request, messages.INFO, msg)
return self.render_to_response( return self.render_to_response(
{'form': form, {'form': form,
@ -332,8 +157,8 @@ class MateriaAnexadaView(FormMixin, GenericView):
anexada.save() anexada.save()
except ObjectDoesNotExist: except ObjectDoesNotExist:
msg = 'A matéria a ser anexada não existe no cadastro \ msg = _('A matéria a ser anexada não existe no cadastro'
de matérias legislativas.' ' de matérias legislativas.')
messages.add_message(request, messages.INFO, msg) messages.add_message(request, messages.INFO, msg)
return self.render_to_response( return self.render_to_response(
{'form': form, {'form': form,

20
norma/forms.py

@ -4,9 +4,9 @@ from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.safestring import mark_safe 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 materia.models import TipoMateriaLegislativa
from sapl.layout import form_actions
from .models import NormaJuridica from .models import NormaJuridica
@ -58,37 +58,37 @@ class NormaJuridicaForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('tipo', 4), [('tipo', 4),
('numero', 4), ('numero', 4),
('ano', 4)]) ('ano', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('data', 4), [('data', 4),
('esfera_federacao', 4), ('esfera_federacao', 4),
('complemento', 4)]) ('complemento', 4)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('tipo_materia', 4), [('tipo_materia', 4),
('numero_materia', 4), ('numero_materia', 4),
('ano_materia', 4)]) ('ano_materia', 4)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('data_publicacao', 3), [('data_publicacao', 3),
('veiculo_publicacao', 3), ('veiculo_publicacao', 3),
('pagina_inicio_publicacao', 3), ('pagina_inicio_publicacao', 3),
('pagina_fim_publicacao', 3)]) ('pagina_fim_publicacao', 3)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('texto_integral', 12)]) [('texto_integral', 12)])
row6 = sapl.layout.to_row( row6 = crispy_layout_mixin.to_row(
[('ementa', 12)]) [('ementa', 12)])
row7 = sapl.layout.to_row( row7 = crispy_layout_mixin.to_row(
[('indexacao', 12)]) [('indexacao', 12)])
row8 = sapl.layout.to_row( row8 = crispy_layout_mixin.to_row(
[('observacao', 12)]) [('observacao', 12)])
self.helper = FormHelper() 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, from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
assunto_norma_crud = Crud( assunto_norma_crud = Crud(AssuntoNorma, 'assunto_norma_juridica')
AssuntoNorma, 'assunto_norma_juridica', [ tipo_norma_crud = Crud(TipoNormaJuridica, 'tipo_norma_juridica')
norma_crud = Crud(NormaJuridica, '')
[_('Assunto Norma Jurídica'), norma_temporario_crud = Crud(NormaJuridica, 'normajuridica')
[('assunto', 6), ('descricao', 6)]], legislacao_citada_crud = Crud(LegislacaoCitada, '')
])
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)]],
])
class NormaIncluirView(FormMixin, GenericView): 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 from .models import Cronometro
cronometro_painel_crud = Crud( cronometro_painel_crud = Crud(Cronometro, '')
Cronometro, '', [
[_('Cronometro'),
[('status', 3), ('data_cronometro', 6),
('tipo', 3)]],
])
def controlador_painel(request): def controlador_painel(request):

46
parlamentares/forms.py

@ -4,8 +4,8 @@ from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
import sapl import crispy_layout_mixin
from sapl.layout import form_actions from crispy_layout_mixin import form_actions
from .models import Dependente, Filiacao, Mandato, Parlamentar from .models import Dependente, Filiacao, Mandato, Parlamentar
@ -103,55 +103,55 @@ class ParlamentaresForm (ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('nome_parlamentar', 8), ('ativo', 4)]) [('nome_parlamentar', 8), ('ativo', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('nome_completo', 12)]) [('nome_completo', 12)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('nivel_instrucao', 4), [('nivel_instrucao', 4),
('sexo', 4), ('sexo', 4),
('data_nascimento', 4)]) ('data_nascimento', 4)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('cpf', 4), [('cpf', 4),
('rg', 4), ('rg', 4),
('titulo_eleitor', 4)]) ('titulo_eleitor', 4)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('situacao_militar', 6), [('situacao_militar', 6),
('profissao', 6)]) ('profissao', 6)])
row6 = sapl.layout.to_row( row6 = crispy_layout_mixin.to_row(
[('endereco_web', 12)]) [('endereco_web', 12)])
row7 = sapl.layout.to_row( row7 = crispy_layout_mixin.to_row(
[('email', 12)]) [('email', 12)])
row8 = sapl.layout.to_row( row8 = crispy_layout_mixin.to_row(
[('numero_gab_parlamentar', 4), [('numero_gab_parlamentar', 4),
('telefone', 4), ('telefone', 4),
('fax', 4)]) ('fax', 4)])
row9 = sapl.layout.to_row( row9 = crispy_layout_mixin.to_row(
[('endereco_residencia', 6), [('endereco_residencia', 6),
('cep_residencia', 6)]) ('cep_residencia', 6)])
row10 = sapl.layout.to_row( row10 = crispy_layout_mixin.to_row(
[('municipio_residencia', 12)]) [('municipio_residencia', 12)])
row11 = sapl.layout.to_row( row11 = crispy_layout_mixin.to_row(
[('telefone_residencia', 6), [('telefone_residencia', 6),
('fax_residencia', 6)]) ('fax_residencia', 6)])
row12 = sapl.layout.to_row( row12 = crispy_layout_mixin.to_row(
[('locais_atuacao', 12)]) [('locais_atuacao', 12)])
row13 = sapl.layout.to_row( row13 = crispy_layout_mixin.to_row(
[('fotografia', 12)]) [('fotografia', 12)])
row14 = sapl.layout.to_row( row14 = crispy_layout_mixin.to_row(
[('biografia', 12)]) [('biografia', 12)])
self.helper = FormHelper() self.helper = FormHelper()
@ -203,16 +203,16 @@ class MandatoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('legislatura', 4), [('legislatura', 4),
('coligacao', 4), ('coligacao', 4),
('votos_recebidos', 4)]) ('votos_recebidos', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('data_fim_mandato', 6), [('data_fim_mandato', 6),
('data_expedicao_diploma', 6)]) ('data_expedicao_diploma', 6)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('observacao', 12)]) [('observacao', 12)])
self.helper = FormHelper() self.helper = FormHelper()
@ -251,15 +251,15 @@ class DependenteForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('nome', 12)]) [('nome', 12)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('tipo', 4), [('tipo', 4),
('sexo', 4), ('sexo', 4),
('data_nascimento', 4)]) ('data_nascimento', 4)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('cpf', 4), [('cpf', 4),
('rg', 4), ('rg', 4),
('titulo_eleitor', 4)]) ('titulo_eleitor', 4)])
@ -297,7 +297,7 @@ class FiliacaoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('partido', 4), [('partido', 4),
('data', 4), ('data', 4),
('data_desfiliacao', 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, Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
TipoAfastamento, TipoDependente) TipoAfastamento, TipoDependente)
cargo_mesa_crud = Crud( cargo_mesa_crud = Crud(CargoMesa, 'cargo_mesa')
CargoMesa, 'cargo_mesa', [ legislatura_crud = Crud(Legislatura, 'tabelas_auxiliares#legislatura')
coligacao_crud = Crud(Coligacao, 'coligacao')
[_('Cargo na Mesa'), partido_crud = Crud(Partido, 'partidos')
[('descricao', 10), dependente_crud = Crud(Dependente, '')
('unico', 2)]], sessao_legislativa_crud = Crud(SessaoLegislativa, 'sessao_legislativa')
]) parlamentar_crud = Crud(Parlamentar, '')
filiacao_crud = Crud(Filiacao, '')
legislatura_crud = Crud( mandato_crud = Crud(Mandato, '')
Legislatura, 'tabelas_auxiliares#legislatura', [ tipo_dependente_crud = Crud(TipoDependente, 'tipo_dependente')
nivel_instrucao_crud = Crud(NivelInstrucao, 'nivel_instrucao')
[_('Legislatura'), tipo_afastamento_crud = Crud(TipoAfastamento, 'tipo_afastamento')
[('data_inicio', 4), ('data_fim', 4), ('data_eleicao', 4)]], tipo_militar_crud = Crud(SituacaoMilitar, 'tipo_situa_militar')
])
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)]],
])
class ParlamentaresView(GenericView): class ParlamentaresView(GenericView):
@ -156,8 +44,8 @@ class ParlamentaresView(GenericView):
form = ParlamentaresListForm() form = ParlamentaresListForm()
if not Legislatura.objects.all(): if not Legislatura.objects.all():
mensagem = "Cadastre alguma Legislatura antes\ mensagem = _('Cadastre alguma Legislatura antes'
de cadastrar algum Parlamentar" ' de cadastrar algum Parlamentar')
messages.add_message(request, messages.INFO, mensagem) messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response( return self.render_to_response(
{'legislaturas': [], {'legislaturas': [],

62
protocoloadm/forms.py

@ -6,9 +6,9 @@ from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.safestring import mark_safe 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 materia.models import TipoMateriaLegislativa
from sapl.layout import form_actions
from .models import (Autor, DocumentoAcessorioAdministrativo, from .models import (Autor, DocumentoAcessorioAdministrativo,
DocumentoAdministrativo, TipoDocumentoAdministrativo, DocumentoAdministrativo, TipoDocumentoAdministrativo,
@ -102,25 +102,25 @@ class ProtocoloForm(forms.Form):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('numero_protocolo', 6), [('numero_protocolo', 6),
('ano', 6)]) ('ano', 6)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('inicial', 6), [('inicial', 6),
('final', 6)]) ('final', 6)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('tipo_documento', 4), [('tipo_documento', 4),
('tipo_protocolo', 4), ('tipo_protocolo', 4),
('tipo_materia', 4)]) ('tipo_materia', 4)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('interessado', 4), [('interessado', 4),
('autor', 4), ('autor', 4),
('assunto', 4)]) ('assunto', 4)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('natureza_processo', 12)]) [('natureza_processo', 12)])
self.helper = FormHelper() self.helper = FormHelper()
@ -147,10 +147,10 @@ class AnularProcoloAdmForm(forms.Form):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('numero_protocolo', 6), [('numero_protocolo', 6),
('ano_protocolo', 6)]) ('ano_protocolo', 6)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('justificativa_anulacao', 12)]) [('justificativa_anulacao', 12)])
self.helper = FormHelper() self.helper = FormHelper()
@ -202,18 +202,18 @@ class ProtocoloDocumentForm(forms.Form):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('numeracao', 12)]) [('numeracao', 12)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('tipo_protocolo', 12)]) [('tipo_protocolo', 12)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('tipo_documento', 6), [('tipo_documento', 6),
('num_paginas', 6)]) ('num_paginas', 6)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('assunto', 12)]) [('assunto', 12)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('interessado', 12)]) [('interessado', 12)])
row6 = sapl.layout.to_row( row6 = crispy_layout_mixin.to_row(
[('observacao', 12)]) [('observacao', 12)])
self.helper = FormHelper() self.helper = FormHelper()
@ -274,16 +274,16 @@ class ProtocoloMateriaForm(forms.Form):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('numeracao', 12)]) [('numeracao', 12)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('tipo_materia', 6), [('tipo_materia', 6),
('num_paginas', 6)]) ('num_paginas', 6)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('ementa', 12)]) [('ementa', 12)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('autor', 12)]) [('autor', 12)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('observacao', 12)]) [('observacao', 12)])
self.helper = FormHelper() self.helper = FormHelper()
@ -348,15 +348,15 @@ class DocumentoAcessorioAdministrativoForm(ModelForm):
def __init__(self, excluir=False, *args, **kwargs): def __init__(self, excluir=False, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('tipo', 4), [('tipo', 4),
('nome', 4), ('nome', 4),
('data', 4)]) ('data', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('autor', 12)]) [('autor', 12)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('arquivo', 12)]) [('arquivo', 12)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('assunto', 12)]) [('assunto', 12)])
more = [] more = []
@ -448,25 +448,25 @@ class DocumentoAdministrativoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('tipo', 4), ('numero', 4), ('ano', 4)]) [('tipo', 4), ('numero', 4), ('ano', 4)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('data', 6), ('numero_protocolo', 6)]) [('data', 6), ('numero_protocolo', 6)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('assunto', 12)]) [('assunto', 12)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('interessado', 9), ('tramitacao', 3)]) [('interessado', 9), ('tramitacao', 3)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('texto_integral', 12)]) [('texto_integral', 12)])
row6 = sapl.layout.to_row( row6 = crispy_layout_mixin.to_row(
[('dias_prazo', 6), ('data_fim_prazo', 6)]) [('dias_prazo', 6), ('data_fim_prazo', 6)])
row7 = sapl.layout.to_row( row7 = crispy_layout_mixin.to_row(
[('observacao', 12)]) [('observacao', 12)])
self.helper = FormHelper() 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, StatusTramitacaoAdministrativo,
TipoDocumentoAdministrativo, TramitacaoAdministrativo) TipoDocumentoAdministrativo, TramitacaoAdministrativo)
tipo_documento_administrativo_crud = Crud( tipo_documento_administrativo_crud = Crud(TipoDocumentoAdministrativo, '')
TipoDocumentoAdministrativo, '', [ documento_administrativo_crud = Crud(DocumentoAdministrativo, '')
[_('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)]],
])
documento_acessorio_administrativo_crud = Crud( documento_acessorio_administrativo_crud = Crud(
DocumentoAcessorioAdministrativo, '', [ DocumentoAcessorioAdministrativo, '')
[_('Documento Acessório'),
[('tipo', 4), ('nome', 4), ('data', 4)],
[('autor', 12)],
[('arquivo', 12)],
[('assunto', 12)]],
])
status_tramitacao_administrativo_crud = Crud( status_tramitacao_administrativo_crud = Crud(
StatusTramitacaoAdministrativo, '', [ StatusTramitacaoAdministrativo, '')
tramitacao_administrativo_crud = Crud(TramitacaoAdministrativo, '')
[_('Status Tramitação Administrativo'), protocolo_documento_crud = Crud(Protocolo, '')
[('indicador', 3),
('sigla', 2), # FIXME precisa de uma chave diferente para o layout
('descricao', 7)]], protocolo_materia_crud = Crud(Protocolo, '')
])
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)]],
])
class ProtocoloListView(FormMixin, ListView): class ProtocoloListView(FormMixin, ListView):

1
requirements/requirements.txt

@ -15,4 +15,5 @@ libsass
psycopg2 psycopg2
pytz pytz
pyyaml pyyaml
rtyaml
unipath 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 import forms
from django.forms import ModelForm from django.forms import ModelForm
import sapl import crispy_layout_mixin
from sapl.layout import form_actions from crispy_layout_mixin import form_actions
from .models import SessaoPlenaria from .models import SessaoPlenaria
@ -97,27 +97,27 @@ class SessaoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row( row1 = crispy_layout_mixin.to_row(
[('numero', 3), [('numero', 3),
('tipo', 3), ('tipo', 3),
('legislatura', 3), ('legislatura', 3),
('sessao_legislativa', 3)]) ('sessao_legislativa', 3)])
row2 = sapl.layout.to_row( row2 = crispy_layout_mixin.to_row(
[('data_inicio', 4), [('data_inicio', 4),
('hora_inicio', 4), ('hora_inicio', 4),
('iniciada', 4)]) ('iniciada', 4)])
row3 = sapl.layout.to_row( row3 = crispy_layout_mixin.to_row(
[('data_fim', 4), [('data_fim', 4),
('hora_fim', 4), ('hora_fim', 4),
('finalizada', 4)]) ('finalizada', 4)])
row4 = sapl.layout.to_row( row4 = crispy_layout_mixin.to_row(
[('upload_pauta', 6), [('upload_pauta', 6),
('upload_ata', 6)]) ('upload_ata', 6)])
row5 = sapl.layout.to_row( row5 = crispy_layout_mixin.to_row(
[('url_audio', 6), [('url_audio', 6),
('url_video', 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, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria,
VotoParlamentar) VotoParlamentar)
tipo_sessao_crud = Crud( tipo_sessao_crud = Crud(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
TipoSessaoPlenaria, 'tipo_sessao_plenaria', [ sessao_crud = Crud(SessaoPlenaria, '')
expediente_materia_crud = Crud(ExpedienteMateria, '')
[_('Tipo de Sessão Plenária'), ordem_dia_crud = Crud(OrdemDia, '')
[('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_resultado_votacao_crud = Crud( tipo_resultado_votacao_crud = Crud(
TipoResultadoVotacao, 'tipo_resultado_votacao', [ TipoResultadoVotacao, 'tipo_resultado_votacao')
tipo_expediente_crud = Crud(TipoExpediente, 'tipo_expediente')
[_('Tipo de Resultado da Votação'), registro_votacao_crud = Crud(RegistroVotacao, '')
[('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)]],
])
class PresencaView(sessao_crud.CrudDetailView): class PresencaView(sessao_crud.CrudDetailView):
@ -646,7 +582,7 @@ class ExpedienteOrdemDiaView(sessao_crud.CrudDetailView):
return self.form_valid(form) return self.form_valid(form)
else: else:
context.update( 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) return self.form_invalid(form)
def get_success_url(self): def get_success_url(self):

2
templates/crud/detail.html

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