Browse Source

Merge branch '103-autorizacaov2' into 474-criar-secao-doc-adm-v2

pull/506/head
Eduardo Calil 9 years ago
parent
commit
e7b89f009f
  1. 103
      sapl/base/templatetags/menus.py
  2. 3
      sapl/base/tests/test_login.py
  3. 5
      sapl/base/urls.py
  4. 7
      sapl/compilacao/views.py
  5. 24
      sapl/crispy_layout_mixin.py
  6. 4
      sapl/crud/tests/stub_app/layouts.yaml
  7. 32
      sapl/materia/views.py
  8. 4
      sapl/sessao/urls.py
  9. 2
      sapl/templates/base.html
  10. 3
      sapl/templates/base/layouts.yaml
  11. 18
      sapl/templates/comissoes/layouts.yaml
  12. 8
      sapl/templates/comissoes/subnav.yaml
  13. 22
      sapl/templates/compilacao/layouts.yaml
  14. 6
      sapl/templates/lexml/layouts.yaml
  15. 61
      sapl/templates/materia/layouts.yaml
  16. 28
      sapl/templates/materia/materialegislativa_filter.html
  17. 21
      sapl/templates/materia/subnav.yaml
  18. 31
      sapl/templates/menus/subnav.html
  19. 14
      sapl/templates/norma/layouts.yaml
  20. 5
      sapl/templates/norma/subnav.yaml
  21. 4
      sapl/templates/painel/layouts.yaml
  22. 35
      sapl/templates/parlamentares/layouts.yaml
  23. 10
      sapl/templates/parlamentares/subnav.yaml
  24. 20
      sapl/templates/protocoloadm/layouts.yaml
  25. 28
      sapl/templates/sessao/layouts.yaml
  26. 29
      sapl/templates/sessao/subnav.yaml
  27. 3
      sapl/urls.py
  28. 2
      sapl/utils.py
  29. 2
      scripts/anonimizador/anon.py
  30. 5
      setup.py

103
sapl/base/templatetags/menus.py

@ -1,21 +1,20 @@
import os
import yaml
from django import template
from django.core.urlresolvers import reverse
import yaml
register = template.Library()
@register.inclusion_tag('menus/subnav.html', takes_context=True)
def subnav(context, path=None):
"""Renders a subnavigation for views of a certain object.
"""Renderiza sub navegação para objetos no padrão Mestre Detalhe
If not provided, path defaults to <app_name>/subnav.yaml
Existem três possíveis fontes de busca do yaml
com precedência enumerada abaixo:
1) Se a variável path não é nula;
2) Se existe no contexto a chave subnav_template_name;
3) o path default: <app_name>/subnav.yaml
"""
# TODO: 118n !!!!!!!!!!!!!!
# How to internationalize yaml files????
menu = None
root_pk = context.get('root_pk', None)
if not root_pk:
@ -26,40 +25,92 @@ def subnav(context, path=None):
if root_pk:
request = context['request']
"""
As implementações das Views de Modelos que são dados auxiliares e
de diversas app's estão concentradas em urls com prefixo 'sistema'.
Essas Views não possuem submenu de navegação e são incompativeis com a
execução deste subnav. Inicialmente, a maneira mais prática encontrada
de isolar foi com o teste abaixo.
"""
if 'sistema' in request.path:
return
app = request.resolver_match.app_name
app_template = app.split('.')
app_template = app_template[1] if app_template[
0] == 'sapl' and len(app_template) > 1 else app_template[0]
rm = request.resolver_match
app_template = rm.app_name.rsplit('.', 1)[-1]
yaml_path = '%s/subnav.yaml' % app_template
if path:
yaml_path = path
elif 'subnav_template_name' in context:
yaml_path = context['subnav_template_name']
else:
yaml_path = '%s/%s' % (app_template, 'subnav.yaml')
try:
""" Por padrão, são carragados dois Loaders,
filesystem.Loader - busca em TEMPLATES_DIRS do projeto atual
"""
Por padrão, são carragados dois Loaders,
filesystem.Loader - busca em TEMPLATE_DIRS do projeto atual
app_directories.Loader - busca em todas apps instaladas
A função abaixo é nativa e busca em todos os Loaders Configurados.
A função nativa abaixo busca em todos os Loaders Configurados.
"""
yaml_template = template.loader.get_template(yaml_path)
menu = yaml.load(open(yaml_template.origin.name, 'r'))
resolve_urls_inplace(menu, root_pk, app)
except:
# um erro será lançado por get_template se não for encontrado
# yaml_path em nenhum de locais registrados.
pass
rendered = yaml_template.render()
menu = yaml.load(rendered)
resolve_urls_inplace(menu, root_pk, rm, context)
except Exception as e:
print(e)
return {'menu': menu}
def resolve_urls_inplace(menu, pk, app):
def resolve_urls_inplace(menu, pk, rm, context):
if isinstance(menu, list):
list_active = ''
for item in menu:
resolve_urls_inplace(item, pk, app)
menuactive = resolve_urls_inplace(item, pk, rm, context)
list_active = menuactive if menuactive else list_active
if not isinstance(item, list):
item['active'] = menuactive
return list_active
else:
if 'url' in menu:
menu['url'] = reverse('%s:%s' % (app, menu['url']),
url_name = menu['url']
menu['url'] = reverse('%s:%s' % (rm.app_name, menu['url']),
kwargs={'pk': pk})
menu['active'] = 'active'\
if context['request'].path == menu['url'] else ''
if not menu['active']:
"""
Se não encontrada diretamente,
procura a url acionada dentro do crud, caso seja um.
Serve para manter o active no suvnav correto ao acionar
as funcionalidades diretas do MasterDetailCrud, como:
- visualização de detalhes, adição, edição, remoção.
Casos para urls_extras:
Em relações de segundo nível, como ocorre em
(0) Comissões -> (1) Composição -> (2) Participação
(2) não tem ligação direta com (1) através da view. Para (2)
ser localizado, e o nav-tabs ou nav-pills do front-end serem
ativados foi inserido o teste de existência de urls_extras
para serem testadas e, sendo válidado, o active do front-end
seja devidamente colocado.
"""
view = context['view']
if hasattr(view, '__class__') and\
hasattr(view.__class__, 'crud'):
urls = view.__class__.crud.get_urls()
for u in urls:
if (u.name == url_name or
'urls_extras' in menu and
u.name in menu['urls_extras']):
menu['active'] = 'active'
break
if 'children' in menu:
resolve_urls_inplace(menu['children'], pk, app)
menu['active'] = resolve_urls_inplace(
menu['children'], pk, rm, context)
return menu['active']

3
sapl/base/tests/test_login.py

@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
from django.contrib.auth import get_user_model
import pytest
from django.contrib.auth import get_user_model
pytestmark = pytest.mark.django_db

5
sapl/base/urls.py

@ -1,6 +1,5 @@
from django.conf.urls import include, url
from django.contrib.auth import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.views.generic.base import TemplateView
from .apps import AppConfig
@ -23,7 +22,3 @@ urlpatterns = [
name='login'),
url(r'^logout/$', views.logout, {'next_page': '/login'}, name='logout')
]
# Fix a static asset finding error on Django 1.9 + gunicorn:
# http://stackoverflow.com/questions/35510373/
urlpatterns += staticfiles_urlpatterns()

7
sapl/compilacao/views.py

@ -1,6 +1,6 @@
import sys
from collections import OrderedDict
from datetime import datetime, timedelta
import sys
from braces.views import FormMessagesMixin
from django import forms
@ -38,7 +38,6 @@ from sapl.compilacao.models import (Dispositivo, Nota,
from sapl.compilacao.utils import DISPOSITIVO_SELECT_RELATED
from sapl.crud.base import Crud, CrudListView, make_pagination
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')
@ -2144,10 +2143,10 @@ class DispositivoSearchFragmentFormView(ListView):
"""
ao integrar um model ao app de compilação, se este model possuir
texto_articulado = GenericRelation(
TextoArticulado, related_query_name='texto_articulado')
será uma integração mais eficiente para as buscas de Dispositivos
"""
if hasattr(model_class, 'texto_articulado'):

24
sapl/crispy_layout_mixin.py

@ -1,10 +1,10 @@
from math import ceil
from os.path import dirname, join
import rtyaml
from crispy_forms.bootstrap import FormActions
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Div, Fieldset, Layout, Submit
from django import template
from django.utils import formats
from django.utils.translation import ugettext as _
@ -70,8 +70,8 @@ def get_field_display(obj, fieldname):
elif 'FieldFile' in str(type(value)):
if value:
display = '<a href="{}">{}</a>'.format(
value.url,
value.name.split('/')[-1:][0])
value.url,
value.name.split('/')[-1:][0])
else:
display = ''
else:
@ -89,10 +89,8 @@ class CrispyLayoutFormMixin:
return self.model.__name__
def get_layout(self):
filename = join(
dirname(self.model._meta.app_config.models_module.__file__),
'layouts.yaml')
return read_layout_from_yaml(filename, self.layout_key)
yaml_layout = '%s/layouts.yaml' % self.model._meta.app_config.label
return read_layout_from_yaml(yaml_layout, self.layout_key)
@property
def fields(self):
@ -146,15 +144,17 @@ class CrispyLayoutFormMixin:
} for legend, rows in heads_and_tails(self.get_layout())]
def read_yaml_from_file(filename):
def read_yaml_from_file(yaml_layout):
# TODO cache this at application level
with open(filename, 'r') as yamlfile:
return rtyaml.load(yamlfile)
t = template.loader.get_template(yaml_layout)
rendered = t.render()
return rtyaml.load(rendered)
def read_layout_from_yaml(filename, key):
def read_layout_from_yaml(yaml_layout, key):
# TODO cache this at application level
yaml = read_yaml_from_file(filename)
yaml = read_yaml_from_file(yaml_layout)
base = yaml[key]
def line_to_namespans(line):

4
sapl/crud/tests/stub_app/layouts.yaml

@ -1,7 +1,7 @@
Country:
Basic Data:
{% trans 'Basic Data' %}:
- name:9 continent
- population is_cold
More Details:
{% trans 'More Details' %}:
- description

32
sapl/materia/views.py

@ -610,39 +610,21 @@ class MateriaLegislativaPesquisaView(FilterView):
context = super(MateriaLegislativaPesquisaView,
self).get_context_data(**kwargs)
context['title'] = _('Pesquisar Matéria Legislativa')
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
return context
def get(self, request, *args, **kwargs):
super(MateriaLegislativaPesquisaView, self).get(request)
# Se a pesquisa estiver quebrando com a paginação
# Olhe esta função abaixo
# Provavelmente você criou um novo campo no Form/FilterSet
# Então a ordem da URL está diferente
data = self.filterset.data
if (data and data.get('tipo') is not None):
url = "&" + str(self.request.environ['QUERY_STRING'])
if url.startswith("&page"):
ponto_comeco = url.find('tipo=') - 1
url = url[ponto_comeco:]
else:
url = ''
self.filterset.form.fields['o'].label = _('Ordenação')
context = self.get_context_data(filter=self.filterset,
object_list=self.object_list,
filter_url=url,
numero_res=len(self.object_list)
)
qr = self.request.GET.copy()
if 'page' in qr:
del qr['page']
context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else ''
return self.render_to_response(context)
return context
class MateriaTaView(IntegracaoTaView):

4
sapl/sessao/urls.py

@ -1,7 +1,5 @@
from django.conf.urls import include, url
from django.views.static import serve
from sapl import settings
from sapl.sessao.views import (BancadaCrud, CargoBancadaCrud,
EditMateriaOrdemDiaView, ExpedienteMateriaCrud,
ExpedienteView, ListMateriaOrdemDiaView,
@ -40,8 +38,6 @@ urlpatterns = [
url(r'^(?P<pk>\d+)/reordenar-expediente$', reordernar_materias_expediente,
name="reordenar_expediente"),
url(r'^media/(?P<path>.*)$', serve,
{'document_root': settings.MEDIA_ROOT}),
url(r'^rest/', include(sessao_rest)),
url(r'^sistema/sessao-plenaria/tipo/',
include(TipoSessaoCrud.get_urls())),

2
sapl/templates/base.html

@ -254,7 +254,7 @@
{% else %}
Casa Legislativa não configurada.
<br>
<a href="/casa-legislativa">Favor configurar clicando aqui</a>
<a href="/casa_legislativa">Favor configurar clicando aqui</a>
{% endif %}
</div>
</div>

3
sapl/base/layouts.yaml → sapl/templates/base/layouts.yaml

@ -1,5 +1,6 @@
{% load i18n %}
CasaLegislativa:
Casa Legislativa:
{% trans 'Casa Legislativa' %}:
- codigo:2 nome sigla
- endereco:8 cep
- municipio:10 uf

18
sapl/comissoes/layouts.yaml → sapl/templates/comissoes/layouts.yaml

@ -1,36 +1,36 @@
{% load i18n %}
CargoComissao:
Período de composição de Comissão:
{% trans 'Período de composição de Comissão' %}:
- nome:10 unico
Periodo:
Cargo de Comissão:
{% trans 'Cargo de Comissão' %}:
- data_inicio data_fim
TipoComissao:
Tipo Comissão:
{% trans 'Tipo Comissão' %}:
- nome:9 sigla
- dispositivo_regimental:9 natureza
Comissao:
Dados Básicos:
{% trans 'Dados Básicos' %}:
- nome:8 sigla
- tipo data_criacao unidade_deliberativa data_extincao
Dados Complementares:
{% trans 'Dados Complementares' %}:
- local_reuniao agenda_reuniao telefone_reuniao
- endereco_secretaria telefone_secretaria fax_secretaria
- secretario email
- finalidade
Temporária:
{% trans 'Temporária' %}:
- apelido_temp:8 data_instalacao_temp
- data_final_prevista_temp data_prorrogada_temp data_fim_comissao
Composicao:
Composição:
{% trans 'Composição' %}:
- periodo
Participacao:
Participação:
{% trans 'Participação' %}:
- parlamentar cargo titular
- data_designacao data_desligamento
- motivo_desligamento

8
sapl/templates/comissoes/subnav.yaml

@ -1,6 +1,8 @@
- title: Início
{% load i18n %}
- title: {% trans 'Início' %}
url: comissao_detail
- title: Composição
- title: {% trans 'Composição' %}
url: composicao_list
- title: Matérias em Tramitação
urls_extras: participacao_detail participacao_create participacao_edit participacao_delete
- title: {% trans 'Matérias em Tramitação' %}
url: materias_em_tramitacao

22
sapl/compilacao/layouts.yaml → sapl/templates/compilacao/layouts.yaml

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

6
sapl/lexml/layouts.yaml → sapl/templates/lexml/layouts.yaml

@ -1,11 +1,11 @@
{% load i18n %}
LexmlProvedor:
Provedor Lexml:
{% trans 'Provedor Lexml' %}:
- id_provedor:2 nome
- id_responsavel:2 nome_responsavel email_responsavel
- xml
LexmlPublicador:
Publicador Lexml:
{% trans 'Publicador Lexml' %}:
- id_publicador:2 nome sigla
- id_responsavel:2 nome_responsavel email_responsavel

61
sapl/materia/layouts.yaml → sapl/templates/materia/layouts.yaml

@ -1,132 +1,133 @@
{% load i18n %}
Origem:
Origem:
{% trans 'Origem' %}:
- nome:8 sigla
TipoMateriaLegislativa:
Tipo Matéria Legislativa:
{% trans 'Tipo Matéria Legislativa' %}:
- sigla:4 descricao
RegimeTramitacao:
Tipo de Documento:
{% trans 'Tipo de Documento' %}:
- descricao
TipoDocumento:
Regime Tramitação:
{% trans 'Regime Tramitação' %}:
- descricao
TipoFimRelatoria:
Tipo Fim de Relatoria:
{% trans 'Tipo Fim de Relatoria' %}:
- descricao
MateriaLegislativa:
Identificação Básica:
{% trans 'Identificação Básica' %}:
- tipo numero ano
- data_apresentacao numero_protocolo tipo_apresentacao
- texto_original
Outras Informações:
{% trans 'Outras Informações' %}:
- apelido dias_prazo polemica
- objeto regime_tramitacao em_tramitacao
- data_fim_prazo data_publicacao complementar
Origem Externa:
{% trans 'Origem Externa' %}:
- tipo_origem_externa numero_origem_externa ano_origem_externa
- local_origem_externa data_origem_externa
Dados Textuais:
{% trans 'Dados Textuais' %}:
- ementa
- indexacao
- observacao
Anexada:
Matéria Anexada:
{% trans 'Matéria Anexada' %}:
- tipo numero ano
- data_anexacao data_desanexacao
AnexadaDetail:
Matéria Anexada:
{% trans 'Matéria Anexada' %}:
- materia_principal
- materia_anexada
- data_anexacao data_desanexacao
TipoAutor:
Tipo Autor:
{% trans 'Tipo Autor' %}:
- descricao
Autor:
Autor:
{% trans 'Autor' %}:
- tipo:3 nome
- username
Autoria:
Autoria:
{% trans 'Autoria' %}:
- autor partido primeiro_autor
DocumentoAcessorio:
Documento Acessório:
{% trans 'Documento Acessório' %}:
- tipo nome data
- autor
- ementa
- arquivo
Numeracao:
Numeração:
{% trans 'Numeração' %}:
- tipo_materia numero_materia ano_materia data_materia
Orgao:
Órgão:
{% trans 'Órgão' %}:
- nome:4 sigla telefone endereco unidade_deliberativa
Relatoria:
Relatoria:
{% trans 'Relatoria' %}:
- comissao
- data_designacao_relator data_destituicao_relator
- parlamentar tipo_fim_relatoria
TipoProposicao:
Tipo Proposição:
{% trans 'Tipo Proposição' %}:
- descricao
- materia_ou_documento tipo_documento
- modelo
ProposicaoCreate:
Proposição:
{% trans 'Proposição' %}:
- tipo data_envio
- descricao
Materia:
{% trans 'Materia' %}:
- tipo_materia numero_materia ano_materia
Complemento:
{% trans 'Complemento' %}:
- texto_original
Proposicao:
Proposição:
{% trans 'Proposição' %}:
- tipo data_envio
- descricao
Materia:
{% trans 'Materia' %}:
- materia
Complemento:
{% trans 'Complemento' %}:
- texto_original
StatusTramitacao:
Status Tramitação:
{% trans 'Status Tramitação' %}:
- indicador:3 sigla:2 descricao
UnidadeTramitacao:
Unidade Tramitação:
{% trans 'Unidade Tramitação' %}:
- orgao
- comissao
- parlamentar
Tramitacao:
Tramitação:
{% trans 'Tramitação' %}:
- unidade_tramitacao_local unidade_tramitacao_destino
- data_tramitacao data_encaminhamento data_fim_prazo
- status turno urgente
- texto
DespachoInicial:
Despacho Inicial:
{% trans 'Despacho Inicial' %}:
- comissao
LegislacaoCitadaDetail:
Legislação Citada:
{% trans 'Legislação Citada' %}:
- norma
- disposicoes parte livro titulo
- capitulo secao subsecao artigo

28
sapl/templates/materia/materialegislativa_filter.html

@ -3,36 +3,34 @@
{% load crispy_forms_tags %}
{% block actions %}{% endblock %}
{% block sections_nav %}
{% block sections_nav %}
{% endblock %}
{% block detail_content %}
<h1><b>Pesquisar Matéria</b></h1>
<br></br>
{% if filter_url %}
<div class="actions btn-group pull-right" role="group">
<a href="{% url 'materia:pesquisar_materia' %}" class="btn btn-default">{% trans 'Fazer nova pesquisa' %}</a>
</div>
{% endif %}
{% if not filter_url %}
{% crispy filter.form %}
{% endif %}
<p></p>
{% if filter_url %}
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr><td><h3>Resultados</h3></td></tr>
<tr><td><h3>{% trans "Resultados" %}</h3></td></tr>
</thead>
{% if page_obj|length %}
{% if numero_res > 1 %}
<h3>Pesquisa concluída com sucesso! Foram encontradas {{numero_res}} matérias.</h3>
{% elif numero_res == 1 %}
<h3>Pesquisa concluída com sucesso! Foi encontrada {{numero_res}} matéria.</h3>
{% if paginator.count %}
{% if paginator.count > 1 %}
<h3>{% blocktrans with paginator.count as total_materias %}Pesquisa concluída com sucesso! Foram encontradas {{total_materias}} matérias.{% endblocktrans %}</h3>
{% elif paginator.count == 1 %}
<h3>{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}</h3>
{% endif %}
{% for m in page_obj %}
<tr>
<td>
<strong><a href="{% url 'materia:materialegislativa_detail' m.id %}">{{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}</strong></a></br>
@ -42,7 +40,7 @@
, &nbsp;&nbsp; {{a.autor|default_if_none:"Não Informado"}}
{% else %}
&nbsp;{{a.autor|default_if_none:"Não Informado"}}
{% endif %}
{% endif %}
{% endfor %}
</br>
<strong>Localização Atual:</strong> &nbsp;{{m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não Informada"}}</br>
@ -58,11 +56,11 @@
<h3>Nenhuma matéria encontrada com essas especificações</h3>
</tr>
{% endif %}
</table>
{% include "paginacao.html" %}
{% endif %}
{% endblock detail_content %}
{% endblock detail_content %}

21
sapl/templates/materia/subnav.yaml

@ -1,25 +1,26 @@
- title: Início
{% load i18n %}
- title: {% trans 'Início' %}
url: materialegislativa_detail
- title: Anexada
- title: {% trans 'Anexada' %}
url: anexada_list
- title: Autoria
- title: {% trans 'Autoria' %}
url: autoria_list
- title: Despacho Inicial
- title: {% trans 'Despacho Inicial' %}
url: despachoinicial_list
- title: Documento Acessório
- title: {% trans 'Documento Acessório' %}
url: documentoacessorio_list
- title: Legislação Citada
- title: {% trans 'Legislação Citada' %}
url: legislacaocitada_list
- title: Numeração
- title: {% trans 'Numeração' %}
url: numeracao_list
- title: Tramitação
- title: {% trans 'Tramitação' %}
url: tramitacao_list
- title: Relatoria
- title: {% trans 'Relatoria' %}
url: relatoria_list
# Opção adicionada para chamar o TextoArticulado da matéria.
# para integração foram necessárias apenas criar a url materia_ta em urls.py
# e a view MateriaTaView(IntegracaoTaView) em views.py
# Em nada mais a integração interfere em MateriaLegislativa
- title: Texto
- title: {% trans 'Texto' %}
url: materia_ta

31
sapl/templates/menus/subnav.html

@ -1,23 +1,24 @@
{% load i18n %}
{% if menu %}
<ul class="nav nav-pills navbar-right">
{% for item in menu %}
{% if item.children %}
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#fakeLink">
{% trans item.title %}
<span class="fa-chevron-down fa"></span>
</a>
<ul class="dropdown-menu" role="menu">{% for subitem in item.children %}
<li><a href="{{ subitem.url }}">{% trans subitem.title %}</a></li>{% endfor %}
</ul>
</li>
{% else %}
<li><a href="{{ item.url }}">{% trans item.title %}</a></li>
{% endif %}
{% if item.children %}
<li class="dropdown {{item.active}}">
<a class="dropdown-toggle" data-toggle="dropdown" href="#fakeLink">
{% trans item.title %}
<span class="fa-chevron-down fa"></span>
</a>
<ul class="dropdown-menu" role="menu">
{% for subitem in item.children %}
<li class="{{subitem.active}}"><a href="{{ subitem.url }}">{% trans subitem.title %}</a></li>
{% endfor %}
</ul>
</li>
{% else %}
<li class="{{item.active}}"><a href="{{ item.url }}">{% trans item.title %}</a></li>
{% endif %}
{% endfor %}
</ul>
{% endif %}

14
sapl/norma/layouts.yaml → sapl/templates/norma/layouts.yaml

@ -1,14 +1,14 @@
{% load i18n %}
AssuntoNorma:
Assunto Norma Jurídica:
{% trans 'Assunto Norma Jurídica' %}:
- assunto descricao
TipoNormaJuridica:
Tipo Norma Jurídica:
{% trans 'Tipo Norma Jurídica' %}:
- descricao sigla equivalente_lexml
NormaJuridica:
Identificação Básica:
{% trans 'Identificação Básica' %}:
- tipo numero ano
- data esfera_federacao complemento
- materia
@ -19,7 +19,7 @@ NormaJuridica:
- observacao
NormaJuridicaCreate:
Identificação Básica:
{% trans 'Identificação Básica' %}:
- tipo numero ano
- data esfera_federacao complemento
- tipo_materia numero_materia ano_materia
@ -30,14 +30,14 @@ NormaJuridicaCreate:
- observacao
LegislacaoCitada:
Legislação Citada:
{% trans 'Legislação Citada' %}:
- tipo numero ano
- disposicoes parte livro titulo
- capitulo secao subsecao artigo
- paragrafo inciso alinea item
LegislacaoCitadaDetail:
Legislação Citada:
{% trans 'Legislação Citada' %}:
- norma
- disposicoes parte livro titulo
- capitulo secao subsecao artigo

5
sapl/templates/norma/subnav.yaml

@ -1,9 +1,10 @@
- title: Início
{% load i18n %}
- title: {% trans 'Início' %}
url: normajuridica_detail
# Opção adicionada para chamar o TextoArticulado da norma.
# para integração foram necessárias apenas criar a url norma_ta em urls.py
# e a view NormaTaView(IntegracaoTaView) em views.py
# Em nada mais a integração interfere em NormaJuridica
- title: Texto
- title: {% trans 'Texto' %}
url: norma_ta

4
sapl/painel/layouts.yaml → sapl/templates/painel/layouts.yaml

@ -1,4 +1,4 @@
{% load i18n %}
Cronometro:
Cronometro:
{% trans 'Cronometro' %}:
- status:3 data_cronometro:6 tipo

35
sapl/parlamentares/layouts.yaml → sapl/templates/parlamentares/layouts.yaml

@ -1,32 +1,32 @@
{% load i18n %}
CargoMesa:
Cargo na Mesa:
{% trans 'Cargo na Mesa'%}:
- descricao:10 unico
Legislatura:
Legislatura:
{% trans 'Legislatura' %}:
- data_inicio data_fim data_eleicao
Coligacao:
Coligação:
{% trans 'Coligação' %}:
- nome:5 legislatura:5 numero_votos
Partido:
Partido Político:
{% trans 'Partido Político' %}:
- nome:6 sigla data_criacao data_extincao
Dependente:
Dependentes:
{% trans 'Dependentes' %}:
- nome
- tipo sexo data_nascimento
- cpf rg titulo_eleitor
SessaoLegislativa:
Sessão Legislativa:
{% trans 'Sessão Legislativa' %}:
- numero:4 tipo:4 legislatura:4 data_inicio data_fim data_inicio_intervalo data_fim_intervalo
Parlamentar:
Cadastro do Parlamentar:
{% trans 'Cadastro do Parlamentar' %}:
- nome_parlamentar:8 ativo
- nome_completo
- nivel_instrucao sexo data_nascimento
@ -43,9 +43,9 @@ Parlamentar:
- biografia
ParlamentarCreate:
Dados do Mandato:
{% trans 'Dados do Mandato' %}:
- legislatura data_expedicao_diploma
Cadastro do Parlamentar:
{% trans 'Cadastro do Parlamentar' %}:
- nome_parlamentar:8 ativo
- nome_completo
- nivel_instrucao sexo data_nascimento
@ -61,34 +61,33 @@ ParlamentarCreate:
- fotografia
- biografia
Filiacao:
'Filiações Partidárias ':
{% trans ''Filiações Partidárias '' %}:
- partido data data_desfiliacao
Mandato:
Mandato:
{% trans 'Mandato' %}:
- legislatura coligacao votos_recebidos
- data_fim_mandato data_expedicao_diploma
- tipo_afastamento
- observacao
TipoDependente:
Tipo de Dependente:
{% trans 'Tipo de Dependente' %}:
- descricao
NivelInstrucao:
Nível Instrução:
{% trans 'Nível Instrução' %}:
- descricao
TipoAfastamento:
Tipo de Afastamento:
{% trans 'Tipo de Afastamento' %}:
- descricao:5 dispositivo:5 afastamento
SituacaoMilitar:
Tipo Situação Militar:
{% trans 'Tipo Situação Militar' %}:
- descricao
ComposicaoColigacao:
'Nome do Partido':
{% trans ''Nome do Partido'' %}:
- partido

10
sapl/templates/parlamentares/subnav.yaml

@ -1,9 +1,9 @@
- title: Início
{% load i18n %}
- title: {% trans 'Início' %}
url: parlamentar_detail
- title: Mandatos
- title: {% trans 'Mandatos' %}
url: mandato_list
- title: Filiações Partidárias
- title: {% trans 'Filiações Partidárias' %}
url: filiacao_list
- title: Dependentes
- title: {% trans 'Dependentes' %}
url: dependente_list

20
sapl/protocoloadm/layouts.yaml → sapl/templates/protocoloadm/layouts.yaml

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

28
sapl/sessao/layouts.yaml → sapl/templates/sessao/layouts.yaml

@ -1,10 +1,10 @@
{% load i18n %}
TipoSessaoPlenaria:
Tipo de Sessão Plenária:
{% trans 'Tipo de Sessão Plenária' %}:
- nome quorum_minimo
SessaoPlenaria:
Dados Básicos:
{% trans 'Dados Básicos' %}:
- numero:1 tipo:3 legislatura sessao_legislativa
- data_inicio:5 hora_inicio:5 iniciada
- data_fim:5 hora_fim:5 finalizada
@ -12,62 +12,62 @@ SessaoPlenaria:
- url_audio url_video
ExpedienteMateria:
Cadastro de Matérias do Expediente:
{% trans 'Cadastro de Matérias do Expediente' %}:
- data_ordem tip_sessao_FIXME numero_ordem
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME
- tipo_votacao
- observacao
OrdemDia:
Cadastro de Matérias da Ordem do Dia:
{% trans 'Cadastro de Matérias da Ordem do Dia' %}:
- data_ordem tip_sessao_FIXME numero_ordem
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME
- tipo_votacao
- observacao
TipoResultadoVotacao:
Tipo de Resultado da Votação:
{% trans 'Tipo de Resultado da Votação' %}:
- nome
TipoExpediente:
Tipo de Expediente:
{% trans 'Tipo de Expediente' %}:
- nome
RegistroVotacao:
Votação Simbólica:
{% trans 'Votação Simbólica' %}:
- numero_votos_sim numero_votos_nao numero_abstencoes nao_votou_FIXME
- votacao_branco_FIXME ind_votacao_presidente_FIXME
- tipo_resultado_votacao
- observacao
Orador:
Orador das Explicações Pessoais:
{% trans 'Orador das Explicações Pessoais' %}:
- numero_ordem parlamentar url_discurso
OradorExpediente:
Orador do Expediente:
{% trans 'Orador do Expediente' %}:
- numero_ordem parlamentar url_discurso
ExpedienteMateria:
Matéria do Expediente:
{% trans 'Matéria do Expediente' %}:
- data_ordem numero_ordem
- tipo_materia numero_materia ano_materia
- tipo_votacao
- observacao
ExpedienteMateriaDetail:
Matérias do Expediente:
{% trans 'Matérias do Expediente' %}:
- materia
- tipo_votacao
- observacao
Bancada:
Bancada:
{% trans 'Bancada' %}:
- legislatura
- nome partido
- data_criacao data_extincao
- descricao
CargoBancada:
Cargo de Bancada:
{% trans 'Cargo de Bancada' %}:
- nome_cargo:8 cargo_unico

29
sapl/templates/sessao/subnav.yaml

@ -1,32 +1,33 @@
- title: Abertura
{% load i18n %}
- title: {% trans 'Abertura' %}
children:
- title: Dados Básicos
- title: {% trans 'Dados Básicos' %}
url: sessaoplenaria_detail
- title: Mesa
- title: {% trans 'Mesa' %}
url: mesa
- title: Presença
- title: {% trans 'Presença' %}
url: presenca
- title: Explicações Pessoais
- title: {% trans 'Explicações Pessoais' %}
url: orador_list
- title: Expedientes
- title: {% trans 'Expedientes' %}
children:
- title: Expediente Diversos
- title: {% trans 'Expediente Diversos' %}
url: expediente
- title: Matérias Expediente
- title: {% trans 'Matérias Expediente' %}
url: expedientemateria_list
- title: Oradores do Expediente
- title: {% trans 'Oradores do Expediente' %}
url: oradorexpediente_list
- title: Ordem do Dia
- title: {% trans 'Ordem do Dia' %}
children:
- title: Matérias Ordem do Dia
- title: {% trans 'Matérias Ordem do Dia' %}
url: materiaordemdia_list
- title: Presença Ordem do Dia
- title: {% trans 'Presença Ordem do Dia' %}
url: presencaordemdia
- title: Painel Eletrônico
- title: {% trans 'Painel Eletrônico' %}
url: painel
- title: Resumo
- title: {% trans 'Resumo' %}
url: resumo

3
sapl/urls.py

@ -53,6 +53,9 @@ urlpatterns = [
]
# Fix a static asset finding error on Django 1.9 + gunicorn:
# http://stackoverflow.com/questions/35510373/
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL,
document_root=settings.STATIC_ROOT)

2
sapl/utils.py

@ -2,7 +2,7 @@ from datetime import date
from functools import wraps
import os.path
from compressor.utils import get_class
import magic
from django.apps import apps
from django.conf import settings
from django.contrib import admin

2
scripts/anonimizador/anon.py

@ -11,7 +11,7 @@ from sapl.norma.models import AssuntoNorma
from sapl.parlamentares.models import Municipio, NivelInstrucao, Partido
from sapl.settings import SAPL_APPS
sapl_appconfs = [apps.get_app_config(n) for n in SAPL_APPS]
sapl_appconfs = [apps.get_app_config(n.split('.')[1]) for n in SAPL_APPS]
models = [model for app in sapl_appconfs for model in app.get_models()]
excluidos = Origem, Orgao, AssuntoNorma, Partido, NivelInstrucao, Municipio,

5
setup.py

@ -1,4 +1,5 @@
import os
from setuptools import find_packages, setup
with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
@ -33,7 +34,7 @@ install_requires = [
'unipath==1.1',
'python-magic==0.4.10',
'gunicorn==19.4.5',
#git+git://github.com/interlegis/trml2pdf.git
# git+git://github.com/interlegis/trml2pdf.git
]
setup(
name='interlegis-sapl',
@ -60,5 +61,5 @@ setup(
'Topic :: Internet :: WWW/HTTP',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
],
install_requires = install_requires,
install_requires=install_requires,
)

Loading…
Cancel
Save