@ -4,7 +4,6 @@ import logging
import re
import tempfile
from django . core . exceptions import ObjectDoesNotExist
from django . http import Http404 , HttpResponse
from django . utils import timezone
@ -25,7 +24,7 @@ from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao,
Orador , OradorExpediente ,
OrdemDia , PresencaOrdemDia , SessaoPlenaria ,
SessaoPlenariaPresenca , OcorrenciaSessao ,
RegistroVotacao , VotoParlamentar , OradorOrdemDia , TipoExpediente )
RegistroVotacao , VotoParlamentar , OradorOrdemDia , TipoExpediente , ResumoOrdenacao )
from sapl . settings import STATIC_ROOT
from sapl . utils import LISTA_DE_UFS , TrocaTag , filiacao_data
@ -58,7 +57,6 @@ def get_kwargs_params(request, fields):
def get_cabecalho ( casa ) :
cabecalho = { }
cabecalho [ " nom_casa " ] = casa . nome
uf_dict = dict ( LISTA_DE_UFS )
@ -74,7 +72,6 @@ def get_imagem(casa):
def get_rodape ( casa ) :
if len ( casa . cep ) == 8 :
cep = casa . cep [ : 4 ] + " - " + casa . cep [ 5 : ]
else :
@ -110,12 +107,11 @@ def get_rodape(casa):
def get_materias ( mats ) :
materias = [ ]
for materia in mats :
dic = { }
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 [ ' nom_autor ' ] = ' , ' . join (
@ -250,7 +246,7 @@ def get_capa_processo(prot):
for numera in Numeracao . objects . filter ( materia = materia_num ) :
# FIXME i18n
dic [ ' numeracao ' ] = ' PROCESSO N° ' + \
str ( numera . numero ) + ' / ' + str ( numera . ano )
str ( numera . numero ) + ' / ' + str ( numera . ano )
dic [ ' anulado ' ] = ' '
if p . anulado == 1 :
dic [ ' anulado ' ] = ' Nulo '
@ -294,7 +290,6 @@ def relatorio_capa_processo(request):
def get_ordem_dia ( ordem , sessao ) :
# TODO: fazer implementação de ordem dia
pass
@ -361,7 +356,6 @@ def relatorio_documento_administrativo(request):
def get_documento_administrativo ( docs ) :
documentos = [ ]
for d in docs :
dic = { }
@ -505,7 +499,6 @@ def remove_html_comments(text):
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
@ -597,7 +590,7 @@ def get_sessao_plenaria(sessao, casa):
# 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 ( ' 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 )
@ -632,8 +625,8 @@ def get_sessao_plenaria(sessao, casa):
materia = expediente_materia . materia ) . first ( )
if 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 )
@ -734,19 +727,18 @@ def get_sessao_plenaria(sessao, casa):
dic_votacao [ " nom_resultado " ] = ' '
dic_votacao [ " num_ordem " ] = votacao . numero_ordem
dic_votacao [ " id_materia " ] = (
materia . tipo . sigla + ' ' +
materia . tipo . descricao + ' ' +
str ( materia . numero ) + ' / ' +
str ( materia . ano ) )
materia . tipo . sigla + ' ' +
materia . tipo . descricao + ' ' +
str ( materia . numero ) + ' / ' +
str ( materia . ano ) )
dic_votacao [ " des_numeracao " ] = ' '
numeracao = materia . numeracao_set . first ( )
if numeracao :
dic_votacao [ " des_numeracao " ] = (
str ( numeracao . numero_materia ) +
' / ' +
str ( numeracao . ano_materia ) )
str ( numeracao . numero_materia ) +
' / ' +
str ( numeracao . ano_materia ) )
turno , _ = get_turno ( materia )
@ -973,7 +965,6 @@ def relatorio_sessao_plenaria(request, pk):
def get_protocolos ( prots ) :
protocolos = [ ]
for protocolo in prots :
dic = { }
@ -983,10 +974,10 @@ def get_protocolos(prots):
ts = timezone . localtime ( protocolo . timestamp )
if protocolo . timestamp :
dic [ ' data ' ] = ts . strftime ( " %d / % m/ % Y " ) + ' - <b>Horário:</b> ' + \
ts . strftime ( " % H: % m " )
ts . strftime ( " % H: % m " )
else :
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
@ -1029,7 +1020,7 @@ def relatorio_protocolo(request):
response = HttpResponse ( content_type = ' application/pdf ' )
response [
' Content-Disposition ' ] = (
' inline; filename= " relatorio_protocolo.pdf " ' )
' inline; filename= " relatorio_protocolo.pdf " ' )
casa = CasaLegislativa . objects . first ( )
@ -1067,7 +1058,7 @@ def relatorio_etiqueta_protocolo(request, nro, ano):
response = HttpResponse ( content_type = ' application/pdf ' )
response [
' Content-Disposition ' ] = (
' inline; filename= " relatorio_etiqueta_protocolo.pdf " ' )
' inline; filename= " relatorio_etiqueta_protocolo.pdf " ' )
casa = CasaLegislativa . objects . first ( )
@ -1090,7 +1081,6 @@ def relatorio_etiqueta_protocolo(request, nro, ano):
def get_etiqueta_protocolos ( prots ) :
protocolos = [ ]
for p in prots :
dic = { }
@ -1113,7 +1103,7 @@ def get_etiqueta_protocolos(prots):
for materia in MateriaLegislativa . objects . filter (
numero_protocolo = p . numero , ano = p . ano ) :
dic [ ' num_materia ' ] = materia . tipo . sigla + ' ' + \
str ( materia . numero ) + ' / ' + str ( materia . ano )
str ( materia . numero ) + ' / ' + str ( materia . ano )
dic [ ' natureza ' ] = ' '
if p . tipo_processo == 0 :
@ -1125,7 +1115,7 @@ def get_etiqueta_protocolos(prots):
for documento in DocumentoAdministrativo . objects . filter (
protocolo = p ) :
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 ' ]
@ -1148,7 +1138,7 @@ def relatorio_pauta_sessao(request, pk):
response = HttpResponse ( content_type = ' application/pdf ' )
response [
' Content-Disposition ' ] = (
' inline; filename= " relatorio_pauta_sessao.pdf " ' )
' inline; filename= " relatorio_pauta_sessao.pdf " ' )
casa = CasaLegislativa . objects . first ( )
@ -1172,7 +1162,6 @@ def relatorio_pauta_sessao(request, pk):
def get_pauta_sessao ( sessao , casa ) :
inf_basicas_dic = { }
inf_basicas_dic [ " nom_sessao " ] = sessao . tipo . nome
inf_basicas_dic [ " num_sessao_plen " ] = sessao . numero
@ -1192,7 +1181,7 @@ def get_pauta_sessao(sessao, casa):
dic_expediente_materia = { }
dic_expediente_materia [ " tipo_materia " ] = materia . tipo . sigla + \
' - ' + materia . tipo . descricao
' - ' + materia . tipo . descricao
dic_expediente_materia [ " num_ordem " ] = str (
expediente_materia . numero_ordem )
dic_expediente_materia [ " id_materia " ] = str (
@ -1234,7 +1223,7 @@ def get_pauta_sessao(sessao, casa):
id = votacao . materia . id ) . first ( )
dic_votacao = { }
dic_votacao [ " tipo_materia " ] = materia . tipo . sigla + \
' - ' + materia . tipo . descricao
' - ' + materia . tipo . descricao
dic_votacao [ " num_ordem " ] = votacao . numero_ordem
dic_votacao [ " id_materia " ] = str (
materia . numero ) + " / " + str ( materia . ano )
@ -1280,7 +1269,8 @@ def get_pauta_sessao(sessao, casa):
inf_basicas_dic ,
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 )
main_doc = html . render ( stylesheets = [ ] )
@ -1291,7 +1281,7 @@ def make_pdf(base_url,main_template,header_template,main_css='',header_css=''):
return get_page_body ( box . all_children ( ) )
# 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_page = header . pages [ 0 ]
@ -1307,7 +1297,7 @@ def make_pdf(base_url,main_template,header_template,main_css='',header_css=''):
return pdf_file
def resumo_ata_pdf ( request , pk ) :
def resumo_ata_pdf ( request , pk ) :
base_url = request . build_absolute_uri ( )
casa = CasaLegislativa . objects . first ( )
rodape = ' ' . join ( get_rodape ( casa ) )
@ -1330,12 +1320,12 @@ def resumo_ata_pdf(request,pk):
context . update ( { ' object ' : sessao_plenaria } )
context . update ( { ' data ' : dt . today ( ) . strftime ( ' %d / % m/ % Y ' ) } )
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_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 [ ' Content-Disposition ' ] = ' inline; filename=relatorio.pdf '
@ -1344,6 +1334,7 @@ def resumo_ata_pdf(request,pk):
return response
def cria_relatorio ( request , context , html_string , header_info = " " ) :
base_url = request . build_absolute_uri ( )
casa = CasaLegislativa . objects . first ( )
@ -1366,62 +1357,80 @@ def cria_relatorio(request, context, html_string, header_info=""):
return response
def relatorio_doc_administrativos ( request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_doc_administrativos.html ' )
def relatorio_materia_em_tramitacao ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_materias_em_tramitacao.html ' )
def relatorio_materia_por_autor ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_materias_por_autor.html ' )
def relatorio_materia_por_ano_autor ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_materias_por_ano_autor.html ' )
def relatorio_presenca_sessao ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_presenca_sessao.html ' )
def relatorio_atas ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_atas.html ' )
def relatorio_historico_tramitacao ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_historico_tramitacao.html ' )
def relatorio_fim_prazo_tramitacao ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_fim_prazo_tramitacao.html ' )
def relatorio_reuniao ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_reuniao.html ' )
def relatorio_audiencia ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_audiencia.html ' )
def relatorio_normas_mes ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_normas_mes.html ' )
def relatorio_normas_vigencia ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_normas_vigencia.html ' )
def relatorio_historico_tramitacao_adm ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_historico_tramitacao_adm.html ' )
def relatorio_estatisticas_acesso_normas ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_estatisticas_acesso_normas.html ' )
def relatorio_documento_acessorio ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_documento_acessorio.html ' )
def relatorio_normas_por_autor ( obj , request , context ) :
return cria_relatorio ( request , context , ' relatorios/relatorio_normas_por_autor.html ' )
def relatorio_pauta_sessao_weasy ( obj , request , context ) :
sessao = context [ ' object ' ]
info = " Pauta da {} ( {} - {} ) Legislatura " . format ( sessao , sessao . legislatura . data_inicio . year , sessao . legislatura . data_fim . year )
return cria_relatorio ( request , context , ' relatorios/relatorio_pauta_sessao.html ' , info )
info = " Pauta da {} ( {} - {} ) Legislatura " . format ( sessao , sessao . legislatura . data_inicio . year ,
sessao . legislatura . data_fim . year )
return cria_relatorio ( request , context , ' relatorios/relatorio_pauta_sessao.html ' , info )
def relatorio_sessao_plenaria_pdf ( request , pk ) :
base_url = request . build_absolute_uri ( )
base_url = request . build_absolute_uri ( )
logger = logging . getLogger ( __name__ )
username = request . user . username
casa = CasaLegislativa . objects . first ( )
@ -1441,50 +1450,110 @@ def relatorio_sessao_plenaria_pdf(request, pk):
raise Http404 ( ' Essa página não existe ' )
( inf_basicas_dic ,
cont_mult_dic ,
lst_mesa ,
lst_presenca_sessao ,
lst_ausencia_sessao ,
lst_expedientes ,
lst_expediente_materia ,
lst_expediente_materia_vot_nom ,
lst_oradores_expediente ,
lst_presenca_ordem_dia ,
lst_votacao ,
lst_votacao_vot_nom ,
lst_oradores_ordemdia ,
lst_oradores ,
lst_ocorrencias ) = get_sessao_plenaria ( sessao , casa )
html_template = render_to_string ( ' relatorios/relatorio_sessao_plenaria.html ' ,
{
" inf_basicas_dic " : inf_basicas_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_oradores_expediente " : lst_oradores_expediente ,
" lst_presenca_ordem_dia " : lst_presenca_ordem_dia ,
" lst_votacao " : lst_votacao ,
" lst_oradores " : lst_oradores ,
" lst_ocorrencias " : lst_ocorrencias ,
" rodape " : rodape ,
" data " : dt . today ( ) . strftime ( ' %d / % m/ % Y ' )
} )
cont_mult_dic ,
lst_mesa ,
lst_presenca_sessao ,
lst_ausencia_sessao ,
lst_expedientes ,
lst_expediente_materia ,
lst_expediente_materia_vot_nom ,
lst_oradores_expediente ,
lst_presenca_ordem_dia ,
lst_votacao ,
lst_votacao_vot_nom ,
lst_oradores_ordemdia ,
lst_oradores ,
lst_ocorrencias ) = get_sessao_plenaria ( sessao , casa )
dict_ord_template = {
' cont_mult ' : ' conteudo_multimidia.html ' ,
' exp ' : ' expedientes.html ' ,
' id_basica ' : ' identificacao_basica.html ' ,
' lista_p ' : ' lista_presenca_sessao.html ' ,
' lista_p_o_d ' : ' lista_presenca_ordemdia.html ' ,
' mat_exp ' : ' materias_expediente.html ' ,
' v_n_mat_exp ' : ' votos_nominais_expediente.html ' ,
' mat_o_d ' : ' materias_ordemdia.html ' ,
' v_n_mat_o_d ' : ' votos_nominais_ordemdia.html ' ,
' mesa_d ' : ' mesa_diretora.html ' ,
' oradores_exped ' : ' oradores_expediente.html ' ,
' oradores_o_d ' : ' oradores_ordemdia.html ' ,
' oradores_expli ' : ' oradores_explicacoes.html ' ,
' 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 {} \
da { } ª Sessão Legislativa da { } \
Legislatura " .format(inf_basicas_dic[ ' num_sessao_plen ' ],
inf_basicas_dic [ ' nom_sessao ' ] ,
inf_basicas_dic [ ' num_sessao_leg ' ] ,
inf_basicas_dic [ ' num_legislatura ' ]
inf_basicas_dic [ ' nom_sessao ' ] ,
inf_basicas_dic [ ' num_sessao_leg ' ] ,
inf_basicas_dic [ ' num_legislatura ' ]
)
html_header = render_to_string ( ' relatorios/header_ata.html ' , { " casa " : casa ,
" MEDIA_URL " : MEDIA_URL ,
" logotipo " : casa . logotipo ,
" info " : info } )
html_header = render_to_string ( ' relatorios/header_ata.html ' , { " casa " : casa ,
" MEDIA_URL " : MEDIA_URL ,
" logotipo " : casa . logotipo ,
" info " : info } )
pdf_file = make_pdf ( base_url = base_url , main_template = html_template , header_template = html_header )
@ -1494,4 +1563,3 @@ def relatorio_sessao_plenaria_pdf(request, pk):
response . write ( pdf_file )
return response