Browse Source

cria flexibilização das expressões textuais após tradução

pull/2169/head
Leandro Roberto 7 years ago
parent
commit
088348c46c
  1. 2
      sapl/api/apps.py
  2. 2
      sapl/api/forms.py
  3. 2
      sapl/api/views.py
  4. 2
      sapl/audiencia/apps.py
  5. 2
      sapl/audiencia/forms.py
  6. 2
      sapl/audiencia/models.py
  7. 2
      sapl/audiencia/tests/test_audiencia.py
  8. 2
      sapl/base/admin.py
  9. 2
      sapl/base/apps.py
  10. 2
      sapl/base/forms.py
  11. 34
      sapl/base/migrations/0021_auto_20180825_1713.py
  12. 25
      sapl/base/migrations/0022_auto_20180825_1716.py
  13. 42
      sapl/base/models.py
  14. 15
      sapl/base/templatetags/i18n_sapl.py
  15. 2
      sapl/base/templatetags/menus.py
  16. 2
      sapl/base/tests/test_form.py
  17. 2
      sapl/base/tests/test_view_base.py
  18. 14
      sapl/base/urls.py
  19. 34
      sapl/base/views.py
  20. 2
      sapl/comissoes/apps.py
  21. 2
      sapl/comissoes/forms.py
  22. 2
      sapl/comissoes/models.py
  23. 2
      sapl/comissoes/tests/test_comissoes.py
  24. 2
      sapl/compilacao/apps.py
  25. 2
      sapl/compilacao/forms.py
  26. 2
      sapl/compilacao/models.py
  27. 2
      sapl/compilacao/templatetags/compilacao_filters.py
  28. 2
      sapl/compilacao/tests/test_tipo_texto_articulado_form.py
  29. 2
      sapl/compilacao/views.py
  30. 5
      sapl/crispy_layout_mixin.py
  31. 2
      sapl/crud/base.py
  32. 2
      sapl/decorators.py
  33. 2
      sapl/lexml/apps.py
  34. 2
      sapl/lexml/models.py
  35. 2
      sapl/materia/apps.py
  36. 2
      sapl/materia/forms.py
  37. 2
      sapl/materia/models.py
  38. 2
      sapl/materia/tests/test_materia_form.py
  39. 2
      sapl/materia/views.py
  40. 2
      sapl/norma/apps.py
  41. 2
      sapl/norma/forms.py
  42. 30
      sapl/norma/migrations/0013_auto_20180824_2301.py
  43. 10
      sapl/norma/models.py
  44. 2
      sapl/norma/tests/test_norma.py
  45. 2
      sapl/norma/views.py
  46. 2
      sapl/painel/apps.py
  47. 2
      sapl/painel/models.py
  48. 2
      sapl/painel/views.py
  49. 2
      sapl/parlamentares/apps.py
  50. 2
      sapl/parlamentares/forms.py
  51. 2
      sapl/parlamentares/models.py
  52. 2
      sapl/parlamentares/tests/test_parlamentares.py
  53. 2
      sapl/parlamentares/views.py
  54. 2
      sapl/protocoloadm/apps.py
  55. 35
      sapl/protocoloadm/forms.py
  56. 2
      sapl/protocoloadm/models.py
  57. 2
      sapl/protocoloadm/tests/test_protocoloadm.py
  58. 2
      sapl/protocoloadm/views.py
  59. 2
      sapl/redireciona_urls/apps.py
  60. 2
      sapl/redireciona_urls/exceptions.py
  61. 2
      sapl/relatorios/apps.py
  62. 2
      sapl/relatorios/views.py
  63. 2
      sapl/rules/__init__.py
  64. 10
      sapl/rules/apps.py
  65. 2
      sapl/rules/tests/test_rules.py
  66. 2
      sapl/sessao/apps.py
  67. 2
      sapl/sessao/forms.py
  68. 2
      sapl/sessao/models.py
  69. 2
      sapl/sessao/tests/test_sessao.py
  70. 2
      sapl/sessao/tests/test_sessao_view.py
  71. 2
      sapl/sessao/views.py
  72. 2
      sapl/templates/ajuda.html
  73. 2
      sapl/templates/ajuda/acessando_alimenta.html
  74. 2
      sapl/templates/ajuda/acomp_materia.html
  75. 2
      sapl/templates/ajuda/anexos.html
  76. 2
      sapl/templates/ajuda/autor.html
  77. 2
      sapl/templates/ajuda/cadastro_comissoes.html
  78. 2
      sapl/templates/ajuda/cadastro_materia.html
  79. 2
      sapl/templates/ajuda/cadastro_mesa_diretora.html
  80. 2
      sapl/templates/ajuda/cadastro_parlamentares.html
  81. 2
      sapl/templates/ajuda/cargo_comissao.html
  82. 2
      sapl/templates/ajuda/cargo_mesa.html
  83. 2
      sapl/templates/ajuda/casa_legislativa.html
  84. 2
      sapl/templates/ajuda/coligacao.html
  85. 2
      sapl/templates/ajuda/consultas.html
  86. 2
      sapl/templates/ajuda/dependentes.html
  87. 2
      sapl/templates/ajuda/despacho_autoria.html
  88. 2
      sapl/templates/ajuda/envio_proposicao.html
  89. 2
      sapl/templates/ajuda/filiacoes_partidarias.html
  90. 2
      sapl/templates/ajuda/fim_relatoria.html
  91. 2
      sapl/templates/ajuda/gerenciamento_usuarios.html
  92. 2
      sapl/templates/ajuda/glossario.html
  93. 2
      sapl/templates/ajuda/impressos.html
  94. 2
      sapl/templates/ajuda/legislacao_cita_matanexada.html
  95. 2
      sapl/templates/ajuda/legislatura.html
  96. 2
      sapl/templates/ajuda/lexml.html
  97. 2
      sapl/templates/ajuda/mandatos_parlamentar.html
  98. 2
      sapl/templates/ajuda/materia_anexada.html
  99. 2
      sapl/templates/ajuda/modulo_comissoes.html
  100. 2
      sapl/templates/ajuda/modulo_mesa_diretora.html

2
sapl/api/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/api/forms.py

@ -2,7 +2,7 @@ from django.db.models import Q
from django.forms.fields import CharField, MultiValueField
from django.forms.widgets import MultiWidget, TextInput
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from django_filters.filters import DateFilter, MethodFilter, ModelChoiceFilter
from rest_framework import serializers
from rest_framework.compat import django_filters

2
sapl/api/views.py

@ -1,7 +1,7 @@
from django.contrib.contenttypes.models import ContentType
from django.db.models import Q
from django.http import Http404
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from rest_framework.filters import DjangoFilterBackend
from rest_framework.generics import ListAPIView
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin

2
sapl/audiencia/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/audiencia/forms.py

@ -1,7 +1,7 @@
from django import forms
from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.db import transaction
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.utils import timezone

2
sapl/audiencia/models.py

@ -1,6 +1,6 @@
import reversion
from django.db import models
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from model_utils import Choices
from sapl.materia.models import MateriaLegislativa
from sapl.parlamentares.models import (CargoMesa, Parlamentar)

2
sapl/audiencia/tests/test_audiencia.py

@ -1,5 +1,5 @@
import pytest
from django.utils.translation import ugettext as _
from sapl.translation import ugettext as _
from model_mommy import mommy
from sapl.audiencia import forms

2
sapl/base/admin.py

@ -1,7 +1,7 @@
from django.contrib import admin
from django.core.urlresolvers import reverse
from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from reversion.models import Revision
from sapl.utils import register_all_models_in_admin

2
sapl/base/apps.py

@ -1,6 +1,6 @@
import django
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(django.apps.AppConfig):

2
sapl/base/forms.py

@ -11,7 +11,7 @@ from django.contrib.auth.models import Group, User
from django.core.exceptions import ValidationError
from django.db import models, transaction
from django.forms import Form, ModelForm
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from django.utils.translation import string_concat
from sapl.base.models import Autor, TipoAutor

34
sapl/base/migrations/0021_auto_20180825_1713.py

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-08-25 20:13
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0020_auto_20180821_1421'),
]
operations = [
migrations.CreateModel(
name='ExpressaoTextual',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('bind', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Expressão encontrada no SAPL')),
('value', models.CharField(max_length=10000, unique=True, verbose_name='Expressão Oficial')),
('custom', models.CharField(blank=True, default='', max_length=10000, verbose_name='Expressão Customizada')),
],
options={
'verbose_name': 'Expressão Textual do SAPL',
'verbose_name_plural': 'Expressões Textuais do SAPL',
'ordering': ('value',),
},
),
migrations.AlterField(
model_name='casalegislativa',
name='codigo',
field=models.CharField(blank=True, max_length=100, verbose_name='Código'),
),
]

25
sapl/base/migrations/0022_auto_20180825_1716.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-08-25 20:16
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0021_auto_20180825_1713'),
]
operations = [
migrations.AlterField(
model_name='expressaotextual',
name='custom',
field=models.TextField(blank=True, default='', verbose_name='Expressão Customizada'),
),
migrations.AlterField(
model_name='expressaotextual',
name='value',
field=models.TextField(unique=True, verbose_name='Expressão Oficial'),
),
]

42
sapl/base/models.py

@ -1,14 +1,15 @@
import reversion
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.db.models.signals import post_migrate
from django.db.utils import DEFAULT_DB_ALIAS
from django.utils.translation import ugettext_lazy as _
import reversion
from sapl.translation import ugettext_lazy as _
from sapl.utils import (LISTA_DE_UFS, YES_NO_CHOICES,
get_settings_auth_user_model, models_with_gr_for_model)
TIPO_DOCUMENTO_ADMINISTRATIVO = (('O', _('Ostensiva')),
('R', _('Restritiva')))
@ -24,7 +25,7 @@ class CasaLegislativa(models.Model):
codigo = models.CharField(max_length=100,
blank=True,
verbose_name=_('Codigo'))
verbose_name=_('Código'))
nome = models.CharField(max_length=100, verbose_name=_('Nome'))
sigla = models.CharField(max_length=100, verbose_name=_('Sigla'))
endereco = models.CharField(max_length=100, verbose_name=_('Endereço'))
@ -59,6 +60,27 @@ class CasaLegislativa(models.Model):
'municipio': self.municipio}
class ExpressaoTextual(models.Model):
bind = models.BooleanField(
verbose_name=_('Expressão encontrada no SAPL'),
choices=YES_NO_CHOICES, default=False)
value = models.TextField(
unique=True,
verbose_name=_('Expressão Oficial'), blank=False, null=False)
custom = models.TextField(
verbose_name=_('Expressão Customizada'), blank=True, default='')
class Meta:
verbose_name = _('Expressão Textual do SAPL')
verbose_name_plural = _('Expressões Textuais do SAPL')
ordering = ('value',)
def __str__(self):
return self.value
@reversion.register()
class AppConfig(models.Model):
@ -127,6 +149,20 @@ class AppConfig(models.Model):
verbose_name=_('Protocolar proposição somente com recibo?'),
choices=YES_NO_CHOICES, default=True)
"""normajuridica_verbose_name = models.CharField(
max_length=100,
blank=False,
null=False,
default=_('Norma Jurídica'),
verbose_name=_('Customizar a expressão Norma Jurídica'))
verbose_name_plural = models.CharField(
max_length=100,
blank=False,
null=False,
default=_('Norma Jurídica'),
verbose_name=_('Customizar a expressão Norma Jurídica'))"""
class Meta:
verbose_name = _('Configurações da Aplicação')
verbose_name_plural = _('Configurações da Aplicação')

15
sapl/base/templatetags/i18n_sapl.py

@ -0,0 +1,15 @@
from django.templatetags.i18n import *
from django.utils.encoding import force_text
from sapl.translation import sapl_expressions
@register.tag("trans")
def do_translate_sapl(parser, token):
trans = do_translate(parser, token)
return sapl_expressions.swap_translate(trans)
@register.tag("blocktrans")
def do_block_translate_sapl(parser, token):
block_trans = do_block_translate(parser, token)
return sapl_expressions.swap_block_translate(block_trans)

2
sapl/base/templatetags/menus.py

@ -1,7 +1,7 @@
import yaml
from django import template
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl.utils import sapl_logger

2
sapl/base/tests/test_form.py

@ -1,5 +1,5 @@
import pytest
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl.base.forms import CasaLegislativaForm

2
sapl/base/tests/test_view_base.py

@ -1,6 +1,6 @@
import pytest
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
@pytest.mark.django_db(transaction=False)

14
sapl/base/urls.py

@ -8,7 +8,8 @@ from django.contrib.auth.views import (password_reset, password_reset_complete,
password_reset_done)
from django.views.generic.base import RedirectView, TemplateView
from sapl.base.views import AutorCrud, ConfirmarEmailView, TipoAutorCrud
from sapl.base.views import AutorCrud, ConfirmarEmailView, TipoAutorCrud,\
ExpressaoTextualCrud
from sapl.settings import EMAIL_SEND_USER, MEDIA_URL
from .apps import AppConfig
@ -27,9 +28,12 @@ app_name = AppConfig.name
admin_user = [
url(r'^sistema/usuario/$', ListarUsuarioView.as_view(), name='user_list'),
url(r'^sistema/usuario/create$', CreateUsuarioView.as_view(), name='user_create'),
url(r'^sistema/usuario/(?P<pk>\d+)/edit$', EditUsuarioView.as_view(), name='user_edit'),
url(r'^sistema/usuario/(?P<pk>\d+)/delete$', DeleteUsuarioView.as_view(), name='user_delete')
url(r'^sistema/usuario/create$',
CreateUsuarioView.as_view(), name='user_create'),
url(r'^sistema/usuario/(?P<pk>\d+)/edit$',
EditUsuarioView.as_view(), name='user_edit'),
url(r'^sistema/usuario/(?P<pk>\d+)/delete$',
DeleteUsuarioView.as_view(), name='user_delete')
]
alterar_senha = [
@ -70,6 +74,8 @@ recuperar_senha = [
urlpatterns = [
url(r'^sistema/expressao-textual/', include(ExpressaoTextualCrud.get_urls())),
url(r'^sistema/autor/tipo/', include(TipoAutorCrud.get_urls())),
url(r'^sistema/autor/', include(AutorCrud.get_urls())),

34
sapl/base/views.py

@ -13,7 +13,6 @@ from django.template import TemplateDoesNotExist
from django.template.loader import get_template
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import string_concat
from django.views.generic import (CreateView, DeleteView, FormView, ListView,
UpdateView)
@ -23,12 +22,14 @@ from haystack.views import SearchView
from sapl import settings
from sapl.base.forms import AutorForm, AutorFormForAdmin, TipoAutorForm
from sapl.base.models import Autor, TipoAutor
from sapl.crud.base import CrudAux, make_pagination
from sapl.base.models import Autor, TipoAutor, ExpressaoTextual
from sapl.crud.base import CrudAux, make_pagination, Crud
from sapl.materia.models import (Autoria, MateriaLegislativa,
TipoMateriaLegislativa)
from sapl.rules.apps import AppConfig as RulesAppConfig
from sapl.sessao.models import (PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca)
from sapl.translation import ugettext_lazy as _, sapl_expressions
from sapl.utils import (parlamentares_ativos, sapl_logger,
show_results_filter_set)
@ -60,6 +61,33 @@ class ConfirmarEmailView(TemplateView):
return self.render_to_response(context)
class ExpressaoTextualCrud(Crud):
model = ExpressaoTextual
CreateView = None
DeleteView = None
class BaseMixin(Crud.BaseMixin):
list_field_names = ['value', 'custom']
create_url = ''
delete_url = ''
cancel_url = Crud.BaseMixin.list_url
class UpdateView(Crud.UpdateView):
def post(self, request, *args, **kwargs):
response = Crud.UpdateView.post(self, request, *args, **kwargs)
sapl_expressions.rebuild_expressao(self.object)
return response
class DetailView(Crud.DetailView):
def get(self, request, *args, **kwargs):
return HttpResponseRedirect(
reverse('sapl.base:expressaotextual_update', kwargs=kwargs))
class ListView(Crud.ListView):
paginate_by = 30
class TipoAutorCrud(CrudAux):
model = TipoAutor
help_topic = 'tipo-autor'

2
sapl/comissoes/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/comissoes/forms.py

@ -4,7 +4,7 @@ from django.core.exceptions import ValidationError
from django.db import transaction
from django.db.models import Q
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl.base.models import Autor, TipoAutor
from sapl.comissoes.models import (Comissao, Composicao, DocumentoAcessorio,

2
sapl/comissoes/models.py

@ -1,6 +1,6 @@
import reversion
from django.db import models
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from model_utils import Choices
from sapl.base.models import Autor

2
sapl/comissoes/tests/test_comissoes.py

@ -1,6 +1,6 @@
import pytest
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _
from sapl.translation import ugettext as _
from model_mommy import mommy
from sapl.comissoes.models import Comissao, Composicao, Periodo, TipoComissao, Reuniao

2
sapl/compilacao/apps.py

@ -4,7 +4,7 @@ from django import apps
from django.conf import settings
from django.db import connection, models
from django.db.utils import DEFAULT_DB_ALIAS, IntegrityError
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from django.utils.translation import string_concat
from sapl.settings import BASE_DIR

2
sapl/compilacao/forms.py

@ -13,7 +13,7 @@ from django.forms import widgets
from django.forms.forms import Form
from django.forms.models import ModelForm
from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl import utils
from sapl.compilacao.models import (NOTAS_PUBLICIDADE_CHOICES,

2
sapl/compilacao/models.py

@ -11,7 +11,7 @@ from django.template import defaultfilters
from django.utils import timezone
from django.utils.decorators import classonlymethod
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
import reversion
from sapl.compilacao.utils import (get_integrations_view_names, int_to_letter,

2
sapl/compilacao/templatetags/compilacao_filters.py

@ -3,7 +3,7 @@ from django import template
from django.core.signing import Signer
from django.db.models import Q
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl.compilacao.models import Dispositivo

2
sapl/compilacao/tests/test_tipo_texto_articulado_form.py

@ -1,5 +1,5 @@
import pytest
from django.utils.translation import ugettext as _
from sapl.translation import ugettext as _
from model_mommy import mommy
from sapl.compilacao import forms

2
sapl/compilacao/views.py

@ -20,7 +20,7 @@ from django.shortcuts import get_object_or_404, redirect
from django.utils.dateparse import parse_date
from django.utils.encoding import force_text
from django.utils.translation import string_concat
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from django.views.generic.base import TemplateView
from django.views.generic.detail import DetailView
from django.views.generic.edit import (CreateView, DeleteView, FormView,

5
sapl/crispy_layout_mixin.py

@ -1,13 +1,14 @@
from math import ceil
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.core.urlresolvers import reverse, reverse_lazy
from django.utils import formats
from django.utils.translation import ugettext as _
import rtyaml
from sapl.translation import ugettext_lazy as _
def heads_and_tails(list_of_lists):

2
sapl/crud/base.py

@ -17,7 +17,7 @@ from django.http.response import Http404
from django.shortcuts import redirect
from django.utils.decorators import classonlymethod
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from django.utils.translation import string_concat
from django.views.generic import (CreateView, DeleteView, DetailView, ListView,
UpdateView)

2
sapl/decorators.py

@ -1,7 +1,7 @@
from functools import wraps
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
def vigencia_atual(decorated_method):

2
sapl/lexml/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/lexml/models.py

@ -1,6 +1,6 @@
import reversion
from django.db import models
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
@reversion.register()

2
sapl/materia/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/materia/forms.py

@ -21,7 +21,7 @@ from django.utils import timezone
from django.utils.encoding import force_text
from django.utils.html import format_html
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
import sapl
from sapl.base.models import AppConfig, Autor, TipoAutor

2
sapl/materia/models.py

@ -7,7 +7,7 @@ from django.db import models
from django.db.models.functions import Concat
from django.template import defaultfilters
from django.utils import formats, timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from model_utils import Choices
import reversion

2
sapl/materia/tests/test_materia_form.py

@ -1,5 +1,5 @@
import pytest
from django.utils.translation import ugettext as _
from sapl.translation import ugettext as _
from model_mommy import mommy
from sapl.materia import forms

2
sapl/materia/views.py

@ -15,7 +15,7 @@ from django.http.response import Http404, HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect
from django.template import RequestContext, loader
from django.utils import formats, timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from django.views.generic import ListView, TemplateView, CreateView, UpdateView
from django.views.generic.base import RedirectView
from django.views.generic.edit import FormView

2
sapl/norma/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/norma/forms.py

@ -7,7 +7,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.db import models
from django.forms import ModelForm, widgets
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl.crispy_layout_mixin import form_actions, to_row
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa

30
sapl/norma/migrations/0013_auto_20180824_2301.py

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-08-25 02:01
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('norma', '0012_anexonormajuridica'),
]
operations = [
migrations.AlterModelOptions(
name='anexonormajuridica',
options={'verbose_name': 'Anexo da Norma Jurídica', 'verbose_name_plural': 'Anexos da Norma Jurídica'},
),
migrations.AlterField(
model_name='anexonormajuridica',
name='norma',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='norma', to='norma.NormaJuridica', verbose_name='Norma Jurídica'),
),
migrations.AlterField(
model_name='normajuridica',
name='tipo',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='norma.TipoNormaJuridica', verbose_name='Tipo da Norma Jurídica'),
),
]

10
sapl/norma/models.py

@ -1,12 +1,12 @@
from django.contrib.contenttypes.fields import GenericRelation
from django.db import models
from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _
from model_utils import Choices
import reversion
from sapl.compilacao.models import TextoArticulado
from sapl.materia.models import MateriaLegislativa
from sapl.translation import ugettext_lazy as _
from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES,
restringe_tipos_de_arquivo_txt, texto_upload_path)
@ -82,7 +82,7 @@ class NormaJuridica(models.Model):
tipo = models.ForeignKey(
TipoNormaJuridica,
on_delete=models.PROTECT,
verbose_name=_('Tipo da Norma Juridica'))
verbose_name=_('Tipo da Norma Jurídica'))
materia = models.ForeignKey(
MateriaLegislativa, blank=True, null=True,
on_delete=models.PROTECT, verbose_name=_('Matéria'))
@ -271,7 +271,7 @@ class AnexoNormaJuridica(models.Model):
NormaJuridica,
related_name='norma',
on_delete=models.PROTECT,
verbose_name=_('Norma Juridica'))
verbose_name=_('Norma Jurídica'))
anexo_arquivo = models.FileField(
blank=True,
null=True,
@ -282,8 +282,8 @@ class AnexoNormaJuridica(models.Model):
choices=RANGE_ANOS)
class Meta:
verbose_name = _('Anexo da Norma Juridica')
verbose_name_plural = _('Anexos da Norma Juridica')
verbose_name = _('Anexo da Norma Jurídica')
verbose_name_plural = _('Anexos da Norma Jurídica')
def __str__(self):
return _('Anexo: %(anexo)s da norma %(norma)s') % {

2
sapl/norma/tests/test_norma.py

@ -1,6 +1,6 @@
import pytest
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from model_mommy import mommy
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa

2
sapl/norma/views.py

@ -7,7 +7,7 @@ from django.core.urlresolvers import reverse
from django.http import HttpResponse, JsonResponse
from django.template import RequestContext, loader
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from django.views.generic import TemplateView, UpdateView
from django.views.generic.base import RedirectView
from django.views.generic.edit import FormView

2
sapl/painel/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/painel/models.py

@ -1,6 +1,6 @@
import reversion
from django.db import models
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
@reversion.register()

2
sapl/painel/views.py

@ -10,7 +10,7 @@ from django.http import HttpResponse, JsonResponse
from django.http.response import Http404, HttpResponseRedirect
from django.shortcuts import render
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl.base.models import AppConfig as ConfiguracoesAplicacao
from sapl.base.models import CasaLegislativa

2
sapl/parlamentares/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/parlamentares/forms.py

@ -11,7 +11,7 @@ from django.db import transaction
from django.db.models import Q
from django.forms import ModelForm
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from floppyforms.widgets import ClearableFileInput
from image_cropping.widgets import CropWidget, ImageCropWidget

2
sapl/parlamentares/models.py

@ -2,7 +2,7 @@
import reversion
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from image_cropping.fields import ImageCropField, ImageRatioField
from model_utils import Choices

2
sapl/parlamentares/tests/test_parlamentares.py

@ -1,6 +1,6 @@
import pytest
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from model_mommy import mommy
from sapl.parlamentares.forms import FrenteForm, LegislaturaForm, MandatoForm

2
sapl/parlamentares/views.py

@ -12,7 +12,7 @@ from django.http.response import HttpResponseRedirect
from django.templatetags.static import static
from django.utils import timezone
from django.utils.datastructures import MultiValueDictKeyError
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from django.views.decorators.clickjacking import xframe_options_exempt
from django.views.generic import FormView
from django.views.generic.edit import UpdateView

2
sapl/protocoloadm/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

35
sapl/protocoloadm/forms.py

@ -1,5 +1,4 @@
import django_filters
from crispy_forms.bootstrap import InlineRadios
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button, Fieldset, Layout
@ -10,12 +9,13 @@ from django.db import models
from django.db.models import Max
from django.forms import ModelForm
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
import django_filters
from sapl.base.models import Autor, TipoAutor
from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row
from sapl.materia.models import (MateriaLegislativa, TipoMateriaLegislativa,
UnidadeTramitacao)
from sapl.translation import ugettext_lazy as _
from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, AnoNumeroOrderingFilter,
RangeWidgetOverride, autor_label, autor_modal)
@ -23,8 +23,11 @@ from .models import (DocumentoAcessorioAdministrativo, DocumentoAdministrativo,
Protocolo, TipoDocumentoAdministrativo,
TramitacaoAdministrativo)
TIPOS_PROTOCOLO = [('0', 'Recebido'), ('1', 'Enviado'), ('2', 'Interno'), ('', '---------')]
TIPOS_PROTOCOLO_CREATE = [('0', 'Recebido'), ('1', 'Enviado'), ('2', 'Interno')]
TIPOS_PROTOCOLO = [('0', 'Recebido'), ('1', 'Enviado'),
('2', 'Interno'), ('', '---------')]
TIPOS_PROTOCOLO_CREATE = [
('0', 'Recebido'), ('1', 'Enviado'), ('2', 'Interno')]
NATUREZA_PROCESSO = [('', '---------'),
('0', 'Administrativo'),
@ -142,7 +145,7 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
choices=ANO_CHOICES)
tramitacao = django_filters.ChoiceFilter(required=False,
label='Em Tramitação?',
label=_('Em Tramitação?'),
choices=EM_TRAMITACAO)
assunto = django_filters.CharFilter(lookup_expr='icontains')
@ -197,16 +200,15 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
Fieldset(_('Pesquisar Documento'),
row1, row2,
row3, row4, row5,
form_actions(label='Pesquisar'))
form_actions(label=_('Pesquisar')))
)
class AnularProcoloAdmForm(ModelForm):
numero = forms.CharField(required=True,
label=Protocolo._meta.
get_field('numero').verbose_name
)
label=Protocolo._meta.get_field(
'numero').verbose_name)
ano = forms.ChoiceField(required=True,
label=Protocolo._meta.
get_field('ano').verbose_name,
@ -312,7 +314,8 @@ class ProtocoloDocumentForm(ModelForm):
observacao = forms.CharField(required=False,
widget=forms.Textarea, label='Observação')
numero = forms.IntegerField(required=False, label='Número de Protocolo (opcional)')
numero = forms.IntegerField(
required=False, label='Número de Protocolo (opcional)')
class Meta:
model = Protocolo
@ -399,7 +402,8 @@ class ProtocoloMateriaForm(ModelForm):
assunto_ementa = forms.CharField(required=True,
widget=forms.Textarea, label='Ementa')
numero = forms.IntegerField(required=False, label='Número de Protocolo (opcional)')
numero = forms.IntegerField(
required=False, label='Número de Protocolo (opcional)')
class Meta:
model = Protocolo
@ -445,7 +449,8 @@ class ProtocoloMateriaForm(ModelForm):
raise ValidationError(_('Matéria Legislativa informada já possui o protocolo {}/{} vinculado.'
.format(self.materia.numero_protocolo, self.materia.ano)))
except ObjectDoesNotExist:
raise ValidationError(_('Matéria Legislativa informada não existente.'))
raise ValidationError(
_('Matéria Legislativa informada não existente.'))
return data
@ -786,7 +791,8 @@ class DesvincularDocumentoForm(ModelForm):
tipo = cleaned_data['tipo']
try:
documento = DocumentoAdministrativo.objects.get(numero=numero, ano=ano, tipo=tipo)
documento = DocumentoAdministrativo.objects.get(
numero=numero, ano=ano, tipo=tipo)
if not documento.protocolo:
raise forms.ValidationError(
_("%s %s/%s não se encontra vinculado a nenhum protocolo" % (tipo, numero, ano)))
@ -848,7 +854,8 @@ class DesvincularMateriaForm(forms.Form):
tipo = cleaned_data['tipo']
try:
materia = MateriaLegislativa.objects.get(numero=numero, ano=ano, tipo=tipo)
materia = MateriaLegislativa.objects.get(
numero=numero, ano=ano, tipo=tipo)
if not materia.numero_protocolo:
raise forms.ValidationError(
_("%s %s/%s não se encontra vinculada a nenhum protocolo" % (tipo, numero, ano)))

2
sapl/protocoloadm/models.py

@ -1,7 +1,7 @@
import reversion
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from model_utils import Choices
from sapl.base.models import Autor

2
sapl/protocoloadm/tests/test_protocoloadm.py

@ -3,7 +3,7 @@ from datetime import date, timedelta
import pytest
from django.core.urlresolvers import reverse
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from model_mommy import mommy
from sapl.materia.models import UnidadeTramitacao

2
sapl/protocoloadm/views.py

@ -11,7 +11,7 @@ from django.http import Http404, HttpResponse, JsonResponse
from django.http.response import HttpResponseRedirect
from django.shortcuts import redirect
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from django.views.generic import ListView, CreateView
from django.views.generic.base import RedirectView, TemplateView
from django.views.generic.edit import FormView

2
sapl/redireciona_urls/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/redireciona_urls/exceptions.py

@ -1,4 +1,4 @@
from django.utils.translation import ugettext as _
from sapl.translation import ugettext_lazy as _
class UnknownUrlNameError(Exception):

2
sapl/relatorios/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/relatorios/views.py

@ -5,7 +5,7 @@ from datetime import datetime as dt
from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404, HttpResponse
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl.base.models import Autor, CasaLegislativa
from sapl.comissoes.models import Comissao

2
sapl/rules/__init__.py

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
default_app_config = 'sapl.rules.apps.AppConfig'

10
sapl/rules/apps.py

@ -1,23 +1,23 @@
from builtins import LookupError
import sys
import django
from django.apps import apps
from django import apps
from django.contrib.auth import get_user_model
from django.contrib.auth.management import _get_all_permissions
from django.core import exceptions
from django.db import models, router
from django.db.utils import DEFAULT_DB_ALIAS
from django.utils.translation import string_concat
from django.utils.translation import ugettext_lazy as _
import reversion
from sapl.rules import (SAPL_GROUP_ADMINISTRATIVO, SAPL_GROUP_COMISSOES,
SAPL_GROUP_GERAL, SAPL_GROUP_MATERIA, SAPL_GROUP_NORMA,
SAPL_GROUP_PAINEL, SAPL_GROUP_PROTOCOLO,
SAPL_GROUP_SESSAO)
from sapl.translation import ugettext_lazy as _
class AppConfig(django.apps.AppConfig):
class AppConfig(apps.AppConfig):
name = 'sapl.rules'
label = 'rules'
verbose_name = _('Regras de Acesso')
@ -32,7 +32,7 @@ def create_proxy_permissions(
# print(app_config)
try:
Permission = apps.get_model('auth', 'Permission')
Permission = apps.apps.get_model('auth', 'Permission')
except LookupError:
return

2
sapl/rules/tests/test_rules.py

@ -4,7 +4,7 @@ from django.conf import settings
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from django.utils import six
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl.base.models import CasaLegislativa
from sapl.compilacao.models import (PerfilEstruturalTextoArticulado,

2
sapl/sessao/apps.py

@ -1,5 +1,5 @@
from django import apps
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):

2
sapl/sessao/forms.py

@ -8,7 +8,7 @@ from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.db import transaction
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from sapl.base.models import Autor, TipoAutor
from sapl.crispy_layout_mixin import form_actions, to_row

2
sapl/sessao/models.py

@ -3,7 +3,7 @@ from operator import xor
import reversion
from django.core.exceptions import ValidationError
from django.db import models
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from model_utils import Choices
from sapl.base.models import Autor

2
sapl/sessao/tests/test_sessao.py

@ -1,7 +1,7 @@
import pytest
from datetime import datetime
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from model_mommy import mommy
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa

2
sapl/sessao/tests/test_sessao_view.py

@ -1,6 +1,6 @@
import pytest
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from model_mommy import mommy
from sapl.parlamentares.models import Legislatura, SessaoLegislativa

2
sapl/sessao/views.py

@ -14,7 +14,7 @@ from django.utils import timezone
from django.utils.datastructures import MultiValueDictKeyError
from django.utils.decorators import method_decorator
from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _
from sapl.translation import ugettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import FormView, ListView, TemplateView, CreateView, UpdateView
from django.views.generic.base import RedirectView

2
sapl/templates/ajuda.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n crispy_forms_tags %}
{% load i18n_sapl crispy_forms_tags %}
{% block base_content %}
<div class="conteudo">

2
sapl/templates/ajuda/acessando_alimenta.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/acomp_materia.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/anexos.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n crispy_forms_tags %}
{% load i18n_sapl crispy_forms_tags %}
{% block base_content %}

2
sapl/templates/ajuda/autor.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/cadastro_comissoes.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/cadastro_materia.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/cadastro_mesa_diretora.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/cadastro_parlamentares.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/cargo_comissao.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/cargo_mesa.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/casa_legislativa.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/coligacao.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/consultas.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/dependentes.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/despacho_autoria.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/envio_proposicao.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/filiacoes_partidarias.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/fim_relatoria.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/gerenciamento_usuarios.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/glossario.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/impressos.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/legislacao_cita_matanexada.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/legislatura.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/lexml.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/mandatos_parlamentar.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/materia_anexada.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/modulo_comissoes.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

2
sapl/templates/ajuda/modulo_mesa_diretora.html

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n %}
{% load i18n_sapl %}
{% block base_content %}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save