From 94793f838962b0b92119b0c59c4505908771b755 Mon Sep 17 00:00:00 2001
From: Ricardo Lima Canela
Date: Thu, 26 Sep 2019 12:01:06 -0300
Subject: [PATCH] 2841 gerar pdf de relatorios (#2895)
* geracao de pdf relatorio de materias em tramitacao
* geracao de pdf relatorio de materias por autor
* geracao de pdf relatorio de materias por ano autor tipo
* geracao de pdf relatorio de presenca de dos parlamentares em sessoes
* geracao de pdf relatorio de historico de tramitacao de materias
* geracao de pdf relatorio de fim de prazo de tramitacao
* geracao de pdf relatorio de atas das sessoes plenarias
* geracao de pdf relatorio de audiencia publica
* geracao de pdf relatorio de normas por mes
* geracao de pdf relatorio de normas por vigencia
* fix rebase
* geracao de pdf relatorio de reuniao de comissao
* geracao de pdf relatorio de estatisticas de acesso de normas
* refatorando materias em tramitacao, por autor, por ano autor e presenca sessoes
* refatorando atas, historico, fim de prazo, e reuniao
* fix rebase
* fix rebase
* geracao de pdf para Norma por Autor
* corrigindo estatisticas de acesso de normas e documentos acessorios
* removendo partes desnecessarias do codigo como o None do get e os css dos relatorios
---
sapl/base/forms.py | 268 ++++++++++++++++--
sapl/base/views.py | 82 ++++--
sapl/relatorios/views.py | 59 +++-
sapl/templates/relatorios/relatorio_ata.html | 32 ---
sapl/templates/relatorios/relatorio_atas.html | 36 +++
.../relatorios/relatorio_audiencia.html | 35 +++
.../relatorio_doc_administrativos.html | 35 ---
.../relatorio_documento_acessorio.html | 41 +++
.../relatorio_estatisticas_acesso_normas.html | 54 ++++
.../relatorio_fim_prazo_tramitacao.html | 46 +++
.../relatorio_historico_tramitacao.html | 48 ++++
.../relatorio_historico_tramitacao_adm.html | 46 +++
.../relatorio_materias_em_tramitacao.html | 78 +++++
.../relatorio_materias_por_ano_autor.html | 97 +++++++
.../relatorio_materias_por_autor.html | 72 +++++
.../relatorios/relatorio_normas_mes.html | 64 +++++
.../relatorio_normas_por_autor.html | 71 +++++
.../relatorios/relatorio_normas_vigencia.html | 54 ++++
.../relatorios/relatorio_presenca_sessao.html | 60 ++++
.../relatorios/relatorio_reuniao.html | 35 +++
.../relatorios/relatorio_sessao_plenaria.html | 35 ---
21 files changed, 1199 insertions(+), 149 deletions(-)
create mode 100644 sapl/templates/relatorios/relatorio_atas.html
create mode 100644 sapl/templates/relatorios/relatorio_audiencia.html
create mode 100644 sapl/templates/relatorios/relatorio_documento_acessorio.html
create mode 100644 sapl/templates/relatorios/relatorio_estatisticas_acesso_normas.html
create mode 100644 sapl/templates/relatorios/relatorio_fim_prazo_tramitacao.html
create mode 100644 sapl/templates/relatorios/relatorio_historico_tramitacao.html
create mode 100644 sapl/templates/relatorios/relatorio_historico_tramitacao_adm.html
create mode 100644 sapl/templates/relatorios/relatorio_materias_em_tramitacao.html
create mode 100644 sapl/templates/relatorios/relatorio_materias_por_ano_autor.html
create mode 100644 sapl/templates/relatorios/relatorio_materias_por_autor.html
create mode 100644 sapl/templates/relatorios/relatorio_normas_mes.html
create mode 100644 sapl/templates/relatorios/relatorio_normas_por_autor.html
create mode 100644 sapl/templates/relatorios/relatorio_normas_vigencia.html
create mode 100644 sapl/templates/relatorios/relatorio_presenca_sessao.html
create mode 100644 sapl/templates/relatorios/relatorio_reuniao.html
diff --git a/sapl/base/forms.py b/sapl/base/forms.py
index d111e7f4c..1e53c78df 100644
--- a/sapl/base/forms.py
+++ b/sapl/base/forms.py
@@ -1,8 +1,9 @@
import logging
import os
-from crispy_forms.bootstrap import FieldWithButtons, InlineRadios, StrictButton
-from crispy_forms.layout import HTML, Button, Div, Field, Fieldset, Layout, Row
+
+from crispy_forms.bootstrap import FieldWithButtons, InlineRadios, StrictButton, FormActions
+from crispy_forms.layout import HTML, Button, Div, Field, Fieldset, Layout, Row, Submit
from django import forms
from django.conf import settings
from django.contrib.auth import get_user_model
@@ -34,9 +35,9 @@ from sapl.settings import MAX_IMAGE_UPLOAD_SIZE
from sapl.utils import (autor_label, autor_modal, ChoiceWithoutValidationField,
choice_anos_com_normas, choice_anos_com_materias,
FilterOverridesMetaMixin, FileFieldCheckMixin,
- ImageThumbnailFileInput, models_with_gr_for_model,
- qs_override_django_filter, RangeWidgetOverride,
- RANGE_ANOS, YES_NO_CHOICES)
+ AnoNumeroOrderingFilter, ImageThumbnailFileInput,
+ models_with_gr_for_model, qs_override_django_filter,
+ RangeWidgetOverride, RANGE_ANOS, YES_NO_CHOICES)
from .models import AppConfig, CasaLegislativa
@@ -761,12 +762,27 @@ class RelatorioDocumentosAcessoriosFilterSet(django_filters.FilterSet):
row1 = to_row([('data', 12)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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,
- form_actions(label='Pesquisar'))
+ buttons)
)
@@ -791,11 +807,26 @@ class RelatorioAtasFilterSet(django_filters.FilterSet):
row1 = to_row([('data_inicio', 12)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_('Atas das Sessões Plenárias'),
- row1, form_actions(label='Pesquisar'))
+ row1, buttons, )
)
@@ -827,11 +858,26 @@ class RelatorioNormasMesFilterSet(django_filters.FilterSet):
row1 = to_row([('ano', 12)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_('Normas por mês do ano.'),
- row1, form_actions(label='Pesquisar'))
+ row1, buttons, )
)
@property
@@ -856,11 +902,26 @@ class EstatisticasAcessoNormasForm(Form):
row1 = to_row([('ano', 12)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ Submit('pesquisar', _('Pesquisar'), css_class='float-right',
+ onclick='return true;'),
+ css_class='form-group row justify-content-between'
+ ,
+ )
+
self.helper = SaplFormHelper()
self.helper.form_method = 'GET'
self.helper.layout = Layout(
Fieldset(_('Normas por acessos nos meses do ano.'),
- row1, form_actions(label='Pesquisar'))
+ row1, buttons)
)
def clean(self):
@@ -894,12 +955,27 @@ class RelatorioNormasVigenciaFilterSet(django_filters.FilterSet):
row1 = to_row([('ano', 12)])
row2 = to_row([('vigencia', 12)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_('Normas por vigência.'),
row1, row2,
- form_actions(label='Pesquisar'))
+ buttons, )
)
@property
@@ -936,11 +1012,26 @@ class RelatorioPresencaSessaoFilterSet(django_filters.FilterSet):
('tipo', 4)])
row3 = to_row([('exibir_ordem_dia', 12)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_('Presença dos parlamentares nas sessões plenárias'),
- row1, row2, row3, form_actions(label='Pesquisar'))
+ row1, row2, row3, buttons, )
)
@property
@@ -978,12 +1069,27 @@ class RelatorioHistoricoTramitacaoFilterSet(django_filters.FilterSet):
[('tipo', 6),
('tramitacao__status', 6)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_(''),
row1, row2, row3,
- form_actions(label='Pesquisar'))
+ buttons, )
)
@@ -1017,12 +1123,27 @@ class RelatorioDataFimPrazoTramitacaoFilterSet(django_filters.FilterSet):
[('tipo', 6),
('tramitacao__status', 6)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_('Tramitações'),
row1, row2, row3,
- form_actions(label='Pesquisar'))
+ buttons, )
)
@@ -1048,12 +1169,27 @@ class RelatorioReuniaoFilterSet(django_filters.FilterSet):
('nome', 4),
('tema', 4)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_('Reunião de Comissão'),
row1, row2,
- form_actions(label='Pesquisar'))
+ buttons, )
)
@@ -1078,12 +1214,27 @@ class RelatorioAudienciaFilterSet(django_filters.FilterSet):
[('tipo', 4),
('nome', 4)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_('Audiência Pública'),
row1, row2,
- form_actions(label='Pesquisar'))
+ buttons, )
)
@@ -1125,12 +1276,27 @@ class RelatorioMateriasTramitacaoFilterSet(django_filters.FilterSet):
row3 = to_row([('tramitacao__unidade_tramitacao_destino', 12)])
row4 = to_row([('tramitacao__status', 12)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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 de Matéria em Tramitação'),
row1, row2, row3, row4,
- form_actions(label='Pesquisar'))
+ buttons,)
)
@@ -1151,15 +1317,31 @@ class RelatorioMateriasPorAnoAutorTipoFilterSet(django_filters.FilterSet):
row1 = to_row(
[('ano', 12)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_('Pesquisar'),
+ Fieldset(_('Pesquisa de Matéria por Ano Autor Tipo'),
row1,
- form_actions(label='Pesquisar'))
+ buttons, )
)
+
class RelatorioMateriasPorAutorFilterSet(django_filters.FilterSet):
autoria__autor = django_filters.CharFilter(widget=forms.HiddenInput())
@@ -1192,15 +1374,30 @@ class RelatorioMateriasPorAutorFilterSet(django_filters.FilterSet):
'limpar Autor',
css_class='btn btn-primary btn-sm'), 10)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_('Pesquisar'),
+ Fieldset(_('Pesquisa de Matéria por Autor'),
row1, row2,
HTML(autor_label),
HTML(autor_modal),
row3,
- form_actions(label='Pesquisar'))
+ buttons, )
)
@@ -1527,12 +1724,27 @@ class RelatorioHistoricoTramitacaoAdmFilterSet(django_filters.FilterSet):
[('tipo', 6),
('tramitacaoadministrativo__status', 6)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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(_(''),
row1, row2, row3,
- form_actions(label='Pesquisar'))
+ buttons, )
)
@@ -1567,6 +1779,20 @@ class RelatorioNormasPorAutorFilterSet(django_filters.FilterSet):
(Button('limpar',
'Limpar Autor',
css_class='btn btn-primary btn-sm'), 10)])
+ buttons = FormActions(
+ *[
+ HTML('''
+
+
+ Gerar relatório PDF
+
+ ''')
+ ],
+ 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'
diff --git a/sapl/base/views.py b/sapl/base/views.py
index bbb926726..df5a1c0f7 100644
--- a/sapl/base/views.py
+++ b/sapl/base/views.py
@@ -30,6 +30,14 @@ from django_filters.views import FilterView
from haystack.views import SearchView
from haystack.query import SearchQuerySet
+from sapl.relatorios.views import (relatorio_materia_em_tramitacao, relatorio_materia_por_autor,
+ relatorio_materia_por_ano_autor, relatorio_presenca_sessao,
+ relatorio_historico_tramitacao, relatorio_fim_prazo_tramitacao,
+ relatorio_atas, relatorio_audiencia, relatorio_normas_mes,
+ relatorio_normas_vigencia, relatorio_historico_tramitacao_adm,
+ relatorio_reuniao, relatorio_estatisticas_acesso_normas,
+ relatorio_normas_por_autor, relatorio_documento_acessorio)
+
from sapl import settings
from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica
from sapl.base.models import Autor, TipoAutor
@@ -296,10 +304,24 @@ class RelatoriosListView(TemplateView):
return context
-class RelatorioDocumentosAcessoriosView(FilterView):
+class RelatorioMixin:
+ def get(self, request, *args, **kwargs):
+ super(RelatorioMixin, self).get(request)
+
+ is_relatorio = request.GET.get('relatorio')
+ context = self.get_context_data(filter=self.filterset)
+
+ if is_relatorio:
+ return self.relatorio(request, context)
+ else:
+ return self.render_to_response(context)
+
+
+class RelatorioDocumentosAcessoriosView(RelatorioMixin, FilterView):
model = DocumentoAcessorio
filterset_class = RelatorioDocumentosAcessoriosFilterSet
template_name = 'base/RelatorioDocumentosAcessorios_filter.html'
+ relatorio = relatorio_documento_acessorio
def get_context_data(self, **kwargs):
context = super(
@@ -339,10 +361,11 @@ class RelatorioDocumentosAcessoriosView(FilterView):
return context
-class RelatorioAtasView(FilterView):
+class RelatorioAtasView(RelatorioMixin, FilterView):
model = SessaoPlenaria
filterset_class = RelatorioAtasFilterSet
template_name = 'base/RelatorioAtas_filter.html'
+ relatorio = relatorio_atas
def get_context_data(self, **kwargs):
context = super(RelatorioAtasView,
@@ -364,11 +387,12 @@ class RelatorioAtasView(FilterView):
return context
-class RelatorioPresencaSessaoView(FilterView):
+class RelatorioPresencaSessaoView(RelatorioMixin, FilterView):
logger = logging.getLogger(__name__)
model = SessaoPlenaria
filterset_class = RelatorioPresencaSessaoFilterSet
template_name = 'base/RelatorioPresencaSessao_filter.html'
+ relatorio = relatorio_presenca_sessao
def get_context_data(self, **kwargs):
@@ -530,10 +554,11 @@ class RelatorioPresencaSessaoView(FilterView):
return context
-class RelatorioHistoricoTramitacaoView(FilterView):
+class RelatorioHistoricoTramitacaoView(RelatorioMixin, FilterView):
model = MateriaLegislativa
filterset_class = RelatorioHistoricoTramitacaoFilterSet
template_name = 'base/RelatorioHistoricoTramitacao_filter.html'
+ relatorio = relatorio_historico_tramitacao
def get_context_data(self, **kwargs):
context = super(RelatorioHistoricoTramitacaoView,
@@ -578,10 +603,11 @@ class RelatorioHistoricoTramitacaoView(FilterView):
return context
-class RelatorioDataFimPrazoTramitacaoView(FilterView):
+class RelatorioDataFimPrazoTramitacaoView(RelatorioMixin, FilterView):
model = MateriaLegislativa
filterset_class = RelatorioDataFimPrazoTramitacaoFilterSet
template_name = 'base/RelatorioDataFimPrazoTramitacao_filter.html'
+ relatorio = relatorio_fim_prazo_tramitacao
def get_context_data(self, **kwargs):
context = super(RelatorioDataFimPrazoTramitacaoView,
@@ -627,10 +653,11 @@ class RelatorioDataFimPrazoTramitacaoView(FilterView):
return context
-class RelatorioReuniaoView(FilterView):
+class RelatorioReuniaoView(RelatorioMixin, FilterView):
model = Reuniao
filterset_class = RelatorioReuniaoFilterSet
template_name = 'base/RelatorioReuniao_filter.html'
+ relatorio = relatorio_reuniao
def get_filterset_kwargs(self, filterset_class):
super(RelatorioReuniaoView,
@@ -660,10 +687,11 @@ class RelatorioReuniaoView(FilterView):
return context
-class RelatorioAudienciaView(FilterView):
+class RelatorioAudienciaView(RelatorioMixin, FilterView):
model = AudienciaPublica
filterset_class = RelatorioAudienciaFilterSet
template_name = 'base/RelatorioAudiencia_filter.html'
+ relatorio = relatorio_audiencia
def get_filterset_kwargs(self, filterset_class):
super(RelatorioAudienciaView,
@@ -693,10 +721,11 @@ class RelatorioAudienciaView(FilterView):
return context
-class RelatorioMateriasTramitacaoView(FilterView):
+class RelatorioMateriasTramitacaoView(RelatorioMixin, FilterView):
model = MateriaEmTramitacao
filterset_class = RelatorioMateriasTramitacaoFilterSet
template_name = 'base/RelatorioMateriasPorTramitacao_filter.html'
+ relatorio = relatorio_materia_em_tramitacao
paginate_by = 100
@@ -799,10 +828,11 @@ class RelatorioMateriasTramitacaoView(FilterView):
return context
-class RelatorioMateriasPorAnoAutorTipoView(FilterView):
+class RelatorioMateriasPorAnoAutorTipoView(RelatorioMixin, FilterView):
model = MateriaLegislativa
filterset_class = RelatorioMateriasPorAnoAutorTipoFilterSet
template_name = 'base/RelatorioMateriasPorAnoAutorTipo_filter.html'
+ relatorio = relatorio_materia_por_ano_autor
def get_materias_autor_ano(self, ano, primeiro_autor):
@@ -860,7 +890,7 @@ class RelatorioMateriasPorAnoAutorTipoView(FilterView):
return context
qtdes = {}
for tipo in TipoMateriaLegislativa.objects.all():
- qs = kwargs['object_list']
+ qs = context['object_list']
qtde = len(qs.filter(tipo_id=tipo.id))
if qtde > 0:
qtdes[tipo] = qtde
@@ -882,10 +912,11 @@ class RelatorioMateriasPorAnoAutorTipoView(FilterView):
return context
-class RelatorioMateriasPorAutorView(FilterView):
+class RelatorioMateriasPorAutorView(RelatorioMixin, FilterView):
model = MateriaLegislativa
filterset_class = RelatorioMateriasPorAutorFilterSet
template_name = 'base/RelatorioMateriasPorAutor_filter.html'
+ relatorio = relatorio_materia_por_autor
def get_filterset_kwargs(self, filterset_class):
super().get_filterset_kwargs(filterset_class)
@@ -901,7 +932,7 @@ class RelatorioMateriasPorAutorView(FilterView):
qtdes = {}
for tipo in TipoMateriaLegislativa.objects.all():
- qs = kwargs['object_list']
+ qs = context['object_list']
qtde = len(qs.filter(tipo_id=tipo.id))
if qtde > 0:
qtdes[tipo] = qtde
@@ -929,10 +960,11 @@ class RelatorioMateriasPorAutorView(FilterView):
return context
-class RelatorioNormasPublicadasMesView(FilterView):
+class RelatorioNormasPublicadasMesView(RelatorioMixin, FilterView):
model = NormaJuridica
filterset_class = RelatorioNormasMesFilterSet
template_name = 'base/RelatorioNormaMes_filter.html'
+ relatorio = relatorio_normas_mes
def get_context_data(self, **kwargs):
context = super(RelatorioNormasPublicadasMesView,
@@ -968,10 +1000,11 @@ class RelatorioNormasPublicadasMesView(FilterView):
return context
-class RelatorioNormasVigenciaView(FilterView):
+class RelatorioNormasVigenciaView(RelatorioMixin, FilterView):
model = NormaJuridica
filterset_class = RelatorioNormasVigenciaFilterSet
template_name = 'base/RelatorioNormasVigencia_filter.html'
+ relatorio = relatorio_normas_vigencia
def get_filterset_kwargs(self, filterset_class):
super(RelatorioNormasVigenciaView,
@@ -1071,7 +1104,15 @@ class EstatisticasAcessoNormas(TemplateView):
context['normas_mes'] = normas_mes
- return self.render_to_response(context)
+ is_relatorio = request.GET.get('relatorio')
+
+ context['show_results'] = show_results_filter_set(
+ self.request.GET.copy())
+
+ if is_relatorio:
+ return relatorio_estatisticas_acesso_normas(self, request, context)
+ else:
+ return self.render_to_response(context)
class ListarInconsistenciasView(PermissionRequiredMixin, ListView):
@@ -2068,10 +2109,11 @@ def pesquisa_textual(request):
return JsonResponse(json_dict)
-class RelatorioHistoricoTramitacaoAdmView(FilterView):
+class RelatorioHistoricoTramitacaoAdmView(RelatorioMixin, FilterView):
model = DocumentoAdministrativo
filterset_class = RelatorioHistoricoTramitacaoAdmFilterSet
template_name = 'base/RelatorioHistoricoTramitacaoAdm_filter.html'
+ relatorio = relatorio_historico_tramitacao_adm
def get_context_data(self, **kwargs):
context = super(RelatorioHistoricoTramitacaoAdmView,
@@ -2115,11 +2157,11 @@ class RelatorioHistoricoTramitacaoAdmView(FilterView):
return context
-
-class RelatorioNormasPorAutorView(FilterView):
+class RelatorioNormasPorAutorView(RelatorioMixin, FilterView):
model = NormaJuridica
filterset_class = RelatorioNormasPorAutorFilterSet
template_name = 'base/RelatorioNormasPorAutor_filter.html'
+ relatorio = relatorio_normas_por_autor
def get_filterset_kwargs(self, filterset_class):
super().get_filterset_kwargs(filterset_class)
@@ -2135,7 +2177,7 @@ class RelatorioNormasPorAutorView(FilterView):
qtdes = {}
for tipo in TipoNormaJuridica.objects.all():
- qs = kwargs['object_list']
+ qs = context['object_list']
qtde = len(qs.filter(tipo_id=tipo.id))
if qtde > 0:
qtdes[tipo] = qtde
@@ -2161,4 +2203,4 @@ class RelatorioNormasPorAutorView(FilterView):
self.request.GET['data_0'] +
' - ' + self.request.GET['data_1'])
- return context
\ No newline at end of file
+ return context
diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py
index 7f7608d67..68b18914e 100755
--- a/sapl/relatorios/views.py
+++ b/sapl/relatorios/views.py
@@ -1344,8 +1344,7 @@ def resumo_ata_pdf(request,pk):
return response
-
-def relatorio_doc_administrativos(request, context):
+def cria_relatorio(request, context, html_string):
base_url = request.build_absolute_uri()
casa = CasaLegislativa.objects.first()
rodape = ' '.join(get_rodape(casa))
@@ -1353,13 +1352,13 @@ def relatorio_doc_administrativos(request, context):
context.update({'data': dt.today().strftime('%d/%m/%Y')})
context.update({'rodape': rodape})
- header_context = {"casa": casa, 'logotipo':casa.logotipo, 'MEDIA_URL': MEDIA_URL}
+ header_context = {"casa": casa, 'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL}
- html_template = render_to_string('relatorios/relatorio_doc_administrativos.html', context)
+ html_template = render_to_string(html_string, context)
html_header = render_to_string('relatorios/header_ata.html', header_context)
- pdf_file = make_pdf(base_url=base_url,main_template=html_template,header_template=html_header)
-
+ pdf_file = make_pdf(base_url=base_url, main_template=html_template, header_template=html_header)
+
response = HttpResponse(content_type='application/pdf;')
response['Content-Disposition'] = 'inline; filename=relatorio.pdf'
response['Content-Transfer-Encoding'] = 'binary'
@@ -1367,6 +1366,54 @@ def relatorio_doc_administrativos(request, context):
return response
+def relatorio_doc_administrativos(request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_doc_administrativos.html')
+
+def relatorio_materia_em_tramitacao(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_materias_em_tramitacao.html')
+
+def relatorio_materia_por_autor(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_materias_por_autor.html')
+
+def relatorio_materia_por_ano_autor(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_materias_por_ano_autor.html')
+
+def relatorio_presenca_sessao(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_presenca_sessao.html')
+
+def relatorio_atas(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_atas.html')
+
+def relatorio_historico_tramitacao(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_historico_tramitacao.html')
+
+def relatorio_fim_prazo_tramitacao(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_fim_prazo_tramitacao.html')
+
+def relatorio_reuniao(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_reuniao.html')
+
+def relatorio_audiencia(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_audiencia.html')
+
+def relatorio_normas_mes(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_normas_mes.html')
+
+def relatorio_normas_vigencia(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_normas_vigencia.html')
+
+def relatorio_historico_tramitacao_adm(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_historico_tramitacao_adm.html')
+
+def relatorio_estatisticas_acesso_normas(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_estatisticas_acesso_normas.html')
+
+def relatorio_documento_acessorio(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_documento_acessorio.html')
+
+def relatorio_normas_por_autor(obj, request, context):
+ return cria_relatorio(request, context, 'relatorios/relatorio_normas_por_autor.html')
+
def relatorio_sessao_plenaria_pdf(request, pk):
base_url=request.build_absolute_uri()
logger = logging.getLogger(__name__)
diff --git a/sapl/templates/relatorios/relatorio_ata.html b/sapl/templates/relatorios/relatorio_ata.html
index 0e59ce2c1..b71cc480d 100644
--- a/sapl/templates/relatorios/relatorio_ata.html
+++ b/sapl/templates/relatorios/relatorio_ata.html
@@ -1,38 +1,6 @@
{% load common_tags %}
{% load static %}
-
diff --git a/sapl/templates/relatorios/relatorio_atas.html b/sapl/templates/relatorios/relatorio_atas.html
new file mode 100644
index 000000000..b4bd07da8
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_atas.html
@@ -0,0 +1,36 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
+
+
+
+
+ Relatório de Atas das Sessões Plenárias
+
+ PERÍODO: {{ periodo }}
+ {% if object_list|length > 0 %}
+
+
+
+ Sessão
+ Ata
+
+
+
+ {% for sessao in object_list %}
+
+ {{sessao}}
+
+
+
+
+ {% endfor %}
+
+
+ {% else %}
+ Nenhum sessão com ata foi encontrada!
+ {% endif %}
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_audiencia.html b/sapl/templates/relatorios/relatorio_audiencia.html
new file mode 100644
index 000000000..15f374a6b
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_audiencia.html
@@ -0,0 +1,35 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
+
+
+
+
+ Audiência Pública
+
+ {% if object_list|length > 0 %}
+
+
+
+ Tipo de Audiência
+ Nome
+
+
+
+ {% for audiencia in object_list %}
+
+
+ {{audiencia.tipo}}
+
+ {{audiencia.nome}}
+
+ {% endfor %}
+
+
+ {% else %}
+ Nenhuma Audiência Pública foi encontrada!
+ {% endif %}
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_doc_administrativos.html b/sapl/templates/relatorios/relatorio_doc_administrativos.html
index 7d7738a42..7a2b04da1 100644
--- a/sapl/templates/relatorios/relatorio_doc_administrativos.html
+++ b/sapl/templates/relatorios/relatorio_doc_administrativos.html
@@ -3,41 +3,6 @@
{% load crispy_forms_tags staticfiles %}
-
diff --git a/sapl/templates/relatorios/relatorio_documento_acessorio.html b/sapl/templates/relatorios/relatorio_documento_acessorio.html
new file mode 100644
index 000000000..28c482008
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_documento_acessorio.html
@@ -0,0 +1,41 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
+
+
+
+ Documento Acessorio
+
+ PARÂMETROS DE PESQUISA
+ Tipo de Documento: {{ tipo_documento }}
+ Tipo de Matéria do Documento: {{ tipo_materia }}
+ Período: {{ periodo }}
+ {% if object_list %}
+ {% if object_list|length == 1 %}
+ Foi encontrado 1 documento com esses parâmetros.
+ {% else %}
+ Foram encontrados {{ object_list|length }} documentos com esses parâmetros.
+ {% endif %}
+
+
+
+ Documento Acessório
+ Matéria do Documento
+
+
+
+ {% for documento in object_list %}
+
+ {{ documento }}
+ {{ documento.materia }}
+
+ {% endfor %}
+
+
+ {% else %}
+ Nenhuma documento encontrado com esses parâmetros.
+ {% endif %}
+
+ Estatísticas de acesso de normas
+
+ PARÂMETROS DE PESQUISA:
+ Ano: {{ ano }}
+
+ {% if normas_mes|length == 0 %}
+
+ {% trans 'Nenhuma norma teve acesso neste ano.'%}
+ {% else %}
+ {% for mes, normas in normas_mes.items %}
+
+
+
+
+ Mês: {{ mes }}
+
+
+
+
+
+
+ Norma
+ Ementa
+ Acessos
+
+
+
+ {% for n in normas %}
+ {% if n.1 > 0 %}
+
+
+ {{n.0.tipo.descricao}} - {{n.0.tipo.sigla}} {{n.0.numero}}/{{n.0.ano}}
+
+ {{n.0.ementa}} {{n.0.observacao}}
+ {{n.1}}
+
+ {% endif %}
+ {% endfor %}
+
+
+
+ {% endfor %}
+ {% endif %}
+
+ Fim de Prazo de Tramitações
+
+ PARÂMETROS DE PESQUISA:
+ Período: {{ data_tramitacao }}
+ Tipo de matéria: {{ tipo }}
+ Status atual: {{ tramitacao__status }}
+ Local de origem: {{ tramitacao__unidade_tramitacao_local }}
+ Local de destino: {{ tramitacao__unidade_tramitacao_destino }}
+ {% if object_list %}
+ {% if object_list|length == 1 %}
+ Foi encontrada 1 matéria com esses parâmetros.
+ {% else %}
+ Foram encontradas {{object_list|length}} matérias com esses parâmetros.
+ {% endif %}
+
+
+
+ Matéria
+ Ementa
+
+
+
+ {% for materia in object_list %}
+
+
+ {{materia.tipo.descricao}} - {{materia.tipo.sigla}} {{materia.numero}}/{{materia.ano}}
+
+ {{materia.ementa}}
+
+ {% endfor %}
+
+
+ {% else %}
+ Nenhuma matéria encontrada com esses parâmetros.
+ {% endif %}
+
+ Histórico de Tramitações de Matérias Legislativas
+
+ PARÂMETROS DE PESQUISA:
+
+ Período: {{ data_tramitacao }}
+ Tipo de matéria: {{ tipo }}
+ Status atual: {{ tramitacao__status }}
+ Local de origem: {{ tramitacao__unidade_tramitacao_local }}
+ Local de destino: {{ tramitacao__unidade_tramitacao_destino }}
+
+ {% if object_list %}
+ {% if object_list|length == 1 %}
+ Foi encontrada 1 matéria com esses parâmetros.
+ {% else %}
+ Foram encontradas {{object_list|length}} matérias com esses parâmetros.
+ {% endif %}
+
+
+
+ Matéria
+ Ementa
+
+
+
+ {% for materia in object_list %}
+
+
+ {{materia.tipo.descricao}} - {{materia.tipo.sigla}} {{materia.numero}}/{{materia.ano}}
+
+ {{materia.ementa}} {{materia.observacao}}
+
+ {% endfor %}
+
+
+ {% else %}
+ Nenhuma matéria encontrada com esses parâmetros.
+ {% endif %}
+
+ Histórico de Tramitações de Documento Administrativo
+
+ PARÂMETROS DE PESQUISA:
+ Período: {{ data_tramitacao }}
+ Tipo de documento: {{ tipo }}
+ Status atual: {{ tramitacaoadministrativo__status }}
+ Local de origem: {{ tramitacaoadministrativo__unidade_tramitacao_local }}
+ Local de destino: {{ tramitacaoadministrativo__unidade_tramitacao_destino }}
+ {% if object_list %}
+ {% if object_list|length == 1 %}
+ Foi encontrado 1 documento com esses parâmetros.
+ {% else %}
+ Foram encontrados {{object_list|length}} documentos com esses parâmetros.
+ {% endif %}
+
+
+
+ Documento
+ Ementa
+
+
+
+ {% for documento in object_list %}
+
+
+ {{documento.tipo.descricao}} - {{documento.tipo.sigla}} {{documento.numero}}/{{documento.ano}}
+
+ {{documento.ementa}} {{documento.observacao}}
+
+ {% endfor %}
+
+
+ {% else %}
+ Nenhum documento encontrado com esses parâmetros.
+ {% endif %}
+
+ Matérias em Tramitação
+
+ PARÂMETROS DE PESQUISA:
+ Ano: {{ ano }}
+ Tipo de matéria: {{ tipo }}
+ Status atual: {{ tramitacao__status }}
+ Local atual: {{ tramitacao__unidade_tramitacao_destino }}
+
+ {% if object_list|length %}
+
+
+
+ QUADRO GERAL
+
+ Tipo Matéria
+ Quantidade
+
+
+
+ {% for key, value in qtdes.items %}
+
+ {{key.sigla}} - {{key}}
+ {{value}}
+
+ {% endfor %}
+
+
+
+
+
+ {% for materia in object_list %}
+
+
+ {% endfor %}
+ {% else %}
+ Nenhum documento encontrado com essas especificações
+ {% endif %}
+
+ Normas por mês
+
+ PARÂMETROS DE PESQUISA:
+ Ano: {{ ano }}
+
+ {% if normas_mes|length == 0 %}
+
+ {% trans 'Não foi encontrada nenhuma norma com os parâmetros buscados.'%}
+ {% endif %}
+ {% for mes, normas in normas_mes.items %}
+
+
+
+
+ Mês: {{ mes }}
+
+
+
+
+
+
+ {% for k, v in quant_normas_mes.items %}
+ {% if k == mes %}
+ {% if v > 1 %}
+ Quantidade encontrada no mês: {{ v }} normas.
+ {% else %}
+ Quantidade encontrada no mês: 1 norma.
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+
+
+
+
+
+
+ Norma
+ Ementa
+
+
+
+ {% for n in normas %}
+
+
+ {{n.tipo.descricao}} - {{n.tipo.sigla}} {{n.numero}}/{{n.ano}}
+
+ {{n.ementa}} {{n.observacao}}
+
+ {% endfor %}
+
+
+
+ {% endfor %}
+
+ Normas por vigência
+
+ PARÂMETROS DE PESQUISA:
+ Ano: {{ ano }}
+ Vigência: {{ vigencia }}
+ {% if object_list %}
+
+ {% if object_list|length > 1 %}
+ Foram encontradas {{object_list|length}} normas.
+ {% else %}
+ Foi encontrada 1 norma.
+ {% endif %}
+
+
+
+
+ Norma
+ Ementa
+
+
+
+ {% for norma in object_list %}
+
+
+ {{norma.tipo.descricao}} - {{norma.tipo.sigla}} {{norma.numero}}/{{norma.ano}}
+
+ {{norma.ementa}} {{norma.observacao}}
+
+ {% endfor %}
+
+
+ {% else %}
+
+
+
+ Não foi encontrada nenhuma norma com os parâmetros buscados.
+
+
+
+ {% endif %}
+
+ Estatísticas das normas do ano:
+ {{quant_vigente}} vigente(s) / {{quant_nao_vigente}} não vigente(s)
+
+ Presença dos parlamentares nas sessões
+
+ PARÂMETROS DE PESQUISA:
+
+
+ {% if show_results %}
+
+
+
+ PERÍODO: {{periodo}}
+ Legislatura: {{legislatura}}
+ Sessão Legislativa: {{sessao_legislativa}}
+ TOTAIS NO PERÍODO - SESSÕES: {{total_sessao}} - ORDENS DO DIA: {{total_ordemdia}}
+
+
+
+
+ Nome Parlamentar / Partido
+ Titular?
+ Ativo?
+ Sessão
+ Ordem do Dia
+
+
+ (Qtd)
+ ( % )
+ (Qtd)
+ ( % )
+
+
+
+ {% for p in parlamentares %}
+
+ {{p.parlamentar}} / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}}
+ {% if p.titular %} Sim {% else %} Não {% endif %}
+ {% if p.parlamentar.ativo %} Sim {% else %} Não {% endif %}
+ {{p.sessao_count}}
+ {{p.sessao_porc}}
+ {{p.ordemdia_count}}
+ {{p.ordemdia_porc}}
+
+ {% endfor %}
+
+
+ {% endif %}
+
+ Reunião de Comissão
+
+ {% if object_list|length > 0 %}
+
+
+
+ Comissao
+ Nome
+
+
+
+ {% for reuniao in object_list %}
+
+
+ {{reuniao.comissao}}
+
+ {{reuniao.nome}}
+
+ {% endfor %}
+
+
+ {% else %}
+ Nenhum reunião foi encontrada!
+ {% endif %}
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_estatisticas_acesso_normas.html b/sapl/templates/relatorios/relatorio_estatisticas_acesso_normas.html
new file mode 100644
index 000000000..18abbfde7
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_estatisticas_acesso_normas.html
@@ -0,0 +1,54 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_fim_prazo_tramitacao.html b/sapl/templates/relatorios/relatorio_fim_prazo_tramitacao.html
new file mode 100644
index 000000000..6120c4290
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_fim_prazo_tramitacao.html
@@ -0,0 +1,46 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_historico_tramitacao.html b/sapl/templates/relatorios/relatorio_historico_tramitacao.html
new file mode 100644
index 000000000..0ba42b8fd
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_historico_tramitacao.html
@@ -0,0 +1,48 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
diff --git a/sapl/templates/relatorios/relatorio_historico_tramitacao_adm.html b/sapl/templates/relatorios/relatorio_historico_tramitacao_adm.html
new file mode 100644
index 000000000..c999f9cf3
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_historico_tramitacao_adm.html
@@ -0,0 +1,46 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_materias_em_tramitacao.html b/sapl/templates/relatorios/relatorio_materias_em_tramitacao.html
new file mode 100644
index 000000000..3304df5d6
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_materias_em_tramitacao.html
@@ -0,0 +1,78 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_materias_por_ano_autor.html b/sapl/templates/relatorios/relatorio_materias_por_ano_autor.html
new file mode 100644
index 000000000..77749fc95
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_materias_por_ano_autor.html
@@ -0,0 +1,97 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
+ {% endif %}
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_materias_por_autor.html b/sapl/templates/relatorios/relatorio_materias_por_autor.html
new file mode 100644
index 000000000..2fcfce982
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_materias_por_autor.html
@@ -0,0 +1,72 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
+
+
+ {% if object_list|length %}
+
+ {% for materia in object_list %}
+ {% ifchanged materia.autoria_set.first.autor %}
+
+ Autor: {{ materia.autoria_set.first.autor }}
+
+
+ {% endifchanged %}
+
+
+ {% endif %}
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_normas_mes.html b/sapl/templates/relatorios/relatorio_normas_mes.html
new file mode 100644
index 000000000..f880370a7
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_normas_mes.html
@@ -0,0 +1,64 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_normas_por_autor.html b/sapl/templates/relatorios/relatorio_normas_por_autor.html
new file mode 100644
index 000000000..3a4045003
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_normas_por_autor.html
@@ -0,0 +1,71 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
+ {% endif %}
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_normas_vigencia.html b/sapl/templates/relatorios/relatorio_normas_vigencia.html
new file mode 100644
index 000000000..c470cd970
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_normas_vigencia.html
@@ -0,0 +1,54 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_presenca_sessao.html b/sapl/templates/relatorios/relatorio_presenca_sessao.html
new file mode 100644
index 000000000..2ccbd4a14
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_presenca_sessao.html
@@ -0,0 +1,60 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_reuniao.html b/sapl/templates/relatorios/relatorio_reuniao.html
new file mode 100644
index 000000000..5d665c9fe
--- /dev/null
+++ b/sapl/templates/relatorios/relatorio_reuniao.html
@@ -0,0 +1,35 @@
+{% load i18n %}
+{% load common_tags %}
+{% load static %}
+
+
+
\ No newline at end of file
diff --git a/sapl/templates/relatorios/relatorio_sessao_plenaria.html b/sapl/templates/relatorios/relatorio_sessao_plenaria.html
index d88af15dc..93b593206 100644
--- a/sapl/templates/relatorios/relatorio_sessao_plenaria.html
+++ b/sapl/templates/relatorios/relatorio_sessao_plenaria.html
@@ -5,41 +5,6 @@