diff --git a/sapl/base/templatetags/menus.py b/sapl/base/templatetags/menus.py index d96ab2e22..4d1f14b4c 100644 --- a/sapl/base/templatetags/menus.py +++ b/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 /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: /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'] diff --git a/sapl/base/tests/test_login.py b/sapl/base/tests/test_login.py index 40ad93264..73f9eac69 100755 --- a/sapl/base/tests/test_login.py +++ b/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 diff --git a/sapl/base/urls.py b/sapl/base/urls.py index 5daecb72c..f619423f2 100644 --- a/sapl/base/urls.py +++ b/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() diff --git a/sapl/compilacao/views.py b/sapl/compilacao/views.py index 339d6a5de..ff88d627d 100644 --- a/sapl/compilacao/views.py +++ b/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'): diff --git a/sapl/crispy_layout_mixin.py b/sapl/crispy_layout_mixin.py index ad079f66a..6c60c9b79 100644 --- a/sapl/crispy_layout_mixin.py +++ b/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 = '{}'.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): diff --git a/sapl/crud/tests/stub_app/layouts.yaml b/sapl/crud/tests/stub_app/layouts.yaml index fc104c87e..adb32e93c 100644 --- a/sapl/crud/tests/stub_app/layouts.yaml +++ b/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 diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 3b9697282..8076bc49a 100644 --- a/sapl/materia/views.py +++ b/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): diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index f616e00a2..ef1a4c7be 100644 --- a/sapl/sessao/urls.py +++ b/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\d+)/reordenar-expediente$', reordernar_materias_expediente, name="reordenar_expediente"), - url(r'^media/(?P.*)$', serve, - {'document_root': settings.MEDIA_ROOT}), url(r'^rest/', include(sessao_rest)), url(r'^sistema/sessao-plenaria/tipo/', include(TipoSessaoCrud.get_urls())), diff --git a/sapl/templates/base.html b/sapl/templates/base.html index e3bec8d1d..8c269f1fe 100644 --- a/sapl/templates/base.html +++ b/sapl/templates/base.html @@ -254,7 +254,7 @@ {% else %} Casa Legislativa não configurada.
- Favor configurar clicando aqui + Favor configurar clicando aqui {% endif %} diff --git a/sapl/base/layouts.yaml b/sapl/templates/base/layouts.yaml similarity index 75% rename from sapl/base/layouts.yaml rename to sapl/templates/base/layouts.yaml index 0a377da6f..4e84ee4cd 100644 --- a/sapl/base/layouts.yaml +++ b/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 diff --git a/sapl/comissoes/layouts.yaml b/sapl/templates/comissoes/layouts.yaml similarity index 68% rename from sapl/comissoes/layouts.yaml rename to sapl/templates/comissoes/layouts.yaml index 22ffa0f98..e881b0b1e 100644 --- a/sapl/comissoes/layouts.yaml +++ b/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 diff --git a/sapl/templates/comissoes/subnav.yaml b/sapl/templates/comissoes/subnav.yaml index 8ee080406..02402bfee 100644 --- a/sapl/templates/comissoes/subnav.yaml +++ b/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 diff --git a/sapl/compilacao/layouts.yaml b/sapl/templates/compilacao/layouts.yaml similarity index 61% rename from sapl/compilacao/layouts.yaml rename to sapl/templates/compilacao/layouts.yaml index d512d7615..6d54631d9 100644 --- a/sapl/compilacao/layouts.yaml +++ b/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 diff --git a/sapl/lexml/layouts.yaml b/sapl/templates/lexml/layouts.yaml similarity index 72% rename from sapl/lexml/layouts.yaml rename to sapl/templates/lexml/layouts.yaml index b09bfc62d..1dc354bd2 100644 --- a/sapl/lexml/layouts.yaml +++ b/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 diff --git a/sapl/materia/layouts.yaml b/sapl/templates/materia/layouts.yaml similarity index 65% rename from sapl/materia/layouts.yaml rename to sapl/templates/materia/layouts.yaml index 887a37349..6b32b41a7 100644 --- a/sapl/materia/layouts.yaml +++ b/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 diff --git a/sapl/templates/materia/materialegislativa_filter.html b/sapl/templates/materia/materialegislativa_filter.html index afaa8cfa9..0c861727a 100644 --- a/sapl/templates/materia/materialegislativa_filter.html +++ b/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 %} -

Pesquisar Matéria

-

{% if filter_url %} {% endif %} - + {% if not filter_url %} {% crispy filter.form %} {% endif %} - +

{% if filter_url %} - + - {% if page_obj|length %} - {% if numero_res > 1 %} -

Pesquisa concluída com sucesso! Foram encontradas {{numero_res}} matérias.

- {% elif numero_res == 1 %} -

Pesquisa concluída com sucesso! Foi encontrada {{numero_res}} matéria.

+ {% if paginator.count %} + {% if paginator.count > 1 %} +

{% blocktrans with paginator.count as total_materias %}Pesquisa concluída com sucesso! Foram encontradas {{total_materias}} matérias.{% endblocktrans %}

+ {% elif paginator.count == 1 %} +

{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 matéria.'%}

{% endif %} + {% for m in page_obj %} - {% endif %} - +

Resultados

{% trans "Resultados" %}

{{m.tipo.sigla}} {{m.numero}}/{{m.ano}} - {{m.tipo}}
@@ -42,7 +40,7 @@ ,    {{a.autor|default_if_none:"Não Informado"}} {% else %}  {{a.autor|default_if_none:"Não Informado"}} - {% endif %} + {% endif %} {% endfor %}
Localização Atual:  {{m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não Informada"}}
@@ -58,11 +56,11 @@

Nenhuma matéria encontrada com essas especificações

{% include "paginacao.html" %} {% endif %} -{% endblock detail_content %} \ No newline at end of file +{% endblock detail_content %} diff --git a/sapl/templates/materia/subnav.yaml b/sapl/templates/materia/subnav.yaml index 8dc4db159..c1a5bf8d6 100644 --- a/sapl/templates/materia/subnav.yaml +++ b/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 diff --git a/sapl/templates/menus/subnav.html b/sapl/templates/menus/subnav.html index 85fdecb83..7a029ab10 100644 --- a/sapl/templates/menus/subnav.html +++ b/sapl/templates/menus/subnav.html @@ -1,23 +1,24 @@ + {% load i18n %} {% if menu %} {% endif %} diff --git a/sapl/norma/layouts.yaml b/sapl/templates/norma/layouts.yaml similarity index 78% rename from sapl/norma/layouts.yaml rename to sapl/templates/norma/layouts.yaml index ba148045a..e7eff947e 100644 --- a/sapl/norma/layouts.yaml +++ b/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 diff --git a/sapl/templates/norma/subnav.yaml b/sapl/templates/norma/subnav.yaml index 638daf96e..7704bfeb9 100644 --- a/sapl/templates/norma/subnav.yaml +++ b/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 diff --git a/sapl/painel/layouts.yaml b/sapl/templates/painel/layouts.yaml similarity index 53% rename from sapl/painel/layouts.yaml rename to sapl/templates/painel/layouts.yaml index e4a6f4606..e0d01ac66 100644 --- a/sapl/painel/layouts.yaml +++ b/sapl/templates/painel/layouts.yaml @@ -1,4 +1,4 @@ - +{% load i18n %} Cronometro: - Cronometro: + {% trans 'Cronometro' %}: - status:3 data_cronometro:6 tipo diff --git a/sapl/parlamentares/layouts.yaml b/sapl/templates/parlamentares/layouts.yaml similarity index 73% rename from sapl/parlamentares/layouts.yaml rename to sapl/templates/parlamentares/layouts.yaml index 866a791f9..48e11240c 100644 --- a/sapl/parlamentares/layouts.yaml +++ b/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 diff --git a/sapl/templates/parlamentares/subnav.yaml b/sapl/templates/parlamentares/subnav.yaml index fc171ea84..9b457cd18 100644 --- a/sapl/templates/parlamentares/subnav.yaml +++ b/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 - diff --git a/sapl/protocoloadm/layouts.yaml b/sapl/templates/protocoloadm/layouts.yaml similarity index 66% rename from sapl/protocoloadm/layouts.yaml rename to sapl/templates/protocoloadm/layouts.yaml index 304cd0bd8..c9f872b6f 100644 --- a/sapl/protocoloadm/layouts.yaml +++ b/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 diff --git a/sapl/sessao/layouts.yaml b/sapl/templates/sessao/layouts.yaml similarity index 69% rename from sapl/sessao/layouts.yaml rename to sapl/templates/sessao/layouts.yaml index 63529bf46..981788a4e 100644 --- a/sapl/sessao/layouts.yaml +++ b/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 diff --git a/sapl/templates/sessao/subnav.yaml b/sapl/templates/sessao/subnav.yaml index 82c8f7f2a..e6a32279d 100644 --- a/sapl/templates/sessao/subnav.yaml +++ b/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 diff --git a/sapl/urls.py b/sapl/urls.py index 2fb1df919..750cce94d 100644 --- a/sapl/urls.py +++ b/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) diff --git a/sapl/utils.py b/sapl/utils.py index 3fefa1bca..1e49e3184 100644 --- a/sapl/utils.py +++ b/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 diff --git a/scripts/anonimizador/anon.py b/scripts/anonimizador/anon.py index c91be10cd..2711f0114 100644 --- a/scripts/anonimizador/anon.py +++ b/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, diff --git a/setup.py b/setup.py index a8ed72051..330749885 100644 --- a/setup.py +++ b/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, )