Browse Source

Faz o merge com o master

pull/268/head
Eduardo Calil 9 years ago
parent
commit
a527605626
  1. 10
      base/forms.py
  2. 3
      base/urls.py
  3. 20
      comissoes/urls.py
  4. 14
      comissoes/views.py
  5. 12
      compilacao/urls.py
  6. 15
      compilacao/views.py
  7. 0
      crud/__init__.py
  8. 124
      crud/base.py
  9. 0
      crud/tests/__init__.py
  10. 15
      crud/tests/settings.py
  11. 0
      crud/tests/stub_app/layouts.yaml
  12. 0
      crud/tests/stub_app/models.py
  13. 0
      crud/tests/stub_app/templates/base.html
  14. 7
      crud/tests/stub_app/urls.py
  15. 11
      crud/tests/stub_app/views.py
  16. 10
      crud/tests/test_base.py
  17. 7
      crud_tests/urls.py
  18. 13
      crud_tests/views.py
  19. 8
      lexml/urls.py
  20. 6
      lexml/views.py
  21. 19
      materia/forms.py
  22. 62
      materia/urls.py
  23. 43
      materia/views.py
  24. 20
      norma/forms.py
  25. 30
      norma/urls.py
  26. 34
      norma/views.py
  27. 4
      painel/urls.py
  28. 4
      painel/views.py
  29. 35
      parlamentares/urls.py
  30. 28
      parlamentares/views.py
  31. 6
      protocoloadm/forms.py
  32. 37
      protocoloadm/urls.py
  33. 17
      protocoloadm/views.py
  34. 2
      pytest.ini
  35. 1
      relatorios/views.py
  36. 19
      sessao/forms.py
  37. 28
      sessao/urls.py
  38. 74
      sessao/views.py
  39. 2
      test_and_check_qa.sh

10
base/forms.py

@ -1,6 +1,7 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Fieldset, Layout
from django import forms
from django.core.exceptions import ValidationError
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
@ -38,6 +39,15 @@ class CasaLegislativaTabelaAuxForm(ModelForm):
attrs={'id': 'casa-informacoes'})
}
def clean_logotipo(self):
logotipo = self.cleaned_data.get('logotipo', False)
if logotipo:
if logotipo.size > 2*1024*1024:
raise ValidationError("Imagem muito grande. ( > 2mb )")
return logotipo
else:
raise ValidationError("Não foi possível salvar a imagem.")
def __init__(self, *args, **kwargs):
row1 = crispy_layout_mixin.to_row(

3
base/urls.py

@ -1,7 +1,6 @@
from django.conf.urls import url
from django.views.generic.base import TemplateView
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.views.generic.base import TemplateView
from .views import CasaLegislativaTableAuxView, HelpView

20
comissoes/urls.py

@ -1,13 +1,15 @@
from django.conf.urls import include, url
from comissoes.views import (CadastrarComissaoView,
from comissoes.views import (CadastrarComissaoView, CargoCrud, ComissaoCrud,
ComissaoParlamentarEditView,
ComissaoParlamentarIncluirView, ComposicaoView,
MateriasTramitacaoListView, MateriasView,
ReunioesView, cargo_crud, comissao_crud,
periodo_composicao_crud, tipo_comissao_crud)
PeriodoComposicaoCrud, ReunioesView,
TipoComissaoCrud)
comissao_url_patterns = comissao_crud.urlpatterns + [
comissao_url_patterns, namespace = ComissaoCrud.get_urls()
comissao_url_patterns = comissao_url_patterns + [
url(r'^(?P<pk>\d+)/composicao$',
ComposicaoView.as_view(), name='composicao'),
url(r'^(?P<pk>\d+)/materias-em-tramitacao$',
@ -27,12 +29,10 @@ comissao_url_patterns = comissao_crud.urlpatterns + [
]
urlpatterns = [
url(r'^comissoes/', include(comissao_url_patterns,
comissao_crud.namespace,
comissao_crud.namespace)),
url(r'^comissoes/', include(comissao_url_patterns, namespace)),
url(r'^sistema/comissoes/cargo/', include(cargo_crud.urls)),
url(r'^sistema/comissoes/cargo/', include(CargoCrud.get_urls())),
url(r'^sistema/comissoes/periodo-composicao/',
include(periodo_composicao_crud.urls)),
url(r'^sistema/comissoes/tipo/', include(tipo_comissao_crud.urls)),
include(PeriodoComposicaoCrud.get_urls())),
url(r'^sistema/comissoes/tipo/', include(TipoComissaoCrud.get_urls())),
]

14
comissoes/views.py

@ -3,7 +3,7 @@ from django.core.urlresolvers import reverse, reverse_lazy
from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, FormView, ListView
from crud import Crud
from crud.base import Crud
from materia.models import Tramitacao
from parlamentares.models import Filiacao
@ -12,10 +12,10 @@ from .forms import (CadastrarComissaoForm, ComposicaoForm,
from .models import (CargoComissao, Comissao, Composicao, Participacao,
Periodo, TipoComissao)
cargo_crud = Crud(CargoComissao, 'cargo_comissao')
periodo_composicao_crud = Crud(Periodo, 'periodo_composicao_comissao')
tipo_comissao_crud = Crud(TipoComissao, 'tipo_comissao')
comissao_crud = Crud(Comissao, 'modulo_comissoes')
CargoCrud = Crud.build(CargoComissao, 'cargo_comissao')
PeriodoComposicaoCrud = Crud.build(Periodo, 'periodo_composicao_comissao')
TipoComissaoCrud = Crud.build(TipoComissao, 'tipo_comissao')
ComissaoCrud = Crud.build(Comissao, 'modulo_comissoes')
class CadastrarComissaoView(CreateView):
@ -66,11 +66,11 @@ class ComposicaoView(FormView):
'object': Comissao.objects.get(id=self.kwargs['pk'])})
class MateriasView(comissao_crud.CrudDetailView):
class MateriasView(ComissaoCrud.CrudDetailView):
template_name = 'comissoes/materias.html'
class ReunioesView(comissao_crud.CrudDetailView):
class ReunioesView(ComissaoCrud.CrudDetailView):
template_name = 'comissoes/reunioes.html'

12
compilacao/urls.py

@ -1,8 +1,8 @@
from django.conf.urls import include, url
from compilacao import views
from compilacao.views import (tipo_nota_crud, tipo_publicacao_crud,
tipo_vide_crud, veiculo_publicacao_crud)
from compilacao.views import (TipoNotaCrud, TipoPublicacaoCrud, TipoVideCrud,
VeiculoPublicacaoCrud)
urlpatterns_compilacao = [
url(r'^$', views.TaListView.as_view(), name='ta_list'),
@ -93,12 +93,12 @@ urlpatterns = [
url(r'^ta/', include(urlpatterns_compilacao, 'compilacao', 'compilacao')),
url(r'^ta/config/tipo-nota/',
include(tipo_nota_crud.urls)),
include(TipoNotaCrud.get_urls())),
url(r'^ta/config/tipo-vide/',
include(tipo_vide_crud.urls)),
include(TipoVideCrud.get_urls())),
url(r'^ta/config/tipo-publicacao/',
include(tipo_publicacao_crud.urls)),
include(TipoPublicacaoCrud.get_urls())),
url(r'^ta/config/veiculo-publicacao/',
include(veiculo_publicacao_crud.urls)),
include(VeiculoPublicacaoCrud.get_urls())),
]

15
compilacao/views.py

@ -27,7 +27,7 @@ from compilacao.models import (Dispositivo, Nota,
TextoArticulado, TipoDispositivo, TipoNota,
TipoPublicacao, TipoTextoArticulado, TipoVide,
VeiculoPublicacao, Vide)
from crud import Crud, CrudListMixin, make_pagination
from crud.base import Crud, CrudListView, make_pagination
DISPOSITIVO_SELECT_RELATED = (
'tipo_dispositivo',
@ -42,13 +42,10 @@ DISPOSITIVO_SELECT_RELATED = (
'ta_publicado',
'ta',)
tipo_nota_crud = Crud(TipoNota, 'tipo_nota')
tipo_vide_crud = Crud(TipoVide, 'tipo_vide')
tipo_publicacao_crud = Crud(TipoPublicacao, 'tipo_publicacao')
veiculo_publicacao_crud = Crud(VeiculoPublicacao, 'veiculo_publicacao')
perfil_estr_txt_norm = Crud(PerfilEstruturalTextoArticulado,
'perfil_estrutural')
tipo_dispositivo_crud = Crud(TipoDispositivo, 'tipo_dispositivo')
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')
VeiculoPublicacaoCrud = Crud.build(VeiculoPublicacao, 'veiculo_publicacao')
class IntegracaoTaView(TemplateView):
@ -1667,7 +1664,7 @@ class PublicacaoListView(ListView):
def get_context_data(self, **kwargs):
context = super(PublicacaoListView, self).get_context_data(**kwargs)
context['NO_ENTRIES_MSG'] = CrudListMixin.no_entries_msg
context['NO_ENTRIES_MSG'] = CrudListView.no_entries_msg
return context

0
crud_tests/__init__.py → crud/__init__.py

124
crud.py → crud/base.py

@ -1,6 +1,7 @@
from braces.views import FormMessagesMixin
from django.conf.urls import url
from django.core.urlresolvers import reverse
from django.utils.decorators import classonlymethod
from django.utils.translation import ugettext_lazy as _
from django.views.generic import (CreateView, DeleteView, DetailView, ListView,
UpdateView)
@ -8,6 +9,19 @@ from django.views.generic import (CreateView, DeleteView, DetailView, ListView,
from crispy_layout_mixin import CrispyLayoutFormMixin, get_field_display
def _form_invalid_message(msg):
return '%s %s' % (_('Formulário inválido.'), msg)
FORM_MESSAGES = {'create': (_('Registro criado com sucesso!'),
_('O registro não foi criado.')),
'update': (_('Registro alterado com sucesso!'),
_('Suas alterações não foram salvas.')),
'delete': (_('Registro excluído com sucesso!'),
_('O registro não foi excluído.'))}
FORM_MESSAGES = {k: (a, _form_invalid_message(b))
for k, (a, b) in FORM_MESSAGES.items()}
def from_to(start, end):
return list(range(start, end + 1))
@ -39,7 +53,7 @@ def make_pagination(index, num_pages):
return head + [None] + tail
class BaseCrudMixin(CrispyLayoutFormMixin):
class BaseMixin(CrispyLayoutFormMixin):
@property
def namespace(self):
@ -69,7 +83,7 @@ class BaseCrudMixin(CrispyLayoutFormMixin):
return self.resolve_url('delete', args=(self.object.id,))
def get_template_names(self):
names = super(BaseCrudMixin, self).get_template_names()
names = super(BaseMixin, self).get_template_names()
names.append("crud/%s.html" %
self.template_name_suffix.lstrip('_'))
return names
@ -83,7 +97,7 @@ class BaseCrudMixin(CrispyLayoutFormMixin):
return self.model._meta.verbose_name_plural
class CrudListMixin():
class CrudListView(ListView):
paginate_by = 10
no_entries_msg = _('Nenhum registro encontrado.')
@ -94,7 +108,7 @@ class CrudListMixin():
for i, name in enumerate(self.list_field_names)]
def get_context_data(self, **kwargs):
context = super(CrudListMixin, self).get_context_data(**kwargs)
context = super(CrudListView, self).get_context_data(**kwargs)
context.setdefault('title', self.verbose_name_plural)
# pagination
@ -115,15 +129,9 @@ class CrudListMixin():
return context
def make_form_invalid_message(msg):
return '%s %s' % (_('Formulário inválido.'), msg)
class CrudCreateMixin(FormMessagesMixin):
class CrudCreateView(FormMessagesMixin, CreateView):
form_valid_message = _('Registro criado com sucesso!')
form_invalid_message = make_form_invalid_message(
_('O registro não foi criado.'))
form_valid_message, form_invalid_message = FORM_MESSAGES['create']
@property
def cancel_url(self):
@ -135,18 +143,12 @@ class CrudCreateMixin(FormMessagesMixin):
def get_context_data(self, **kwargs):
kwargs.setdefault('title', _('Adicionar %(verbose_name)s') % {
'verbose_name': self.verbose_name})
return super(CrudCreateMixin, self).get_context_data(**kwargs)
return super(CrudCreateView, self).get_context_data(**kwargs)
class CrudDetailMixin():
pass
class CrudUpdateView(FormMessagesMixin, UpdateView):
class CrudUpdateMixin(FormMessagesMixin):
form_valid_message = _('Registro alterado com sucesso!')
form_invalid_message = make_form_invalid_message(
_('Suas alterações não foram salvas.'))
form_valid_message, form_invalid_message = FORM_MESSAGES['update']
@property
def cancel_url(self):
@ -156,11 +158,9 @@ class CrudUpdateMixin(FormMessagesMixin):
return self.detail_url
class CrudDeleteMixin(FormMessagesMixin):
class CrudDeleteView(FormMessagesMixin, DeleteView):
form_valid_message = _('Registro excluído com sucesso!')
form_invalid_message = make_form_invalid_message(
_('O registro não foi excluído.'))
form_valid_message, form_invalid_message = FORM_MESSAGES['delete']
@property
def cancel_url(self):
@ -171,36 +171,31 @@ class CrudDeleteMixin(FormMessagesMixin):
class Crud:
def __init__(self, model, help_path,
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
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 = [
BaseMixin = BaseMixin
ListView = CrudListView
CreateView = CrudCreateView
DetailView = DetailView
UpdateView = CrudUpdateView
DeleteView = CrudDeleteView
help_path = ''
@classonlymethod
def get_urls(cls):
def _add_base(view):
class CrudViewWithBase(cls.BaseMixin, view):
model = cls.model
help_path = cls.help_path
CrudViewWithBase.__name__ = view.__name__
return CrudViewWithBase
CrudListView = _add_base(cls.ListView)
CrudCreateView = _add_base(cls.CreateView)
CrudDetailView = _add_base(cls.DetailView)
CrudUpdateView = _add_base(cls.UpdateView)
CrudDeleteView = _add_base(cls.DeleteView)
urlpatterns = [
url(r'^$', CrudListView.as_view(), name='list'),
url(r'^create$', CrudCreateView.as_view(), name='create'),
url(r'^(?P<pk>\d+)$', CrudDetailView.as_view(), name='detail'),
@ -210,8 +205,19 @@ class Crud:
CrudDeleteView.as_view(), name='delete'),
]
self.namespace = CrudMixin().namespace
self.urls = self.urlpatterns, self.namespace, self.namespace
return urlpatterns, _add_base(object)().namespace
@classonlymethod
def build(cls, _model, _help_path):
class ModelCrud(cls):
model = _model
help_path = _help_path
# FIXME!!!! corrigir referencias no codigo e remover isso!!!!!
# fazer com #230
class CrudDetailView(cls.BaseMixin, cls.DetailView):
model = _model
help_path = _help_path
# FIXME Refatorar código que precisa desse atributo e remover
self.CrudDetailView = CrudDetailView
ModelCrud.__name__ = '%sCrud' % _model.__name__
return ModelCrud

0
crud/tests/__init__.py

15
crud_tests/settings.py → crud/tests/settings.py

@ -1,12 +1,11 @@
import os
from os.path import dirname, join
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
BASE_DIR = dirname(dirname(dirname(__file__)))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': ':memory:',
'NAME': '/tmp/db',
'NAME': ':memory:',
},
}
@ -15,11 +14,11 @@ INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.messages',
'django.contrib.sessions',
'crud_tests',
'crud.tests.stub_app',
'crispy_forms',
)
ROOT_URLCONF = 'crud_tests.urls'
ROOT_URLCONF = 'crud.tests.stub_app.urls'
USE_TZ = True
@ -27,8 +26,8 @@ SECRET_KEY = 'zzz...'
TEMPLATES = [{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'crud_tests/templates'),
os.path.join(BASE_DIR, 'templates')],
'DIRS': [join(BASE_DIR, 'crud/tests/stub_app/templates'),
join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [

0
crud_tests/layouts.yaml → crud/tests/stub_app/layouts.yaml

0
crud_tests/models.py → crud/tests/stub_app/models.py

0
crud_tests/templates/base.html → crud/tests/stub_app/templates/base.html

7
crud/tests/stub_app/urls.py

@ -0,0 +1,7 @@
from django.conf.urls import include, url
from .views import CountryCrud
urlpatterns = [
url(r'^countries/', include(CountryCrud.get_urls())),
]

11
crud/tests/stub_app/views.py

@ -0,0 +1,11 @@
from crud.base import Crud, CrudListView
from .models import Country
class CountryCrud(Crud):
model = Country
help_path = 'help_path',
class ListView(CrudListView):
paginate_by = 10

10
crud_tests/test_flux.py → crud/tests/test_base.py

@ -2,11 +2,11 @@ import pytest
from django.core.urlresolvers import reverse
from model_mommy import mommy
from crud import (CrispyLayoutFormMixin, CrudListMixin, from_to,
from crud.base import (CrispyLayoutFormMixin, CrudListView, from_to,
get_field_display, make_pagination)
from .models import Continent, Country
from .views import CountryCrudListMixin
from .stub_app.models import Continent, Country
from .stub_app.views import CountryCrud
pytestmark = pytest.mark.django_db
@ -151,7 +151,7 @@ def assert_h1(res, title):
assert res.html.find('main').find('h1').text.strip() == title
NO_ENTRIES_MSG = str(CrudListMixin.no_entries_msg) # "unlazy"
NO_ENTRIES_MSG = str(CrudListView.no_entries_msg) # "unlazy"
def assert_on_list_page(res):
@ -196,7 +196,7 @@ def test_flux_list_paginate_detail(
population=population,
is_cold=is_cold)
CountryCrudListMixin.paginate_by = page_size
CountryCrud.ListView.paginate_by = page_size
res = app.get('/countries/')

7
crud_tests/urls.py

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

13
crud_tests/views.py

@ -1,13 +0,0 @@
from crud import Crud, CrudListMixin
from .models import Country
class CountryCrudListMixin(CrudListMixin):
paginate_by = 10
country_crud = Crud(
Country,
'help_path',
list_mixin=CountryCrudListMixin)

8
lexml/urls.py

@ -1,8 +1,10 @@
from django.conf.urls import include, url
from lexml.views import lexml_provedor_crud, lexml_publicador_crud
from lexml.views import LexmlProvedorCrud, LexmlPublicadorCrud
urlpatterns = [
url(r'^sistema/lexml/provedor/', include(lexml_provedor_crud.urls)),
url(r'^sistema/lexml/publicador/', include(lexml_publicador_crud.urls)),
url(r'^sistema/lexml/provedor/',
include(LexmlProvedorCrud.get_urls())),
url(r'^sistema/lexml/publicador/',
include(LexmlPublicadorCrud.get_urls())),
]

6
lexml/views.py

@ -1,6 +1,6 @@
from crud import Crud
from crud.base import Crud
from .models import LexmlProvedor, LexmlPublicador
lexml_provedor_crud = Crud(LexmlProvedor, 'lexml_provedor')
lexml_publicador_crud = Crud(LexmlPublicador, 'lexml_publicador')
LexmlProvedorCrud = Crud.build(LexmlProvedor, 'lexml_provedor')
LexmlPublicadorCrud = Crud.build(LexmlPublicador, 'lexml_publicador')

19
materia/forms.py

@ -1,6 +1,7 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout, Submit
from django import forms
from django.core.exceptions import ValidationError
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
@ -39,6 +40,15 @@ class ProposicaoForm(ModelForm):
ano_materia = forms.CharField(
label='Ano', required=False)
def clean_texto_original(self):
texto_original = self.cleaned_data.get('texto_original', False)
if texto_original:
if texto_original.size > 5*1024*1024:
raise ValidationError("Arquivo muito grande. ( > 5mb )")
return texto_original
else:
raise ValidationError("Não foi possível salvar o arquivo.")
class Meta:
model = Proposicao
fields = ['tipo', 'data_envio', 'descricao', 'texto_original']
@ -409,6 +419,15 @@ class FormularioSimplificadoForm(ModelForm):
'data_apresentacao': forms.DateInput(attrs={'class': 'dateinput'}),
}
def clean_texto_original(self):
texto_original = self.cleaned_data.get('texto_original', False)
if texto_original:
if texto_original.size > 5*1024*1024:
raise ValidationError("Arquivo muito grande. ( > 5mb )")
return texto_original
else:
raise ValidationError("Não foi possível salvar o arquivo.")
def __init__(self, *args, **kwargs):
row1 = crispy_layout_mixin.to_row(

62
materia/urls.py

@ -2,32 +2,31 @@ from django.conf.urls import include, url
from materia.views import (AcompanhamentoConfirmarView,
AcompanhamentoExcluirView,
AcompanhamentoMateriaView, AutoriaEditView,
AutoriaView, DespachoInicialEditView,
DespachoInicialView, DocumentoAcessorioEditView,
DocumentoAcessorioView, FormularioCadastroView,
FormularioSimplificadoView,
AcompanhamentoMateriaView, AutorCrud,
AutoriaEditView, AutoriaView,
DespachoInicialEditView, DespachoInicialView,
DocumentoAcessorioEditView, DocumentoAcessorioView,
FormularioCadastroView, FormularioSimplificadoView,
LegislacaoCitadaEditView, LegislacaoCitadaView,
MateriaAnexadaEditView, MateriaAnexadaView,
MateriaLegislativaCrud,
MateriaLegislativaPesquisaView, MateriaTaView,
NumeracaoEditView, NumeracaoView,
PesquisaMateriaListView, ProposicaoEditView,
ProposicaoListView, ProposicaoTaView,
ProposicaoView, RelatoriaEditView, RelatoriaView,
TramitacaoEditView, TramitacaoView, autor_crud,
materia_legislativa_crud, orgao_crud, origem_crud,
regime_tramitacao_crud, status_tramitacao_crud,
tipo_autor_crud, tipo_documento_crud,
tipo_fim_relatoria_crud, tipo_materia_crud,
tipo_proposicao_crud, unidade_tramitacao_crud)
NumeracaoEditView, NumeracaoView, OrgaoCrud,
OrigemCrud, PesquisaMateriaListView,
ProposicaoEditView, ProposicaoListView,
ProposicaoTaView, ProposicaoView,
RegimeTramitacaoCrud, RelatoriaEditView,
RelatoriaView, StatusTramitacaoCrud, TipoAutorCrud,
TipoDocumentoCrud, TipoFimRelatoriaCrud,
TipoMateriaCrud, TipoProposicaoCrud,
TramitacaoEditView, TramitacaoView,
UnidadeTramitacaoCrud)
materia_legislativa_patterns = materia_legislativa_crud.urlpatterns
materia_legislativa_patterns, namespace = MateriaLegislativaCrud.get_urls()
urlpatterns = [
url(r'^materia/', include(materia_legislativa_patterns,
materia_legislativa_crud.namespace,
materia_legislativa_crud.namespace)),
url(r'^materia/', include(materia_legislativa_patterns, namespace)),
url(r'^materia/(?P<pk>[0-9]+)/ta$',
@ -36,23 +35,24 @@ urlpatterns = [
ProposicaoTaView.as_view(), name='proposicao_ta'),
url(r'^sistema/proposicoes/tipo/', include(tipo_proposicao_crud.urls)),
url(r'^sistema/proposicoes/autor/', include(autor_crud.urls)),
url(r'^sistema/materia/tipo/', include(tipo_materia_crud.urls)),
url(r'^sistema/proposicoes/tipo/',
include(TipoProposicaoCrud.get_urls())),
url(r'^sistema/proposicoes/autor/', include(AutorCrud.get_urls())),
url(r'^sistema/materia/tipo/', include(TipoMateriaCrud.get_urls())),
url(r'^sistema/materia/regime-tramitacao/',
include(regime_tramitacao_crud.urls)),
url(r'^sistema/materia/tipo-autor/', include(tipo_autor_crud.urls)),
include(RegimeTramitacaoCrud.get_urls())),
url(r'^sistema/materia/tipo-autor/', include(TipoAutorCrud.get_urls())),
url(r'^sistema/materia/tipo-documento/',
include(tipo_documento_crud.urls)),
include(TipoDocumentoCrud.get_urls())),
url(r'^sistema/materia/tipo-fim-relatoria/',
include(tipo_fim_relatoria_crud.urls)),
include(TipoFimRelatoriaCrud.get_urls())),
url(r'^sistema/materia/unidade-tramitacao/',
include(unidade_tramitacao_crud.urls)),
url(r'^sistema/materia/origem/', include(origem_crud.urls)),
url(r'^sistema/materia/autor/', include(autor_crud.urls)),
include(UnidadeTramitacaoCrud.get_urls())),
url(r'^sistema/materia/origem/', include(OrigemCrud.get_urls())),
url(r'^sistema/materia/autor/', include(AutorCrud.get_urls())),
url(r'^sistema/materia/status-tramitacao/',
include(status_tramitacao_crud.urls)),
url(r'^sistema/materia/orgao/', include(orgao_crud.urls)),
include(StatusTramitacaoCrud.get_urls())),
url(r'^sistema/materia/orgao/', include(OrgaoCrud.get_urls())),
url(r'^materia/formulario-simplificado',
FormularioSimplificadoView.as_view(),
name='formulario_simplificado'),

43
materia/views.py

@ -17,7 +17,7 @@ from django.views.generic import CreateView, FormView, ListView, TemplateView
from base.models import CasaLegislativa
from comissoes.models import Comissao, Composicao
from compilacao.views import IntegracaoTaView
from crud import Crud, make_pagination
from crud.base import Crud, make_pagination
from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica
from parlamentares.models import Partido
from sapl.utils import get_base_url
@ -35,25 +35,26 @@ from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria,
TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao,
Tramitacao, UnidadeTramitacao)
origem_crud = Crud(Origem, 'origem')
tipo_materia_crud = Crud(TipoMateriaLegislativa, 'tipo_materia_legislativa')
regime_tramitacao_crud = Crud(RegimeTramitacao, 'regime_tramitacao')
tipo_documento_crud = Crud(TipoDocumento, 'tipo_documento')
tipo_fim_relatoria_crud = Crud(TipoFimRelatoria, 'fim_relatoria')
materia_legislativa_crud = Crud(MateriaLegislativa, '')
Anexada_crud = Crud(Anexada, '')
tipo_autor_crud = Crud(TipoAutor, 'tipo_autor')
autor_crud = Crud(Autor, 'autor')
autoria_crud = Crud(Autoria, '')
documento_acessorio_crud = Crud(DocumentoAcessorio, '')
numeracao_crud = Crud(Numeracao, '')
orgao_crud = Crud(Orgao, 'orgao')
relatoria_crud = Crud(Relatoria, '')
tipo_proposicao_crud = Crud(TipoProposicao, 'tipo_proposicao')
proposicao_crud = Crud(Proposicao, '')
status_tramitacao_crud = Crud(StatusTramitacao, 'status_tramitacao')
unidade_tramitacao_crud = Crud(UnidadeTramitacao, 'unidade_tramitacao')
tramitacao_crud = Crud(Tramitacao, '')
OrigemCrud = Crud.build(Origem, 'origem')
TipoMateriaCrud = Crud.build(TipoMateriaLegislativa,
'tipo_materia_legislativa')
RegimeTramitacaoCrud = Crud.build(RegimeTramitacao, 'regime_tramitacao')
TipoDocumentoCrud = Crud.build(TipoDocumento, 'tipo_documento')
TipoFimRelatoriaCrud = Crud.build(TipoFimRelatoria, 'fim_relatoria')
MateriaLegislativaCrud = Crud.build(MateriaLegislativa, '')
AnexadaCrud = Crud.build(Anexada, '')
TipoAutorCrud = Crud.build(TipoAutor, 'tipo_autor')
AutorCrud = Crud.build(Autor, 'autor')
AutoriaCrud = Crud.build(Autoria, '')
DocumentoAcessorioCrud = Crud.build(DocumentoAcessorio, '')
NumeracaoCrud = Crud.build(Numeracao, '')
OrgaoCrud = Crud.build(Orgao, 'orgao')
RelatoriaCrud = Crud.build(Relatoria, '')
TipoProposicaoCrud = Crud.build(TipoProposicao, 'tipo_proposicao')
ProposicaoCrud = Crud.build(Proposicao, '')
StatusTramitacaoCrud = Crud.build(StatusTramitacao, 'status_tramitacao')
UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao')
TramitacaoCrud = Crud.build(Tramitacao, '')
class FormularioSimplificadoView(CreateView):
@ -1423,7 +1424,7 @@ class ProposicaoTaView(IntegracaoTaView):
model_type_foreignkey = TipoProposicao
class AcompanhamentoMateriaView(materia_legislativa_crud.CrudDetailView):
class AcompanhamentoMateriaView(MateriaLegislativaCrud.CrudDetailView):
template_name = "materia/acompanhamento_materia.html"
def get_random_chars(self):

20
norma/forms.py

@ -1,6 +1,7 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Fieldset, Layout
from django import forms
from django.core.exceptions import ValidationError
from django.forms import ModelForm
from django.utils.safestring import mark_safe
@ -39,14 +40,14 @@ class NormaJuridicaPesquisaForm(ModelForm):
format='%d/%m/%Y',
attrs={'class': 'dateinput'}))
publicação_inicial = forms.DateField(label=u'Publicação Inicial',
publicacao_inicial = forms.DateField(label=u'Publicação Inicial',
input_formats=['%d/%m/%Y'],
required=False,
widget=forms.DateInput(
format='%d/%m/%Y',
attrs={'class': 'dateinput'}))
publicação_final = forms.DateField(label=u'Publicação Final',
publicacao_final = forms.DateField(label=u'Publicação Final',
input_formats=['%d/%m/%Y'],
required=False,
widget=forms.DateInput(
@ -60,8 +61,8 @@ class NormaJuridicaPesquisaForm(ModelForm):
'ano',
'periodo_inicial',
'periodo_final',
'publicação_inicial',
'publicação_final']
'publicacao_inicial',
'publicacao_final']
def __init__(self, *args, **kwargs):
@ -75,7 +76,7 @@ class NormaJuridicaPesquisaForm(ModelForm):
[('periodo_inicial', 6), ('periodo_final', 6)])
row4 = crispy_layout_mixin.to_row(
[('publicação_inicial', 6), ('publicação_final', 6)])
[('publicacao_inicial', 6), ('publicacao_final', 6)])
self.helper = FormHelper()
self.helper.layout = Layout(
@ -99,6 +100,15 @@ class NormaJuridicaForm(ModelForm):
ano_materia = forms.CharField(label='Ano', required=False)
def clean_texto_integral(self):
texto_integral = self.cleaned_data.get('texto_integral', False)
if texto_integral:
if texto_integral.size > 5*1024*1024:
raise ValidationError("Arquivo muito grande. ( > 5mb )")
return texto_integral
else:
raise ValidationError("Não foi possível salvar o arquivo.")
class Meta:
model = NormaJuridica
fields = ['tipo',

30
norma/urls.py

@ -1,23 +1,31 @@
from django.conf.urls import include, url
from norma.views import (NormaEditView, NormaIncluirView, NormaPesquisaView,
NormaTaView, PesquisaNormaListView,
assunto_norma_crud, norma_temporario_crud,
tipo_norma_crud)
from norma.views import (AssuntoNormaCrud, NormaEditView, NormaIncluirView,
NormaPesquisaView, NormaTaView, NormaTemporarioCrud,
PesquisaNormaListView, TipoNormaCrud)
# norma_url_patterns = norma_crud.urlpatterns + []
norma_url_patterns = norma_temporario_crud.urlpatterns + [
# @LeandroRoberto comentou em
# https://github.com/interlegis/sapl/pull/255#discussion_r55894269
#
# esse código só está assim de forma temporária, criado no início do
# projeto para apenas dar uma tela básica de listagem de normas para a app
# compilação... a implementação da app norma é independente e não sei em
# que estágio está... para a compilação é relevante apenas que se mantenha
# o código abaixo:
# url(r'^norma/(?P<pk>[0-9]+)/ta$', NormaTaView.as_view(), name='ta')
# bem como a classe NormaTaView que está em norma.views
norma_url_patterns, namespace = NormaTemporarioCrud.get_urls()
norma_url_patterns += [
url(r'^norma/(?P<pk>[0-9]+)/ta$',
NormaTaView.as_view(), name='ta')
]
urlpatterns = [
url(r'^norma/', include(norma_url_patterns,
norma_temporario_crud.namespace,
norma_temporario_crud.namespace)),
url(r'^norma/', include(norma_url_patterns, namespace)),
url(r'^sistema/norma/tipo/', include(tipo_norma_crud.urls)),
url(r'^sistema/norma/assunto/', include(assunto_norma_crud.urls)),
url(r'^sistema/norma/tipo/', include(TipoNormaCrud.get_urls())),
url(r'^sistema/norma/assunto/', include(AssuntoNormaCrud.get_urls())),
url(r'^norma/incluir$', NormaIncluirView.as_view(), name='norma_incluir'),
url(r'^norma/(?P<pk>[0-9]+)/editar$',

34
norma/views.py

@ -8,18 +8,18 @@ from django.shortcuts import redirect
from django.views.generic import CreateView, FormView, ListView
from compilacao.views import IntegracaoTaView
from crud import Crud, make_pagination
from crud.base import Crud, make_pagination
from materia.models import MateriaLegislativa
from .forms import NormaJuridicaForm, NormaJuridicaPesquisaForm
from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
TipoNormaJuridica)
assunto_norma_crud = Crud(AssuntoNorma, 'assunto_norma_juridica')
tipo_norma_crud = Crud(TipoNormaJuridica, 'tipo_norma_juridica')
norma_crud = Crud(NormaJuridica, '')
norma_temporario_crud = Crud(NormaJuridica, 'normajuridica')
legislacao_citada_crud = Crud(LegislacaoCitada, '')
AssuntoNormaCrud = Crud.build(AssuntoNorma, 'assunto_norma_juridica')
TipoNormaCrud = Crud.build(TipoNormaJuridica, 'tipo_norma_juridica')
NormaCrud = Crud.build(NormaJuridica, '')
NormaTemporarioCrud = Crud.build(NormaJuridica, 'normajuridica')
LegislacaoCitadaCrud = Crud.build(LegislacaoCitada, '')
class NormaPesquisaView(FormView):
@ -44,9 +44,9 @@ class NormaPesquisaView(FormView):
if form.data['periodo_inicial'] and form.data['periodo_final']:
kwargs['periodo_inicial'] = form.data['periodo_inicial']
kwargs['periodo_final'] = form.data['periodo_final']
if form.data['publicação_inicial'] and form.data['publicação_final']:
kwargs['publicação_inicial'] = form.data['publicação_inicial']
kwargs['publicação_final'] = form.data['publicação_final']
if form.data['publicacao_inicial'] and form.data['publicacao_final']:
kwargs['publicacao_inicial'] = form.data['publicacao_inicial']
kwargs['publicacao_final'] = form.data['publicacao_final']
request.session['kwargs'] = kwargs
return redirect('list_pesquisa_norma')
@ -68,16 +68,16 @@ class PesquisaNormaListView(ListView):
periodo_final = datetime.strptime(
kwargs['periodo_final'],
'%d/%m/%Y').strftime('%Y-%m-%d')
publicação_inicial = datetime.strptime(
kwargs['publicação_inicial'],
publicacao_inicial = datetime.strptime(
kwargs['publicacao_inicial'],
'%d/%m/%Y').strftime('%Y-%m-%d')
publicação_final = datetime.strptime(
kwargs['publicação_final'],
publicacao_final = datetime.strptime(
kwargs['publicacao_final'],
'%d/%m/%Y').strftime('%Y-%m-%d')
normas = normas.filter(
data__range=(periodo_inicial, periodo_final),
data_publicacao__range=(publicação_inicial, publicação_final))
data_publicacao__range=(publicacao_inicial, publicacao_final))
if 'periodo_inicial' in kwargs:
inicial = datetime.strptime(kwargs['periodo_inicial'],
@ -87,10 +87,10 @@ class PesquisaNormaListView(ListView):
normas = normas.filter(data__range=(inicial, final))
if 'publicação_inicial' in kwargs:
inicial = datetime.strptime(kwargs['publicação_inicial'],
if 'publicacao_inicial' in kwargs:
inicial = datetime.strptime(kwargs['publicacao_inicial'],
'%d/%m/%Y').strftime('%Y-%m-%d')
final = datetime.strptime(kwargs['publicação_final'],
final = datetime.strptime(kwargs['publicacao_final'],
'%d/%m/%Y').strftime('%Y-%m-%d')
normas = normas.filter(data_publicacao__range=(inicial, final))

4
painel/urls.py

@ -1,6 +1,6 @@
from django.conf.urls import url
from .views import controlador_painel # cronometro_painel_crud,
from .views import controlador_painel # CronometroPainelCrud,
from .views import (cronometro_painel, get_dados_painel, painel_mensagem_view,
painel_parlamentares_view, painel_view,
painel_votacao_view)
@ -15,5 +15,5 @@ urlpatterns = [
name='painel_parlamentares'),
url(r'^painel/votacao$', painel_votacao_view, name='painel_votacao'),
url(r'^painel/cronometro$', cronometro_painel, name='cronometro_painel'),
# url(r'^painel/cronometro$', include(cronometro_painel_crud.urls)),
# url(r'^painel/cronometro$', include(CronometroPainelCrud.get_urls())),
]

4
painel/views.py

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

35
parlamentares/urls.py

@ -1,35 +1,36 @@
from django.conf.urls import include, url
from parlamentares.views import (FiliacaoEditView, FiliacaoView,
MandatoEditView, MandatoView,
MesaDiretoraView, ParlamentaresCadastroView,
from parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
FiliacaoEditView, FiliacaoView,
LegislaturaCrud, MandatoEditView, MandatoView,
MesaDiretoraView, NivelInstrucaoCrud,
ParlamentaresCadastroView,
ParlamentaresDependentesEditView,
ParlamentaresDependentesView,
ParlamentaresEditarView, ParlamentaresView,
cargo_mesa_crud, coligacao_crud,
legislatura_crud, nivel_instrucao_crud,
partido_crud, sessao_legislativa_crud,
tipo_afastamento_crud, tipo_dependente_crud,
tipo_militar_crud)
PartidoCrud, SessaoLegislativaCrud,
TipoAfastamentoCrud, TipoDependenteCrud,
TipoMilitarCrud)
urlpatterns = [
url(r'^sistema/parlamentares/legislatura/',
include(legislatura_crud.urls)),
include(LegislaturaCrud.get_urls())),
url(r'^sistema/parlamentares/tipo-dependente/',
include(tipo_dependente_crud.urls)),
include(TipoDependenteCrud.get_urls())),
url(r'^sistema/parlamentares/nivel-instrucao/',
include(nivel_instrucao_crud.urls)),
url(r'^sistema/parlamentares/coligacao/', include(coligacao_crud.urls)),
include(NivelInstrucaoCrud.get_urls())),
url(r'^sistema/parlamentares/coligacao/',
include(ColigacaoCrud.get_urls())),
url(r'^sistema/parlamentares/tipo-afastamento/',
include(tipo_afastamento_crud.urls)),
include(TipoAfastamentoCrud.get_urls())),
url(r'^sistema/parlamentares/tipo-militar/',
include(tipo_militar_crud.urls)),
url(r'^sistema/parlamentares/partido/', include(partido_crud.urls)),
include(TipoMilitarCrud.get_urls())),
url(r'^sistema/parlamentares/partido/', include(PartidoCrud.get_urls())),
url(r'^sistema/mesa-diretora/sessao-legislativa/',
include(sessao_legislativa_crud.urls)),
include(SessaoLegislativaCrud.get_urls())),
url(r'^sistema/mesa-diretora/cargo-mesa/',
include(cargo_mesa_crud.urls)),
include(CargoMesaCrud.get_urls())),
url(r'^parlamentares/$',
ParlamentaresView.as_view(), name='parlamentares'),

28
parlamentares/views.py

@ -7,7 +7,7 @@ from django.http import HttpResponseRedirect
from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, FormView, UpdateView
from crud import Crud
from crud.base import Crud
from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm,
FiliacaoForm, MandatoEditForm, MandatoForm,
@ -18,19 +18,19 @@ from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
TipoAfastamento, TipoDependente)
cargo_mesa_crud = Crud(CargoMesa, 'cargo_mesa')
legislatura_crud = Crud(Legislatura, 'tabelas_auxiliares#legislatura')
coligacao_crud = Crud(Coligacao, 'coligacao')
partido_crud = Crud(Partido, 'partidos')
dependente_crud = Crud(Dependente, '')
sessao_legislativa_crud = Crud(SessaoLegislativa, 'sessao_legislativa')
parlamentar_crud = Crud(Parlamentar, '')
filiacao_crud = Crud(Filiacao, '')
mandato_crud = Crud(Mandato, '')
tipo_dependente_crud = Crud(TipoDependente, 'tipo_dependente')
nivel_instrucao_crud = Crud(NivelInstrucao, 'nivel_instrucao')
tipo_afastamento_crud = Crud(TipoAfastamento, 'tipo_afastamento')
tipo_militar_crud = Crud(SituacaoMilitar, 'tipo_situa_militar')
CargoMesaCrud = Crud.build(CargoMesa, 'cargo_mesa')
LegislaturaCrud = Crud.build(Legislatura, 'tabelas_auxiliares#legislatura')
ColigacaoCrud = Crud.build(Coligacao, 'coligacao')
PartidoCrud = Crud.build(Partido, 'partidos')
DependenteCrud = Crud.build(Dependente, '')
SessaoLegislativaCrud = Crud.build(SessaoLegislativa, 'sessao_legislativa')
ParlamentarCrud = Crud.build(Parlamentar, '')
FiliacaoCrud = Crud.build(Filiacao, '')
MandatoCrud = Crud.build(Mandato, '')
TipoDependenteCrud = Crud.build(TipoDependente, 'tipo_dependente')
NivelInstrucaoCrud = Crud.build(NivelInstrucao, 'nivel_instrucao')
TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento')
TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar')
class ParlamentaresView(FormView):

6
protocoloadm/forms.py

@ -14,9 +14,9 @@ from crispy_layout_mixin import form_actions
from materia.models import TipoMateriaLegislativa
from sapl.utils import RANGE_ANOS
from .models import (Autor, DocumentoAcessorioAdministrativo,
DocumentoAdministrativo, Protocolo,
TipoDocumentoAdministrativo, TramitacaoAdministrativo)
from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo,
Protocolo, TipoDocumentoAdministrativo,
TramitacaoAdministrativo)
TIPOS_PROTOCOLO = [('0', 'Enviado'), ('1', 'Recebido')]

37
protocoloadm/urls.py

@ -4,40 +4,41 @@ from protocoloadm.views import (AnularProtocoloAdmView,
ComprovanteProtocoloView,
CriarDocumentoProtocolo,
DetailDocumentoAdministrativo,
DocumentoAcessorioAdministrativoCrud,
DocumentoAcessorioAdministrativoEditView,
DocumentoAcessorioAdministrativoView,
DocumentoAdministrativoCrud,
PesquisarDocumentoAdministrativo,
ProposicaoDetailView, ProposicaoReceberView,
ProposicaoView, ProposicoesIncorporadasView,
ProposicoesNaoIncorporadasView,
ProposicoesNaoRecebidasView,
ProtocoloDocumentoView, ProtocoloListView,
ProtocoloDocumentoCrud, ProtocoloDocumentoView,
ProtocoloListView, ProtocoloMateriaCrud,
ProtocoloMateriaView, ProtocoloMostrarView,
ProtocoloPesquisaView, TramitacaoAdmDeleteView,
TramitacaoAdmEditView,
TramitacaoAdmIncluirView, TramitacaoAdmView,
documento_acessorio_administrativo_crud,
documento_administrativo_crud,
pesquisa_autores, protocolo_documento_crud,
protocolo_materia_crud,
status_tramitacao_administrativo_crud,
tipo_documento_administrativo_crud,
tramitacao_administrativo_crud)
ProtocoloPesquisaView,
StatusTramitacaoAdministrativoCrud,
TipoDocumentoAdministrativoCrud,
TramitacaoAdmDeleteView, TramitacaoAdmEditView,
TramitacaoAdmIncluirView,
TramitacaoAdministrativoCrud,
TramitacaoAdmView, pesquisa_autores)
urlpatterns = [
url(r'^protocoloadm/docadm/', include(documento_administrativo_crud.urls)),
url(r'^protocoloadm/docadm/',
include(DocumentoAdministrativoCrud.get_urls())),
url(r'^protocoloadm/tipo-documento-adm/',
include(tipo_documento_administrativo_crud.urls)),
include(TipoDocumentoAdministrativoCrud.get_urls())),
url(r'^protocoloadm/doc-acessorio/',
include(documento_acessorio_administrativo_crud.urls)),
include(DocumentoAcessorioAdministrativoCrud.get_urls())),
url(r'^protocoloadm/status-tramitacao-adm/',
include(status_tramitacao_administrativo_crud.urls)),
include(StatusTramitacaoAdministrativoCrud.get_urls())),
url(r'^protocoloadm/tramitacao-adm/',
include(tramitacao_administrativo_crud.urls)),
include(TramitacaoAdministrativoCrud.get_urls())),
url(r'^protocoloadm/protocolo-doc/',
include(protocolo_documento_crud.urls)),
include(ProtocoloDocumentoCrud.get_urls())),
url(r'^protocoloadm/protocolo-mat/',
include(protocolo_materia_crud.urls), name='protocolomat'),
include(ProtocoloMateriaCrud.get_urls()), name='protocolomat'),
url(r'^protocoloadm/protocolo$',
ProtocoloPesquisaView.as_view(), name='protocolo'),
url(r'^protocoloadm/protocolo_list$',

17
protocoloadm/views.py

@ -12,7 +12,7 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, DetailView, FormView, ListView
from django.views.generic.base import TemplateView
from crud import Crud, make_pagination
from crud.base import Crud, make_pagination
from materia.models import Proposicao, TipoMateriaLegislativa
from sapl.utils import create_barcode, get_client_ip
@ -25,17 +25,18 @@ from .models import (Autor, DocumentoAcessorioAdministrativo,
StatusTramitacaoAdministrativo,
TipoDocumentoAdministrativo, TramitacaoAdministrativo)
tipo_documento_administrativo_crud = Crud(TipoDocumentoAdministrativo, '')
documento_administrativo_crud = Crud(DocumentoAdministrativo, '')
documento_acessorio_administrativo_crud = Crud(
TipoDocumentoAdministrativoCrud = Crud.build(TipoDocumentoAdministrativo,
'')
DocumentoAdministrativoCrud = Crud.build(DocumentoAdministrativo, '')
DocumentoAcessorioAdministrativoCrud = Crud.build(
DocumentoAcessorioAdministrativo, '')
status_tramitacao_administrativo_crud = Crud(
StatusTramitacaoAdministrativoCrud = Crud.build(
StatusTramitacaoAdministrativo, '')
tramitacao_administrativo_crud = Crud(TramitacaoAdministrativo, '')
protocolo_documento_crud = Crud(Protocolo, '')
TramitacaoAdministrativoCrud = Crud.build(TramitacaoAdministrativo, '')
ProtocoloDocumentoCrud = Crud.build(Protocolo, '')
# FIXME precisa de uma chave diferente para o layout
protocolo_materia_crud = Crud(Protocolo, '')
ProtocoloMateriaCrud = Crud.build(Protocolo, '')
class ProtocoloPesquisaView(FormView):

2
pytest.ini

@ -1,6 +1,6 @@
[pytest]
DJANGO_SETTINGS_MODULE=sapl.settings
norecursedirs = legacy crud_tests
norecursedirs = legacy crud
# REUSING DATABASE BY DEFAULT (as a performance optimization)
# http://pytest-django.readthedocs.org/en/latest/database.html#example-work-flow-with-reuse-db-and-create-db

1
relatorios/views.py

@ -26,6 +26,7 @@ from .templates import (pdf_capa_processo_gerar,
uf_dic = dict(UF)
def get_kwargs_params(request, fields):
kwargs = {}
for i in fields:

19
sessao/forms.py

@ -1,6 +1,7 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Fieldset, Layout
from django import forms
from django.core.exceptions import ValidationError
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
@ -92,6 +93,24 @@ class SessaoForm(ModelForm):
'hora_fim': forms.TextInput(attrs={'class': 'hora'}),
}
def clean_url_audio(self):
url_audio = self.cleaned_data.get('url_audio', False)
if url_audio:
if url_audio.size > 5*1024*1024:
raise ValidationError("Arquivo muito grande. ( > 5mb )")
return url_audio
else:
raise ValidationError("Não foi possível salvar o arquivo.")
def clean_url_video(self):
url_video = self.cleaned_data.get('url_video', False)
if url_video:
if url_video.size > 5*1024*1024:
raise ValidationError("Arquivo muito grande. ( > 5mb )")
return url_video
else:
raise ValidationError("Não foi possível salvar o arquivo.")
def __init__(self, *args, **kwargs):
row1 = crispy_layout_mixin.to_row(

28
sessao/urls.py

@ -12,16 +12,18 @@ from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView,
PautaExpedienteDetail, PautaOrdemDetail,
PautaSessaoDetailView, PautaSessaoListView,
PresencaOrdemDiaView, PresencaView, ResumoView,
SessaoCadastroView, SessaoListView,
SessaoPlenariaView, VotacaoEditView,
VotacaoExpedienteEditView, VotacaoExpedienteView,
VotacaoNominalEditView,
SessaoCadastroView, SessaoCrud, SessaoListView,
SessaoPlenariaView, TipoExpedienteCrud,
TipoResultadoVotacaoCrud, TipoSessaoCrud,
VotacaoEditView, VotacaoExpedienteEditView,
VotacaoExpedienteView, VotacaoNominalEditView,
VotacaoNominalExpedienteEditView,
VotacaoNominalExpedienteView, VotacaoNominalView,
VotacaoView, sessao_crud, tipo_expediente_crud,
tipo_resultado_votacao_crud, tipo_sessao_crud)
VotacaoView)
urlpatterns_sessao = sessao_crud.urlpatterns + [
urlpatterns_sessao, namespace = SessaoCrud.get_urls()
urlpatterns_sessao = urlpatterns_sessao + [
url(r'^(?P<pk>\d+)/expediente$',
ExpedienteView.as_view(), name='expediente'),
url(r'^(?P<pk>\d+)/presenca$',
@ -98,21 +100,19 @@ urlpatterns_sessao = sessao_crud.urlpatterns + [
PautaOrdemDetail.as_view(), name='pauta_ordem_detail'),
]
sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace
sessao_rest = [
url(r'^sessao$', SessaoPlenariaView.as_view(), name='sessao_rest')
]
urlpatterns = [
url(r'^sessao/', include(urlpatterns_sessao,
sessao_crud.namespace, sessao_crud.namespace)),
url(r'^sessao/', include(urlpatterns_sessao, namespace)),
url(r'^media/(?P<path>.*)$', serve,
{'document_root': settings.MEDIA_ROOT}),
url(r'^rest/', include(sessao_rest)),
url(r'^sistema/sessao-plenaria/tipo/', include(tipo_sessao_crud.urls)),
url(r'^sistema/sessao-plenaria/tipo/',
include(TipoSessaoCrud.get_urls())),
url(r'^sistema/sessao-plenaria/tipo-resultado-votacao/',
include(tipo_resultado_votacao_crud.urls)),
include(TipoResultadoVotacaoCrud.get_urls())),
url(r'^sistema/sessao-plenaria/tipo-expediente/',
include(tipo_expediente_crud.urls))
include(TipoExpedienteCrud.get_urls()))
]

74
sessao/views.py

@ -11,7 +11,7 @@ from django.views.generic import CreateView, ListView
from django.views.generic.edit import FormMixin
from rest_framework import generics
from crud import Crud, make_pagination
from crud.base import Crud, make_pagination
from materia.models import (Autoria, DocumentoAcessorio,
TipoMateriaLegislativa, Tramitacao)
from norma.models import NormaJuridica
@ -29,14 +29,14 @@ from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao,
TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria,
VotoParlamentar)
tipo_sessao_crud = Crud(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
sessao_crud = Crud(SessaoPlenaria, '')
expediente_materia_crud = Crud(ExpedienteMateria, '')
ordem_dia_crud = Crud(OrdemDia, '')
tipo_resultado_votacao_crud = Crud(
TipoSessaoCrud = Crud.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
SessaoCrud = Crud.build(SessaoPlenaria, '')
ExpedienteMateriaCrud = Crud.build(ExpedienteMateria, '')
OrdemDiaCrud = Crud.build(OrdemDia, '')
TipoResultadoVotacaoCrud = Crud.build(
TipoResultadoVotacao, 'tipo_resultado_votacao')
tipo_expediente_crud = Crud(TipoExpediente, 'tipo_expediente')
registro_votacao_crud = Crud(RegistroVotacao, '')
TipoExpedienteCrud = Crud.build(TipoExpediente, 'tipo_expediente')
RegistroVotacaoCrud = Crud.build(RegistroVotacao, '')
class PresencaMixin:
@ -56,7 +56,7 @@ class PresencaMixin:
yield (parlamentar, False)
class PresencaView(FormMixin, PresencaMixin, sessao_crud.CrudDetailView):
class PresencaView(FormMixin, PresencaMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/presenca.html'
form_class = PresencaForm
@ -96,13 +96,13 @@ class PresencaView(FormMixin, PresencaMixin, sessao_crud.CrudDetailView):
return reverse('sessaoplenaria:presenca', kwargs={'pk': pk})
class PainelView(sessao_crud.CrudDetailView):
class PainelView(SessaoCrud.CrudDetailView):
template_name = 'sessao/painel.html'
class PresencaOrdemDiaView(FormMixin,
PresencaMixin,
sessao_crud.CrudDetailView):
SessaoCrud.CrudDetailView):
template_name = 'sessao/presenca_ordemdia.html'
form_class = PresencaForm
@ -145,7 +145,7 @@ class PresencaOrdemDiaView(FormMixin,
return reverse('sessaoplenaria:presencaordemdia', kwargs={'pk': pk})
class ListMateriaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
class ListMateriaOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/materia_ordemdia_list.html'
form_class = ListMateriaForm
@ -248,7 +248,7 @@ class ListMateriaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
return self.get(self, request, args, kwargs)
class ListExpedienteOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
class ListExpedienteOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/expediente_ordemdia_list.html'
form_class = ListMateriaForm
@ -349,7 +349,7 @@ class ListExpedienteOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
return self.get(self, request, args, kwargs)
class MateriaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
class MateriaOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/materia_ordemdia.html'
form_class = MateriaOrdemDiaForm
@ -413,7 +413,7 @@ class MateriaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class EditMateriaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
class EditMateriaOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/materia_ordemdia_edit.html'
form_class = MateriaOrdemDiaForm
@ -524,7 +524,7 @@ class EditMateriaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class ExpedienteOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
class ExpedienteOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/materia_ordemdia.html'
form_class = MateriaOrdemDiaForm
@ -590,7 +590,7 @@ class ExpedienteOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class EditExpedienteOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
class EditExpedienteOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/materia_ordemdia_edit.html'
form_class = MateriaOrdemDiaForm
@ -673,7 +673,7 @@ class EditExpedienteOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class OradorExpedienteDelete(FormMixin, sessao_crud.CrudDetailView):
class OradorExpedienteDelete(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/delete_orador.html'
form_class = OradorDeleteForm
@ -698,7 +698,7 @@ class OradorExpedienteDelete(FormMixin, sessao_crud.CrudDetailView):
return reverse('sessaoplenaria:oradorexpediente', kwargs={'pk': pk})
class OradorExpedienteEdit(FormMixin, sessao_crud.CrudDetailView):
class OradorExpedienteEdit(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/edit_orador.html'
form_class = OradorForm
@ -758,7 +758,7 @@ class OradorExpedienteEdit(FormMixin, sessao_crud.CrudDetailView):
return reverse('sessaoplenaria:oradorexpediente', kwargs={'pk': pk})
class OradorExpedienteView(FormMixin, sessao_crud.CrudDetailView):
class OradorExpedienteView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/orador_expediente.html'
form_class = OradorForm
@ -828,7 +828,7 @@ class OradorExpedienteView(FormMixin, sessao_crud.CrudDetailView):
return reverse('sessaoplenaria:oradorexpediente', kwargs={'pk': pk})
class MesaView(FormMixin, sessao_crud.CrudDetailView):
class MesaView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/mesa.html'
form_class = MesaForm
@ -922,7 +922,7 @@ class MesaView(FormMixin, sessao_crud.CrudDetailView):
return reverse('sessaoplenaria:mesa', kwargs={'pk': pk})
class ResumoView(sessao_crud.CrudDetailView):
class ResumoView(SessaoCrud.CrudDetailView):
template_name = 'sessao/resumo.html'
def get(self, request, *args, **kwargs):
@ -1098,7 +1098,7 @@ class ResumoView(sessao_crud.CrudDetailView):
return self.render_to_response(context)
class ExpedienteView(FormMixin, sessao_crud.CrudDetailView):
class ExpedienteView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/expediente.html'
form_class = ExpedienteForm
@ -1162,7 +1162,7 @@ class ExpedienteView(FormMixin, sessao_crud.CrudDetailView):
return reverse('sessaoplenaria:expediente', kwargs={'pk': pk})
class ExplicacaoView(FormMixin, sessao_crud.CrudDetailView):
class ExplicacaoView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/explicacao.html'
form_class = OradorForm
@ -1232,7 +1232,7 @@ class ExplicacaoView(FormMixin, sessao_crud.CrudDetailView):
return reverse('sessaoplenaria:explicacao', kwargs={'pk': pk})
class ExplicacaoDelete(FormMixin, sessao_crud.CrudDetailView):
class ExplicacaoDelete(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/delete_explicacao.html'
form_class = OradorDeleteForm
@ -1255,7 +1255,7 @@ class ExplicacaoDelete(FormMixin, sessao_crud.CrudDetailView):
return reverse('sessaoplenaria:explicacao', kwargs={'pk': pk})
class ExplicacaoEdit(FormMixin, sessao_crud.CrudDetailView):
class ExplicacaoEdit(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/edit_explicacao.html'
form_class = OradorForm
@ -1315,7 +1315,7 @@ class ExplicacaoEdit(FormMixin, sessao_crud.CrudDetailView):
return reverse('sessaoplenaria:explicacao', kwargs={'pk': pk})
class VotacaoEditView(FormMixin, sessao_crud.CrudDetailView):
class VotacaoEditView(FormMixin, SessaoCrud.CrudDetailView):
'''
Votação Simbólica e Secreta
@ -1388,7 +1388,7 @@ class VotacaoEditView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class VotacaoView(FormMixin, sessao_crud.CrudDetailView):
class VotacaoView(FormMixin, SessaoCrud.CrudDetailView):
'''
Votação Simbólica e Secreta
@ -1507,7 +1507,7 @@ class VotacaoView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class VotacaoNominalView(FormMixin, sessao_crud.CrudDetailView):
class VotacaoNominalView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/votacao/nominal.html'
def get(self, request, *args, **kwargs):
@ -1634,7 +1634,7 @@ class VotacaoNominalView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class VotacaoNominalEditView(FormMixin, sessao_crud.CrudDetailView):
class VotacaoNominalEditView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/votacao/nominal_edit.html'
def get(self, request, *args, **kwargs):
@ -1711,7 +1711,7 @@ class VotacaoNominalEditView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class VotacaoNominalExpedienteView(FormMixin, sessao_crud.CrudDetailView):
class VotacaoNominalExpedienteView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/votacao/nominal.html'
def get(self, request, *args, **kwargs):
@ -1836,7 +1836,7 @@ class VotacaoNominalExpedienteView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class VotacaoNominalExpedienteEditView(FormMixin, sessao_crud.CrudDetailView):
class VotacaoNominalExpedienteEditView(FormMixin, SessaoCrud.CrudDetailView):
template_name = 'sessao/votacao/nominal_edit.html'
def get(self, request, *args, **kwargs):
@ -1913,7 +1913,7 @@ class VotacaoNominalExpedienteEditView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class VotacaoExpedienteView(FormMixin, sessao_crud.CrudDetailView):
class VotacaoExpedienteView(FormMixin, SessaoCrud.CrudDetailView):
'''
Votação Simbólica e Secreta
@ -2034,7 +2034,7 @@ class VotacaoExpedienteView(FormMixin, sessao_crud.CrudDetailView):
kwargs={'pk': pk})
class VotacaoExpedienteEditView(FormMixin, sessao_crud.CrudDetailView):
class VotacaoExpedienteEditView(FormMixin, SessaoCrud.CrudDetailView):
'''
Votação Simbólica e Secreta
@ -2133,7 +2133,7 @@ class PautaSessaoListView(SessaoListView):
template_name = "sessao/pauta_sessao_list.html"
class PautaSessaoDetailView(sessao_crud.CrudDetailView):
class PautaSessaoDetailView(SessaoCrud.CrudDetailView):
template_name = "sessao/pauta_sessao_detail.html"
def get(self, request, *args, **kwargs):
@ -2245,7 +2245,7 @@ class SessaoPlenariaView(generics.ListAPIView):
serializer_class = SessaoPlenariaSerializer
class PautaExpedienteDetail(sessao_crud.CrudDetailView):
class PautaExpedienteDetail(SessaoCrud.CrudDetailView):
template_name = "sessao/pauta/expediente.html"
def get(self, request, *args, **kwargs):
@ -2263,7 +2263,7 @@ class PautaExpedienteDetail(sessao_crud.CrudDetailView):
'tramitacao': tramitacao})
class PautaOrdemDetail(sessao_crud.CrudDetailView):
class PautaOrdemDetail(SessaoCrud.CrudDetailView):
template_name = "sessao/pauta/ordem.html"
def get(self, request, *args, **kwargs):

2
test_and_check_qa.sh

@ -3,5 +3,5 @@
# QA checks: run this before every commit
py.test
py.test --ds=crud_tests.settings crud_tests
py.test --ds=crud.tests.settings crud/tests
./check_qa.sh

Loading…
Cancel
Save