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

12
sapl/sessao/views.py

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

Loading…
Cancel
Save