diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index 913930d50..200ce04af 100755 --- a/sapl/relatorios/views.py +++ b/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+||\n| ', '', 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('', '

', conteudo) + conteudo = re.sub('', '
', conteudo) # OSTicket Ticket #796450 + conteudo = html.unescape(conteudo) + + # escape special character '&' + # https://github.com/interlegis/sapl/issues/1009 + conteudo = conteudo.replace('&', '&') + + # 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('', '

', conteudo) - conteudo = re.sub('', '
', conteudo) # OSTicket Ticket #796450 - conteudo = html.unescape(conteudo) - - # escape special character '&' - # https://github.com/interlegis/sapl/issues/1009 - conteudo = conteudo.replace('&', '&') - - # 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 diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index d1f9f77cd..25cde87d1 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -3450,11 +3450,13 @@ class PautaSessaoDetailView(DetailView): expedientes = [] for e in expediente: - tipo = e.tipo - conteudo = sub( - ' ', ' ', 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(' ', ' ', conteudo) + ex = {'tipo': tipo, 'conteudo': conteudo} + expedientes.append(ex) context.update({'expedientes': expedientes}) # =====================================================================