Browse Source

Merge branch '3.1.x' into docker-refactoring

pull/3787/head
Edward 2 months ago
committed by GitHub
parent
commit
105ba2861d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 3
      frontend/src/__global/scss/layouts/_globals.scss
  2. 490
      frontend/webpack-stats.json
  3. 1
      sapl/base/apps.py
  4. 23
      sapl/materia/views.py
  5. 7
      sapl/norma/views.py
  6. 8
      sapl/protocoloadm/views.py
  7. 71
      sapl/relatorios/forms.py
  8. 8
      sapl/relatorios/urls.py
  9. 78
      sapl/relatorios/views.py
  10. 13
      sapl/sessao/models.py
  11. 42
      sapl/sessao/views.py
  12. BIN
      sapl/static/sapl/frontend/css/chunk-vendors.045ec640.css.gz
  13. BIN
      sapl/static/sapl/frontend/css/compilacao.0baf3580.css.gz
  14. 2
      sapl/static/sapl/frontend/css/global.042f6737.css
  15. BIN
      sapl/static/sapl/frontend/css/global.042f6737.css.gz
  16. BIN
      sapl/static/sapl/frontend/css/painel.e2b9504e.css.gz
  17. BIN
      sapl/static/sapl/frontend/fonts/fa-brands-400.5d18d427.ttf.gz
  18. BIN
      sapl/static/sapl/frontend/fonts/fa-regular-400.81482cd4.ttf.gz
  19. BIN
      sapl/static/sapl/frontend/fonts/fa-solid-900.69d3141a.ttf.gz
  20. BIN
      sapl/static/sapl/frontend/fonts/fa-v4compatibility.2c070fd2.ttf.gz
  21. BIN
      sapl/static/sapl/frontend/img/down_arrow_select.jpg.gz
  22. BIN
      sapl/static/sapl/frontend/js/chunk-vendors.e8ab4373.js.LICENSE.txt.gz
  23. BIN
      sapl/static/sapl/frontend/js/chunk-vendors.e8ab4373.js.gz
  24. 0
      sapl/static/sapl/frontend/js/compilacao.148cb66b.js
  25. BIN
      sapl/static/sapl/frontend/js/compilacao.148cb66b.js.gz
  26. BIN
      sapl/static/sapl/frontend/js/global.8ef6e932.js.gz
  27. 2
      sapl/static/sapl/frontend/js/global.bb3e904b.js
  28. 0
      sapl/static/sapl/frontend/js/global.bb3e904b.js.LICENSE.txt
  29. BIN
      sapl/static/sapl/frontend/js/global.bb3e904b.js.gz
  30. 0
      sapl/static/sapl/frontend/js/painel.f3190acc.js
  31. BIN
      sapl/static/sapl/frontend/js/painel.f3190acc.js.gz
  32. 0
      sapl/static/sapl/frontend/js/parlamentar.a1a4b65b.js
  33. BIN
      sapl/static/sapl/frontend/js/parlamentar.a1a4b65b.js.gz
  34. BIN
      sapl/static/sapl/frontend/js/skins/content/dark/content.css.gz
  35. BIN
      sapl/static/sapl/frontend/js/skins/content/dark/content.js.gz
  36. BIN
      sapl/static/sapl/frontend/js/skins/content/dark/content.min.css.gz
  37. BIN
      sapl/static/sapl/frontend/js/skins/content/default/content.css.gz
  38. BIN
      sapl/static/sapl/frontend/js/skins/content/default/content.js.gz
  39. BIN
      sapl/static/sapl/frontend/js/skins/content/default/content.min.css.gz
  40. BIN
      sapl/static/sapl/frontend/js/skins/content/document/content.css.gz
  41. BIN
      sapl/static/sapl/frontend/js/skins/content/document/content.js.gz
  42. BIN
      sapl/static/sapl/frontend/js/skins/content/document/content.min.css.gz
  43. BIN
      sapl/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.css.gz
  44. BIN
      sapl/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.js.gz
  45. BIN
      sapl/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.min.css.gz
  46. BIN
      sapl/static/sapl/frontend/js/skins/content/tinymce-5/content.css.gz
  47. BIN
      sapl/static/sapl/frontend/js/skins/content/tinymce-5/content.js.gz
  48. BIN
      sapl/static/sapl/frontend/js/skins/content/tinymce-5/content.min.css.gz
  49. BIN
      sapl/static/sapl/frontend/js/skins/content/writer/content.css.gz
  50. BIN
      sapl/static/sapl/frontend/js/skins/content/writer/content.js.gz
  51. BIN
      sapl/static/sapl/frontend/js/skins/content/writer/content.min.css.gz
  52. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.css.gz
  53. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.css.gz
  54. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.js.gz
  55. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.min.css.gz
  56. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.js.gz
  57. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.min.css.gz
  58. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.css.gz
  59. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.js.gz
  60. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.min.css.gz
  61. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.css.gz
  62. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.js.gz
  63. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.min.css.gz
  64. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/content.css.gz
  65. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/content.inline.css.gz
  66. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/content.inline.js.gz
  67. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/content.inline.min.css.gz
  68. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/content.js.gz
  69. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/content.min.css.gz
  70. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/skin.css.gz
  71. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/skin.js.gz
  72. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/skin.min.css.gz
  73. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.css.gz
  74. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.js.gz
  75. BIN
      sapl/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.min.css.gz
  76. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.css.gz
  77. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.css.gz
  78. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.js.gz
  79. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.min.css.gz
  80. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.js.gz
  81. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.min.css.gz
  82. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.css.gz
  83. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.js.gz
  84. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.min.css.gz
  85. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.css.gz
  86. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.js.gz
  87. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css.gz
  88. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.css.gz
  89. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.css.gz
  90. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.js.gz
  91. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.min.css.gz
  92. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.js.gz
  93. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.min.css.gz
  94. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.css.gz
  95. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.js.gz
  96. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.min.css.gz
  97. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.css.gz
  98. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.js.gz
  99. BIN
      sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.min.css.gz
  100. 2
      sapl/templates/base.html

3
frontend/src/__global/scss/layouts/_globals.scss

@ -187,4 +187,7 @@ small {
a[href]:after { a[href]:after {
content: none !important; content: none !important;
} }
.btn-vlibras {
display: none !important;
}
} }

490
frontend/webpack-stats.json

File diff suppressed because it is too large

1
sapl/base/apps.py

@ -1,4 +1,3 @@
import django import django
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _

23
sapl/materia/views.py

@ -2045,22 +2045,29 @@ class MateriaLegislativaPesquisaView(MultiFormatOutputMixin, FilterView):
filterset_class = MateriaLegislativaFilterSet filterset_class = MateriaLegislativaFilterSet
paginate_by = 50 paginate_by = 50
fields_base_report = [ export_fields = [
'id', 'ano', 'numero', 'tipo__sigla', 'tipo__descricao', 'autoria__autor__nome', 'texto_original', 'ementa' 'id', 'ano', 'numero', 'tipo__sigla', 'tipo__descricao', 'autoria', 'texto_original', 'ementa'
] ]
fields_report = {
'csv': fields_base_report,
'xlsx': fields_base_report,
'json': fields_base_report,
}
def hook_texto_original(self, obj): def hook_texto_original(self, obj):
url = self.request.build_absolute_uri('/')[:-1] url = self.request.build_absolute_uri('/')[:-1]
texto_original = obj.texto_original if not isinstance( texto_original = obj.texto_original if not isinstance(
obj, dict) else obj["texto_original"] obj, dict) else obj["texto_original"]
return f'{url}/media/{texto_original}' return f'{url}/media/{texto_original}'
def hook_autoria(self, obj):
"""
Hook específico para pegar nomes dos autores (reverse query)
"""
try:
autores = [
str(autoria.autor.nome)
for autoria in obj.autoria_set.select_related('autor').all()
]
return ', '.join(autores)
except AttributeError:
return ''
def get_filterset_kwargs(self, filterset_class): def get_filterset_kwargs(self, filterset_class):
super().get_filterset_kwargs(filterset_class) super().get_filterset_kwargs(filterset_class)

7
sapl/norma/views.py

@ -152,14 +152,9 @@ class NormaPesquisaView(MultiFormatOutputMixin, FilterView):
filterset_class = NormaFilterSet filterset_class = NormaFilterSet
paginate_by = 50 paginate_by = 50
fields_base_report = [ export_fields = [
'id', 'ano', 'numero', 'tipo__sigla', 'tipo__descricao', 'texto_integral', 'ementa' 'id', 'ano', 'numero', 'tipo__sigla', 'tipo__descricao', 'texto_integral', 'ementa'
] ]
fields_report = {
'csv': fields_base_report,
'xlsx': fields_base_report,
'json': fields_base_report,
}
def hook_texto_integral(self, obj): def hook_texto_integral(self, obj):
url = self.request.build_absolute_uri('/')[:-1] url = self.request.build_absolute_uri('/')[:-1]

8
sapl/protocoloadm/views.py

@ -992,7 +992,6 @@ class ProtocoloMateriaView(PermissionRequiredMixin, CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(CreateView, self).get_context_data(**kwargs) context = super(CreateView, self).get_context_data(**kwargs)
autores_ativos = self.autores_ativos() autores_ativos = self.autores_ativos()
autores = [] autores = []
autores.append(['0', '------']) autores.append(['0', '------'])
for a in autores_ativos: for a in autores_ativos:
@ -1042,14 +1041,9 @@ class PesquisarDocumentoAdministrativoView(DocumentoAdministrativoMixin,
paginate_by = 10 paginate_by = 10
permission_required = ('protocoloadm.list_documentoadministrativo', ) permission_required = ('protocoloadm.list_documentoadministrativo', )
fields_base_report = [ export_fields = [
'id', 'ano', 'numero', 'tipo__sigla', 'tipo__descricao', 'assunto' 'id', 'ano', 'numero', 'tipo__sigla', 'tipo__descricao', 'assunto'
] ]
fields_report = {
'csv': fields_base_report,
'xlsx': fields_base_report,
'json': fields_base_report,
}
def get_filterset_kwargs(self, filterset_class): def get_filterset_kwargs(self, filterset_class):
super(PesquisarDocumentoAdministrativoView, super(PesquisarDocumentoAdministrativoView,

71
sapl/relatorios/forms.py

@ -3,17 +3,19 @@ from crispy_forms.bootstrap import (FormActions)
from crispy_forms.layout import (HTML, Button, Fieldset, from crispy_forms.layout import (HTML, Button, Fieldset,
Layout, Submit) Layout, Submit)
from django import forms from django import forms
from django.forms import ModelChoiceField
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.db.models import Q
from sapl.audiencia.models import AudienciaPublica from sapl.audiencia.models import AudienciaPublica
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.comissoes.models import Reuniao from sapl.comissoes.models import Reuniao
from sapl.crispy_layout_mixin import SaplFormHelper, to_row, form_actions from sapl.crispy_layout_mixin import SaplFormHelper, to_row, form_actions
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa, MateriaEmTramitacao, UnidadeTramitacao, \ from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa, MateriaEmTramitacao, UnidadeTramitacao, \
StatusTramitacao StatusTramitacao, TipoMateriaLegislativa
from sapl.norma.models import NormaJuridica from sapl.norma.models import NormaJuridica
from sapl.protocoloadm.models import DocumentoAdministrativo from sapl.protocoloadm.models import DocumentoAdministrativo
from sapl.sessao.models import SessaoPlenaria from sapl.sessao.models import SessaoPlenaria, VotoParlamentar, RegistroVotacao
from sapl.utils import FilterOverridesMetaMixin, choice_anos_com_normas, qs_override_django_filter, \ from sapl.utils import FilterOverridesMetaMixin, choice_anos_com_normas, qs_override_django_filter, \
choice_anos_com_materias, choice_tipos_normas, autor_label, autor_modal choice_anos_com_materias, choice_tipos_normas, autor_label, autor_modal
@ -68,6 +70,71 @@ class RelatorioDocumentosAcessoriosFilterSet(django_filters.FilterSet):
) )
class RelatorioVotacoesNominaisFilterSet(django_filters.FilterSet):
tipo_id = django_filters.ModelChoiceFilter(
queryset=TipoMateriaLegislativa.objects.all(),
method='ordem_or_expediente',
label='Tipo de Matéria',
empty_label="---------"
)
numero = django_filters.NumberFilter(
widget=forms.NumberInput(attrs={'class': 'form-control', 'step': 'any'}),
method='ordem_or_expediente',
label='Número'
)
ano = django_filters.ChoiceFilter(
choices=list(choice_anos_com_materias()),
widget=forms.Select(attrs={'class': 'form-control'}),
method='ordem_or_expediente',
label='Ano da Matéria'
)
def ordem_or_expediente(self, queryset, name, value):
if value is None:
return queryset
value = getattr(value, "pk", value)
ordem_q = f"ordem__materia__{name}"
expediente_q = f"expediente__materia__{name}"
return queryset.filter(Q(**{ordem_q: val})|Q(**{expediente_q: val}))
return queryset
class Meta(FilterOverridesMetaMixin):
model = RegistroVotacao
fields = ['data_hora']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.filters['data_hora'].label = 'Período (Data Inicial - Data Final)'
row0= to_row([('tipo_id', 6), ('numero', 3), ('ano', 3)])
row1 = to_row([('data_hora', 12)])
buttons = FormActions(
*[
HTML("""
<div class="form-check">
<input name="relatorio" type="checkbox" class="form-check-input" id="relatorio">
<label class="form-check-label" for="relatorio">Gerar relatório PDF</label>
</div>
""")
],
Submit('pesquisar', _('Pesquisar'), css_class='float-right',
onclick='return true;'),
css_class='form-group row justify-content-between',
)
self.form.helper = SaplFormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Fieldset(_('Pesquisa'),
row0, row1,
buttons)
)
class RelatorioAtasFilterSet(django_filters.FilterSet): class RelatorioAtasFilterSet(django_filters.FilterSet):
class Meta(FilterOverridesMetaMixin): class Meta(FilterOverridesMetaMixin):
model = SessaoPlenaria model = SessaoPlenaria

8
sapl/relatorios/urls.py

@ -11,7 +11,7 @@ from .views import (relatorio_capa_processo,
RelatorioMateriasTramitacaoView, RelatorioMateriaAnoAssuntoView, RelatorioHistoricoTramitacaoView, RelatorioMateriasTramitacaoView, RelatorioMateriaAnoAssuntoView, RelatorioHistoricoTramitacaoView,
RelatorioDataFimPrazoTramitacaoView, RelatorioPresencaSessaoView, RelatorioAtasView, RelatorioDataFimPrazoTramitacaoView, RelatorioPresencaSessaoView, RelatorioAtasView,
RelatorioReuniaoView, RelatorioAudienciaView, RelatorioHistoricoTramitacaoAdmView, RelatorioReuniaoView, RelatorioAudienciaView, RelatorioHistoricoTramitacaoAdmView,
RelatorioDocumentosAcessoriosView, RelatorioNormasPorAutorView) RelatorioDocumentosAcessoriosView, RelatorioNormasPorAutorView, RelatorioVotacoesNominaisView)
from ..base.views import EstatisticasAcessoNormas from ..base.views import EstatisticasAcessoNormas
app_name = AppConfig.name app_name = AppConfig.name
@ -95,6 +95,10 @@ urlpatterns = [
url(r'^sistema/relatorios/documentos_acessorios$', url(r'^sistema/relatorios/documentos_acessorios$',
RelatorioDocumentosAcessoriosView.as_view(), RelatorioDocumentosAcessoriosView.as_view(),
name='relatorio_documentos_acessorios'), name='relatorio_documentos_acessorios'),
url(r'^sistema/relatorios/votacoes_nominais$',
RelatorioVotacoesNominaisView.as_view(),
name='relatorio_votacoes_nominais'),
url(r'^sistema/relatorios/normas-por-autor$', url(r'^sistema/relatorios/normas-por-autor$',
RelatorioNormasPorAutorView.as_view(), name='normas_por_autor'), RelatorioNormasPorAutorView.as_view(), name='normas_por_autor'),
] ]

78
sapl/relatorios/views.py

@ -31,7 +31,8 @@ from sapl.relatorios.forms import RelatorioNormasPorAutorFilterSet, RelatorioHis
RelatorioNormasVigenciaFilterSet, RelatorioNormasMesFilterSet, RelatorioMateriasPorAutorFilterSet, \ RelatorioNormasVigenciaFilterSet, RelatorioNormasMesFilterSet, RelatorioMateriasPorAutorFilterSet, \
RelatorioMateriasPorAnoAutorTipoFilterSet, RelatorioMateriasTramitacaoFilterSet, RelatorioAudienciaFilterSet, \ RelatorioMateriasPorAnoAutorTipoFilterSet, RelatorioMateriasTramitacaoFilterSet, RelatorioAudienciaFilterSet, \
RelatorioReuniaoFilterSet, RelatorioDataFimPrazoTramitacaoFilterSet, RelatorioHistoricoTramitacaoFilterSet, \ RelatorioReuniaoFilterSet, RelatorioDataFimPrazoTramitacaoFilterSet, RelatorioHistoricoTramitacaoFilterSet, \
RelatorioPresencaSessaoFilterSet, RelatorioAtasFilterSet, RelatorioDocumentosAcessoriosFilterSet RelatorioPresencaSessaoFilterSet, RelatorioAtasFilterSet, RelatorioDocumentosAcessoriosFilterSet, \
RelatorioVotacoesNominaisFilterSet
from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao, from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao,
IntegranteMesa, JustificativaAusencia, IntegranteMesa, JustificativaAusencia,
Orador, OradorExpediente, Orador, OradorExpediente,
@ -50,7 +51,7 @@ from sapl.sessao.views import (get_identificacao_basica, get_mesa_diretora,
from sapl.settings import MEDIA_URL from sapl.settings import MEDIA_URL
from sapl.settings import STATIC_ROOT from sapl.settings import STATIC_ROOT
from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data, create_barcode, show_results_filter_set, \ from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data, create_barcode, show_results_filter_set, \
num_materias_por_tipo, parlamentares_ativos num_materias_por_tipo, parlamentares_ativos, MultiFormatOutputMixin
from .templates import (pdf_capa_processo_gerar, from .templates import (pdf_capa_processo_gerar,
pdf_documento_administrativo_gerar, pdf_espelho_gerar, pdf_documento_administrativo_gerar, pdf_espelho_gerar,
pdf_etiqueta_protocolo_gerar, pdf_materia_gerar, pdf_etiqueta_protocolo_gerar, pdf_materia_gerar,
@ -1560,6 +1561,10 @@ def relatorio_documento_acessorio(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_documento_acessorio.html') return cria_relatorio(request, context, 'relatorios/relatorio_documento_acessorio.html')
def relatorio_votacao_nominal(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_votacao_nominal.html')
def relatorio_normas_por_autor(obj, request, context): def relatorio_normas_por_autor(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_normas_por_autor.html') return cria_relatorio(request, context, 'relatorios/relatorio_normas_por_autor.html')
@ -1880,6 +1885,75 @@ class RelatorioDocumentosAcessoriosView(RelatorioMixin, FilterView):
return context return context
class RelatorioVotacoesNominaisView(RelatorioMixin, MultiFormatOutputMixin, FilterView):
model = VotoParlamentar
filterset_class = RelatorioVotacoesNominaisFilterSet
template_name = 'relatorios/RelatorioVotacoesNominais_filter.html'
relatorio = relatorio_votacao_nominal
paginate_by = 20
export_fields = [
'votacao_id', 'votacao', 'parlamentar__nome_parlamentar', 'voto'
]
def get_queryset(self):
query_params = Q(ordem__tipo_votacao=2)|Q(expediente__tipo_votacao=2)
if 'format' in self.request.GET:
order_fields = ['-votacao_id', 'parlamentar']
qs = VotoParlamentar.objects.filter(query_params).order_by(*order_fields)
else:
order_fields = ['-id']
qs = RegistroVotacao.objects.filter(query_params).order_by(*order_fields)
return qs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = _('Votações Nominais')
if not self.filterset.form.is_valid():
return context
query_dict = self.request.GET.copy()
if 'page' in query_dict:
del query_dict['page']
context['filter_url'] = f"&{query_dict.urlencode()}" if query_dict else ''
context['show_results'] = show_results_filter_set(query_dict)
data_inicial = self.request.GET.get('data_hora_0', '')
data_final = self.request.GET.get('data_hora_1', '')
if not data_inicial:
data_inicial = "Data Inicial não definida"
if not data_final:
data_final = "Data Final não definida"
context['periodo'] = f"{data_inicial} - {data_final}"
tipo_id = self.request.GET.get('tipo_id')
numero = self.request.GET.get('numero')
ano = self.request.GET.get('ano')
if tipo_id:
context['tipo_materia'] = TipoMateriaLegislativa.objects.get(id=tipo_id)
if numero:
context['numero'] = int(numero)
if ano:
context['ano'] = ano
if 'relatorio' not in self.request.GET:
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
context['qtde_votacoes'] = paginator.count
else:
self.paginate_by = None
context['qtde_votacoes'] = len(context['object_list'])
return context
class RelatorioAtasView(RelatorioMixin, FilterView): class RelatorioAtasView(RelatorioMixin, FilterView):
model = SessaoPlenaria model = SessaoPlenaria
filterset_class = RelatorioAtasFilterSet filterset_class = RelatorioAtasFilterSet

13
sapl/sessao/models.py

@ -641,11 +641,14 @@ class RegistroVotacao(models.Model):
ordering = ('id',) ordering = ('id',)
def __str__(self): def __str__(self):
return _('Ordem: %(ordem)s - Votação: %(votacao)s - ' if self.ordem:
'Matéria: %(materia)s') % { return _('Ordem: %(ordem)s - Votação: %(votacao)s') % {
'ordem': self.ordem, 'ordem': self.ordem,
'votacao': self.tipo_resultado_votacao, 'votacao': self.tipo_resultado_votacao}
'materia': self.materia} else:
return _('Expediente: %(expediente)s - Votação: %(votacao)s') % {
'expediente': self.expediente,
'votacao': self.tipo_resultado_votacao}
def clean(self): def clean(self):
"""Exatamente um dos campos ordem ou expediente deve estar preenchido. """Exatamente um dos campos ordem ou expediente deve estar preenchido.

42
sapl/sessao/views.py

@ -3813,22 +3813,23 @@ class PautaSessaoDetailView(PautaMultiFormatOutputMixin, DetailView):
template_name = "sessao/pauta_sessao_detail.html" template_name = "sessao/pauta_sessao_detail.html"
model = SessaoPlenaria model = SessaoPlenaria
queryset_values_for_formats = False export_fields = (
('id', 'ID'),
('periodo', 'Período'),
('titulo', 'Matéria'),
('autor', 'Autor'),
('ementa', 'Ementa'),
('situacao', 'Situação')
)
fields_base_report = [ def hook_autor(self, obj):
[('id', 'ID'), ('titulo', 'Matéria'), ('autor', 'Autor'), ('ementa', 'Ementa'), ('situacao', 'Situação')], return ','.join(obj['autor'])
[('id', 'ID'), ('titulo', 'Matéria'), ('autor', 'Autor'), ('ementa', 'Ementa'), ('situacao', 'Situação')]
] def hook_titulo(self, obj):
fields_report = { return str(obj['titulo'])
'csv': fields_base_report,
'xlsx': fields_base_report,
'json': fields_base_report,
}
item_context = [ def hook_situacao(self, obj):
('materia_expediente', 'Matérias do Expediente'), return str(obj['situacao'])
('materias_ordem', 'Matérias da Ordem do Dia')
]
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
from sapl.relatorios.views import relatorio_pauta_sessao_weasy # Evitar import ciclico from sapl.relatorios.views import relatorio_pauta_sessao_weasy # Evitar import ciclico
@ -3888,7 +3889,8 @@ class PautaSessaoDetailView(PautaMultiFormatOutputMixin, DetailView):
'situacao': ultima_tramitacao.status if ultima_tramitacao else _("Não informada"), 'situacao': ultima_tramitacao.status if ultima_tramitacao else _("Não informada"),
'processo': f'{str(numeracao.numero_materia)}/{str(numeracao.ano_materia)}' if numeracao else '-', 'processo': f'{str(numeracao.numero_materia)}/{str(numeracao.ano_materia)}' if numeracao else '-',
'autor': [str(x.autor) for x in m.materia.autoria_set.select_related('autor').all()], 'autor': [str(x.autor) for x in m.materia.autoria_set.select_related('autor').all()],
'turno': get_turno(ultima_tramitacao.turno) if ultima_tramitacao else '' 'turno': get_turno(ultima_tramitacao.turno) if ultima_tramitacao else '',
'periodo': 'expediente',
}) })
context.update({'materia_expediente': materias_expediente}) context.update({'materia_expediente': materias_expediente})
@ -3972,7 +3974,8 @@ class PautaSessaoDetailView(PautaMultiFormatOutputMixin, DetailView):
'situacao': ultima_tramitacao.status if ultima_tramitacao else _("Não informada"), 'situacao': ultima_tramitacao.status if ultima_tramitacao else _("Não informada"),
'processo': f'{str(numeracao.numero_materia)}/{str(numeracao.ano_materia)}' if numeracao else '-', 'processo': f'{str(numeracao.numero_materia)}/{str(numeracao.ano_materia)}' if numeracao else '-',
'autor': [str(x.autor) for x in Autoria.objects.select_related("autor").filter(materia_id=o.materia_id)], 'autor': [str(x.autor) for x in Autoria.objects.select_related("autor").filter(materia_id=o.materia_id)],
'turno': get_turno(ultima_tramitacao.turno) if ultima_tramitacao else '' 'turno': get_turno(ultima_tramitacao.turno) if ultima_tramitacao else '',
'periodo': 'ordem dia',
}) })
context.update({ context.update({
@ -3998,14 +4001,9 @@ class PesquisarSessaoPlenariaView(MultiFormatOutputMixin, FilterView):
queryset_values_for_formats = False queryset_values_for_formats = False
fields_base_report = [ export_fields = [
'id', 'data_inicio', 'hora_inicio', 'data_fim', 'hora_fim', '', 'id', 'data_inicio', 'hora_inicio', 'data_fim', 'hora_fim', '',
] ]
fields_report = {
'csv': fields_base_report,
'xlsx': fields_base_report,
'json': fields_base_report,
}
def get_filterset_kwargs(self, filterset_class): def get_filterset_kwargs(self, filterset_class):
super().get_filterset_kwargs(filterset_class) super().get_filterset_kwargs(filterset_class)

BIN
sapl/static/sapl/frontend/css/chunk-vendors.045ec640.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/css/compilacao.0baf3580.css.gz

Binary file not shown.

2
sapl/static/sapl/frontend/css/global.45591136.css → sapl/static/sapl/frontend/css/global.042f6737.css

File diff suppressed because one or more lines are too long

BIN
sapl/static/sapl/frontend/css/global.45591136.css.gz → sapl/static/sapl/frontend/css/global.042f6737.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/css/painel.e2b9504e.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/fonts/fa-brands-400.5d18d427.ttf.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/fonts/fa-regular-400.81482cd4.ttf.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/fonts/fa-solid-900.69d3141a.ttf.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/fonts/fa-v4compatibility.2c070fd2.ttf.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/img/down_arrow_select.jpg.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/chunk-vendors.e8ab4373.js.LICENSE.txt.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/chunk-vendors.e8ab4373.js.gz

Binary file not shown.

0
sapl/static/sapl/frontend/js/compilacao.d3adb1c1.js → sapl/static/sapl/frontend/js/compilacao.148cb66b.js

BIN
sapl/static/sapl/frontend/js/compilacao.d3adb1c1.js.gz → sapl/static/sapl/frontend/js/compilacao.148cb66b.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/global.8ef6e932.js.gz

Binary file not shown.

2
sapl/static/sapl/frontend/js/global.8ef6e932.js → sapl/static/sapl/frontend/js/global.bb3e904b.js

File diff suppressed because one or more lines are too long

0
sapl/static/sapl/frontend/js/global.8ef6e932.js.LICENSE.txt → sapl/static/sapl/frontend/js/global.bb3e904b.js.LICENSE.txt

BIN
sapl/static/sapl/frontend/js/global.bb3e904b.js.gz

Binary file not shown.

0
sapl/static/sapl/frontend/js/painel.73a4fb17.js → sapl/static/sapl/frontend/js/painel.f3190acc.js

BIN
sapl/static/sapl/frontend/js/painel.73a4fb17.js.gz → sapl/static/sapl/frontend/js/painel.f3190acc.js.gz

Binary file not shown.

0
sapl/static/sapl/frontend/js/parlamentar.f0710dca.js → sapl/static/sapl/frontend/js/parlamentar.a1a4b65b.js

BIN
sapl/static/sapl/frontend/js/parlamentar.f0710dca.js.gz → sapl/static/sapl/frontend/js/parlamentar.a1a4b65b.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/dark/content.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/dark/content.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/dark/content.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/default/content.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/default/content.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/default/content.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/document/content.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/document/content.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/document/content.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/tinymce-5/content.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/tinymce-5/content.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/tinymce-5/content.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/writer/content.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/writer/content.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/content/writer/content.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/content.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/content.inline.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/content.inline.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/content.inline.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/content.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/content.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/skin.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/skin.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/skin.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.min.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.css.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.js.gz

Binary file not shown.

BIN
sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.min.css.gz

Binary file not shown.

2
sapl/templates/base.html

@ -251,7 +251,7 @@
{% endblock footer_container %} {% endblock footer_container %}
{% endif %} {% endif %}
<div vw class="enabled"> <div vw class="enabled btn-vlibras">
<div vw-access-button class="active"></div> <div vw-access-button class="active"></div>
<div vw-plugin-wrapper> <div vw-plugin-wrapper>
<div class="vw-plugin-top-wrapper"></div> <div class="vw-plugin-top-wrapper"></div>

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

Loading…
Cancel
Save