Browse Source

3155 - Relatório Sessão PDF com Expedientes sem conteúdo (#3157)

* Refatora get_sessao_plenario()

* Remove expedientes sem conteúdos do relatório sessao pdf

* Adiciona correção solicitada

* Remove expedientes sem conteúdos das pautas

* Diminui quantidade de queries na base de dados

* Verifica espaços em branco em expedientes
pull/3008/head
Vinícius Cantuária 5 years ago
committed by GitHub
parent
commit
951c20e0b7
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 354
      sapl/relatorios/views.py
  2. 12
      sapl/sessao/views.py

354
sapl/relatorios/views.py

@ -498,37 +498,36 @@ def remove_html_comments(text):
return clean_text if len(clean_text) > 0 else text
def is_empty(value):
if not value:
return True
txt = re.sub(r'\s+|<br.*/>|\n|&nbsp;', '', value)
return True if not txt.strip() else False
def get_sessao_plenaria(sessao, casa):
inf_basicas_dic = {}
inf_basicas_dic["num_sessao_plen"] = str(sessao.numero)
inf_basicas_dic["nom_sessao"] = sessao.tipo.nome
inf_basicas_dic["num_legislatura"] = str(sessao.legislatura)
inf_basicas_dic["num_sessao_leg"] = sessao.sessao_legislativa.numero
inf_basicas_dic["dat_inicio_sessao"] = sessao.data_inicio.strftime(
"%d/%m/%Y")
inf_basicas_dic["hr_inicio_sessao"] = sessao.hora_inicio
if sessao.data_fim:
inf_basicas_dic["dat_fim_sessao"] = \
sessao.data_fim.strftime("%d/%m/%Y")
else:
inf_basicas_dic["dat_fim_sessao"] = ''
inf_basicas_dic["hr_fim_sessao"] = sessao.hora_fim
inf_basicas_dic["nom_camara"] = casa.nome
inf_basicas_dic = {
"num_sessao_plen": str(sessao.numero),
"nom_sessao": sessao.tipo.nome,
"num_legislatura": str(sessao.legislatura),
"num_sessao_leg": sessao.sessao_legislativa.numero,
"dat_inicio_sessao": sessao.data_inicio.strftime("%d/%m/%Y"),
"hr_inicio_sessao": sessao.hora_inicio,
"dat_fim_sessao": sessao.data_fim.strftime("%d/%m/%Y") if sessao.data_fim else '',
"hr_fim_sessao": sessao.hora_fim,
"nom_camara": casa.nome
}
if sessao.tipo.nome == 'Solene':
inf_basicas_dic["tema_solene"] = sessao.tema_solene
# Conteudo multimidia
cont_mult_dic = {}
if sessao.url_audio:
cont_mult_dic['multimidia_audio'] = str(sessao.url_audio)
else:
cont_mult_dic['multimidia_audio'] = 'Indisponível'
if sessao.url_video:
cont_mult_dic['multimidia_video'] = str(sessao.url_video)
else:
cont_mult_dic['multimidia_video'] = 'Indisponível'
cont_mult_dic = {
"multimidia_audio": str(sessao.url_audio) if sessao.url_audio else "Indisponível",
"multimidia_video": str(sessao.url_video) if sessao.url_video else "Indisponível"
}
# Lista da composicao da mesa diretora
lst_mesa = []
@ -537,104 +536,84 @@ def get_sessao_plenaria(sessao, casa):
.order_by('cargo_id'):
partido_sigla = Filiacao.objects.filter(parlamentar=composicao.parlamentar).first()
sigla = '' if not partido_sigla else partido_sigla.partido.sigla
dic_mesa = {
lst_mesa.append({
'nom_parlamentar': composicao.parlamentar.nome_parlamentar,
'sgl_partido': sigla,
'des_cargo': composicao.cargo.descricao
}
lst_mesa.append(dic_mesa)
})
# Lista de presença na sessão
lst_presenca_sessao = []
presenca = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
presenca = SessaoPlenariaPresenca.objects.filter(sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
for parlamentar in [p.parlamentar for p in presenca]:
dic_presenca = {}
dic_presenca["nom_parlamentar"] = parlamentar.nome_parlamentar
partido_sigla = filiacao_data(parlamentar, sessao.data_inicio)
dic_presenca['sgl_partido'] = partido_sigla
lst_presenca_sessao.append(dic_presenca)
lst_presenca_sessao.append({
"nom_parlamentar": parlamentar.nome_parlamentar,
"sgl_partido": filiacao_data(parlamentar, sessao.data_inicio)
})
# Lista de ausencias na sessão
lst_ausencia_sessao = []
ausencia = JustificativaAusencia.objects.filter(
sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
ausencia = JustificativaAusencia.objects.filter(sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
for ausente in ausencia:
dic_ausencia = {}
dic_ausencia['parlamentar'] = ausente.parlamentar
dic_ausencia['justificativa'] = ausente.tipo_ausencia
if ausente.ausencia == 1:
dic_ausencia['tipo'] = 'Matéria'
else:
dic_ausencia['tipo'] = 'Sessão'
lst_ausencia_sessao.append(dic_ausencia)
lst_ausencia_sessao.append({
"parlamentar": ausente.parlamentar,
"justificativa": ausente.tipo_ausencia,
"tipo": "Matéria" if ausente.ausencia == 1 else "Sessão"
})
# Exibe os Expedientes
lst_expedientes = []
expedientes = ExpedienteSessao.objects.filter(
sessao_plenaria=sessao).order_by('tipo__nome')
expedientes = ExpedienteSessao.objects.filter(sessao_plenaria=sessao).order_by('tipo__nome')
for e in expedientes:
dic_expedientes = {}
dic_expedientes["nom_expediente"] = e.tipo.nome
conteudo = e.conteudo
if not is_empty(conteudo):
# unescape HTML codes
# https://github.com/interlegis/sapl/issues/1046
conteudo = re.sub('style=".*?"', '', conteudo)
conteudo = re.sub('class=".*?"', '', conteudo)
conteudo = re.sub('align=".*?"', '', conteudo) # OSTicket Ticket #796450
conteudo = re.sub('<p\s+>', '<p>', conteudo)
conteudo = re.sub('<br\s+/>', '<br/>', conteudo) # OSTicket Ticket #796450
conteudo = html.unescape(conteudo)
# escape special character '&'
# https://github.com/interlegis/sapl/issues/1009
conteudo = conteudo.replace('&', '&amp;')
# https://github.com/interlegis/sapl/issues/2386
conteudo = remove_html_comments(conteudo)
dic_expedientes = {
"nom_expediente": e.tipo.nome,
"txt_expediente": conteudo
}
# unescape HTML codes
# https://github.com/interlegis/sapl/issues/1046
conteudo = re.sub('style=".*?"', '', conteudo)
conteudo = re.sub('class=".*?"', '', conteudo)
conteudo = re.sub('align=".*?"', '', conteudo) # OSTicket Ticket #796450
conteudo = re.sub('<p\s+>', '<p>', conteudo)
conteudo = re.sub('<br\s+/>', '<br/>', conteudo) # OSTicket Ticket #796450
conteudo = html.unescape(conteudo)
# escape special character '&'
# https://github.com/interlegis/sapl/issues/1009
conteudo = conteudo.replace('&', '&amp;')
# https://github.com/interlegis/sapl/issues/2386
conteudo = remove_html_comments(conteudo)
dic_expedientes["txt_expediente"] = conteudo
if dic_expedientes:
lst_expedientes.append(dic_expedientes)
# Lista das matérias do Expediente, incluindo o resultado das votacoes
lst_expediente_materia = []
for expediente_materia in ExpedienteMateria.objects.filter(
sessao_plenaria=sessao):
for expediente_materia in ExpedienteMateria.objects.filter(sessao_plenaria=sessao):
# seleciona os detalhes de uma matéria
materia = expediente_materia.materia
dic_expediente_materia = {}
dic_expediente_materia["num_ordem"] = expediente_materia.numero_ordem
dic_expediente_materia["id_materia"] = (materia.tipo.sigla + ' ' +
materia.tipo.descricao + ' ' +
str(materia.numero) + '/' +
str(materia.ano))
dic_expediente_materia["des_numeracao"] = ' '
dic_expediente_materia = {
"num_ordem": expediente_materia.numero_ordem,
"id_materia": "{} {} {}/{}".format(materia.tipo.sigla, materia.tipo.descricao, str(materia.numero),
str(materia.ano)),
"des_numeracao": ' ',
"des_turno": get_turno(materia)[0],
"txt_ementa": str(materia.ementa),
"ordem_observacao": expediente_materia.observacao,
"nom_resultado": '',
"nom_autor": '',
"votacao_observacao": ' '
}
numeracao = Numeracao.objects.filter(
materia=expediente_materia.materia).first()
numeracao = Numeracao.objects.filter(materia=expediente_materia.materia).first()
if numeracao:
dic_expediente_materia["des_numeracao"] = (
str(numeracao.numero_materia) + '/' + str(
numeracao.ano_materia))
turno, _ = get_turno(materia)
dic_expediente_materia["des_turno"] = turno
dic_expediente_materia["txt_ementa"] = str(materia.ementa)
dic_expediente_materia["ordem_observacao"] = expediente_materia.observacao
dic_expediente_materia["nom_resultado"] = ''
dic_expediente_materia["des_numeracao"] = (str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia))
dic_expediente_materia["nom_autor"] = ''
autoria = materia.autoria_set.all()
dic_expediente_materia['num_autores'] = 'Autores' if len(
autoria) > 1 else 'Autor'
dic_expediente_materia['num_autores'] = 'Autores' if len(autoria) > 1 else 'Autor'
if autoria:
for a in autoria:
if a.autor.nome:
@ -643,25 +622,25 @@ def get_sessao_plenaria(sessao, casa):
else:
dic_expediente_materia["nom_autor"] = 'Desconhecido'
dic_expediente_materia["votacao_observacao"] = ' '
resultados = expediente_materia.registrovotacao_set.all()
if resultados:
for i in resultados:
dic_expediente_materia["nom_resultado"] = (
i.tipo_resultado_votacao.nome)
dic_expediente_materia["votacao_observacao"] = (
i.observacao)
dic_expediente_materia.update({
"nom_resultado": i.tipo_resultado_votacao.nome,
"votacao_observacao": i.observacao
})
else:
dic_expediente_materia["nom_resultado"] = 'Matéria não votada'
dic_expediente_materia["votacao_observacao"] = ' '
dic_expediente_materia.update({
"nom_resultado": 'Matéria não votada',
"votacao_observacao": ' '
})
lst_expediente_materia.append(dic_expediente_materia)
# Lista dos votos nominais das matérias do Expediente
lst_expediente_materia_vot_nom = []
materias_expediente_votacao_nominal = ExpedienteMateria.objects.filter(
sessao_plenaria=sessao,
tipo_votacao=2).order_by('-materia')
materias_expediente_votacao_nominal = ExpedienteMateria.objects.filter(sessao_plenaria=sessao,tipo_votacao=2)\
.order_by('-materia')
for mevn in materias_expediente_votacao_nominal:
votos_materia = []
@ -672,79 +651,61 @@ def get_sessao_plenaria(sessao, casa):
for vp in VotoParlamentar.objects.filter(votacao=registro).order_by('parlamentar'):
votos_materia.append(vp)
dic_expediente_materia_vot_nom = {
'titulo': titulo_materia,
'votos': votos_materia
}
lst_expediente_materia_vot_nom.append(dic_expediente_materia_vot_nom)
lst_expediente_materia_vot_nom.append({
"titulo": titulo_materia,
"votos": votos_materia
})
# Lista dos oradores do Expediente
lst_oradores_expediente = []
for orador_expediente in OradorExpediente.objects.filter(
sessao_plenaria=sessao).order_by('numero_ordem'):
parlamentar = Parlamentar.objects.get(
id=orador_expediente.parlamentar.id)
dic_oradores_expediente = {}
dic_oradores_expediente["num_ordem"] = (
orador_expediente.numero_ordem)
dic_oradores_expediente["nom_parlamentar"] = (
parlamentar.nome_parlamentar)
dic_oradores_expediente["observacao"] = (
orador_expediente.observacao)
partido_sigla = Filiacao.objects.filter(
parlamentar=parlamentar).first()
if not partido_sigla:
sigla = ''
else:
sigla = partido_sigla.partido.sigla
dic_oradores_expediente['sgl_partido'] = sigla
lst_oradores_expediente.append(dic_oradores_expediente)
for orador_expediente in OradorExpediente.objects.filter(sessao_plenaria=sessao).order_by('numero_ordem'):
parlamentar = Parlamentar.objects.get(id=orador_expediente.parlamentar.id)
partido_sigla = Filiacao.objects.filter(parlamentar=parlamentar).first()
lst_oradores_expediente.append({
"num_ordem": orador_expediente.numero_ordem,
"nom_parlamentar": parlamentar.nome_parlamentar,
"observacao": orador_expediente.observacao,
"sgl_partido": "" if not partido_sigla else partido_sigla.partido.sigla
})
# Lista presença na ordem do dia
lst_presenca_ordem_dia = []
presenca_ordem_dia = PresencaOrdemDia.objects.filter(
sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
presenca_ordem_dia = PresencaOrdemDia.objects.filter(sessao_plenaria=sessao)\
.order_by('parlamentar__nome_parlamentar')
for parlamentar in [p.parlamentar for p in presenca_ordem_dia]:
dic_presenca_ordem_dia = {}
dic_presenca_ordem_dia['nom_parlamentar'] = (
parlamentar.nome_parlamentar)
sigla = filiacao_data(parlamentar, sessao.data_inicio)
dic_presenca_ordem_dia['sgl_partido'] = sigla
lst_presenca_ordem_dia.append(dic_presenca_ordem_dia)
lst_presenca_ordem_dia.append({
"nom_parlamentar": parlamentar.nome_parlamentar,
"sgl_partido": filiacao_data(parlamentar, sessao.data_inicio)
})
# Lista das matérias da Ordem do Dia, incluindo o resultado das votacoes
lst_votacao = []
for votacao in OrdemDia.objects.filter(
sessao_plenaria=sessao):
for votacao in OrdemDia.objects.filter(sessao_plenaria=sessao):
# seleciona os detalhes de uma matéria
materia = votacao.materia
dic_votacao = {}
dic_votacao["nom_resultado"] = ''
dic_votacao["num_ordem"] = votacao.numero_ordem
dic_votacao["id_materia"] = (
dic_votacao = {
"nom_resultado": '',
"num_ordem": votacao.numero_ordem,
"id_materia": (
materia.tipo.sigla + ' ' +
materia.tipo.descricao + ' ' +
str(materia.numero) + '/' +
str(materia.ano))
dic_votacao["des_numeracao"] = ' '
str(materia.ano)),
"des_numeracao": ' '
}
numeracao = materia.numeracao_set.first()
if numeracao:
dic_votacao["des_numeracao"] = (
str(numeracao.numero_materia) +
'/' +
str(numeracao.ano_materia))
turno, _ = get_turno(materia)
dic_votacao["des_turno"] = turno
# https://github.com/interlegis/sapl/issues/1009
dic_votacao["txt_ementa"] = html.unescape(materia.ementa)
dic_votacao["ordem_observacao"] = html.unescape(votacao.observacao)
dic_votacao["des_numeracao"] = (str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia))
dic_votacao.update({
"des_turno": get_turno(materia)[0],
# https://github.com/interlegis/sapl/issues/1009
"txt_ementa": html.unescape(materia.ementa),
"ordem_observacao": html.unescape(votacao.observacao),
"nom_autor": ''
})
dic_votacao["nom_autor"] = ''
autoria = materia.autoria_set.all()
dic_votacao['num_autores'] = 'Autores' if len(autoria) > 1 else 'Autor'
if autoria:
@ -769,9 +730,8 @@ def get_sessao_plenaria(sessao, casa):
# Lista dos votos nominais das matérias da Ordem do Dia
lst_votacao_vot_nom = []
materias_ordem_dia_votacao_nominal = OrdemDia.objects.filter(
sessao_plenaria=sessao,
tipo_votacao=2).order_by('-materia')
materias_ordem_dia_votacao_nominal = OrdemDia.objects.filter(sessao_plenaria=sessao, tipo_votacao=2)\
.order_by('-materia')
for modvn in materias_ordem_dia_votacao_nominal:
votos_materia_od = []
@ -782,63 +742,41 @@ def get_sessao_plenaria(sessao, casa):
for vp_od in VotoParlamentar.objects.filter(votacao=registro_od).order_by('parlamentar'):
votos_materia_od.append(vp_od)
dic_votacao_vot_nom = {
'titulo': t_materia,
'votos': votos_materia_od
}
lst_votacao_vot_nom.append(dic_votacao_vot_nom)
lst_votacao_vot_nom.append({
"titulo": t_materia,
"votos": votos_materia_od
})
# Lista dos oradores da Ordem do Dia
lst_oradores_ordemdia = []
oradores_ordem_dia = OradorOrdemDia.objects.filter(
sessao_plenaria=sessao
).order_by('numero_ordem')
oradores_ordem_dia = OradorOrdemDia.objects.filter(sessao_plenaria=sessao).order_by('numero_ordem')
for orador_ordemdia in oradores_ordem_dia:
parlamentar_orador = Parlamentar.objects.get(
id=orador_ordemdia.parlamentar.id
)
sigla_partido = Filiacao.objects.filter(
parlamentar=parlamentar_orador
).first()
if not sigla_partido:
sigla_p = ""
else:
sigla_p = sigla_partido.partido.sigla
dic_oradores_ordemdia = {
'num_ordem': orador_ordemdia.numero_ordem,
'nome_parlamentar': parlamentar_orador.nome_parlamentar,
'observacao': orador_ordemdia.observacao,
'sigla': sigla_p
}
lst_oradores_ordemdia.append(dic_oradores_ordemdia)
parlamentar_orador = Parlamentar.objects.get(id=orador_ordemdia.parlamentar.id)
sigla_partido = Filiacao.objects.filter(parlamentar=parlamentar_orador).first()
lst_oradores_ordemdia.append({
"num_ordem": orador_ordemdia.numero_ordem,
"nome_parlamentar": parlamentar_orador.nome_parlamentar,
"observacao": orador_ordemdia.observacao,
"sigla": "" if not sigla_partido else sigla_partido.partido.sigla
})
# Lista dos oradores nas Explicações Pessoais
lst_oradores = []
for orador in Orador.objects.filter(
sessao_plenaria=sessao).order_by('numero_ordem'):
for parlamentar in Parlamentar.objects.filter(
id=orador.parlamentar.id):
dic_oradores = {}
dic_oradores["num_ordem"] = orador.numero_ordem
dic_oradores["nom_parlamentar"] = parlamentar.nome_parlamentar
partido_sigla = Filiacao.objects.filter(
parlamentar=parlamentar).first()
if not partido_sigla:
sigla = ''
else:
sigla = partido_sigla.partido.sigla
dic_oradores['sgl_partido'] = sigla
lst_oradores.append(dic_oradores)
for orador in Orador.objects.select_related('parlamentar').filter(sessao_plenaria=sessao).order_by('numero_ordem'):
parlamentar = orador.parlamentar
partido_sigla = orador.parlamentar.filiacao_set.select_related('partido', 'parlamentar').first()
lst_oradores.append({
"num_ordem": orador.numero_ordem,
"nom_parlamentar": parlamentar.nome_parlamentar,
"sgl_partido": "" if not partido_sigla else partido_sigla.partido.sigla
})
# Ocorrências da Sessão
lst_ocorrencias = []
ocorrencias = OcorrenciaSessao.objects.filter(
sessao_plenaria=sessao)
ocorrencias = OcorrenciaSessao.objects.filter(sessao_plenaria=sessao)
for o in ocorrencias:
conteudo = o.conteudo

12
sapl/sessao/views.py

@ -3450,11 +3450,13 @@ class PautaSessaoDetailView(DetailView):
expedientes = []
for e in expediente:
tipo = e.tipo
conteudo = sub(
'&nbsp;', ' ', e.conteudo)
ex = {'tipo': tipo, 'conteudo': conteudo}
expedientes.append(ex)
conteudo = e.conteudo
from sapl.relatorios.views import is_empty
if not is_empty(conteudo):
tipo = e.tipo
conteudo = sub('&nbsp;', ' ', conteudo)
ex = {'tipo': tipo, 'conteudo': conteudo}
expedientes.append(ex)
context.update({'expedientes': expedientes})
# =====================================================================

Loading…
Cancel
Save