Browse Source

Merge branch '197-simplificar-crud-usando-mixins'

Fix #197
pull/237/head
Marcio Mazza 9 years ago
parent
commit
e9c07233fc
  1. 10
      comissoes/views.py
  2. 16
      compilacao/views.py
  3. 247
      crud.py
  4. 61
      crud_tests/test_flux.py
  5. 4
      crud_tests/urls.py
  6. 12
      crud_tests/views.py
  7. 6
      lexml/views.py
  8. 40
      materia/views.py
  9. 12
      norma/views.py
  10. 4
      painel/views.py
  11. 28
      parlamentares/views.py
  12. 16
      protocoloadm/views.py
  13. 16
      sessao/views.py

10
comissoes/views.py

@ -5,7 +5,7 @@ from django.views.generic import ListView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla import GenericView
from crud import build_crud from crud import Crud
from materia.models import Tramitacao from materia.models import Tramitacao
from parlamentares.models import Filiacao from parlamentares.models import Filiacao
@ -14,28 +14,28 @@ 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 = build_crud( cargo_crud = Crud(
CargoComissao, 'cargo_comissao', [ CargoComissao, 'cargo_comissao', [
[_('Período de composição de Comissão'), [_('Período de composição de Comissão'),
[('nome', 10), ('unico', 2)]], [('nome', 10), ('unico', 2)]],
]) ])
periodo_composicao_crud = build_crud( periodo_composicao_crud = Crud(
Periodo, 'periodo_composicao_comissao', [ Periodo, 'periodo_composicao_comissao', [
[_('Cargo de Comissão'), [_('Cargo de Comissão'),
[('data_inicio', 6), ('data_fim', 6)]], [('data_inicio', 6), ('data_fim', 6)]],
]) ])
tipo_comissao_crud = build_crud( tipo_comissao_crud = Crud(
TipoComissao, 'tipo_comissao', [ TipoComissao, 'tipo_comissao', [
[_('Tipo Comissão'), [_('Tipo Comissão'),
[('nome', 9), ('sigla', 3)], [('nome', 9), ('sigla', 3)],
[('dispositivo_regimental', 9), ('natureza', 3)]], [('dispositivo_regimental', 9), ('natureza', 3)]],
]) ])
comissao_crud = build_crud( comissao_crud = Crud(
Comissao, 'modulo_comissoes', [ Comissao, 'modulo_comissoes', [
[_('Dados Básicos'), [_('Dados Básicos'),

16
compilacao/views.py

@ -27,7 +27,7 @@ from compilacao.models import (Dispositivo, Nota,
TextoArticulado, TipoDispositivo, TipoNota, TextoArticulado, TipoDispositivo, TipoNota,
TipoPublicacao, TipoTextoArticulado, TipoVide, TipoPublicacao, TipoTextoArticulado, TipoVide,
VeiculoPublicacao, Vide) VeiculoPublicacao, Vide)
from crud import NO_ENTRIES_MSG, build_crud, make_pagination from crud import Crud, CrudListMixin, make_pagination
DISPOSITIVO_SELECT_RELATED = ( DISPOSITIVO_SELECT_RELATED = (
'tipo_dispositivo', 'tipo_dispositivo',
@ -42,7 +42,7 @@ DISPOSITIVO_SELECT_RELATED = (
'ta_publicado', 'ta_publicado',
'ta',) 'ta',)
tipo_nota_crud = build_crud( tipo_nota_crud = Crud(
TipoNota, 'tipo_nota', [ TipoNota, 'tipo_nota', [
[_('Tipo da Nota'), [_('Tipo da Nota'),
@ -50,14 +50,14 @@ tipo_nota_crud = build_crud(
[('modelo', 12)]], [('modelo', 12)]],
]) ])
tipo_vide_crud = build_crud( tipo_vide_crud = Crud(
TipoVide, 'tipo_vide', [ TipoVide, 'tipo_vide', [
[_('Tipo de Vide'), [_('Tipo de Vide'),
[('sigla', 2), ('nome', 10)]], [('sigla', 2), ('nome', 10)]],
]) ])
tipo_publicacao_crud = build_crud( tipo_publicacao_crud = Crud(
TipoPublicacao, 'tipo_publicacao', [ TipoPublicacao, 'tipo_publicacao', [
[_('Tipo de Publicação'), [_('Tipo de Publicação'),
@ -65,7 +65,7 @@ tipo_publicacao_crud = build_crud(
]) ])
veiculo_publicacao_crud = build_crud( veiculo_publicacao_crud = Crud(
VeiculoPublicacao, 'veiculo_publicacao', [ VeiculoPublicacao, 'veiculo_publicacao', [
[_('Veículo de Publicação'), [_('Veículo de Publicação'),
@ -73,7 +73,7 @@ veiculo_publicacao_crud = build_crud(
]) ])
perfil_estr_txt_norm = build_crud( perfil_estr_txt_norm = Crud(
PerfilEstruturalTextoArticulado, 'perfil_estrutural', [ PerfilEstruturalTextoArticulado, 'perfil_estrutural', [
[_('Perfil Estrutural de Textos Articulados'), [_('Perfil Estrutural de Textos Articulados'),
@ -81,7 +81,7 @@ perfil_estr_txt_norm = build_crud(
]) ])
tipo_dispositivo_crud = build_crud( tipo_dispositivo_crud = Crud(
TipoDispositivo, 'tipo_dispositivo', [ TipoDispositivo, 'tipo_dispositivo', [
[_('Dados Básicos'), [_('Dados Básicos'),
@ -1740,7 +1740,7 @@ class PublicacaoListView(ListView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(PublicacaoListView, self).get_context_data(**kwargs) context = super(PublicacaoListView, self).get_context_data(**kwargs)
context['NO_ENTRIES_MSG'] = NO_ENTRIES_MSG context['NO_ENTRIES_MSG'] = CrudListMixin.no_entries_msg
return context return context

247
crud.py

@ -2,16 +2,13 @@ from braces.views import FormMessagesMixin
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from django import forms from django import forms
from django.conf.urls import url from django.conf.urls import url
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse
from django.utils.functional import cached_property
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 sapl.layout import SaplFormLayout
NO_ENTRIES_MSG = _('Não existem registros')
def from_to(start, end): def from_to(start, end):
return list(range(start, end + 1)) return list(range(start, end + 1))
@ -51,33 +48,27 @@ def get_field_display(obj, fieldname):
value = getattr(obj, 'get_%s_display' % fieldname)() value = getattr(obj, 'get_%s_display' % fieldname)()
else: else:
value = getattr(obj, fieldname) value = getattr(obj, fieldname)
if value is None: if value is None:
display = '' display = ''
elif 'date' in str(type(value)): elif 'date' in str(type(value)):
display = value.strftime("%d/%m/%Y") display = value.strftime("%d/%m/%Y") # TODO: localize
elif 'bool' in str(type(value)): elif 'bool' in str(type(value)):
display = 'Sim' if value else 'Não' display = 'Sim' if value else 'Não'
else: else:
display = str(value) display = str(value)
return verbose_name, display return verbose_name, display
class Crud(object): class CrispyLayoutFormMixin(object):
pass
def get_form_class(self):
def build_crud(model, help_path, layout): layout = self.layout
crud = Crud()
crud.model = model
crud.help_path = help_path
crud.namespace = model._meta.model_name
class CrispyForm(forms.ModelForm): class CrispyForm(forms.ModelForm):
class Meta: class Meta:
model = crud.model model = self.model
exclude = [] exclude = []
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -85,142 +76,168 @@ def build_crud(model, help_path, layout):
self.helper = FormHelper() self.helper = FormHelper()
self.helper.layout = SaplFormLayout(*layout) self.helper.layout = SaplFormLayout(*layout)
crud.model_form = CrispyForm return CrispyForm
def in_namespace(url_name): @property
return '%s:%s' % (crud.namespace, url_name) def list_field_names(self):
'''The list of field names to display on table
def make_form_invalid_message(msg): This base implementation returns the field names
return '%s %s' % (_('Formulário inválido.'), msg) in the first fieldset of the layout.
'''
rows = self.layout[0][1:]
return [fieldname for row in rows for fieldname, __ in row]
class BaseMixin(object): def get_column(self, fieldname, span):
model = crud.model 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]
verbose_name = crud.model._meta.verbose_name
verbose_name_plural = crud.model._meta.verbose_name_plural
list_url = reverse_lazy(in_namespace('list')) class BaseCrudMixin(CrispyLayoutFormMixin):
create_url = reverse_lazy(in_namespace('create'))
help_path = crud.help_path # FIXME @property
def namespace(self):
return self.model._meta.model_name
def resolve_url(self, url_name, args=None):
return reverse('%s:%s' % (self.namespace, url_name), args=args)
@property
def list_url(self):
return self.resolve_url('list')
def get_url_for_this_object(self, url_name): @property
return reverse(in_namespace(url_name), args=(self.object.id,)) def create_url(self):
return self.resolve_url('create')
@property @property
def detail_url(self): def detail_url(self):
return self.get_url_for_this_object('detail') return self.resolve_url('detail', args=(self.object.id,))
@property @property
def update_url(self): def update_url(self):
return self.get_url_for_this_object('update') return self.resolve_url('update', args=(self.object.id,))
@property @property
def delete_url(self): def delete_url(self):
return self.get_url_for_this_object('delete') return self.resolve_url('delete', args=(self.object.id,))
def get_template_names(self): def get_template_names(self):
names = super(BaseMixin, self).get_template_names() names = super(BaseCrudMixin, self).get_template_names()
names.append("crud/%s.html" % names.append("crud/%s.html" %
self.template_name_suffix.lstrip('_')) self.template_name_suffix.lstrip('_'))
return names return names
class CrudListView(BaseMixin, ListView): @property
title = BaseMixin.verbose_name_plural def verbose_name(self):
paginate_by = 10 return self.model._meta.verbose_name
no_entries_msg = NO_ENTRIES_MSG
@cached_property @property
def field_names(self): def verbose_name_plural(self):
'''The list of field names to display on table return self.model._meta.verbose_name_plural
This base implementation returns the field names
in the first fieldset of the layout.
'''
rows = layout[0][1:]
return [fieldname for row in rows for fieldname, __ in row]
def get_rows(self, object_list): class CrudListMixin():
return [[(get_field_display(obj, name)[1],
obj.pk if i == 0 else None) paginate_by = 10
for i, name in enumerate(self.field_names)] no_entries_msg = _('Nenhum registro encontrado.')
for obj in object_list
] @property
def title(self):
return self.verbose_name_plural
def _as_row(self, obj):
return [
(get_field_display(obj, name)[1], obj.pk if i == 0 else None)
for i, name in enumerate(self.list_field_names)]
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(CrudListView, self).get_context_data(**kwargs) context = super(CrudListMixin, self).get_context_data(**kwargs)
paginator = context['paginator']
# pagination
page_obj = context['page_obj'] page_obj = context['page_obj']
paginator = context['paginator']
context['page_range'] = make_pagination( context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages) page_obj.number, paginator.num_pages)
# rows
object_list = context['object_list'] object_list = context['object_list']
context['rows'] = [self._as_row(obj) for obj in object_list]
context['headers'] = [ context['headers'] = [
self.model._meta.get_field(fieldname).verbose_name self.model._meta.get_field(fieldname).verbose_name
for fieldname in self.field_names] for fieldname in self.list_field_names]
context['rows'] = self.get_rows(object_list) context['NO_ENTRIES_MSG'] = self.no_entries_msg
context['NO_ENTRIES_MSG'] = NO_ENTRIES_MSG
return context return context
class CrudCreateView(BaseMixin, FormMessagesMixin, CreateView):
form_class = crud.model_form def make_form_invalid_message(msg):
title = _('Adicionar %(verbose_name)s') % { return '%s %s' % (_('Formulário inválido.'), msg)
'verbose_name': BaseMixin.verbose_name}
class CrudCreateMixin(FormMessagesMixin):
form_valid_message = _('Registro criado com sucesso!') form_valid_message = _('Registro criado com sucesso!')
form_invalid_message = make_form_invalid_message( form_invalid_message = make_form_invalid_message(
_('O registro não foi criado.')) _('O registro não foi criado.'))
cancel_url = BaseMixin.list_url
def form_invalid(self, form): @property
""" def title(self):
If the form is invalid, re-render the context data with the return _('Adicionar %(verbose_name)s') % {
data-filled form and errors. 'verbose_name': self.verbose_name}
"""
return self.render_to_response(self.get_context_data(form=form)) @property
def cancel_url(self):
return self.list_url
def get_success_url(self): def get_success_url(self):
return self.detail_url return self.detail_url
class CrudDetailView(BaseMixin, DetailView):
class CrudDetailMixin():
@property @property
def title(self): def title(self):
return self.get_object() # TODO: can we just use view.object in the templates????
return str(self.object)
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 class CrudUpdateMixin(FormMessagesMixin):
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 layout]
class CrudUpdateView(BaseMixin, FormMessagesMixin, UpdateView):
form_class = crud.model_form
form_valid_message = _('Registro alterado com sucesso!') form_valid_message = _('Registro alterado com sucesso!')
form_invalid_message = make_form_invalid_message( form_invalid_message = make_form_invalid_message(
_('Suas alterações não foram salvas.')) _('Suas alterações não foram salvas.'))
@property @property
def title(self): def title(self):
return self.get_object() return str(self.object)
def get_success_url(self): @property
def cancel_url(self):
return self.detail_url return self.detail_url
def cancel_url(self): def get_success_url(self):
return self.detail_url return self.detail_url
class CrudDeleteView(BaseMixin, FormMessagesMixin, DeleteView):
class CrudDeleteMixin(FormMessagesMixin):
form_valid_message = _('Registro excluído com sucesso!') form_valid_message = _('Registro excluído com sucesso!')
form_invalid_message = make_form_invalid_message( form_invalid_message = make_form_invalid_message(
_('O registro não foi excluído.')) _('O registro não foi excluído.'))
@ -228,14 +245,39 @@ def build_crud(model, help_path, layout):
def get_success_url(self): def get_success_url(self):
return self.list_url return self.list_url
crud.CrudListView = CrudListView
crud.CrudCreateView = CrudCreateView
crud.CrudDetailView = CrudDetailView
crud.CrudUpdateView = CrudUpdateView
crud.CrudDeleteView = CrudDeleteView
# XXX transform into a property of Crud to enable override class Crud(object):
crud.urlpatterns = [
def __init__(self, model, help_path, layout,
base_mixin=BaseCrudMixin,
list_mixin=CrudListMixin,
create_mixin=CrudCreateMixin,
detail_mixin=CrudDetailMixin,
update_mixin=CrudUpdateMixin,
delete_mixin=CrudDeleteMixin):
class CrudMixin(base_mixin):
pass
CrudMixin.model = model
CrudMixin.help_path = help_path
CrudMixin.layout = layout
class CrudListView(CrudMixin, list_mixin, ListView):
pass
class CrudCreateView(CrudMixin, create_mixin, CreateView):
pass
class CrudDetailView(CrudMixin, detail_mixin, DetailView):
pass
class CrudUpdateView(CrudMixin, update_mixin, UpdateView):
pass
class CrudDeleteView(CrudMixin, delete_mixin, DeleteView):
pass
self.urlpatterns = [
url(r'^$', CrudListView.as_view(), name='list'), url(r'^$', CrudListView.as_view(), name='list'),
url(r'^create$', CrudCreateView.as_view(), name='create'), url(r'^create$', CrudCreateView.as_view(), name='create'),
url(r'^(?P<pk>\d+)$', CrudDetailView.as_view(), name='detail'), url(r'^(?P<pk>\d+)$', CrudDetailView.as_view(), name='detail'),
@ -244,6 +286,9 @@ def build_crud(model, help_path, layout):
url(r'^(?P<pk>\d+)/delete$', url(r'^(?P<pk>\d+)/delete$',
CrudDeleteView.as_view(), name='delete'), CrudDeleteView.as_view(), name='delete'),
] ]
crud.urls = crud.urlpatterns, crud.namespace, crud.namespace
return crud self.namespace = CrudMixin().namespace
self.urls = self.urlpatterns, self.namespace, self.namespace
# FIXME Refatorar código que precisa desse atributo e remover
self.CrudDetailView = CrudDetailView

61
crud_tests/test_flux.py

@ -2,29 +2,15 @@ import pytest
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from model_mommy import mommy from model_mommy import mommy
from crud import (NO_ENTRIES_MSG, build_crud, from_to, get_field_display, from crud import (CrispyLayoutFormMixin, CrudListMixin, from_to,
make_pagination) get_field_display, make_pagination)
from .models import Continent, Country from .models import Continent, Country
from .views import country_crud from .views import CountryCrudListMixin
pytestmark = pytest.mark.django_db pytestmark = pytest.mark.django_db
@pytest.mark.parametrize("layout, result", [
([['Dados Complementares']], []), # missing rows definition
([['Basic', [('name', 9), ('population', 3)]],
['More Details', [('description', 12)]],
],
['name', 'population']),
])
def test_listview_get_fieldnames(layout, result):
crud = build_crud(Country, 'stub_help_path', layout)
view = crud.CrudListView()
assert view.field_names == result
__ = None # for test readability __ = None # for test readability
@ -82,20 +68,45 @@ def test_get_field_display():
assert get_field_display(stub, 'population')[1] == '' assert get_field_display(stub, 'population')[1] == ''
def test_crud_detail_view_fieldsets(monkeypatch): @pytest.mark.parametrize("_layout, result", [
([['Dados Complementares']], []), # missing rows definition
([['Basic', [('name', 9), ('population', 3)]],
['More Details', [('description', 12)]],
],
['name', 'population']),
])
def test_layout_fieldnames(_layout, result):
class StubMixin(CrispyLayoutFormMixin):
layout = _layout
view = StubMixin()
assert view.list_field_names == result
def test_layout_detail_fieldsets(monkeypatch):
view = country_crud.CrudDetailView()
stub = mommy.make(Country, stub = mommy.make(Country,
name='Brazil', name='Brazil',
continent__name='South America', continent__name='South America',
is_cold=False) is_cold=False)
# to test None displayed as empty string class StubMixin(CrispyLayoutFormMixin):
assert stub.population is None layout = [['Basic Data',
[('name', 9), ('continent', 3)],
[('population', 6), ('is_cold', 6)]
],
['More Details', [('description', 12)]],
]
def get_object(): def get_object(self):
return stub return stub
monkeypatch.setattr(view, 'get_object', get_object)
view = StubMixin()
# to test None displayed as empty string
assert stub.population is None
assert view.fieldsets == [ assert view.fieldsets == [
{'legend': 'Basic Data', {'legend': 'Basic Data',
@ -136,7 +147,7 @@ def assert_h1(res, title):
assert res.html.find('main').find('h1').text == title assert res.html.find('main').find('h1').text == title
NO_ENTRIES_MSG = str(NO_ENTRIES_MSG) # "unlazy" NO_ENTRIES_MSG = str(CrudListMixin.no_entries_msg) # "unlazy"
def assert_on_list_page(res): def assert_on_list_page(res):
@ -181,7 +192,7 @@ def test_flux_list_paginate_detail(
population=population, population=population,
is_cold=is_cold) is_cold=is_cold)
country_crud.CrudListView.paginate_by = page_size CountryCrudListMixin.paginate_by = page_size
res = app.get('/countries/') res = app.get('/countries/')

4
crud_tests/urls.py

@ -3,7 +3,5 @@ from django.conf.urls import include, url
from .views import country_crud from .views import country_crud
urlpatterns = [ urlpatterns = [
url(r'^countries/', include(country_crud.urlpatterns, url(r'^countries/', include(country_crud.urls)),
country_crud.namespace,
country_crud.namespace)),
] ]

12
crud_tests/views.py

@ -1,12 +1,18 @@
from crud import build_crud from crud import Crud, CrudListMixin
from .models import Country from .models import Country
country_crud = build_crud(
class CountryCrudListMixin(CrudListMixin):
paginate_by = 10
country_crud = Crud(
Country, 'help_path', [ Country, 'help_path', [
['Basic Data', ['Basic Data',
[('name', 9), ('continent', 3)], [('name', 9), ('continent', 3)],
[('population', 6), ('is_cold', 6)] [('population', 6), ('is_cold', 6)]
], ],
['More Details', [('description', 12)]], ['More Details', [('description', 12)]],
]) ],
list_mixin=CountryCrudListMixin)

6
lexml/views.py

@ -1,10 +1,10 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from crud import build_crud from crud import Crud
from .models import LexmlProvedor, LexmlPublicador from .models import LexmlProvedor, LexmlPublicador
lexml_provedor_crud = build_crud( lexml_provedor_crud = Crud(
LexmlProvedor, 'lexml_provedor', [ LexmlProvedor, 'lexml_provedor', [
[_('Provedor Lexml'), [_('Provedor Lexml'),
@ -16,7 +16,7 @@ lexml_provedor_crud = build_crud(
]) ])
lexml_publicador_crud = build_crud( lexml_publicador_crud = Crud(
LexmlPublicador, 'lexml_publicador', [ LexmlPublicador, 'lexml_publicador', [
[_('Publicador Lexml'), [_('Publicador Lexml'),

40
materia/views.py

@ -14,7 +14,7 @@ from vanilla.views import GenericView
from comissoes.models import Comissao, Composicao from comissoes.models import Comissao, Composicao
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
from crud import build_crud, make_pagination from crud import Crud, make_pagination
from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica
from parlamentares.models import Partido from parlamentares.models import Partido
from sessao.models import AcompanharMateria from sessao.models import AcompanharMateria
@ -31,42 +31,42 @@ from .models import (Anexada, Autor, Autoria, DespachoInicial,
TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao, TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao,
Tramitacao, UnidadeTramitacao) Tramitacao, UnidadeTramitacao)
origem_crud = build_crud( origem_crud = Crud(
Origem, 'origem', [ Origem, 'origem', [
[_('Origem'), [_('Origem'),
[('nome', 8), ('sigla', 4)]], [('nome', 8), ('sigla', 4)]],
]) ])
tipo_materia_crud = build_crud( tipo_materia_crud = Crud(
TipoMateriaLegislativa, 'tipo_materia_legislativa', [ TipoMateriaLegislativa, 'tipo_materia_legislativa', [
[_('Tipo Matéria Legislativa'), [_('Tipo Matéria Legislativa'),
[('sigla', 4), ('descricao', 8)]], [('sigla', 4), ('descricao', 8)]],
]) ])
regime_tramitacao_crud = build_crud( regime_tramitacao_crud = Crud(
RegimeTramitacao, 'regime_tramitacao', [ RegimeTramitacao, 'regime_tramitacao', [
[_('Tipo de Documento'), [_('Tipo de Documento'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
tipo_documento_crud = build_crud( tipo_documento_crud = Crud(
TipoDocumento, 'tipo_documento', [ TipoDocumento, 'tipo_documento', [
[_('Regime Tramitação'), [_('Regime Tramitação'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
tipo_fim_relatoria_crud = build_crud( tipo_fim_relatoria_crud = Crud(
TipoFimRelatoria, 'fim_relatoria', [ TipoFimRelatoria, 'fim_relatoria', [
[_('Tipo Fim de Relatoria'), [_('Tipo Fim de Relatoria'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
materia_legislativa_crud = build_crud( materia_legislativa_crud = Crud(
MateriaLegislativa, '', [ MateriaLegislativa, '', [
[_('Identificação Básica'), [_('Identificação Básica'),
@ -95,7 +95,7 @@ materia_legislativa_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
Anexada_crud = build_crud( Anexada_crud = Crud(
Anexada, '', [ Anexada, '', [
[_('Matéria Legislativa'), [_('Matéria Legislativa'),
@ -111,14 +111,14 @@ Anexada_crud = build_crud(
[('data_anexacao', 6), ('data_desanexacao', 6)]], [('data_anexacao', 6), ('data_desanexacao', 6)]],
]) ])
tipo_autor_crud = build_crud( tipo_autor_crud = Crud(
TipoAutor, 'tipo_autor', [ TipoAutor, 'tipo_autor', [
[_('Tipo Autor'), [_('Tipo Autor'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
autor_crud = build_crud( autor_crud = Crud(
Autor, 'autor', [ Autor, 'autor', [
[_('Autor'), [_('Autor'),
@ -126,7 +126,7 @@ autor_crud = build_crud(
[('username', 12)]], [('username', 12)]],
]) ])
autoria_crud = build_crud( autoria_crud = Crud(
Autoria, '', [ Autoria, '', [
[_('Autoria'), [_('Autoria'),
@ -135,7 +135,7 @@ autoria_crud = build_crud(
('primeiro_autor', 4)]], ('primeiro_autor', 4)]],
]) ])
documento_acessorio_crud = build_crud( documento_acessorio_crud = Crud(
DocumentoAcessorio, '', [ DocumentoAcessorio, '', [
[_('Documento Acessório'), [_('Documento Acessório'),
@ -146,7 +146,7 @@ documento_acessorio_crud = build_crud(
[('txt_observacao_FIXME', 12)]], [('txt_observacao_FIXME', 12)]],
]) ])
numeracao_crud = build_crud( numeracao_crud = Crud(
Numeracao, '', [ Numeracao, '', [
[_('Numeração'), [_('Numeração'),
@ -154,7 +154,7 @@ numeracao_crud = build_crud(
[('ano_materia', 6), ('data_materia', 6)]], [('ano_materia', 6), ('data_materia', 6)]],
]) ])
orgao_crud = build_crud( orgao_crud = Crud(
Orgao, 'orgao', [ Orgao, 'orgao', [
[_('Órgão'), [_('Órgão'),
@ -165,7 +165,7 @@ orgao_crud = build_crud(
('unidade_deliberativa', 2)]], ('unidade_deliberativa', 2)]],
]) ])
relatoria_crud = build_crud( relatoria_crud = Crud(
Relatoria, '', [ Relatoria, '', [
[_('Relatoria'), [_('Relatoria'),
@ -174,7 +174,7 @@ relatoria_crud = build_crud(
[('data_destituicao_relator', 6), ('tipo_fim_relatoria', 6)]], [('data_destituicao_relator', 6), ('tipo_fim_relatoria', 6)]],
]) ])
tipo_proposicao_crud = build_crud( tipo_proposicao_crud = Crud(
TipoProposicao, 'tipo_proposicao', [ TipoProposicao, 'tipo_proposicao', [
[_('Tipo Proposição'), [_('Tipo Proposição'),
@ -183,7 +183,7 @@ tipo_proposicao_crud = build_crud(
[('modelo', 12)]], [('modelo', 12)]],
]) ])
proposicao_crud = build_crud( proposicao_crud = Crud(
Proposicao, '', [ Proposicao, '', [
[_('Proposição'), [_('Proposição'),
@ -195,7 +195,7 @@ proposicao_crud = build_crud(
[('nom_arquivo_FIXME', 6), ('modelo_FIXME', 6)]], [('nom_arquivo_FIXME', 6), ('modelo_FIXME', 6)]],
]) ])
status_tramitacao_crud = build_crud( status_tramitacao_crud = Crud(
StatusTramitacao, 'status_tramitacao', [ StatusTramitacao, 'status_tramitacao', [
[_('Status Tramitação'), [_('Status Tramitação'),
@ -204,7 +204,7 @@ status_tramitacao_crud = build_crud(
('descricao', 7)]], ('descricao', 7)]],
]) ])
unidade_tramitacao_crud = build_crud( unidade_tramitacao_crud = Crud(
UnidadeTramitacao, 'unidade_tramitacao', [ UnidadeTramitacao, 'unidade_tramitacao', [
[_('Unidade Tramitação'), [_('Unidade Tramitação'),
@ -213,7 +213,7 @@ unidade_tramitacao_crud = build_crud(
[('parlamentar', 12)]], [('parlamentar', 12)]],
]) ])
tramitacao_crud = build_crud( tramitacao_crud = Crud(
Tramitacao, '', [ Tramitacao, '', [
[_('Tramitação'), [_('Tramitação'),

12
norma/views.py

@ -8,21 +8,21 @@ from django.views.generic.edit import FormMixin
from vanilla.views import GenericView from vanilla.views import GenericView
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
from crud import build_crud from crud import Crud
from materia.models import MateriaLegislativa, TipoMateriaLegislativa from materia.models import MateriaLegislativa, TipoMateriaLegislativa
from .forms import NormaJuridicaForm from .forms import NormaJuridicaForm
from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica, from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
assunto_norma_crud = build_crud( assunto_norma_crud = Crud(
AssuntoNorma, 'assunto_norma_juridica', [ AssuntoNorma, 'assunto_norma_juridica', [
[_('Assunto Norma Jurídica'), [_('Assunto Norma Jurídica'),
[('assunto', 6), ('descricao', 6)]], [('assunto', 6), ('descricao', 6)]],
]) ])
tipo_norma_crud = build_crud( tipo_norma_crud = Crud(
TipoNormaJuridica, 'tipo_norma_juridica', [ TipoNormaJuridica, 'tipo_norma_juridica', [
[_('Tipo Norma Jurídica'), [_('Tipo Norma Jurídica'),
@ -31,7 +31,7 @@ tipo_norma_crud = build_crud(
('equivalente_lexml', 4)]], ('equivalente_lexml', 4)]],
]) ])
norma_crud = build_crud( norma_crud = Crud(
NormaJuridica, '', [ NormaJuridica, '', [
@ -51,7 +51,7 @@ norma_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
norma_temporario_crud = build_crud( norma_temporario_crud = Crud(
NormaJuridica, 'normajuridica', [ NormaJuridica, 'normajuridica', [
[_('Identificação Básica'), [_('Identificação Básica'),
@ -60,7 +60,7 @@ norma_temporario_crud = build_crud(
]) ])
legislacao_citada_crud = build_crud( legislacao_citada_crud = Crud(
LegislacaoCitada, '', [ LegislacaoCitada, '', [
[_('Legislação Citada'), [_('Legislação Citada'),

4
painel/views.py

@ -5,7 +5,7 @@ from django.http import HttpResponse, JsonResponse
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from crud import build_crud from crud import Crud
from painel.models import Painel from painel.models import Painel
from parlamentares.models import Filiacao from parlamentares.models import Filiacao
from sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia, from sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia,
@ -14,7 +14,7 @@ from sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia,
from .models import Cronometro from .models import Cronometro
cronometro_painel_crud = build_crud( cronometro_painel_crud = Crud(
Cronometro, '', [ Cronometro, '', [
[_('Cronometro'), [_('Cronometro'),

28
parlamentares/views.py

@ -11,7 +11,7 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla import GenericView
from crud import build_crud from crud import Crud
from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm, from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm,
FiliacaoForm, MandatoEditForm, MandatoForm, FiliacaoForm, MandatoEditForm, MandatoForm,
@ -22,7 +22,7 @@ from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar, Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
TipoAfastamento, TipoDependente) TipoAfastamento, TipoDependente)
cargo_mesa_crud = build_crud( cargo_mesa_crud = Crud(
CargoMesa, 'cargo_mesa', [ CargoMesa, 'cargo_mesa', [
[_('Cargo na Mesa'), [_('Cargo na Mesa'),
@ -30,14 +30,14 @@ cargo_mesa_crud = build_crud(
('unico', 2)]], ('unico', 2)]],
]) ])
legislatura_crud = build_crud( legislatura_crud = Crud(
Legislatura, 'tabelas_auxiliares#legislatura', [ Legislatura, 'tabelas_auxiliares#legislatura', [
[_('Legislatura'), [_('Legislatura'),
[('data_inicio', 4), ('data_fim', 4), ('data_eleicao', 4)]], [('data_inicio', 4), ('data_fim', 4), ('data_eleicao', 4)]],
]) ])
coligacao_crud = build_crud( coligacao_crud = Crud(
Coligacao, 'coligacao', [ Coligacao, 'coligacao', [
[_('Coligação'), [_('Coligação'),
@ -46,7 +46,7 @@ coligacao_crud = build_crud(
('numero_votos', 2)]], ('numero_votos', 2)]],
]) ])
partido_crud = build_crud( partido_crud = Crud(
Partido, 'partidos', [ Partido, 'partidos', [
[_('Partido Político'), [_('Partido Político'),
@ -57,7 +57,7 @@ partido_crud = build_crud(
]) ])
dependente_crud = build_crud( dependente_crud = Crud(
Dependente, '', [ Dependente, '', [
[_('Dependentes'), [_('Dependentes'),
@ -67,7 +67,7 @@ dependente_crud = build_crud(
]) ])
sessao_legislativa_crud = build_crud( sessao_legislativa_crud = Crud(
SessaoLegislativa, 'sessao_legislativa', [ SessaoLegislativa, 'sessao_legislativa', [
[_('Sessão Legislativa'), [_('Sessão Legislativa'),
@ -81,7 +81,7 @@ sessao_legislativa_crud = build_crud(
]) ])
parlamentar_crud = build_crud( parlamentar_crud = Crud(
Parlamentar, '', [ Parlamentar, '', [
[_('Cadastro do Parlamentar'), [_('Cadastro do Parlamentar'),
@ -101,14 +101,14 @@ parlamentar_crud = build_crud(
[('biografia', 12)]], [('biografia', 12)]],
]) ])
filiacao_crud = build_crud( filiacao_crud = Crud(
Filiacao, '', [ Filiacao, '', [
[_('Filiações Partidárias '), [_('Filiações Partidárias '),
[('partido', 4), ('data', 4), ('data_desfiliacao', 4)]], [('partido', 4), ('data', 4), ('data_desfiliacao', 4)]],
]) ])
mandato_crud = build_crud( mandato_crud = Crud(
Mandato, '', [ Mandato, '', [
[_('Mandato'), [_('Mandato'),
@ -120,28 +120,28 @@ mandato_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
tipo_dependente_crud = build_crud( tipo_dependente_crud = Crud(
TipoDependente, 'tipo_dependente', [ TipoDependente, 'tipo_dependente', [
[_('Tipo de Dependente'), [_('Tipo de Dependente'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
nivel_instrucao_crud = build_crud( nivel_instrucao_crud = Crud(
NivelInstrucao, 'nivel_instrucao', [ NivelInstrucao, 'nivel_instrucao', [
[_('Nível Instrução'), [_('Nível Instrução'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
tipo_afastamento_crud = build_crud( tipo_afastamento_crud = Crud(
TipoAfastamento, 'tipo_afastamento', [ TipoAfastamento, 'tipo_afastamento', [
[_('Tipo de Afastamento'), [_('Tipo de Afastamento'),
[('descricao', 5), ('dispositivo', 5), ('afastamento', 2)]], [('descricao', 5), ('dispositivo', 5), ('afastamento', 2)]],
]) ])
tipo_militar_crud = build_crud( tipo_militar_crud = Crud(
SituacaoMilitar, 'tipo_situa_militar', [ SituacaoMilitar, 'tipo_situa_militar', [
[_('Tipo Situação Militar'), [_('Tipo Situação Militar'),

16
protocoloadm/views.py

@ -14,7 +14,7 @@ from django.views.generic.base import TemplateView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla import GenericView
from crud import build_crud, make_pagination from crud import Crud, make_pagination
from materia.models import Proposicao, TipoMateriaLegislativa from materia.models import Proposicao, TipoMateriaLegislativa
from sapl.utils import create_barcode from sapl.utils import create_barcode
@ -27,14 +27,14 @@ from .models import (Autor, DocumentoAcessorioAdministrativo,
StatusTramitacaoAdministrativo, StatusTramitacaoAdministrativo,
TipoDocumentoAdministrativo, TramitacaoAdministrativo) TipoDocumentoAdministrativo, TramitacaoAdministrativo)
tipo_documento_administrativo_crud = build_crud( tipo_documento_administrativo_crud = Crud(
TipoDocumentoAdministrativo, '', [ TipoDocumentoAdministrativo, '', [
[_('Tipo Documento Administrativo'), [_('Tipo Documento Administrativo'),
[('sigla', 4), ('descricao', 8)]], [('sigla', 4), ('descricao', 8)]],
]) ])
documento_administrativo_crud = build_crud( documento_administrativo_crud = Crud(
DocumentoAdministrativo, '', [ DocumentoAdministrativo, '', [
[_('Indentificação Básica'), [_('Indentificação Básica'),
@ -49,7 +49,7 @@ documento_administrativo_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
documento_acessorio_administrativo_crud = build_crud( documento_acessorio_administrativo_crud = Crud(
DocumentoAcessorioAdministrativo, '', [ DocumentoAcessorioAdministrativo, '', [
[_('Documento Acessório'), [_('Documento Acessório'),
@ -59,7 +59,7 @@ documento_acessorio_administrativo_crud = build_crud(
[('assunto', 12)]], [('assunto', 12)]],
]) ])
status_tramitacao_administrativo_crud = build_crud( status_tramitacao_administrativo_crud = Crud(
StatusTramitacaoAdministrativo, '', [ StatusTramitacaoAdministrativo, '', [
[_('Status Tramitação Administrativo'), [_('Status Tramitação Administrativo'),
@ -68,7 +68,7 @@ status_tramitacao_administrativo_crud = build_crud(
('descricao', 7)]], ('descricao', 7)]],
]) ])
tramitacao_administrativo_crud = build_crud( tramitacao_administrativo_crud = Crud(
TramitacaoAdministrativo, '', [ TramitacaoAdministrativo, '', [
[_('Tramitação'), [_('Tramitação'),
@ -78,7 +78,7 @@ tramitacao_administrativo_crud = build_crud(
[('texto', 12)]], [('texto', 12)]],
]) ])
protocolo_documento_crud = build_crud( protocolo_documento_crud = Crud(
Protocolo, '', [ Protocolo, '', [
[_('Indentificação Documento'), [_('Indentificação Documento'),
@ -89,7 +89,7 @@ protocolo_documento_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
protocolo_materia_crud = build_crud( protocolo_materia_crud = Crud(
Protocolo, '', [ Protocolo, '', [
[_('Indentificação da Matéria'), [_('Indentificação da Matéria'),

16
sessao/views.py

@ -10,7 +10,7 @@ from django.views.generic import ListView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from rest_framework import generics from rest_framework import generics
from crud import build_crud, make_pagination from crud import Crud, make_pagination
from materia.models import (Autoria, DocumentoAcessorio, from materia.models import (Autoria, DocumentoAcessorio,
TipoMateriaLegislativa, Tramitacao) TipoMateriaLegislativa, Tramitacao)
from norma.models import NormaJuridica from norma.models import NormaJuridica
@ -28,14 +28,14 @@ from .models import (AcompanharMateria, CargoMesa, ExpedienteMateria,
TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria,
VotoParlamentar) VotoParlamentar)
tipo_sessao_crud = build_crud( tipo_sessao_crud = Crud(
TipoSessaoPlenaria, 'tipo_sessao_plenaria', [ TipoSessaoPlenaria, 'tipo_sessao_plenaria', [
[_('Tipo de Sessão Plenária'), [_('Tipo de Sessão Plenária'),
[('nome', 6), ('quorum_minimo', 6)]], [('nome', 6), ('quorum_minimo', 6)]],
]) ])
sessao_crud = build_crud( sessao_crud = Crud(
SessaoPlenaria, '', [ SessaoPlenaria, '', [
[_('Dados Básicos'), [_('Dados Básicos'),
@ -49,7 +49,7 @@ sessao_crud = build_crud(
[('url_audio', 6), ('url_video', 6)]], [('url_audio', 6), ('url_video', 6)]],
]) ])
expediente_materia_crud = build_crud( expediente_materia_crud = Crud(
ExpedienteMateria, '', [ ExpedienteMateria, '', [
[_('Cadastro de Matérias do Expediente'), [_('Cadastro de Matérias do Expediente'),
@ -61,7 +61,7 @@ expediente_materia_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
ordem_dia_crud = build_crud( ordem_dia_crud = Crud(
OrdemDia, '', [ OrdemDia, '', [
[_('Cadastro de Matérias da Ordem do Dia'), [_('Cadastro de Matérias da Ordem do Dia'),
@ -73,21 +73,21 @@ ordem_dia_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
tipo_resultado_votacao_crud = build_crud( tipo_resultado_votacao_crud = Crud(
TipoResultadoVotacao, 'tipo_resultado_votacao', [ TipoResultadoVotacao, 'tipo_resultado_votacao', [
[_('Tipo de Resultado da Votação'), [_('Tipo de Resultado da Votação'),
[('nome', 12)]], [('nome', 12)]],
]) ])
tipo_expediente_crud = build_crud( tipo_expediente_crud = Crud(
TipoExpediente, 'tipo_expediente', [ TipoExpediente, 'tipo_expediente', [
[_('Tipo de Expediente'), [_('Tipo de Expediente'),
[('nome', 12)]], [('nome', 12)]],
]) ])
registro_votacao_crud = build_crud( registro_votacao_crud = Crud(
RegistroVotacao, '', [ RegistroVotacao, '', [
[_('Votação Simbólica'), [_('Votação Simbólica'),

Loading…
Cancel
Save