Browse Source

Adicionando multimídia em relatorio de sessao plenaria (#3128)

* Adicionando multimídia em relatorio de sessao plenaria

* Movendo campo multimidia para cima

* Mais alguns ajustes no layout

* Ajusta tamanho de conteúdo multimídia

* Adiciona seções faltantes

* Retornando botão de relatorio antigo

* ajustes layout

* Adiciona ordenação

* Comentando botão impressão antiga

Co-authored-by: Edward Ribeiro <eribeiro@interlegis.leg.br>
pull/3163/head
Ulysses Lara 5 years ago
committed by eribeiro
parent
commit
75a780ac93
  1. 262
      sapl/relatorios/views.py
  2. 1
      sapl/static/sapl/css/relatorio.css
  3. 2
      sapl/templates/relatorios/base_relatorio.html
  4. 3
      sapl/templates/relatorios/blocos_sessao_plenaria/conteudo_multimidia.html
  5. 5
      sapl/templates/relatorios/blocos_sessao_plenaria/expedientes.html
  6. 4
      sapl/templates/relatorios/blocos_sessao_plenaria/identificacao_basica.html
  7. 21
      sapl/templates/relatorios/blocos_sessao_plenaria/justificativa_ausencia_sessao.html
  8. 6
      sapl/templates/relatorios/blocos_sessao_plenaria/lista_presenca_ordemdia.html
  9. 4
      sapl/templates/relatorios/blocos_sessao_plenaria/lista_presenca_sessao.html
  10. 27
      sapl/templates/relatorios/blocos_sessao_plenaria/materias_expediente.html
  11. 27
      sapl/templates/relatorios/blocos_sessao_plenaria/materias_ordemdia.html
  12. 4
      sapl/templates/relatorios/blocos_sessao_plenaria/mesa_diretora.html
  13. 4
      sapl/templates/relatorios/blocos_sessao_plenaria/ocorrencias_sessao.html
  14. 7
      sapl/templates/relatorios/blocos_sessao_plenaria/oradores_expediente.html
  15. 8
      sapl/templates/relatorios/blocos_sessao_plenaria/oradores_explicacoes.html
  16. 7
      sapl/templates/relatorios/blocos_sessao_plenaria/oradores_ordemdia.html
  17. 27
      sapl/templates/relatorios/blocos_sessao_plenaria/votos_nominais_expediente.html
  18. 27
      sapl/templates/relatorios/blocos_sessao_plenaria/votos_nominais_ordemdia.html
  19. 162
      sapl/templates/relatorios/relatorio_sessao_plenaria.html
  20. 10
      sapl/templates/sessao/resumo.html

262
sapl/relatorios/views.py

@ -4,7 +4,6 @@ import logging
import re import re
import tempfile import tempfile
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404, HttpResponse from django.http import Http404, HttpResponse
from django.utils import timezone from django.utils import timezone
@ -25,7 +24,7 @@ from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao,
Orador, OradorExpediente, Orador, OradorExpediente,
OrdemDia, PresencaOrdemDia, SessaoPlenaria, OrdemDia, PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, OcorrenciaSessao, SessaoPlenariaPresenca, OcorrenciaSessao,
RegistroVotacao, VotoParlamentar, OradorOrdemDia, TipoExpediente) RegistroVotacao, VotoParlamentar, OradorOrdemDia, TipoExpediente, ResumoOrdenacao)
from sapl.settings import STATIC_ROOT from sapl.settings import STATIC_ROOT
from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data
@ -58,7 +57,6 @@ def get_kwargs_params(request, fields):
def get_cabecalho(casa): def get_cabecalho(casa):
cabecalho = {} cabecalho = {}
cabecalho["nom_casa"] = casa.nome cabecalho["nom_casa"] = casa.nome
uf_dict = dict(LISTA_DE_UFS) uf_dict = dict(LISTA_DE_UFS)
@ -74,7 +72,6 @@ def get_imagem(casa):
def get_rodape(casa): def get_rodape(casa):
if len(casa.cep) == 8: if len(casa.cep) == 8:
cep = casa.cep[:4] + "-" + casa.cep[5:] cep = casa.cep[:4] + "-" + casa.cep[5:]
else: else:
@ -110,12 +107,11 @@ def get_rodape(casa):
def get_materias(mats): def get_materias(mats):
materias = [] materias = []
for materia in mats: for materia in mats:
dic = {} dic = {}
dic['titulo'] = materia.tipo.sigla + " " + materia.tipo.descricao \ dic['titulo'] = materia.tipo.sigla + " " + materia.tipo.descricao \
+ " " + str(materia.numero) + "/" + str(materia.ano) + " " + str(materia.numero) + "/" + str(materia.ano)
dic['txt_ementa'] = materia.ementa dic['txt_ementa'] = materia.ementa
dic['nom_autor'] = ', '.join( dic['nom_autor'] = ', '.join(
@ -250,7 +246,7 @@ def get_capa_processo(prot):
for numera in Numeracao.objects.filter(materia=materia_num): for numera in Numeracao.objects.filter(materia=materia_num):
# FIXME i18n # FIXME i18n
dic['numeracao'] = 'PROCESSO N&#176; ' + \ dic['numeracao'] = 'PROCESSO N&#176; ' + \
str(numera.numero) + '/' + str(numera.ano) str(numera.numero) + '/' + str(numera.ano)
dic['anulado'] = '' dic['anulado'] = ''
if p.anulado == 1: if p.anulado == 1:
dic['anulado'] = 'Nulo' dic['anulado'] = 'Nulo'
@ -294,7 +290,6 @@ def relatorio_capa_processo(request):
def get_ordem_dia(ordem, sessao): def get_ordem_dia(ordem, sessao):
# TODO: fazer implementação de ordem dia # TODO: fazer implementação de ordem dia
pass pass
@ -361,7 +356,6 @@ def relatorio_documento_administrativo(request):
def get_documento_administrativo(docs): def get_documento_administrativo(docs):
documentos = [] documentos = []
for d in docs: for d in docs:
dic = {} dic = {}
@ -505,7 +499,6 @@ def remove_html_comments(text):
def get_sessao_plenaria(sessao, casa): def get_sessao_plenaria(sessao, casa):
inf_basicas_dic = {} inf_basicas_dic = {}
inf_basicas_dic["num_sessao_plen"] = str(sessao.numero) inf_basicas_dic["num_sessao_plen"] = str(sessao.numero)
inf_basicas_dic["nom_sessao"] = sessao.tipo.nome inf_basicas_dic["nom_sessao"] = sessao.tipo.nome
@ -524,14 +517,14 @@ def get_sessao_plenaria(sessao, casa):
if sessao.tipo.nome == 'Solene': if sessao.tipo.nome == 'Solene':
inf_basicas_dic["tema_solene"] = sessao.tema_solene inf_basicas_dic["tema_solene"] = sessao.tema_solene
# Conteudo multimidia # Conteudo multimidia
cont_mult_dic = {} cont_mult_dic = {}
if sessao.url_audio: if sessao.url_audio:
cont_mult_dic['multimidia_audio'] = str(sessao.url_audio) cont_mult_dic['multimidia_audio'] = str(sessao.url_audio)
else: else:
cont_mult_dic['multimidia_audio'] = 'Indisponível' cont_mult_dic['multimidia_audio'] = 'Indisponível'
if sessao.url_video: if sessao.url_video:
cont_mult_dic['multimidia_video'] = str(sessao.url_video) cont_mult_dic['multimidia_video'] = str(sessao.url_video)
else: else:
@ -597,7 +590,7 @@ def get_sessao_plenaria(sessao, casa):
# https://github.com/interlegis/sapl/issues/1046 # https://github.com/interlegis/sapl/issues/1046
conteudo = re.sub('style=".*?"', '', conteudo) conteudo = re.sub('style=".*?"', '', conteudo)
conteudo = re.sub('class=".*?"', '', conteudo) conteudo = re.sub('class=".*?"', '', conteudo)
conteudo = re.sub('align=".*?"', '', conteudo) # OSTicket Ticket #796450 conteudo = re.sub('align=".*?"', '', conteudo) # OSTicket Ticket #796450
conteudo = re.sub('<p\s+>', '<p>', conteudo) conteudo = re.sub('<p\s+>', '<p>', conteudo)
conteudo = re.sub('<br\s+/>', '<br/>', conteudo) # OSTicket Ticket #796450 conteudo = re.sub('<br\s+/>', '<br/>', conteudo) # OSTicket Ticket #796450
conteudo = html.unescape(conteudo) conteudo = html.unescape(conteudo)
@ -632,8 +625,8 @@ def get_sessao_plenaria(sessao, casa):
materia=expediente_materia.materia).first() materia=expediente_materia.materia).first()
if numeracao: if numeracao:
dic_expediente_materia["des_numeracao"] = ( dic_expediente_materia["des_numeracao"] = (
str(numeracao.numero_materia) + '/' + str( str(numeracao.numero_materia) + '/' + str(
numeracao.ano_materia)) numeracao.ano_materia))
turno, _ = get_turno(materia) turno, _ = get_turno(materia)
@ -673,20 +666,20 @@ def get_sessao_plenaria(sessao, casa):
materias_expediente_votacao_nominal = ExpedienteMateria.objects.filter( materias_expediente_votacao_nominal = ExpedienteMateria.objects.filter(
sessao_plenaria=sessao, sessao_plenaria=sessao,
tipo_votacao=2).order_by('-materia') tipo_votacao=2).order_by('-materia')
for mevn in materias_expediente_votacao_nominal: for mevn in materias_expediente_votacao_nominal:
votos_materia = [] votos_materia = []
titulo_materia = mevn.materia titulo_materia = mevn.materia
registro = RegistroVotacao.objects.filter(expediente=mevn) registro = RegistroVotacao.objects.filter(expediente=mevn)
if registro: if registro:
for vp in VotoParlamentar.objects.filter(votacao=registro).order_by('parlamentar'): for vp in VotoParlamentar.objects.filter(votacao=registro).order_by('parlamentar'):
votos_materia.append(vp) votos_materia.append(vp)
dic_expediente_materia_vot_nom = { dic_expediente_materia_vot_nom = {
'titulo': titulo_materia, 'titulo': titulo_materia,
'votos': votos_materia 'votos': votos_materia
} }
lst_expediente_materia_vot_nom.append(dic_expediente_materia_vot_nom) lst_expediente_materia_vot_nom.append(dic_expediente_materia_vot_nom)
# Lista dos oradores do Expediente # Lista dos oradores do Expediente
@ -734,19 +727,18 @@ def get_sessao_plenaria(sessao, casa):
dic_votacao["nom_resultado"] = '' dic_votacao["nom_resultado"] = ''
dic_votacao["num_ordem"] = votacao.numero_ordem dic_votacao["num_ordem"] = votacao.numero_ordem
dic_votacao["id_materia"] = ( dic_votacao["id_materia"] = (
materia.tipo.sigla + ' ' + materia.tipo.sigla + ' ' +
materia.tipo.descricao + ' ' + materia.tipo.descricao + ' ' +
str(materia.numero) + '/' + str(materia.numero) + '/' +
str(materia.ano)) str(materia.ano))
dic_votacao["des_numeracao"] = ' ' dic_votacao["des_numeracao"] = ' '
numeracao = materia.numeracao_set.first() numeracao = materia.numeracao_set.first()
if numeracao: if numeracao:
dic_votacao["des_numeracao"] = ( dic_votacao["des_numeracao"] = (
str(numeracao.numero_materia) + str(numeracao.numero_materia) +
'/' + '/' +
str(numeracao.ano_materia)) str(numeracao.ano_materia))
turno, _ = get_turno(materia) turno, _ = get_turno(materia)
@ -784,20 +776,20 @@ def get_sessao_plenaria(sessao, casa):
materias_ordem_dia_votacao_nominal = OrdemDia.objects.filter( materias_ordem_dia_votacao_nominal = OrdemDia.objects.filter(
sessao_plenaria=sessao, sessao_plenaria=sessao,
tipo_votacao=2).order_by('-materia') tipo_votacao=2).order_by('-materia')
for modvn in materias_ordem_dia_votacao_nominal: for modvn in materias_ordem_dia_votacao_nominal:
votos_materia_od = [] votos_materia_od = []
t_materia = modvn.materia t_materia = modvn.materia
registro_od = RegistroVotacao.objects.filter(ordem=modvn) registro_od = RegistroVotacao.objects.filter(ordem=modvn)
if registro_od: if registro_od:
for vp_od in VotoParlamentar.objects.filter(votacao=registro_od).order_by('parlamentar'): for vp_od in VotoParlamentar.objects.filter(votacao=registro_od).order_by('parlamentar'):
votos_materia_od.append(vp_od) votos_materia_od.append(vp_od)
dic_votacao_vot_nom = { dic_votacao_vot_nom = {
'titulo': t_materia, 'titulo': t_materia,
'votos': votos_materia_od 'votos': votos_materia_od
} }
lst_votacao_vot_nom.append(dic_votacao_vot_nom) lst_votacao_vot_nom.append(dic_votacao_vot_nom)
# Lista dos oradores da Ordem do Dia # Lista dos oradores da Ordem do Dia
@ -811,7 +803,7 @@ def get_sessao_plenaria(sessao, casa):
parlamentar_orador = Parlamentar.objects.get( parlamentar_orador = Parlamentar.objects.get(
id=orador_ordemdia.parlamentar.id id=orador_ordemdia.parlamentar.id
) )
sigla_partido = Filiacao.objects.filter( sigla_partido = Filiacao.objects.filter(
parlamentar=parlamentar_orador parlamentar=parlamentar_orador
).first() ).first()
@ -820,7 +812,7 @@ def get_sessao_plenaria(sessao, casa):
sigla_p = "" sigla_p = ""
else: else:
sigla_p = sigla_partido.partido.sigla sigla_p = sigla_partido.partido.sigla
dic_oradores_ordemdia = { dic_oradores_ordemdia = {
'num_ordem': orador_ordemdia.numero_ordem, 'num_ordem': orador_ordemdia.numero_ordem,
'nome_parlamentar': parlamentar_orador.nome_parlamentar, 'nome_parlamentar': parlamentar_orador.nome_parlamentar,
@ -936,7 +928,7 @@ def relatorio_sessao_plenaria(request, pk):
lst_presenca_ordem_dia, lst_presenca_ordem_dia,
lst_votacao, lst_votacao,
lst_votacao_vot_nom, lst_votacao_vot_nom,
lst_oradores_ordemdia, lst_oradores_ordemdia,
lst_oradores, lst_oradores,
lst_ocorrencias) = get_sessao_plenaria(sessao, casa) lst_ocorrencias) = get_sessao_plenaria(sessao, casa)
@ -970,7 +962,6 @@ def relatorio_sessao_plenaria(request, pk):
def get_protocolos(prots): def get_protocolos(prots):
protocolos = [] protocolos = []
for protocolo in prots: for protocolo in prots:
dic = {} dic = {}
@ -980,10 +971,10 @@ def get_protocolos(prots):
ts = timezone.localtime(protocolo.timestamp) ts = timezone.localtime(protocolo.timestamp)
if protocolo.timestamp: if protocolo.timestamp:
dic['data'] = ts.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' + \ dic['data'] = ts.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' + \
ts.strftime("%H:%m") ts.strftime("%H:%m")
else: else:
dic['data'] = protocolo.data.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' \ dic['data'] = protocolo.data.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' \
+ protocolo.hora.strftime("%H:%m") + protocolo.hora.strftime("%H:%m")
dic['txt_assunto'] = protocolo.assunto_ementa dic['txt_assunto'] = protocolo.assunto_ementa
@ -1026,7 +1017,7 @@ def relatorio_protocolo(request):
response = HttpResponse(content_type='application/pdf') response = HttpResponse(content_type='application/pdf')
response[ response[
'Content-Disposition'] = ( 'Content-Disposition'] = (
'inline; filename="relatorio_protocolo.pdf"') 'inline; filename="relatorio_protocolo.pdf"')
casa = CasaLegislativa.objects.first() casa = CasaLegislativa.objects.first()
@ -1064,7 +1055,7 @@ def relatorio_etiqueta_protocolo(request, nro, ano):
response = HttpResponse(content_type='application/pdf') response = HttpResponse(content_type='application/pdf')
response[ response[
'Content-Disposition'] = ( 'Content-Disposition'] = (
'inline; filename="relatorio_etiqueta_protocolo.pdf"') 'inline; filename="relatorio_etiqueta_protocolo.pdf"')
casa = CasaLegislativa.objects.first() casa = CasaLegislativa.objects.first()
@ -1087,7 +1078,6 @@ def relatorio_etiqueta_protocolo(request, nro, ano):
def get_etiqueta_protocolos(prots): def get_etiqueta_protocolos(prots):
protocolos = [] protocolos = []
for p in prots: for p in prots:
dic = {} dic = {}
@ -1110,7 +1100,7 @@ def get_etiqueta_protocolos(prots):
for materia in MateriaLegislativa.objects.filter( for materia in MateriaLegislativa.objects.filter(
numero_protocolo=p.numero, ano=p.ano): numero_protocolo=p.numero, ano=p.ano):
dic['num_materia'] = materia.tipo.sigla + ' ' + \ dic['num_materia'] = materia.tipo.sigla + ' ' + \
str(materia.numero) + '/' + str(materia.ano) str(materia.numero) + '/' + str(materia.ano)
dic['natureza'] = '' dic['natureza'] = ''
if p.tipo_processo == 0: if p.tipo_processo == 0:
@ -1122,7 +1112,7 @@ def get_etiqueta_protocolos(prots):
for documento in DocumentoAdministrativo.objects.filter( for documento in DocumentoAdministrativo.objects.filter(
protocolo=p): protocolo=p):
dic['num_documento'] = documento.tipo.sigla + ' ' + \ dic['num_documento'] = documento.tipo.sigla + ' ' + \
str(documento.numero) + '/' + str(documento.ano) str(documento.numero) + '/' + str(documento.ano)
dic['ident_processo'] = dic['num_materia'] or dic['num_documento'] dic['ident_processo'] = dic['num_materia'] or dic['num_documento']
@ -1145,7 +1135,7 @@ def relatorio_pauta_sessao(request, pk):
response = HttpResponse(content_type='application/pdf') response = HttpResponse(content_type='application/pdf')
response[ response[
'Content-Disposition'] = ( 'Content-Disposition'] = (
'inline; filename="relatorio_pauta_sessao.pdf"') 'inline; filename="relatorio_pauta_sessao.pdf"')
casa = CasaLegislativa.objects.first() casa = CasaLegislativa.objects.first()
@ -1169,7 +1159,6 @@ def relatorio_pauta_sessao(request, pk):
def get_pauta_sessao(sessao, casa): def get_pauta_sessao(sessao, casa):
inf_basicas_dic = {} inf_basicas_dic = {}
inf_basicas_dic["nom_sessao"] = sessao.tipo.nome inf_basicas_dic["nom_sessao"] = sessao.tipo.nome
inf_basicas_dic["num_sessao_plen"] = sessao.numero inf_basicas_dic["num_sessao_plen"] = sessao.numero
@ -1189,7 +1178,7 @@ def get_pauta_sessao(sessao, casa):
dic_expediente_materia = {} dic_expediente_materia = {}
dic_expediente_materia["tipo_materia"] = materia.tipo.sigla + \ dic_expediente_materia["tipo_materia"] = materia.tipo.sigla + \
' - ' + materia.tipo.descricao ' - ' + materia.tipo.descricao
dic_expediente_materia["num_ordem"] = str( dic_expediente_materia["num_ordem"] = str(
expediente_materia.numero_ordem) expediente_materia.numero_ordem)
dic_expediente_materia["id_materia"] = str( dic_expediente_materia["id_materia"] = str(
@ -1231,7 +1220,7 @@ def get_pauta_sessao(sessao, casa):
id=votacao.materia.id).first() id=votacao.materia.id).first()
dic_votacao = {} dic_votacao = {}
dic_votacao["tipo_materia"] = materia.tipo.sigla + \ dic_votacao["tipo_materia"] = materia.tipo.sigla + \
' - ' + materia.tipo.descricao ' - ' + materia.tipo.descricao
dic_votacao["num_ordem"] = votacao.numero_ordem dic_votacao["num_ordem"] = votacao.numero_ordem
dic_votacao["id_materia"] = str( dic_votacao["id_materia"] = str(
materia.numero) + "/" + str(materia.ano) materia.numero) + "/" + str(materia.ano)
@ -1277,7 +1266,8 @@ def get_pauta_sessao(sessao, casa):
inf_basicas_dic, inf_basicas_dic,
expedientes) expedientes)
def make_pdf(base_url,main_template,header_template,main_css='',header_css=''):
def make_pdf(base_url, main_template, header_template, main_css='', header_css=''):
html = HTML(base_url=base_url, string=main_template) html = HTML(base_url=base_url, string=main_template)
main_doc = html.render(stylesheets=[]) main_doc = html.render(stylesheets=[])
@ -1288,7 +1278,7 @@ def make_pdf(base_url,main_template,header_template,main_css='',header_css=''):
return get_page_body(box.all_children()) return get_page_body(box.all_children())
# Template of header # Template of header
html = HTML(base_url=base_url,string=header_template) html = HTML(base_url=base_url, string=header_template)
header = html.render(stylesheets=[CSS(string='@page {size:A4; margin:1cm;}')]) header = html.render(stylesheets=[CSS(string='@page {size:A4; margin:1cm;}')])
header_page = header.pages[0] header_page = header.pages[0]
@ -1298,19 +1288,19 @@ def make_pdf(base_url,main_template,header_template,main_css='',header_css=''):
for page in main_doc.pages: for page in main_doc.pages:
page_body = get_page_body(page._page_box.all_children()) page_body = get_page_body(page._page_box.all_children())
page_body.children += header_body.all_children() page_body.children += header_body.all_children()
pdf_file = main_doc.write_pdf() pdf_file = main_doc.write_pdf()
return pdf_file return pdf_file
def resumo_ata_pdf(request,pk): def resumo_ata_pdf(request, pk):
base_url = request.build_absolute_uri() base_url = request.build_absolute_uri()
casa = CasaLegislativa.objects.first() casa = CasaLegislativa.objects.first()
rodape = ' '.join(get_rodape(casa)) rodape = ' '.join(get_rodape(casa))
sessao_plenaria = SessaoPlenaria.objects.get(pk=pk) sessao_plenaria = SessaoPlenaria.objects.get(pk=pk)
context = {} context = {}
context.update(get_identificacao_basica(sessao_plenaria)) context.update(get_identificacao_basica(sessao_plenaria))
context.update(get_mesa_diretora(sessao_plenaria)) context.update(get_mesa_diretora(sessao_plenaria))
@ -1327,13 +1317,13 @@ def resumo_ata_pdf(request,pk):
context.update({'object': sessao_plenaria}) context.update({'object': sessao_plenaria})
context.update({'data': dt.today().strftime('%d/%m/%Y')}) context.update({'data': dt.today().strftime('%d/%m/%Y')})
context.update({'rodape': rodape}) 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_ata.html', context) html_template = render_to_string('relatorios/relatorio_ata.html', context)
html_header = render_to_string('relatorios/header_ata.html', header_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 = HttpResponse(content_type='application/pdf;')
response['Content-Disposition'] = 'inline; filename=relatorio.pdf' response['Content-Disposition'] = 'inline; filename=relatorio.pdf'
response['Content-Transfer-Encoding'] = 'binary' response['Content-Transfer-Encoding'] = 'binary'
@ -1341,6 +1331,7 @@ def resumo_ata_pdf(request,pk):
return response return response
def cria_relatorio(request, context, html_string, header_info=""): def cria_relatorio(request, context, html_string, header_info=""):
base_url = request.build_absolute_uri() base_url = request.build_absolute_uri()
casa = CasaLegislativa.objects.first() casa = CasaLegislativa.objects.first()
@ -1363,62 +1354,80 @@ def cria_relatorio(request, context, html_string, header_info=""):
return response return response
def relatorio_doc_administrativos(request, context): def relatorio_doc_administrativos(request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_doc_administrativos.html') return cria_relatorio(request, context, 'relatorios/relatorio_doc_administrativos.html')
def relatorio_materia_em_tramitacao(obj, request, context): def relatorio_materia_em_tramitacao(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_materias_em_tramitacao.html') return cria_relatorio(request, context, 'relatorios/relatorio_materias_em_tramitacao.html')
def relatorio_materia_por_autor(obj, request, context): def relatorio_materia_por_autor(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_materias_por_autor.html') return cria_relatorio(request, context, 'relatorios/relatorio_materias_por_autor.html')
def relatorio_materia_por_ano_autor(obj, request, context): def relatorio_materia_por_ano_autor(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_materias_por_ano_autor.html') return cria_relatorio(request, context, 'relatorios/relatorio_materias_por_ano_autor.html')
def relatorio_presenca_sessao(obj, request, context): def relatorio_presenca_sessao(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_presenca_sessao.html') return cria_relatorio(request, context, 'relatorios/relatorio_presenca_sessao.html')
def relatorio_atas(obj, request, context): def relatorio_atas(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_atas.html') return cria_relatorio(request, context, 'relatorios/relatorio_atas.html')
def relatorio_historico_tramitacao(obj, request, context): def relatorio_historico_tramitacao(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_historico_tramitacao.html') return cria_relatorio(request, context, 'relatorios/relatorio_historico_tramitacao.html')
def relatorio_fim_prazo_tramitacao(obj, request, context): def relatorio_fim_prazo_tramitacao(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_fim_prazo_tramitacao.html') return cria_relatorio(request, context, 'relatorios/relatorio_fim_prazo_tramitacao.html')
def relatorio_reuniao(obj, request, context): def relatorio_reuniao(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_reuniao.html') return cria_relatorio(request, context, 'relatorios/relatorio_reuniao.html')
def relatorio_audiencia(obj, request, context): def relatorio_audiencia(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_audiencia.html') return cria_relatorio(request, context, 'relatorios/relatorio_audiencia.html')
def relatorio_normas_mes(obj, request, context): def relatorio_normas_mes(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_normas_mes.html') return cria_relatorio(request, context, 'relatorios/relatorio_normas_mes.html')
def relatorio_normas_vigencia(obj, request, context): def relatorio_normas_vigencia(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_normas_vigencia.html') return cria_relatorio(request, context, 'relatorios/relatorio_normas_vigencia.html')
def relatorio_historico_tramitacao_adm(obj, request, context): def relatorio_historico_tramitacao_adm(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_historico_tramitacao_adm.html') return cria_relatorio(request, context, 'relatorios/relatorio_historico_tramitacao_adm.html')
def relatorio_estatisticas_acesso_normas(obj, request, context): def relatorio_estatisticas_acesso_normas(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_estatisticas_acesso_normas.html') return cria_relatorio(request, context, 'relatorios/relatorio_estatisticas_acesso_normas.html')
def relatorio_documento_acessorio(obj, request, context): 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_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')
def relatorio_pauta_sessao_weasy(obj, request, context): def relatorio_pauta_sessao_weasy(obj, request, context):
sessao = context['object'] sessao = context['object']
info = "Pauta da {} ({} - {}) Legislatura".format(sessao,sessao.legislatura.data_inicio.year,sessao.legislatura.data_fim.year) info = "Pauta da {} ({} - {}) Legislatura".format(sessao, sessao.legislatura.data_inicio.year,
return cria_relatorio(request, context, 'relatorios/relatorio_pauta_sessao.html',info) sessao.legislatura.data_fim.year)
return cria_relatorio(request, context, 'relatorios/relatorio_pauta_sessao.html', info)
def relatorio_sessao_plenaria_pdf(request, pk): def relatorio_sessao_plenaria_pdf(request, pk):
base_url=request.build_absolute_uri() base_url = request.build_absolute_uri()
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
username = request.user.username username = request.user.username
casa = CasaLegislativa.objects.first() casa = CasaLegislativa.objects.first()
@ -1438,50 +1447,110 @@ def relatorio_sessao_plenaria_pdf(request, pk):
raise Http404('Essa página não existe') raise Http404('Essa página não existe')
(inf_basicas_dic, (inf_basicas_dic,
cont_mult_dic, cont_mult_dic,
lst_mesa, lst_mesa,
lst_presenca_sessao, lst_presenca_sessao,
lst_ausencia_sessao, lst_ausencia_sessao,
lst_expedientes, lst_expedientes,
lst_expediente_materia, lst_expediente_materia,
lst_expediente_materia_vot_nom, lst_expediente_materia_vot_nom,
lst_oradores_expediente, lst_oradores_expediente,
lst_presenca_ordem_dia, lst_presenca_ordem_dia,
lst_votacao, lst_votacao,
lst_votacao_vot_nom, lst_votacao_vot_nom,
lst_oradores_ordemdia, lst_oradores_ordemdia,
lst_oradores, lst_oradores,
lst_ocorrencias) = get_sessao_plenaria(sessao, casa) lst_ocorrencias) = get_sessao_plenaria(sessao, casa)
html_template = render_to_string('relatorios/relatorio_sessao_plenaria.html', dict_ord_template = {
{ 'cont_mult': 'conteudo_multimidia.html',
"inf_basicas_dic":inf_basicas_dic, 'exp': 'expedientes.html',
"lst_mesa":lst_mesa, 'id_basica': 'identificacao_basica.html',
"lst_presenca_sessao":lst_presenca_sessao, 'lista_p': 'lista_presenca_sessao.html',
"lst_ausencia_sessao":lst_ausencia_sessao, 'lista_p_o_d': 'lista_presenca_ordemdia.html',
"lst_expedientes":lst_expedientes, 'mat_exp': 'materias_expediente.html',
"lst_expediente_materia":lst_expediente_materia, 'v_n_mat_exp': 'votos_nominais_expediente.html',
"lst_oradores_expediente":lst_oradores_expediente, 'mat_o_d': 'materias_ordemdia.html',
"lst_presenca_ordem_dia":lst_presenca_ordem_dia, 'v_n_mat_o_d': 'votos_nominais_ordemdia.html',
"lst_votacao":lst_votacao, 'mesa_d': 'mesa_diretora.html',
"lst_oradores":lst_oradores, 'oradores_exped': 'oradores_expediente.html',
"lst_ocorrencias":lst_ocorrencias, 'oradores_o_d': 'oradores_ordemdia.html',
"rodape":rodape, 'oradores_expli': 'oradores_explicacoes.html',
"data": dt.today().strftime('%d/%m/%Y') 'ocorr_sessao': 'ocorrencias_sessao.html'
}) }
context = {
"inf_basicas_dic": inf_basicas_dic,
"cont_mult_dic": cont_mult_dic,
"lst_mesa": lst_mesa,
"lst_expediente_materia_vot_nom": lst_expediente_materia_vot_nom,
"lst_presenca_sessao": lst_presenca_sessao,
"lst_ausencia_sessao": lst_ausencia_sessao,
"lst_expedientes": lst_expedientes,
"lst_expediente_materia": lst_expediente_materia,
"lst_oradores_expediente": lst_oradores_expediente,
"lst_presenca_ordem_dia": lst_presenca_ordem_dia,
"lst_votacao": lst_votacao,
"lst_oradores_ordemdia": lst_oradores_ordemdia,
"lst_votacao_vot_nom": lst_votacao_vot_nom,
"lst_oradores": lst_oradores,
"lst_ocorrencias": lst_ocorrencias,
"rodape": rodape,
"data": dt.today().strftime('%d/%m/%Y')
}
ordenacao = ResumoOrdenacao.objects.get_or_create()[0]
try:
context.update({
'primeiro_ordenacao': dict_ord_template[ordenacao.primeiro],
'segundo_ordenacao': dict_ord_template[ordenacao.segundo],
'terceiro_ordenacao': dict_ord_template[ordenacao.terceiro],
'quarto_ordenacao': dict_ord_template[ordenacao.quarto],
'quinto_ordenacao': dict_ord_template[ordenacao.quinto],
'sexto_ordenacao': dict_ord_template[ordenacao.sexto],
'setimo_ordenacao': dict_ord_template[ordenacao.setimo],
'oitavo_ordenacao': dict_ord_template[ordenacao.oitavo],
'nono_ordenacao': dict_ord_template[ordenacao.nono],
'decimo_ordenacao': dict_ord_template[ordenacao.decimo],
'decimo_primeiro_ordenacao': dict_ord_template[ordenacao.decimo_primeiro],
'decimo_segundo_ordenacao': dict_ord_template[ordenacao.decimo_segundo],
'decimo_terceiro_ordenacao': dict_ord_template[ordenacao.decimo_terceiro],
'decimo_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto]
})
except KeyError as e:
# self.logger.error("KeyError: " + str(e) + ". Erro ao tentar utilizar "
# "configuração de ordenação. Utilizando ordenação padrão.")
context.update({
'primeiro_ordenacao': 'identificacao_basica.html',
'segundo_ordenacao': 'conteudo_multimidia.html',
'terceiro_ordenacao': 'mesa_diretora.html',
'quarto_ordenacao': 'lista_presenca_sessao.html',
'quinto_ordenacao': 'expedientes.html',
'sexto_ordenacao': 'materias_expediente.html',
'setimo_ordenacao': 'votos_nominais_expediente.html',
'oitavo_ordenacao': 'oradores_expediente.html',
'nono_ordenacao': 'lista_presenca_ordemdia.html',
'decimo_ordenacao': 'materias_ordemdia.html',
'decimo_primeiro_ordenacao': 'votos_nominais_ordemdia.html',
'decimo_segundo_ordenacao': 'oradores_ordemdia.html',
'decimo_terceiro_ordenacao': 'oradores_explicacoes.html',
'decimo_quarto_ordenacao': 'ocorrencias_sessao.html'
})
html_template = render_to_string('relatorios/relatorio_sessao_plenaria.html', context)
info = "Resumo da {}ª Reunião {} \ info = "Resumo da {}ª Reunião {} \
da {}ª Sessão Legislativa da {} \ da {}ª Sessão Legislativa da {} \
Legislatura".format(inf_basicas_dic['num_sessao_plen'], Legislatura".format(inf_basicas_dic['num_sessao_plen'],
inf_basicas_dic['nom_sessao'], inf_basicas_dic['nom_sessao'],
inf_basicas_dic['num_sessao_leg'], inf_basicas_dic['num_sessao_leg'],
inf_basicas_dic['num_legislatura'] inf_basicas_dic['num_legislatura']
) )
html_header = render_to_string('relatorios/header_ata.html',{"casa":casa, html_header = render_to_string('relatorios/header_ata.html', {"casa": casa,
"MEDIA_URL": MEDIA_URL, "MEDIA_URL": MEDIA_URL,
"logotipo": casa.logotipo, "logotipo": casa.logotipo,
"info":info}) "info": info})
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)
@ -1491,4 +1560,3 @@ def relatorio_sessao_plenaria_pdf(request, pk):
response.write(pdf_file) response.write(pdf_file)
return response return response

1
sapl/static/sapl/css/relatorio.css

@ -38,6 +38,7 @@ html body section dl {
html body section dt{ html body section dt{
width: 50px; width: 50px;
text-align: left;
} }
html body section dd { html body section dd {

2
sapl/templates/relatorios/base_relatorio.html

@ -8,7 +8,7 @@
<style> <style>
@page{ @page{
@bottom-right { @bottom-right {
content: "Página" counter(page); content: "Página " counter(page);
height: 3cm; height: 3cm;
font-size: 8pt; font-size: 8pt;
} }

3
sapl/templates/relatorios/blocos_sessao_plenaria/conteudo_multimidia.html

@ -0,0 +1,3 @@
<h2 class="gray-title">Conteúdo Multimídia</h2>
<p><b>Multimídia Audio:</b> {{cont_mult_dic.multimidia_audio}}</p>
<p><b>Multimídia Video:</b> {{cont_mult_dic.multimidia_video}}</p>

5
sapl/templates/relatorios/blocos_sessao_plenaria/expedientes.html

@ -0,0 +1,5 @@
<h2 class="gray-title">Expedientes</h2>
{% for expediente in lst_expedientes%}
<h3>{{expediente.nom_expediente}}</h3>
<p style="margin-bottom: 1cm">{{expediente.txt_expediente|safe}}</p>
{% endfor%}

4
sapl/templates/relatorios/blocos_sessao_plenaria/identificacao_basica.html

@ -0,0 +1,4 @@
<h2 class="gray-title">Informações Básicas</h2>
<p><b>Tipo da Sessão:</b> {{inf_basicas_dic.nom_sessao}}</p>
<p><b>Abertura:</b> {{inf_basicas_dic.dat_inicio_sessao}} - {{inf_basicas_dic.hr_inicio_sessao}}</p>
<p><b>Encerramento:</b> {{inf_basicas_dic.dat_fim_sessao}} - {{inf_basicas_dic.hr_fim_sessao}}</p>

21
sapl/templates/relatorios/blocos_sessao_plenaria/justificativa_ausencia_sessao.html

@ -0,0 +1,21 @@
<h2 class="gray-title">Justificativas de Ausência da Sessão</h2>
<table class="grayTable">
<thead>
<tr>
<th>Parlamentar</th>
<th>Justificativa</th>
<th>Ausente em</th>
</tr>
</thead>
<tbody>
{% for ausencia in lst_ausencia_sessao%}
<tr>
<td>{{ausencia.parlamentar}}</td>
<td>{{ausencia.justificativa}}</td>
<td>{{ausencia.tipo}}</td>
</tr>
{% endfor %}
</tbody>
</table>

6
sapl/templates/relatorios/blocos_sessao_plenaria/lista_presenca_ordemdia.html

@ -0,0 +1,6 @@
<h2 class="gray-title">Lista de Presença da Ordem do Dia</h2>
{% for orador in lst_presenca_ordem_dia%}
<tr>
<p>{{orador.nom_parlamentar}}/{{orador.sgl_partido}}</p>
</tr>
{% endfor %}

4
sapl/templates/relatorios/blocos_sessao_plenaria/lista_presenca_sessao.html

@ -0,0 +1,4 @@
<h2 class="gray-title">Lista de Presença da Sessão</h2>
{% for membro in lst_presenca_sessao%}
<p>{{membro.nom_parlamentar}}/{{membro.sgl_partido}}</p>
{% endfor%}

27
sapl/templates/relatorios/blocos_sessao_plenaria/materias_expediente.html

@ -0,0 +1,27 @@
<h2 class="gray-title">Matérias do Expediente</h2>
<table class="grayTable">
<thead>
<tr>
<th>Matéria</th>
<th>Ementa</th>
<th>Resultado da Votação</th>
</tr>
</thead>
<tbody>
{% for materia in lst_expediente_materia%}
<tr>
<td >
<dl>
<dt><b>{{materia.num_ordem}} -</b> {{materia.id_materia}}</dt>
<dt style="text-align: left;"><b>Turno:</b> {{materia.des_turno}}</dt>
<dt style="text-align: left;"><b>{{materia.num_autores}}: </b>{{materia.nom_autor}}</dt>
</dl>
</td>
<td style="width:60%"><div style="margin:10px">{{materia.txt_ementa}}</div></td>
<td style="text-align: center">&nbsp;<b>{{materia.nom_resultado}}</b></td>
</tr>
{% endfor %}
</tbody>
</table>

27
sapl/templates/relatorios/blocos_sessao_plenaria/materias_ordemdia.html

@ -0,0 +1,27 @@
<h2 class="gray-title">Matérias da Ordem do Dia</h2>
<table class="grayTable" style="height: 145px;" width="443">
<thead>
<tr>
<th>Matéria</th>
<th>Ementa</th>
<th>Resultado da Votação</th>
</tr>
</thead>
<tbody>
{% for materia in lst_votacao%}
<tr>
<td>
<dl>
<dt><b>{{materia.num_ordem}} -</b> {{materia.id_materia}}</dt>
<dt style="text-align: left;"><b>Turno:</b> {{materia.des_turno}}</dt>
<dt style="text-align: left;"><b>{{materia.num_autores}}: </b>{{materia.nom_autor}}</dt>
</dl>
</td>
<td style="width:60%">{{materia.txt_ementa}}</td>
<td style="text-align: center;">&nbsp;<b>{{materia.nom_resultado}}</b></td>
</tr>
{% endfor %}
</tbody>
</table>

4
sapl/templates/relatorios/blocos_sessao_plenaria/mesa_diretora.html

@ -0,0 +1,4 @@
<h2 class="gray-title">Mesa Diretora</h2>
{% for membro in lst_mesa%}
<p><b>{{membro.des_cargo}}:</b> {{membro.nom_parlamentar}}/{{membro.sgl_partido}}</p>
{% endfor%}

4
sapl/templates/relatorios/blocos_sessao_plenaria/ocorrencias_sessao.html

@ -0,0 +1,4 @@
<h2 class="gray-title">Ocorrências da Sessão</h2>
{% for ocorrencia in lst_ocorrencias%}
<p>{{ocorrencia}}</p>
{% endfor %}

7
sapl/templates/relatorios/blocos_sessao_plenaria/oradores_expediente.html

@ -0,0 +1,7 @@
<h2 class="gray-title">Oradores do Expediente</h2>
{% for orador in lst_oradores_expediente%}
<tr>
<p> <b>{{orador.num_ordem}}</b> - {{orador.nom_parlamentar}}/{{orador.sgl_partido}}</p>
</tr>
{% endfor %}

8
sapl/templates/relatorios/blocos_sessao_plenaria/oradores_explicacoes.html

@ -0,0 +1,8 @@
<div>
<h2 class="gray-title">Oradores das Explicações Pessoais</h2>
{% for orador in lst_oradores%}
<tr>
<p style="page-break-after: avoid;">{{orador.num_ordem}} - {{orador.nom_parlamentar}}/{{orador.sgl_partido}}</p>
</tr>
{% endfor %}
</div>

7
sapl/templates/relatorios/blocos_sessao_plenaria/oradores_ordemdia.html

@ -0,0 +1,7 @@
{% if lst_oradores_ordemdia %}
<h2 class="gray-title">Oradores da Ordem do Dia</h2>
{% for orador_ordemdia in lst_oradores_ordemdia %}
<p><b>{{orador_ordemdia.num_ordem}}</b> - {{orador_ordemdia.nome_parlamentar}}/{{orador_ordemdia.sigla}}
{%if orador_ordemdia.observacao%}- {{orador_ordemdia.observacao}}{%endif%}</p>
{% endfor %}
{% endif %}

27
sapl/templates/relatorios/blocos_sessao_plenaria/votos_nominais_expediente.html

@ -0,0 +1,27 @@
{% if lst_votacao_vot_nom %}
<h2 class="gray-title">Votações Nominais - Matérias do Expediente</h2>
<table class="grayTable">
<thead>
<tr>
<th>Matéria</th>
<th>Votos</th>
</tr>
</thead>
{% for expediente_materia_vot_nom in lst_expediente_materia_vot_nom %}
<tr>
<td>{{expediente_materia_vot_nom.titulo}}</td>
<td>
{% if expediente_materia_vot_nom.votos %}
<dl>
{% for v in expediente_materia_vot_nom.votos %}
<dt style="text-align: left;">&nbsp;<b>{{v.parlamentar}}</b> {{v.voto}}</dt>
{% endfor %}
</dl>
{% else %}
<td><p><b>Matéria não votada</b></p></td>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{% endif %}

27
sapl/templates/relatorios/blocos_sessao_plenaria/votos_nominais_ordemdia.html

@ -0,0 +1,27 @@
{% if lst_votacao_vot_nom %}
<h2 class="gray-title">Votações Nominais - Matérias da Ordem do Dia</h2>
<table class="grayTable">
<thead>
<tr>
<th>Matéria</th>
<th>Votos</th>
</tr>
</thead>
{% for votacao_vot_nom in lst_votacao_vot_nom %}
<tr>
<td>{{votacao_vot_nom.titulo}}</td>
<td>
{% if votacao_vot_nom.votos %}
<dl>
{% for v in votacao_vot_nom.votos %}
<dt style="text-align: left;">&nbsp;<b>{{v.parlamentar}}</b> {{v.voto}}</dt>
{% endfor %}
</dl>
{% else %}
<td><p><b>Matéria não votada</b></p></td>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{% endif %}

162
sapl/templates/relatorios/relatorio_sessao_plenaria.html

@ -3,137 +3,37 @@
{% block content %} {% block content %}
<div style="margin-bottom: 3cm"> <div style="margin-bottom: 3cm">
<h2 class="gray-title">Informações Básicas</h2>
<p><b>Tipo da Sessão:</b> {{inf_basicas_dic.nom_sessao}}</p> {% include 'relatorios/blocos_sessao_plenaria/'|add:primeiro_ordenacao %}
<p><b>Abertura:</b> {{inf_basicas_dic.dat_inicio_sessao}} - {{inf_basicas_dic.hr_inicio_sessao}}</p>
<p><b>Encerramento:</b> {{inf_basicas_dic.dat_fim_sessao}} - {{inf_basicas_dic.hr_fim_sessao}}</p> {% include 'relatorios/blocos_sessao_plenaria/'|add:segundo_ordenacao %}
<h2 class="gray-title">Mesa Diretora</h2> {% include 'relatorios/blocos_sessao_plenaria/'|add:terceiro_ordenacao %}
{% for membro in lst_mesa%}
<p><b>{{membro.des_cargo}}:</b> {{membro.nom_parlamentar}}/{{membro.sgl_partido}}</p> {% include 'relatorios/blocos_sessao_plenaria/'|add:quarto_ordenacao %}
{% endfor%}
{% include 'relatorios/blocos_sessao_plenaria/'|add:quinto_ordenacao %}
<h2 class="gray-title">Lista de Presença da Sessão</h2>
{% for membro in lst_presenca_sessao%} {% include 'relatorios/blocos_sessao_plenaria/'|add:sexto_ordenacao %}
<p>{{membro.nom_parlamentar}}/{{membro.sgl_partido}}</p>
{% endfor%} {% include 'relatorios/blocos_sessao_plenaria/'|add:setimo_ordenacao %}
<h2 class="gray-title">Justificativas de Ausência da Sessão</h2> {% include 'relatorios/blocos_sessao_plenaria/'|add:oitavo_ordenacao %}
<table class="grayTable"> {% include 'relatorios/blocos_sessao_plenaria/'|add:nono_ordenacao %}
<thead>
<tr> {% include 'relatorios/blocos_sessao_plenaria/'|add:decimo_ordenacao %}
<th>Parlamentar</th>
<th>Justificativa</th> {% include 'relatorios/blocos_sessao_plenaria/'|add:decimo_primeiro_ordenacao %}
<th>Ausente em</th>
</tr> {% include 'relatorios/blocos_sessao_plenaria/'|add:decimo_segundo_ordenacao %}
</thead>
<tbody> {% include 'relatorios/blocos_sessao_plenaria/'|add:decimo_terceiro_ordenacao %}
{% for ausencia in lst_ausencia_sessao%}
<tr> {% include 'relatorios/blocos_sessao_plenaria/'|add:decimo_quarto_ordenacao %}
<td>{{ausencia.parlamentar}}</td>
<td>{{ausencia.justificativa}}</td> </div>
<td>{{ausencia.tipo}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<h2 class="gray-title">Expedientes</h2>
{% for expediente in lst_expedientes%}
<h3>{{expediente.nom_expediente}}</h3>
<p style="margin-bottom: 1cm">{{expediente.txt_expediente|safe}}</p>
{% endfor%}
<h2 class="gray-title">Matérias do Expediente</h2>
<table class="grayTable">
<thead>
<tr>
<th>Matéria</th>
<th>Ementa</th>
<th>Resultado da Votação</th>
</tr>
</thead>
<tbody>
{% for materia in lst_expediente_materia%}
<tr>
<td style="width:300px">
<dl>
<dt><b>{{materia.num_ordem}} -</b> {{materia.id_materia}}</dt>
<dt><b>Turno:</b> {{materia.des_turno}}</dt>
<dt><b>{{materia.num_autores}}: </b>{{materia.nom_autor}}</dt>
</dl>
</td>
<td><div style="margin:10px">{{materia.txt_ementa}}</div></td>
<td style="width:10px"><b>{{materia.nom_resultado}}</b></td>
</tr>
{% endfor %}
</tbody>
</table>
<h2 class="gray-title">Oradores do Expediente</h2>
{% for orador in lst_oradores_expediente%}
<tr>
<p> <b>{{orador.num_ordem}}</b> - {{orador.nom_parlamentar}}/{{orador.sgl_partido}}</p>
</tr>
{% endfor %}
<h2 class="gray-title">Lista de Presença da Ordem do Dia</h2>
{% for orador in lst_presenca_ordem_dia%}
<tr>
<p>{{orador.nom_parlamentar}}/{{orador.sgl_partido}}</p>
</tr>
{% endfor %}
<h2 class="gray-title">Matérias da Ordem do Dia</h2>
<table class="grayTable" style="height: 145px;" width="443">
<thead>
<tr>
<th>Matéria</th>
<th>Ementa</th>
<th>Resultado da Votação</th>
</tr>
</thead>
<tbody>
{% for materia in lst_votacao%}
<tr>
<td style="width:300px">
<dl>
<dt><b>{{materia.num_ordem}} -</b> {{materia.id_materia}}</dt>
<dt><b>Turno:</b> {{materia.des_turno}}</dt>
<dt><b>{{materia.num_autores}}: </b>{{materia.nom_autor}}</dt>
</dl>
</td>
<td><div style="margin:10px">{{materia.txt_ementa}}</div></td>
<td style="width:30px"><b>{{materia.nom_resultado}}</b></td>
</tr>
{% endfor %}
</tbody>
</table>
<div>
<h2 class="gray-title">Oradores das Explicações Pessoais</h2>
{% for orador in lst_oradores%}
<tr>
<p style="page-break-after: avoid;">{{orador.num_ordem}} - {{orador.nom_parlamentar}}/{{orador.sgl_partido}}</p>
</tr>
{% endfor %}
</div>
<h2 class="gray-title">Ocorrências da Sessão</h2>
{% for ocorrencia in lst_ocorrencias%}
<p>{{ocorrencia}}</p>
{% endfor %}
</div>
{% endblock content %} {% endblock content %}

10
sapl/templates/sessao/resumo.html

@ -10,6 +10,16 @@
{% endblock %} {% endblock %}
{% block detail_content %} {% block detail_content %}
<!--<div>
<p align="right">
<strong>
<a href="{% url 'sapl.relatorios:relatorio_sessao_plenaria' sessaoplenaria.pk %}">
Impressão PDF
</a>
</strong>
</p>
</div> Impressão Antiga-->
<div> <div>
<p align="right"> <p align="right">
<strong> <strong>

Loading…
Cancel
Save