Browse Source

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
pull/2981/head
Ricardo Lima Canela 5 years ago
committed by Edward
parent
commit
94793f8389
  1. 268
      sapl/base/forms.py
  2. 78
      sapl/base/views.py
  3. 53
      sapl/relatorios/views.py
  4. 32
      sapl/templates/relatorios/relatorio_ata.html
  5. 36
      sapl/templates/relatorios/relatorio_atas.html
  6. 35
      sapl/templates/relatorios/relatorio_audiencia.html
  7. 35
      sapl/templates/relatorios/relatorio_doc_administrativos.html
  8. 41
      sapl/templates/relatorios/relatorio_documento_acessorio.html
  9. 54
      sapl/templates/relatorios/relatorio_estatisticas_acesso_normas.html
  10. 46
      sapl/templates/relatorios/relatorio_fim_prazo_tramitacao.html
  11. 48
      sapl/templates/relatorios/relatorio_historico_tramitacao.html
  12. 46
      sapl/templates/relatorios/relatorio_historico_tramitacao_adm.html
  13. 78
      sapl/templates/relatorios/relatorio_materias_em_tramitacao.html
  14. 97
      sapl/templates/relatorios/relatorio_materias_por_ano_autor.html
  15. 72
      sapl/templates/relatorios/relatorio_materias_por_autor.html
  16. 64
      sapl/templates/relatorios/relatorio_normas_mes.html
  17. 71
      sapl/templates/relatorios/relatorio_normas_por_autor.html
  18. 54
      sapl/templates/relatorios/relatorio_normas_vigencia.html
  19. 60
      sapl/templates/relatorios/relatorio_presenca_sessao.html
  20. 35
      sapl/templates/relatorios/relatorio_reuniao.html
  21. 35
      sapl/templates/relatorios/relatorio_sessao_plenaria.html

268
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('''
<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,
form_actions(label='Pesquisar'))
buttons)
)
@ -791,11 +807,26 @@ class RelatorioAtasFilterSet(django_filters.FilterSet):
row1 = to_row([('data_inicio', 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(_('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('''
<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(_('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('''
<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.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('''
<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(_('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('''
<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(_('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('''
<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(_(''),
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('''
<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(_('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('''
<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(_('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('''
<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(_('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('''
<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 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('''
<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(_('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('''
<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(_('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('''
<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(_(''),
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('''
<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'

78
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,6 +1104,14 @@ class EstatisticasAcessoNormas(TemplateView):
context['normas_mes'] = normas_mes
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)
@ -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

53
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))
@ -1355,7 +1354,7 @@ def relatorio_doc_administrativos(request, context):
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)
@ -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__)

32
sapl/templates/relatorios/relatorio_ata.html

@ -1,38 +1,6 @@
{% load common_tags %}
{% load static %}
<head>
<style>
@page{
@bottom-right {
content: "Página" counter(page);
height: 3cm;
font-size: 8pt;
}
@bottom-center {
border-top: 1px solid black;
font-size: 8pt;
height: 1cm;
content: "{{rodape|safe}}";
font-style:italic;
}
@bottom-left {
content: "{{data}}";
height: 3cm;
font-size: 8pt;
}
@top-center {
content: string(title);
}
header {
width: 0;
height: 0;
visibility: hidden;
string-set: title content();
}
}
</style>
<link rel="stylesheet" href="{% static 'sapl/css/relatorio.css'%}">
</head>

36
sapl/templates/relatorios/relatorio_atas.html

@ -0,0 +1,36 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Relatório de Atas das Sessões Plenárias</h2>
<b>PERÍODO: {{ periodo }}<br /></b><br /><br/>
{% if object_list|length > 0 %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Sessão</th>
<th>Ata</th>
</tr>
</thead>
<tbody>
{% for sessao in object_list %}
<tr>
<td>{{sessao}}</td>
<td><a href="{{ sessao.upload_ata.url }}">
<img src="{% static 'img/file.png' %}">
</a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<font size="5"><p align="center">Nenhum sessão com ata foi encontrada!</p></font>
{% endif %}
</body>

35
sapl/templates/relatorios/relatorio_audiencia.html

@ -0,0 +1,35 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Audiência Pública</h2>
{% if object_list|length > 0 %}
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active">
<th>Tipo de Audiência</th>
<th>Nome</th>
</tr>
</thead>
<tbody>
{% for audiencia in object_list %}
<tr>
<td>
{{audiencia.tipo}}
</td>
<td>{{audiencia.nome}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<font size="5"><p align="center">Nenhuma Audiência Pública foi encontrada!</p></font>
{% endif %}
</body>

35
sapl/templates/relatorios/relatorio_doc_administrativos.html

@ -3,41 +3,6 @@
{% load crispy_forms_tags staticfiles %}
<head>
<style>
@page{
margin-top: 5cm;
size: A4 portrait;
@bottom-right {
content: "Página" counter(page);
height: 3cm;
font-size: 8pt;
}
@bottom-center {
border-top: 1px solid black;
font-size: 8pt;
height: 1cm;
content: "{{rodape|safe}}";
font-style:italic;
}
@bottom-left {
content: "{{data}}";
height: 3cm;
font-size: 8pt;
}
@top-center {
content: string(title);
}
header {
width: 0;
height: 0;
visibility: hidden;
string-set: title content();
}
}
</style>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>

41
sapl/templates/relatorios/relatorio_documento_acessorio.html

@ -0,0 +1,41 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<h2>Documento Acessorio</h2>
<b>PARÂMETROS DE PESQUISA<br /></b>
&emsp;Tipo de Documento: {{ tipo_documento }}<br />
&emsp;Tipo de Matéria do Documento: {{ tipo_materia }}<br />
&emsp;Período: {{ periodo }}<br /><br /><br />
{% if object_list %}
{% if object_list|length == 1 %}
<tr><td><h3 style="text-align: left;">Foi encontrado 1 documento com esses parâmetros.</h3></td></tr><br><br>
{% else %}
<tr><td><h3 style="text-align: left;">Foram encontrados {{ object_list|length }} documentos com esses parâmetros.</h3></td></tr><br><br>
{% endif %}
<table class="table table-bordered table-hover">
<thead class="thead-default">
<tr class="active">
<th>Documento Acessório</th>
<th>Matéria do Documento</th>
</tr>
</thead>
<tbody>
{% for documento in object_list %}
<tr>
<td>{{ documento }}</td>
<td>{{ documento.materia }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<tr><td><h3 style="text-align: left;">Nenhuma documento encontrado com esses parâmetros.</h3></td></tr><br><br>
{% endif %}
</body>

54
sapl/templates/relatorios/relatorio_estatisticas_acesso_normas.html

@ -0,0 +1,54 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Estatísticas de acesso de normas</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
&emsp;Ano: {{ ano }} <br />
<br/>
{% if normas_mes|length == 0 %}
<br>
<h3>{% trans 'Nenhuma norma teve acesso neste ano.'%}</h3>
{% else %}
{% for mes, normas in normas_mes.items %}
<div style="overflow:auto; ">
<table class="table table-bordered table-hover" style="margin-bottom: 0px;">
<thead class="thead-default">
<tr>
<th><h3 style="text-align:center;">Mês: {{ mes }}</h3></th>
</tr>
</thead>
</table>
<table class="table table-bordered table-hover" style="width:100%; margin-bottom: 30px;">
<thead class="thead-default" >
<tr class="active">
<th>Norma</th>
<th>Ementa</th>
<th>Acessos</th>
</tr>
</thead>
<tbody>
{% for n in normas %}
{% if n.1 > 0 %}
<tr>
<td>
{{n.0.tipo.descricao}} - {{n.0.tipo.sigla}} {{n.0.numero}}/{{n.0.ano}}
</td>
<td>{{n.0.ementa}}<br>{{n.0.observacao}}</td>
<td>{{n.1}}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
{% endfor %}
{% endif %}
</body>

46
sapl/templates/relatorios/relatorio_fim_prazo_tramitacao.html

@ -0,0 +1,46 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Fim de Prazo de Tramitações</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
&emsp;Período: {{ data_tramitacao }} <br />
&emsp;Tipo de matéria: {{ tipo }}<br />
&emsp;Status atual: {{ tramitacao__status }}<br />
&emsp;Local de origem: {{ tramitacao__unidade_tramitacao_local }}<br />
&emsp;Local de destino: {{ tramitacao__unidade_tramitacao_destino }}<br /><br /><br />
{% if object_list %}
{% if object_list|length == 1 %}
<tr><td><h3 style="text-align: left;">Foi encontrada 1 matéria com esses parâmetros.</h3></td></tr><br><br>
{% else %}
<tr><td><h3 style="text-align: left;">Foram encontradas {{object_list|length}} matérias com esses parâmetros.</h3></td></tr><br><br>
{% endif %}
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active">
<th>Matéria</th>
<th>Ementa</th>
</tr>
</thead>
<tbody>
{% for materia in object_list %}
<tr>
<td>
{{materia.tipo.descricao}} - {{materia.tipo.sigla}} {{materia.numero}}/{{materia.ano}}
</td>
<td>{{materia.ementa}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<tr><td><h3 style="text-align: left;">Nenhuma matéria encontrada com esses parâmetros.</h3></td></tr><br><br>
{% endif %}
</body>

48
sapl/templates/relatorios/relatorio_historico_tramitacao.html

@ -0,0 +1,48 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Histórico de Tramitações de Matérias Legislativas</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
Período: {{ data_tramitacao }} <br />
Tipo de matéria: {{ tipo }}<br />
Status atual: {{ tramitacao__status }}<br />
Local de origem: {{ tramitacao__unidade_tramitacao_local }}<br />
Local de destino: {{ tramitacao__unidade_tramitacao_destino }}<br /><br /><br />
{% if object_list %}
{% if object_list|length == 1 %}
<tr><td><h3 style="text-align: left;">Foi encontrada 1 matéria com esses parâmetros.</h3></td></tr><br><br>
{% else %}
<tr><td><h3 style="text-align: left;">Foram encontradas {{object_list|length}} matérias com esses parâmetros.</h3></td></tr><br><br>
{% endif %}
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active">
<th>Matéria</th>
<th>Ementa</th>
</tr>
</thead>
<tbody>
{% for materia in object_list %}
<tr>
<td>
{{materia.tipo.descricao}} - {{materia.tipo.sigla}} {{materia.numero}}/{{materia.ano}}
</td>
<td>{{materia.ementa}}<br>{{materia.observacao}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<tr><td><h3 style="text-align: left;">Nenhuma matéria encontrada com esses parâmetros.</h3></td></tr><br><br>
{% endif %}
</body>

46
sapl/templates/relatorios/relatorio_historico_tramitacao_adm.html

@ -0,0 +1,46 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Histórico de Tramitações de Documento Administrativo</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
&emsp;Período: {{ data_tramitacao }} <br />
&emsp;Tipo de documento: {{ tipo }}<br />
&emsp;Status atual: {{ tramitacaoadministrativo__status }}<br />
&emsp;Local de origem: {{ tramitacaoadministrativo__unidade_tramitacao_local }}<br />
&emsp;Local de destino: {{ tramitacaoadministrativo__unidade_tramitacao_destino }}<br /><br /><br />
{% if object_list %}
{% if object_list|length == 1 %}
<tr><td><h3 style="text-align: left;">Foi encontrado 1 documento com esses parâmetros.</h3></td></tr><br><br>
{% else %}
<tr><td><h3 style="text-align: left;">Foram encontrados {{object_list|length}} documentos com esses parâmetros.</h3></td></tr><br><br>
{% endif %}
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active">
<th>Documento</th>
<th>Ementa</th>
</tr>
</thead>
<tbody>
{% for documento in object_list %}
<tr>
<td>
{{documento.tipo.descricao}} - {{documento.tipo.sigla}} {{documento.numero}}/{{documento.ano}}
</td>
<td>{{documento.ementa}}<br>{{documento.observacao}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<tr><td><h3 style="text-align: left;">Nenhum documento encontrado com esses parâmetros.</h3></td></tr><br><br>
{% endif %}
</body>

78
sapl/templates/relatorios/relatorio_materias_em_tramitacao.html

@ -0,0 +1,78 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Matérias em Tramitação</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
Ano: {{ ano }} <br />
Tipo de matéria: {{ tipo }}<br />
Status atual: {{ tramitacao__status }}<br />
Local atual: {{ tramitacao__unidade_tramitacao_destino }}<br /><br /><br />
{% if object_list|length %}
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active"><th colspan="2" class="text-center">QUADRO GERAL</th></tr>
<tr class="active">
<th>Tipo Matéria</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
{% for key, value in qtdes.items %}
<tr>
<td>{{key.sigla}} - {{key}}</td>
<td>{{value}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</br>
</br>
{% for materia in object_list %}
<div style="border-top: 1px solid black;margin-bottom:0.3cm">
{% if not request.user.is_anonymous%}
<strong>Matéria:</strong> {{materia.tipo.descricao}} {{materia.numero}}/{{materia.ano}}
</br>
<strong>Local Atual:</strong>&nbsp;<a> {{materia.tramitacao_set.last.unidade_tramitacao_destino}} </a>
</br>
<strong>Status:</strong>&nbsp;<a> {{materia.tramitacao_set.last.status}} </a>
</br>
{% if d.protocolo %}
<strong>Protocolo:</strong>&nbsp;<a href="{% url 'sapl.protocoloadm:protocolo_mostrar' d.protocolo.id %}">{{ d.protocolo}}</a></br>
{% endif %}
{% define d.tramitacaoadministrativo_set.last as tram %}
{% if tram.unidade_tramitacao_destino %}
<strong>Localização Atual:</strong> &nbsp;{{tram.unidade_tramitacao_destino}}
</br>
<strong>Status:</strong> {{tram.status}}
</br>
{% endif %}
{% define d.documentoacessorioadministrativo_set.all as acess %}
{% if d.documentoacessorioadministrativo_set.all.exists %}
<strong>Documentos Acessórios:</strong>
<a href="{% url 'sapl.protocoloadm:documentoacessorioadministrativo_list' d.id %}">
{{ d.documentoacessorioadministrativo_set.all.count }}
</a>
</br>
{% endif %}
{% if d.tramitacao and mail_service_configured %}
<a href="{% url 'sapl.protocoloadm:acompanhar_documento' d.id %}">Acompanhar Documento</a>
{% endif %}
{% endif %}
</div>
{% endfor %}
{% else %}
<h3>Nenhum documento encontrado com essas especificações</h3>
{% endif %}
</body>

97
sapl/templates/relatorios/relatorio_materias_por_ano_autor.html

@ -0,0 +1,97 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<h2>Matérias por Ano Autor Tipo</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
&emsp;Ano: {{ano}}<br /><br /><br/>
{% if object_list|length %}
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active"><th colspan="2" class="text-center">QUADRO GERAL</th></tr>
<tr class="active">
<th>Tipo Matéria</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
{% for key, value in qtdes.items %}
<tr>
<td>{{key.sigla}} - {{key}}</td>
<td>{{value}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</br>
</br>
{% if object_list|length %}
<h1>Autorias</h1>
<br/><br/>
{% for r in relatorio %}
<h2>{{r.autor}}</h2><br/>
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active">
<th>Natureza da Propositura</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
{% for i in r.materia %}
<tr>
<td>{{i.0}}</td><td>{{i.1}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<h3>Total: {{r.total}}</h3><br/>
<br/>
<br/>
{% endfor %}
<br/><br/>
<h1>Coautorias</h1>
<br/><br/>
{% for r in corelatorio %}
<h2>{{r.autor}}</h2><br/>
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active">
<th>Natureza da Propositura</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
{% for i in r.materia %}
<tr>
<td>{{i.0}}</td><td>{{i.1}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<h3>Total: {{r.total}}</h3><br/>
<br/>
<br/>
{% endfor %}
{% endif %}
{% else %}
<h3>Nenhum documento encontrado com essas especificações</h3>
{% endif %}
</body>

72
sapl/templates/relatorios/relatorio_materias_por_autor.html

@ -0,0 +1,72 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<h2>Matérias por Autor</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
&emsp;Autor: {{ autor }}<br />
&emsp;Tipo de matéria: {{ tipo }}<br />
&emsp;Data de apresentação: {{periodo}}<br /><br /><br/>
{% if object_list|length %}
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active"><th colspan="2" class="text-center">QUADRO GERAL</th></tr>
<tr class="active">
<th>Tipo Matéria</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
{% for key, value in qtdes.items %}
<tr>
<td>{{key.sigla}} - {{key}}</td>
<td>{{value}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</br>
</br>
{% if object_list|length %}
{% for materia in object_list %}
{% ifchanged materia.autoria_set.first.autor %}
</br>
<strong>Autor: {{ materia.autoria_set.first.autor }}</strong>
</br>
</br>
{% endifchanged %}
<div style="border-top: 1px solid black;margin-bottom:0.3cm">
<strong>Matéria:</strong> {{materia.tipo.descricao}} {{materia.numero}}/{{materia.ano}}
</br>
<strong>Ementa:</strong> {{materia.ementa}}
</br>
<strong>Coautor(es):</strong> {% if materia.autoria_set.first != materia.autoria_set.last %}
{% for autor in materia.autoria_set.all %}
{% if not autor.primeiro_autor %}
{{ autor.autor }}<br />
{% endif %}
{% endfor %}
{% endif %}
</br>
</div>
{% endfor %}
{% endif %}
{% else %}
<h3>Nenhum documento encontrado com essas especificações</h3>
{% endif %}
</body>

64
sapl/templates/relatorios/relatorio_normas_mes.html

@ -0,0 +1,64 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Normas por mês</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
&emsp;Ano: {{ ano }} <br />
<br/>
{% if normas_mes|length == 0 %}
<br>
<h3>{% trans 'Não foi encontrada nenhuma norma com os parâmetros buscados.'%}</h3>
{% endif %}
{% for mes, normas in normas_mes.items %}
<div style="overflow:auto; ">
<table class="table table-bordered table-hover" style="margin-bottom: 0px;">
<thead class="thead-default">
<tr>
<th><h3 style="text-align:center;">Mês: {{ mes }}</h3></th>
</tr>
</thead>
</table>
<table class="table table-bordered table-hover" style="width:100%; margin-bottom: 0px;">
<thead class="thead-default" >
<tr class="active">
{% for k, v in quant_normas_mes.items %}
{% if k == mes %}
{% if v > 1 %}
<th>Quantidade encontrada no mês: {{ v }} normas.</th>
{% else %}
<th>Quantidade encontrada no mês: 1 norma.</th>
{% endif %}
{% endif %}
{% endfor %}
</tr>
</thead>
</table>
<table class="table table-bordered table-hover" style="width:100%; margin-bottom: 30px;">
<thead class="thead-default" >
<tr class="active">
<th>Norma</th>
<th>Ementa</th>
</tr>
</thead>
<tbody>
{% for n in normas %}
<tr>
<td>
{{n.tipo.descricao}} - {{n.tipo.sigla}} {{n.numero}}/{{n.ano}}
</td>
<td>{{n.ementa}}<br>{{n.observacao}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endfor %}
</body>

71
sapl/templates/relatorios/relatorio_normas_por_autor.html

@ -0,0 +1,71 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<h2>Norma por Autor</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
&emsp;Autor: {{ autor }}<br />
&emsp;Tipo de Norma: {{ tipo }}<br />
&emsp;Data: {{periodo}}<br /><br /><br/>
{% if object_list %}
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active"><th colspan="3" class="text-center">QUADRO GERAL</th></tr>
<tr class="active">
<th colspan="2">Tipo de Norma</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
{% for key, value in qtdes.items %}
<tr>
<td colspan="2">{{key.sigla}} - {{key}}</td>
<td>{{value}}</td>
</tr>
{% endfor %}
</tbody>
{% for norma in object_list %}
{% ifchanged norma.autorianorma_set.first.autor %}
<thead class="thead-default" >
<tr style="border-left: hidden; border-right: hidden;"><th colspan="3"></th></tr>
<tr class="active"><th colspan="3" class="text-center">Autor: {{ norma.autorianorma_set.first.autor }}</th></tr>
<tr class="active">
<th width="10%">Norma</th>
<th>Ementa</th>
<th width="20%">Coautor(es)</th>
</tr>
</thead>
{% endifchanged %}
<tbody>
<tr>
<td>
{{norma.tipo.sigla}} {{norma.numero}}/{{norma.ano}}
</td>
<td>{% autoescape off %}{{norma.ementa}}<br>{{norma.observacao}}{% endautoescape %}</td>
<td>
{% if norma.autorianorma_set.first != norma.autorianorma_set.last %}
{% for autor in norma.autorianorma_set.all %}
{% if not autor.primeiro_autor %}
{{ autor.autor }}<br />
{% endif %}
{% endfor %}
{% endif %}
</td>
</tr>
</tbody>
{% endfor %}
</table>
{% else %}
<h3>Não foram encontradas normas com os parâmetros pesquisados.</h3>
{% endif %}
</body>

54
sapl/templates/relatorios/relatorio_normas_vigencia.html

@ -0,0 +1,54 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Normas por vigência</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
&emsp;Ano: {{ ano }} <br />
&emsp;Vigência: {{ vigencia }} <br />
{% if object_list %}
<br/>
{% if object_list|length > 1 %}
<h3>Foram encontradas {{object_list|length}} normas.</h3>
{% else %}
<h3>Foi encontrada 1 norma.</h3>
{% endif %}
<br/>
<table class="table table-bordered table-hover" style="width:100%">
<thead class="thead-default" >
<tr class="active">
<th>Norma</th>
<th>Ementa</th>
</tr>
</thead>
<tbody>
{% for norma in object_list %}
<tr>
<td>
{{norma.tipo.descricao}} - {{norma.tipo.sigla}} {{norma.numero}}/{{norma.ano}}
</td>
<td>{{norma.ementa}}<br>{{norma.observacao}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<table class="table table-bordered table-hover" style="margin-top:30px;">
<thead class="thead-default" >
<tr class="active">
<th> Não foi encontrada nenhuma norma com os parâmetros buscados.</th>
</tr>
</thead>
</table>
{% endif %}
<br>
<h3>Estatísticas das normas do ano:</h3><br>
<h3>{{quant_vigente}} vigente(s) / {{quant_nao_vigente}} não vigente(s)</h3>
</body>

60
sapl/templates/relatorios/relatorio_presenca_sessao.html

@ -0,0 +1,60 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Presença dos parlamentares nas sessões</h2>
<b>PARÂMETROS DE PESQUISA:<br /></b>
{% if show_results %}
<style type="text/css">
.presenca_table td, th{
text-align: center;
}
</style>
<br />
PERÍODO: {{periodo}}<br />
Legislatura: {{legislatura}}<br />
Sessão Legislativa: {{sessao_legislativa}}<br />
TOTAIS NO PERÍODO - SESSÕES: {{total_sessao}} - ORDENS DO DIA: {{total_ordemdia}}</b>
<br /><br />
<table class="table table-bordered table-hover presenca_table">
<thead class="thead-default" align="center">
<tr class="active">
<th rowspan="2">Nome Parlamentar / Partido</th>
<th rowspan="2">Titular?</th>
<th rowspan="2">Ativo?</th>
<th colspan="2">Sessão</th>
<th colspan="2">Ordem do Dia</th>
</tr>
<tr class="active">
<th>(Qtd)</th>
<th>( % )</th>
<th>(Qtd)</th>
<th>( % )</th>
</tr>
</thead>
<tbody>
{% for p in parlamentares %}
<tr>
<td><b>{{p.parlamentar}}</b> / {{p.parlamentar|filiacao_intervalo_filter:date_range|default:"Sem Partido"}}</td>
<td>{% if p.titular %} Sim {% else %} Não {% endif %}</td>
<td>{% if p.parlamentar.ativo %} Sim {% else %} Não {% endif %}</td>
<td>{{p.sessao_count}}</td>
<td>{{p.sessao_porc}}</td>
<td>{{p.ordemdia_count}}</td>
<td>{{p.ordemdia_porc}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</body>

35
sapl/templates/relatorios/relatorio_reuniao.html

@ -0,0 +1,35 @@
{% load i18n %}
{% load common_tags %}
{% load static %}
<head>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>
<body>
<h2>Reunião de Comissão</h2>
{% if object_list|length > 0 %}
<table class="table table-bordered table-hover">
<thead class="thead-default" >
<tr class="active">
<th>Comissao</th>
<th>Nome</th>
</tr>
</thead>
<tbody>
{% for reuniao in object_list %}
<tr>
<td><a href="{% url 'sapl.comissoes:reuniao_detail' reuniao.pk %}">
{{reuniao.comissao}}
</a></td>
<td>{{reuniao.nome}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<font size="5"><p align="center">Nenhum reunião foi encontrada!</p></font>
{% endif %}
</body>

35
sapl/templates/relatorios/relatorio_sessao_plenaria.html

@ -5,41 +5,6 @@
<html lang="pt-br">
<head>
<style>
@page{
margin-top: 5cm;
size: A4 portrait;
@bottom-right {
content: "Página" counter(page);
height: 3cm;
font-size: 8pt;
}
@bottom-center {
border-top: 1px solid black;
font-size: 8pt;
height: 1cm;
content: "{{rodape|safe}}";
font-style:italic;
}
@bottom-left {
content: "{{data}}";
height: 3cm;
font-size: 8pt;
}
@top-center {
content: string(title);
}
header {
width: 0;
height: 0;
visibility: hidden;
string-set: title content();
}
}
</style>
<link rel="stylesheet" href="{% static '/sapl/css/relatorio.css'%}">
</head>

Loading…
Cancel
Save