mirror of https://github.com/interlegis/sapl.git
Edward Ribeiro
9 years ago
36 changed files with 3920 additions and 37 deletions
@ -0,0 +1,3 @@ |
|||
# from django.contrib import admin |
|||
|
|||
# Register your models here. |
@ -0,0 +1,3 @@ |
|||
# from django.db import models |
|||
|
|||
# Create your models here. |
@ -0,0 +1,9 @@ |
|||
<html> |
|||
<script language="javascript"> |
|||
function alerta(){ |
|||
alert("O resultado da pesquisa é muito grande para gerar o arquivo .pdf,\npor favor,preencha os filtros");} |
|||
alerta() |
|||
history.back() |
|||
</script> |
|||
</html> |
|||
|
@ -0,0 +1,90 @@ |
|||
##parameters=sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro |
|||
|
|||
"""relatorio_protocolo.py |
|||
External method para gerar o arquivo rml da etiqueta de protocolo |
|||
Autor: Luciano De Fazio |
|||
Empresa: OpenLegis Consultoria |
|||
versão: 1.0 |
|||
""" |
|||
import time |
|||
from cStringIO import StringIO |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def paraStyle(): |
|||
"""Gera o codigo rml que define o estilo dos paragrafos""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t<stylesheet>\n' |
|||
tmp_data+='\t\t<blockTableStyle id="Standard_Outline">\n' |
|||
tmp_data+='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp_data+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp_data+='\t\t</blockTableStyle>\n' |
|||
tmp_data+='\t\t<initialize>\n' |
|||
tmp_data+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp_data+='\t\t</initialize>\n' |
|||
tmp_data+='\t\t<paraStyle name="P1" fontName="Helvetica" fontSize="9" leading="11" alignment="justify"/>\n' |
|||
tmp_data+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="8" leading="9" alignment="right"/>\n' |
|||
tmp_data+='\t\t<paraStyle name="P3" fontName="Helvetica" fontSize="9" leading="9" alignment="justify"/>\n' |
|||
tmp_data+='\t</stylesheet>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def protocolos(lst_protocolos): |
|||
"""Gera o codigo rml do conteudo da pesquisa de protocolos""" |
|||
|
|||
tmp_data='' |
|||
|
|||
#inicio do bloco que contem os flowables |
|||
tmp_data+='\t<story>\n' |
|||
|
|||
for dic in lst_protocolos: |
|||
#condicao para a quebra de pagina |
|||
tmp_data+='\t\t<condPageBreak height="3cm"/>\n' |
|||
|
|||
#protocolos |
|||
tmp_data+='\t\t<barCode code="Code128" x="5.6cm" barHeight="0.3in" barWidth="0.012in">' +dic['titulo']+ '</barCode>\n' |
|||
tmp_data+='\t\t<para style="P2"><b>Protocolo:</b> ' +dic['titulo']+ '</para>\n' |
|||
tmp_data+='\t\t<para style="P2">'+ dic['data']+ '</para>\n' |
|||
tmp_data+='\t\t<para style="P1"><b>'+dic['numeracao']+'</b></para>\n' |
|||
tmp_data+='\t\t<para style="P1"><b>'+dic['sgl_processo']+' '+dic['ident_processo']+ ' '+dic['num_processo']+ '</b></para>\n' |
|||
tmp_data+='\t\t<para style="P1"><b>Autor:</b> <font size="8">' +dic['nom_autor']+ '</font></para>\n' |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
tmp_data+='\t\t<para style="P3"><b>Ementa:</b> <font size="8">' +dic['txt_assunto']+ '</font></para>\n' |
|||
|
|||
tmp_data+='\t</story>\n' |
|||
return tmp_data |
|||
|
|||
def principal(sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro={}): |
|||
"""Funcao pricipal que gera a estrutura global do arquivo rml""" |
|||
|
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp_data+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp_data+='<document filename="etiquetas.pdf">\n' |
|||
tmp_data+='\t<template pageSize="(10cm, 6.2cm)" title="Etiquetas de Protocolo" author="Luciano De Fazio" allowSplitting="20" rightMargin="3mm" showBoundary="0">\n' |
|||
tmp_data+='\t\t<pageTemplate id="main">\n' |
|||
tmp_data+='\t\t<pageGraphics>\n' |
|||
tmp_data+='\t\t</pageGraphics>\n' |
|||
tmp_data+='\t\t\t<frame id="first" x1="4mm" y1="1mm" width="94mm" height="60mm"/>\n' |
|||
tmp_data+='\t\t</pageTemplate>\n' |
|||
tmp_data+='\t</template>\n' |
|||
tmp_data+=paraStyle() |
|||
tmp_data+=protocolos(lst_protocolos) |
|||
tmp_data+='</document>\n' |
|||
tmp_pdf=parseString(tmp_data) |
|||
|
|||
if hasattr(context.temp_folder,arquivoPdf): |
|||
context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
context.temp_folder.manage_addFile(arquivoPdf) |
|||
arq=context.temp_folder[arquivoPdf] |
|||
arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
return "/temp_folder/"+arquivoPdf |
|||
|
|||
return principal(sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro) |
@ -0,0 +1,138 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
|
|||
data=DateTime().strftime('%d/%m/%Y') |
|||
|
|||
#Abaixo é gerada a string para o rodapé da página |
|||
casa={} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]]=item[1] |
|||
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
if len(casa["num_cep"])==8: |
|||
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] |
|||
else: |
|||
cep="" |
|||
|
|||
linha1=casa["end_casa"] |
|||
if cep!="": |
|||
if casa["end_casa"]!="" and casa["end_casa"]!=None: |
|||
linha1 = linha1 + " - " |
|||
linha1 = linha1 + "CEP "+cep |
|||
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: |
|||
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf |
|||
if casa["num_tel"]!="" and casa["num_tel"]!=None: |
|||
linha1 = linha1 + " Tel.: "+ casa["num_tel"] |
|||
|
|||
linha2=casa["end_web_casa"] |
|||
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: |
|||
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: |
|||
linha2 = linha2 + " - " |
|||
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] |
|||
|
|||
data_emissao=DateTime().strftime("%d/%m/%Y") |
|||
rodape=[linha1,linha2,data_emissao] |
|||
|
|||
#Por fim, gera-se as entradas para o cabeçalho |
|||
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") |
|||
for uf in estados: |
|||
if localidade[0].sgl_uf==uf.sgl_uf: |
|||
nom_estado=uf.nom_localidade |
|||
break |
|||
cabecalho={} |
|||
cabecalho["nom_casa"]=casa["nom_casa"] |
|||
cabecalho["nom_estado"]="Estado de "+nom_estado |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
#Por fim, utiliza o PythonScript para pesquisar os protocolos e gerar os dados |
|||
|
|||
protocolos=[] |
|||
REQUEST=context.REQUEST |
|||
for protocolo in context.zsql.protocolo_pesquisar_zsql(tip_protocolo=REQUEST['rad_tip_protocolo'], |
|||
cod_protocolo=REQUEST['txt_num_protocolo'], ano_protocolo=REQUEST['txt_ano_protocolo'], |
|||
tip_documento=REQUEST['lst_tip_documento'], tip_processo=REQUEST['rad_tip_processo'], |
|||
tip_materia=REQUEST['lst_tip_materia'], des_assunto=REQUEST['txt_assunto'], |
|||
cod_autor=REQUEST['hdn_cod_autor'], des_interessado=REQUEST['txa_txt_interessado'], |
|||
dat_apres=REQUEST['dt_apres'], dat_apres2=REQUEST['dt_apres2']): |
|||
dic={} |
|||
|
|||
dic['titulo']=str(protocolo.cod_protocolo) |
|||
|
|||
dic['ano']=str(protocolo.ano_protocolo) |
|||
|
|||
dic['data']=context.pysc.iso_to_port_pysc(protocolo.dat_protocolo)+' - '+protocolo.hor_protocolo |
|||
|
|||
dic['txt_assunto']=protocolo.txt_assunto_ementa |
|||
|
|||
dic['txt_interessado']=protocolo.txt_interessado |
|||
|
|||
dic['nom_autor'] = " " |
|||
if protocolo.cod_autor!=None: |
|||
for autor in context.zsql.autor_obter_zsql(cod_autor=protocolo.cod_autor): |
|||
if autor.des_tipo_autor=='Parlamentar': |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): |
|||
dic['nom_autor']=parlamentar.nom_completo |
|||
elif autor.des_tipo_autor=='Comissao': |
|||
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): |
|||
dic['nom_autor']=comissao.nom_comissao |
|||
else: |
|||
dic['nom_autor']=autor.nom_autor |
|||
else: |
|||
dic['nom_autor']=protocolo.txt_interessado |
|||
|
|||
dic['natureza']='' |
|||
if protocolo.tip_processo==0: |
|||
dic['natureza']='Administrativo' |
|||
if protocolo.tip_processo==1: |
|||
dic['natureza']='Legislativo' |
|||
|
|||
dic['ident_processo']=protocolo.des_tipo_materia or protocolo.des_tipo_documento |
|||
|
|||
dic['sgl_processo']=protocolo.sgl_tipo_materia or protocolo.sgl_tipo_documento |
|||
|
|||
dic['num_materia']='' |
|||
for materia in context.zsql.materia_obter_zsql(num_protocolo=protocolo.cod_protocolo,ano_ident_basica=protocolo.ano_protocolo): |
|||
dic['num_materia']=str(materia.num_ident_basica)+'/'+ str(materia.ano_ident_basica) |
|||
|
|||
dic['num_documento']='' |
|||
for documento in context.zsql.documento_administrativo_obter_zsql(num_protocolo=protocolo.cod_protocolo): |
|||
dic['num_documento']=str(documento.num_documento)+'/'+ str(documento.ano_documento) |
|||
|
|||
dic['num_processo']=dic['num_materia'] or dic['num_documento'] |
|||
|
|||
dic['numeracao']='' |
|||
for materia_num in context.zsql.materia_obter_zsql(num_protocolo=protocolo.cod_protocolo,ano_ident_basica=protocolo.ano_protocolo): |
|||
for numera in context.zsql.numeracao_obter_zsql(cod_materia=materia_num.cod_materia,ind_excluido=0): |
|||
dic['numeracao']='PROCESSO N° ' +str(numera.num_materia)+'/'+ str(numera.ano_materia) |
|||
|
|||
dic['anulado']='' |
|||
if protocolo.ind_anulado==1: |
|||
dic['anulado']='Nulo' |
|||
|
|||
protocolos.append(dic) |
|||
|
|||
filtro={} # Dicionário que conterá os dados do filtro |
|||
|
|||
# Atribuições diretas do REQUEST |
|||
filtro['numero']=REQUEST.txt_num_protocolo |
|||
filtro['ano']=REQUEST.txt_ano_protocolo |
|||
filtro['tipo_protocolo']=REQUEST.rad_tip_protocolo |
|||
filtro['tipo_processo']=REQUEST.rad_tip_processo |
|||
filtro['assunto']=REQUEST.txt_assunto |
|||
filtro['autor']=REQUEST.hdn_cod_autor |
|||
filtro['interessado']=REQUEST.txa_txt_interessado |
|||
|
|||
sessao=session.id |
|||
caminho = context.pdf_capa_processo_gerar(sessao,imagem,data,protocolos,cabecalho,rodape,filtro) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,350 @@ |
|||
##parameters=imagem, dic_rodape,dic_inf_basicas,dic_orig_externa,lst_mat_anexadas,lst_autoria,lst_des_iniciais,dic_tramitacoes,lst_relatorias,lst_numeracoes,lst_leg_citadas,lst_acessorios,sessao='' |
|||
|
|||
"""relatorio_detalhe_materia.py |
|||
External method para gerar o arquivo rml do resultado da pesquisa de uma matéria |
|||
Autor: Leandro Gasparotto Valladares |
|||
Empresa: Interlegis |
|||
versão: 1.0 |
|||
""" |
|||
import time |
|||
from cStringIO import StringIO |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def cabecalho(dic_inf_basicas,imagem): |
|||
""" |
|||
Função que gera o código rml do cabeçalho da página |
|||
""" |
|||
|
|||
tmp='' |
|||
tmp+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' |
|||
tmp+='\t\t\t\t<lines>2cm 24.5cm 19cm 24.5cm</lines>\n' |
|||
if dic_inf_basicas['nom_camara']!="" and dic_inf_basicas['nom_camara']!=None: |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="16"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + dic_inf_basicas['nom_camara'] + '</drawString>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="14"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="5cm" y="26.5cm">Sistema de Apoio ao Processo Legislativo</drawString>\n' |
|||
if str(dic_inf_basicas['nom_projeto']) != "" and str(dic_inf_basicas['nom_projeto']) != None: |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="15"/>\n' |
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">' + str(dic_inf_basicas['nom_projeto']) + '</drawCentredString>\n' |
|||
if str(dic_inf_basicas['cod_projeto']) != "" and str(dic_inf_basicas['cod_projeto']) != None: |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="15"/>\n' |
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="24.7cm">' + str(dic_inf_basicas['cod_projeto']) + '</drawCentredString>\n' |
|||
return tmp |
|||
|
|||
def rodape(dic_rodape): |
|||
""" |
|||
Função que gera o codigo rml do rodape da pagina. |
|||
""" |
|||
|
|||
tmp='' |
|||
linha1 = dic_rodape['end_casa'] |
|||
if dic_rodape['end_casa']!="" and dic_rodape['end_casa']!=None: |
|||
linha1 = linha1 + " - " |
|||
if dic_rodape['num_cep']!="" and dic_rodape['num_cep']!=None: |
|||
linha1 = linha1 + "CEP " + dic_rodape['num_cep'] |
|||
if dic_rodape['nom_localidade']!="" and dic_rodape['nom_localidade']!=None: |
|||
linha1 = linha1 + " - " + dic_rodape['nom_localidade'] |
|||
if dic_rodape['sgl_uf']!="" and dic_rodape['sgl_uf']!=None: |
|||
inha1 = linha1 + " " + dic_rodape['sgl_uf'] |
|||
if dic_rodape['num_tel']!="" and dic_rodape['num_tel']!=None: |
|||
linha1 = linha1 + " Tel: "+ dic_rodape['num_tel'] |
|||
if dic_rodape['end_web_casa']!="" and dic_rodape['end_web_casa']!=None: |
|||
linha2 = dic_rodape['end_web_casa'] |
|||
if dic_rodape['end_email_casa']!="" and dic_rodape['end_email_casa']!=None: |
|||
linha2 = linha2 + " - E-mail: " + dic_rodape['end_email_casa'] |
|||
if dic_rodape['data_emissao']!="" and dic_rodape['data_emissao']!=None: |
|||
data_emissao = dic_rodape['data_emissao'] |
|||
|
|||
tmp+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + data_emissao + '</drawString>\n' |
|||
tmp+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' |
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + linha1 + '</drawCentredString>\n' |
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + linha2 + '</drawCentredString>\n' |
|||
|
|||
return tmp |
|||
|
|||
def paraStyle(): |
|||
"""Função que gera o código rml que define o estilo dos parágrafos""" |
|||
|
|||
tmp='' |
|||
tmp+='\t<stylesheet>\n' |
|||
tmp+='\t\t<blockTableStyle id="Standard_Outline">\n' |
|||
tmp+='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp+='\t\t</blockTableStyle>\n' |
|||
tmp+='\t\t<initialize>\n' |
|||
tmp+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp+='\t\t</initialize>\n' |
|||
#titulo do parágrafo: é por default centralizado |
|||
tmp+='\t\t<paraStyle name="style.Title" fontName="Helvetica" fontSize="11" leading="13" alignment="RIGHT"/>\n' |
|||
tmp+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="12.0" textColor="gray" leading="14" spaceBefore="6" alignment="LEFT"/>\n' |
|||
tmp+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="10" alignment="LEFT"/>\n' |
|||
tmp+='\t\t<paraStyle name="texto_projeto" fontName="Helvetica" fontSize="12.0" leading="12" spaceAfter="10" alignment="JUSTIFY"/>\n' |
|||
tmp+='\t</stylesheet>\n' |
|||
|
|||
return tmp |
|||
|
|||
def inf_basicas(dic_inf_basicas): |
|||
""" |
|||
Função que gera o código rml das funções básicas do relatório |
|||
""" |
|||
|
|||
tmp='' |
|||
#Texto do projeto |
|||
texto_projeto = str(dic_inf_basicas['texto_projeto']) |
|||
if texto_projeto != "" and texto_projeto != None : |
|||
tmp+='\t\t<para style="texto_projeto">' + texto_projeto.replace('&','&') + '</para>\n' |
|||
|
|||
#inÃcio das informações básicas |
|||
tmp+='\t\t<para style="P1">Informações Básicas</para>\n' |
|||
if str(dic_inf_basicas['apresentada']) != "" and str(dic_inf_basicas['apresentada']) != None: |
|||
tmp+='\t\t<para style="P2"><b>Apresentada em: </b> ' + str(dic_inf_basicas['apresentada']) + '</para>\n' |
|||
|
|||
if str(dic_inf_basicas['formato']) != "" and str(dic_inf_basicas['formato']) != None: |
|||
tmp+='\t\t<para style="P2"><b>Formato: </b> ' + str(dic_inf_basicas['formato']) + '</para>\n' |
|||
|
|||
if dic_inf_basicas['publicada']==0: |
|||
tmp+='\t\t<para style="P2"><b>Publicada:</b> Não</para>\n' |
|||
else: |
|||
tmp+='\t\t<para style="P2"><b>Publicada:</b> Sim</para>\n' |
|||
|
|||
if str(dic_inf_basicas['objeto']) != "" and str(dic_inf_basicas['objeto']) != None: |
|||
tmp+='\t\t<para style="P2"><b>Objeto: </b> ' + str(dic_inf_basicas['objeto']) + '</para>\n' |
|||
|
|||
if dic_inf_basicas['tramitacao']==0: |
|||
tmp+='\t\t<para style="P2"><b>Tramitação:</b> Não</para>\n' |
|||
else: |
|||
tmp+='\t\t<para style="P2"><b>Tramitação:</b> Sim</para>\n' |
|||
|
|||
if str(dic_inf_basicas['reg_tramitacao']) != "" and str(dic_inf_basicas['reg_tramitacao']) != None: |
|||
tmp+='\t\t<para style="P2"><b>Regime: </b> ' + str(dic_inf_basicas['reg_tramitacao']) + '</para>\n' |
|||
|
|||
if str(dic_inf_basicas['prazo']) != "" and str(dic_inf_basicas['prazo']) != None: |
|||
tmp+='\t\t<para style="P2"><b>Dias de prazo: </b> ' + str(dic_inf_basicas['prazo']) + '</para>\n' |
|||
|
|||
if str(dic_inf_basicas['fim_prazo']) != "" and str(dic_inf_basicas['fim_prazo']) != None: |
|||
tmp+='\t\t<para style="P2"><b>Data do fim do prazo: </b> ' + str(dic_inf_basicas['fim_prazo']) + '</para>\n' |
|||
|
|||
if dic_inf_basicas['mat_complementar'] == 0: |
|||
tmp+='\t\t<para style="P2"><b>Matéria Complementar:</b> Não</para>\n' |
|||
else: |
|||
tmp+='\t\t<para style="P2"><b>Matéria Complementar:</b> Sim</para>\n' |
|||
|
|||
if dic_inf_basicas['polemica'] == 0: |
|||
tmp+='\t\t<para style="P2"><b>Polêmica:</b> Não</para>\n' |
|||
else: |
|||
tmp+='\t\t<para style="P2"><b>Polêmica:</b> Sim</para>\n' |
|||
|
|||
apelido = dic_inf_basicas['apelido'] |
|||
if apelido != "" and apelido != None: |
|||
tmp+='\t\t<para style="P2"><b>Apelido: </b> ' + apelido.replace('&','&') + '</para>\n' |
|||
|
|||
indexacao = dic_inf_basicas['indexacao'] |
|||
if indexacao != "" and indexacao != None: |
|||
tmp+='\t\t<para style="P2"><b>Indexação: </b> ' + indexacao.replace('&','&') + '</para>\n' |
|||
|
|||
observacao = dic_inf_basicas['observacao'] |
|||
if observacao != "" and observacao != None: |
|||
tmp+='\t\t<para style="P2"><b>Observação: </b> ' + observacao.replace('&','&') + '</para>\n' |
|||
|
|||
return tmp |
|||
|
|||
def orig_externa(dic_orig_externa): |
|||
""" |
|||
Função que gera o código rml da origem externa |
|||
""" |
|||
|
|||
tmp='' |
|||
tmp+='\t\t<para style="P1">Origem Externa</para>\n' |
|||
try: |
|||
if dic_orig_externa['local'] != "" and dic_orig_externa['local'] != None: |
|||
tmp+='\t\t<para style="P2"><b>Local:</b> ' + dic_orig_externa['local'] + '</para>\n' |
|||
|
|||
if dic_orig_externa['data'] != "" and dic_orig_externa['data'] != None: |
|||
tmp+='\t\t<para style="P2"><b>Data:</b> ' + dic_orig_externa['data'] + '</para>\n' |
|||
|
|||
if dic_orig_externa['tipo'] != "" and dic_orig_externa['tipo'] != None: |
|||
tmp+='\t\t<para style="P2"><b>Tipo:</b> ' + dic_orig_externa['tipo'] + '</para>\n' |
|||
|
|||
if dic_orig_externa['numero_ano'] != "" and dic_orig_externa['numero_ano'] != None: |
|||
tmp+='\t\t<para style="P2"><b>Número/Ano:</b> ' + dic_orig_externa['numero_ano'] + '</para>\n' |
|||
except: pass |
|||
|
|||
return tmp |
|||
|
|||
def mat_anexadas(lst_mat_anexadas): |
|||
|
|||
tmp='' |
|||
tmp+='\t\t<para style="P1">Matérias Anexadas</para>\n' |
|||
for dic_mat in lst_mat_anexadas: |
|||
if dic_mat['nom_mat']!="" and dic_mat['nom_mat']!= None: |
|||
tmp+='\t\t<para style="P2"><b>Nome da matéria:</b> ' + dic_mat['nom_mat'] + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Data:</b> ' + dic_mat['data'] + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Data final:</b> ' + str(dic_mat['data_fim']) + '</para>\n' |
|||
return tmp |
|||
|
|||
def autoria(lst_autoria): |
|||
|
|||
tmp='' |
|||
tmp+='\t\t<para style="P1">Autores</para>\n' |
|||
for dic_autor in lst_autoria: |
|||
if dic_autor['nom_autor'] != "" and dic_autor['nom_autor'] != None: |
|||
tmp+='\t\t<para style="P2"><b>Nome do Autor:</b> ' + dic_autor['nom_autor'] + '</para>\n' |
|||
|
|||
if dic_autor['nom_autor'] != "" and dic_autor['cargo'] != None: |
|||
tmp+='\t\t<para style="P2"><b>Cargo:</b> ' + dic_autor['cargo'] + '</para>\n' |
|||
|
|||
if dic_autor['nom_autor'] != "" and dic_autor['tipo'] != None: |
|||
tmp+='\t\t<para style="P2"><b>Tipo:</b> ' + dic_autor['tipo'] + '</para>\n' |
|||
return tmp |
|||
|
|||
def despachos_iniciais(lst_des_iniciais): |
|||
|
|||
tmp='' |
|||
tmp+='\t\t<para style="P1">Despachos Iniciais</para>\n' |
|||
for dic_dados in lst_des_iniciais: |
|||
if dic_dados['nom_comissao']==None: |
|||
dic_dados['nom_comissao']=" " |
|||
tmp+='\t\t<para style="P2"><b>Nome da comissão:</b> ' + dic_dados['nom_comissao'] + '</para>\n' |
|||
return tmp |
|||
|
|||
def tramitacoes(dic_tramitacoes): |
|||
|
|||
tmp='' |
|||
tmp+='\t\t<para style="P1">Última Tramitação</para>\n' |
|||
try: |
|||
tmp+='\t\t<para style="P2"><b>Data Ação:</b> ' + str(dic_tramitacoes['data']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Unidade Local:</b> ' + dic_tramitacoes['unidade'] + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Encaminhada em:</b> ' + str(dic_tramitacoes['data_enc']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Destino:</b> ' + dic_tramitacoes['destino'] + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Turno:</b> ' + dic_tramitacoes['turno'] + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Status:</b> ' + dic_tramitacoes['status'] + '</para>\n' |
|||
if dic_tramitacoes['urgente']==0: |
|||
tmp+='\t\t<para style="P2"><b>Urgente:</b> Não</para>\n' |
|||
else: |
|||
tmp+='\t\t<para style="P2"><b>Urgente:</b> Sim</para>\n' |
|||
|
|||
tmp+='\t\t<para style="P2"><b>Data do fim do prazo:</b> ' + str(dic_tramitacoes['data_fim']) + '</para>\n' |
|||
if dic_tramitacoes['texto_acao'] != "" and dic_tramitacoes['texto_acao'] != None : |
|||
tmp+='\t\t<para style="P2"><b>Texto da Ação:</b> ' + dic_tramitacoes['texto_acao'].replace('&','&') + '</para>\n' |
|||
|
|||
except: pass |
|||
return tmp |
|||
|
|||
def relatorias(lst_relatorias): |
|||
|
|||
tmp='' |
|||
tmp+='\t\t<para style="P1">Relatorias</para>\n' |
|||
for dic_comissao in lst_relatorias: |
|||
tmp+='\t\t<para style="P2"><b>Comissão:</b> ' + dic_comissao['nom_comissao'] + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Data Designação:</b> ' + str(dic_comissao['data_desig']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Parlamentar:</b> ' + dic_comissao['parlamentar'] + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Data Destituição:</b> ' + str(dic_comissao['data_dest']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Motivo Fim Relatoria:</b> ' + dic_comissao['motivo'] + '</para>\n' |
|||
return tmp |
|||
|
|||
def numeracoes(lst_numeracoes): |
|||
|
|||
tmp='' |
|||
tmp+='\t\t<para style="P1">Numerações</para>\n' |
|||
for dic_dados in lst_numeracoes: |
|||
tmp+='\t\t<para style="P2"><b>Nome:</b> ' + dic_dados['nome'] + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Ano:</b> ' + str(dic_dados['ano']) + '</para>\n' |
|||
return tmp |
|||
|
|||
def legislacoes_citadas(lst_leg_citadas): |
|||
|
|||
tmp='' |
|||
tmp+='\t\t<para style="P1">Legislações Citadas</para>\n' |
|||
for dic_dados in lst_leg_citadas: |
|||
tmp+='\t\t<para style="P2"><b>Tipo Norma:</b> ' + str(dic_dados['nome_lei']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Disposição:</b> ' + str(dic_dados['disposicao']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Parte:</b> ' + str(dic_dados['parte']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Livro:</b> ' + str(dic_dados['livro']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Título:</b> ' + str(dic_dados['titulo']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Capítulo:</b> ' + str(dic_dados['capitulo']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Seção:</b> ' + str(dic_dados['secao']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Subseção:</b> ' + str(dic_dados['subsecao']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Artigo:</b> ' + str(dic_dados['artigo']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Parágrafo:</b> ' + str(dic_dados['paragrafo']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Inciso:</b> ' + str(dic_dados['inciso']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Alínea:</b> ' + str(dic_dados['alinea']) + '</para>\n' |
|||
tmp+='\t\t<para style="P2"><b>Item:</b> ' + str(dic_dados['item']) + '</para>\n' |
|||
return tmp |
|||
|
|||
def documentos_acessorios(lst_acessorios): |
|||
|
|||
tmp='' |
|||
tmp+='\t\t<para style="P1">Documentos Acessórios</para>\n' |
|||
for dic_dados in lst_acessorios: |
|||
if dic_dados['tipo']!=None: |
|||
tmp+='\t\t<para style="P2"><b>Tipo:</b> ' + dic_dados['tipo'] + '</para>\n' |
|||
|
|||
if dic_dados['nome']!=None: |
|||
tmp+='\t\t<para style="P2"><b>Nome:</b> ' + dic_dados['nome'] + '</para>\n' |
|||
|
|||
tmp+='\t\t<para style="P2"><b>Data:</b> ' + dic_dados['data'] + '</para>\n' |
|||
if dic_dados['autor']!=None: |
|||
tmp+='\t\t<para style="P2"><b>Autor:</b> ' + dic_dados['autor'] + '</para>\n' |
|||
|
|||
if dic_dados['ementa']!=None: |
|||
tmp+='\t\t<para style="P2"><b>Ementa:</b> ' + dic_dados['ementa'].replace('&','&') + '</para>\n' |
|||
if dic_dados['indexacao']!=None: |
|||
tmp+='\t\t<para style="P2"><b>Ementa:</b> ' + dic_dados['indexacao'].replace('&','&') + '</para>\n' |
|||
return tmp |
|||
|
|||
def principal(imagem, dic_rodape,dic_inf_basicas,dic_orig_externa,lst_mat_anexadas,lst_autoria,lst_des_iniciais, |
|||
dic_tramitacoes,lst_relatorias,lst_numeracoes,lst_leg_citadas,lst_acessorios,sessao=''): |
|||
""" |
|||
Função principal responsável por chamar as funções que irão gerar o código rml apropriado |
|||
""" |
|||
|
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp='' |
|||
tmp+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp+='<document filename="relatorio.pdf">\n' |
|||
tmp+='\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n' |
|||
tmp+='\t\t<pageTemplate id="first">\n' |
|||
tmp+='\t\t\t<pageGraphics>\n' |
|||
tmp+=cabecalho(dic_inf_basicas,imagem) |
|||
tmp+=rodape(dic_rodape) |
|||
tmp+='\t\t\t</pageGraphics>\n' |
|||
tmp+='\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="20.5cm"/>\n' |
|||
tmp+='\t\t</pageTemplate>\n' |
|||
tmp+='\t</template>\n' |
|||
tmp+=paraStyle() |
|||
tmp+='\t<story>\n' |
|||
tmp+=inf_basicas(dic_inf_basicas) |
|||
tmp+=orig_externa(dic_orig_externa) |
|||
tmp+=mat_anexadas(lst_mat_anexadas) |
|||
tmp+=autoria(lst_autoria) |
|||
tmp+=despachos_iniciais(lst_des_iniciais) |
|||
tmp+=tramitacoes(dic_tramitacoes) |
|||
tmp+=relatorias(lst_relatorias) |
|||
tmp+=numeracoes(lst_numeracoes) |
|||
tmp+=legislacoes_citadas(lst_leg_citadas) |
|||
tmp+=documentos_acessorios(lst_acessorios) |
|||
tmp+='\t</story>\n' |
|||
tmp+='</document>\n' |
|||
tmp_pdf=parseString(tmp) |
|||
|
|||
if hasattr(context.temp_folder,arquivoPdf): |
|||
context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
context.temp_folder.manage_addFile(arquivoPdf) |
|||
arq=context.temp_folder[arquivoPdf] |
|||
arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
# try: |
|||
# tmp_pdf=parseString(unicode(tmp, 'utf-8')) |
|||
# except: |
|||
# tmp_pdf=parseString(unicode(tmp, 'utf-8')) |
|||
|
|||
return "/temp_folder/"+arquivoPdf |
|||
|
|||
return principal(imagem, dic_rodape,dic_inf_basicas,dic_orig_externa,lst_mat_anexadas,lst_autoria,lst_des_iniciais, |
|||
dic_tramitacoes,lst_relatorias,lst_numeracoes,lst_leg_citadas,lst_acessorios,sessao) |
@ -0,0 +1,267 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
|
|||
cabecalho={} |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
#Abaixo é gerado o dic do rodapé da página (linha 7) |
|||
casa={} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]]=item[1] |
|||
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
data_emissao= DateTime().strftime("%d/%m/%Y") |
|||
rodape= casa |
|||
rodape['data_emissao']= data_emissao |
|||
|
|||
inf_basicas_dic = {} |
|||
inf_basicas_dic['nom_camara']= casa['nom_casa'] |
|||
REQUEST=context.REQUEST |
|||
for local in context.zsql.localidade_obter_zsql(cod_localidade = casa['cod_localidade']): |
|||
rodape['nom_localidade']= " "+local.nom_localidade |
|||
rodape['sgl_uf']= local.sgl_uf |
|||
|
|||
orig_externa_dic = {} |
|||
|
|||
for materia in context.zsql.materia_obter_zsql(cod_materia=REQUEST['cod_materia']): |
|||
#Abaixo é gerado os dados para o bloco Informações Básicas (ln 23) |
|||
inf_basicas_dic['texto_projeto']= materia.txt_ementa |
|||
inf_basicas_dic['apresentada']= materia.dat_apresentacao |
|||
inf_basicas_dic['formato']= materia.tip_apresentacao |
|||
inf_basicas_dic['publicada']= materia.dat_publicacao |
|||
inf_basicas_dic['objeto']= materia.des_objeto |
|||
inf_basicas_dic['tramitacao']= materia.ind_tramitacao |
|||
inf_basicas_dic['cod_projeto']= materia.sgl_tipo_materia+" "+ str(materia.num_ident_basica)+" de "+ str(materia.ano_ident_basica) |
|||
inf_basicas_dic['nom_projeto']= materia.des_tipo_materia |
|||
|
|||
for tramitacao in context.zsql.regime_tramitacao_obter_zsql(cod_regime_tramitacao=materia.cod_regime_tramitacao): |
|||
# """#tratando possíveis erros""" |
|||
# if tramitacao.des_regime_tramitacao==None: tramitacao.des_regime_tramitacao="" |
|||
# if materia.num_dias_prazo==None: materia.num_dias_prazo="" |
|||
# if materia.dat_fim_prazo==None: materia.dat_fim_prazo="" |
|||
# if materia.ind_complementar==None: materia.ind_complementar="" |
|||
# if materia.ind_polemica==None: materia.ind_polemica="" |
|||
# if materia.nom_apelido==None: materia.nom_apelido="" |
|||
# if materia.txt_indexacao==None: materia.txt_indexacao="" |
|||
# if materia.txt_observacao==None: materia.txt_observacao="" |
|||
# """#atribuindo valores""" |
|||
inf_basicas_dic['reg_tramitacao']= tramitacao.des_regime_tramitacao |
|||
inf_basicas_dic['prazo']= materia.num_dias_prazo |
|||
inf_basicas_dic['fim_prazo']= materia.dat_fim_prazo |
|||
inf_basicas_dic['mat_complementar']= materia.ind_complementar |
|||
inf_basicas_dic['polemica']= materia.ind_polemica |
|||
inf_basicas_dic['apelido']= materia.nom_apelido |
|||
inf_basicas_dic['indexacao']= materia.txt_indexacao |
|||
inf_basicas_dic['observacao']= materia.txt_observacao |
|||
|
|||
|
|||
# #o bloco abaixo gera o dicionario da origem externa (ln 47) |
|||
for origem in context.zsql.origem_obter_zsql(cod_origem = materia.cod_local_origem_externa): |
|||
# #tratando possíveis erros |
|||
# if origem.sgl_origem==None: origem.sgl_origem="" |
|||
# if origem.nom_origem==None: origem.nom_origem="" |
|||
# if materia.tip_origem_externa==None: materia.tip_origem_externa="" |
|||
# if materia.dat_origem_externa==None: materia.dat_origem_externa="" |
|||
# if materia.num_origem_externa==None: materia.num_origem_externa="" |
|||
# if materia.ano_origem_externa==None: materia.ano_origem_externa="" |
|||
|
|||
orig_externa_dic['local']= origem.sgl_origem+ "-"+ origem.nom_origem |
|||
orig_externa_dic['tipo']= materia.tip_origem_externa |
|||
orig_externa_dic['data']= materia.dat_origem_externa |
|||
orig_externa_dic['numero_ano']= str(materia.num_origem_externa)+ "/"+ str(materia.ano_origem_externa) |
|||
|
|||
# #o bloco abaixo gera o dicionario das materias anexadas (ln 55) |
|||
lst_mat_anexadas = [] |
|||
dic_mat = {} |
|||
for anexada in context.zsql.anexada_obter_zsql(cod_materia_principal=materia.cod_materia): |
|||
aux1 = context.zsql.materia_obter_zsql(cod_materia = anexada.cod_materia_anexada) |
|||
aux2 = context.zsql.tipo_materia_legislativa_obter_zsql(tip_materia = aux1[0].tip_id_basica) |
|||
# """#tratando possíveis erros""" |
|||
# if aux2.sgl_tipo_materia==None: aux2.sgl_tipo_materia="" |
|||
# if aux2.num_ident_basica==None: aux2.num_ident_basica="" |
|||
# if aux1.ano_ident_basica==None: aux1.ano_ident_basica="" |
|||
# if anexadas.dat_anexacao==None: anexadas.dat_anexacao="" |
|||
# if anexadas.dat_desanexacao==None: anexadas.dat_desanexacao="" |
|||
# """#""" |
|||
dic_mat['nom_mat']= aux2[0].sgl_tipo_materia+ "/"+ str(aux1[0].num_ident_basica)+ "/"+ str(aux1[0].ano_ident_basica) |
|||
dic_mat['data']= anexada.dat_anexacao |
|||
dic_mat['data_fim']= anexada.dat_desanexacao |
|||
lst_mat_anexadas.append(dic_mat) |
|||
|
|||
# #o bloco abaixo gera o dicionario dos autores(ln 66) |
|||
lst_autoria = [] |
|||
# dic_autor = {} |
|||
for autoria in context.zsql.autoria_obter_zsql(cod_materia = materia.cod_materia): |
|||
dic_autor = {} |
|||
if autoria.ind_primeiro_autor: |
|||
dic_autor['tipo']= "primeiro autor" |
|||
else: |
|||
dic_autor['tipo']= " " |
|||
|
|||
for autor in context.zsql.autor_obter_zsql(cod_autor = autoria.cod_autor): |
|||
dic_autor['cargo']= " " |
|||
if autor.des_tipo_autor=='Parlamentar': |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): |
|||
dic_autor['nom_autor']=parlamentar.nom_completo |
|||
elif autor.des_tipo_autor=='Comissao': |
|||
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): |
|||
dic_autor['nom_autor']=comissao.nom_comissao |
|||
else: |
|||
dic_autor['nom_autor']=autor.nom_autor |
|||
dic_autor['cargo']= autor.des_cargo |
|||
lst_autoria.append(dic_autor) |
|||
|
|||
# """#tratando possíveis erros""" |
|||
# if autor.nom_autor==None: autor.nom_autor="" |
|||
# if autor.des_cargo==None: autor.des_cargo="" |
|||
# """#""" |
|||
# dic_autor['nom_autor']= autor.nom_autor |
|||
# dic_autor['cargo']= autor.des_cargo |
|||
# if autoria.ind_primeiro_autor: |
|||
# dic_autor['tipo']= "primeiro autor" |
|||
# else: |
|||
# dic_autor['tipo']= " " |
|||
|
|||
# #o bloco abaixo gera o dicionario de despachos iniciais (ln 79) |
|||
lst_des_iniciais=[] |
|||
for despacho in context.zsql.despacho_inicial_obter_zsql(cod_materia = materia.cod_materia): |
|||
for comissao in context.zsql.comissao_obter_zsql(cod_comissao = despacho.cod_comissao_sel): |
|||
dic_dados={} |
|||
if comissao.nom_comissao==None: |
|||
comissao.nom_comissao='' |
|||
if comissao.sgl_comissao==None: |
|||
comissao.sgl_comissao='' |
|||
dic_dados['nom_comissao']=comissao.nom_comissao+ " - "+ comissao.sgl_comissao |
|||
lst_des_iniciais.append(dic_dados) |
|||
|
|||
# #o bloco abaixo gera o dicionário de Tramitacoes(ln 87) |
|||
dic_tramitacoes = {} |
|||
for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=REQUEST['cod_materia'], ind_ult_tramitacao=1): |
|||
dic_tramitacoes['data']= tramitacao.dat_tramitacao |
|||
dic_tramitacoes['data_enc']= tramitacao.dat_encaminha |
|||
dic_tramitacoes['turno']= tramitacao.sgl_turno |
|||
dic_tramitacoes['status']= tramitacao.des_status |
|||
dic_tramitacoes['urgente']= tramitacao.ind_urgencia |
|||
dic_tramitacoes['data_fim']= tramitacao.dat_fim_prazo |
|||
dic_tramitacoes['texto_acao']= tramitacao.txt_tramitacao |
|||
|
|||
|
|||
for unidade in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = tramitacao.cod_unid_tram_local): |
|||
#-----------------se unidade for comissao--------------------------------- |
|||
if unidade.cod_orgao==None: |
|||
for comissao in context.zsql.comissao_obter_zsql(cod_comissao = unidade.cod_comissao): |
|||
if tramitacao.cod_unid_tram_dest!=None: |
|||
for unidade_dest in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = tramitacao.cod_unid_tram_dest): |
|||
#se unidade destino for comissao |
|||
if unidade_dest.cod_orgao==None: |
|||
for comissao_dest in context.zsql.comissao_obter_zsql(cod_comissao = unidade_dest.cod_comissao): |
|||
dic_tramitacoes['unidade']= comissao.nom_comissao |
|||
dic_tramitacoes['destino']= comissao_dest.nom_comissao |
|||
#se unidade destino for orgao |
|||
if unidade_dest.cod_comissao==None: |
|||
for orgao_dest in context.zsql.orgao_obter_zsql(cod_orgao = unidade_dest.cod_orgao): |
|||
dic_tramitacoes['unidade']= comissao.nom_comissao |
|||
dic_tramitacoes['destino']= orgao_dest.nom_orgao |
|||
else: |
|||
dic_tramitacoes['unidade']= comissao.nom_comissao |
|||
dic_tramitacoes['destino']= "None" |
|||
#---------------se unidade for orgao----------------------------------------- |
|||
if unidade.cod_comissao==None: |
|||
for orgao in context.zsql.orgao_obter_zsql(cod_orgao = unidade.cod_orgao): |
|||
if tramitacao.cod_unid_tram_dest!=None: |
|||
for unidade_dest in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = tramitacao.cod_unid_tram_dest): |
|||
#se unidade destino for comissao |
|||
if unidade_dest.cod_orgao==None: |
|||
for comissao_dest in context.zsql.comissao_obter_zsql(cod_comissao = unidade_dest.cod_comissao): |
|||
dic_tramitacoes['unidade']= orgao.nom_orgao |
|||
dic_tramitacoes['destino']= comissao_dest.nom_comissao |
|||
#se unidade destino for orgao |
|||
if unidade_dest.cod_comissao==None: |
|||
for orgao_dest in context.zsql.orgao_obter_zsql(cod_orgao = unidade_dest.cod_orgao): |
|||
dic_tramitacoes['unidade']= orgao.nom_orgao |
|||
dic_tramitacoes['destino']= orgao_dest.nom_orgao |
|||
else: |
|||
dic_tramitacoes['unidade']= orgao.nom_orgao |
|||
dic_tramitacoes['destino']= "None" |
|||
|
|||
# #o bloco abaixo gera o dicionario de relatorias(ln 106) |
|||
|
|||
lst_relatorias = [] |
|||
dic_comissao = {} |
|||
for relatoria in context.zsql.relatoria_obter_zsql(cod_materia = materia.cod_materia): |
|||
for comissao in context.zsql.comissao_obter_zsql(cod_comissao = relatoria.cod_comissao): |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar = relatoria.cod_parlamentar): |
|||
dic_comissao['nom_comissao']= comissao.nom_comissao |
|||
dic_comissao['data_desig']= relatoria.dat_desig_relator |
|||
dic_comissao['parlamentar']= parlamentar.nom_completo |
|||
dic_comissao['data_dest']= relatoria.dat_destit_relator |
|||
if relatoria.tip_fim_relatoria==None or relatoria.tip_fim_relatoria=='0': |
|||
num = 0 |
|||
dic_comissao['motivo']="" |
|||
else: |
|||
num=relatoria.tip_fim_relatoria |
|||
for tipo_fim in context.zsql.tipo_fim_relatoria_obter_zsql(tip_fim_relatoria = num): |
|||
dic_comissao['motivo']= tipo_fim.des_fim_relatoria |
|||
lst_relatorias.append(dic_comissao) |
|||
|
|||
# #o bloco abaixo gera o dicionario de Numeracoes(ln 121) |
|||
|
|||
lst_numeracoes = [] |
|||
dic_dados={} |
|||
for numeracao in context.zsql.numeracao_obter_zsql(cod_materia = materia.cod_materia): |
|||
for tipo_materia in context.zsql.tipo_materia_legislativa_obter_zsql(tip_materia = numeracao.tip_materia): |
|||
dic_dados['nome']= tipo_materia.sgl_tipo_materia+ "-"+ tipo_materia.des_tipo_materia+ "nº"+ numeracao.num_materia |
|||
dic_dados['ano']= numeracao.ano_materia |
|||
lst_numeracoes.append(dic_dados) |
|||
|
|||
|
|||
# #o bloco abaixo gera o dicionário de legislacoes citadas(132) |
|||
|
|||
lst_legis_citadas = [] |
|||
dic_dados = {} |
|||
for legislacao in context.zsql.legislacao_citada_obter_zsql(cod_materia = materia.cod_materia): |
|||
norma = context.zsql.norma_juridica_obter_zsql(cod_norma = legislacao.cod_norma_sel) |
|||
dic_dados['nome_lei']= str(norma[0].tip_norma_sel) + " nº"+ str(norma[0].num_norma) + " de"+ str(norma[0].ano_norma) |
|||
dic_dados['disposicao']= legislacao.des_disposicoes |
|||
dic_dados['parte']= legislacao.des_parte |
|||
dic_dados['livro']= legislacao.des_livro |
|||
dic_dados['titulo']= legislacao.des_titulo |
|||
dic_dados['capitulo']= legislacao.des_capitulo |
|||
dic_dados['secao']= legislacao.des_secao |
|||
dic_dados['subsecao']= legislacao.des_subsecao |
|||
dic_dados['artigo']= legislacao.des_artigo |
|||
dic_dados['paragrafo']= legislacao.des_paragrafo |
|||
dic_dados['inciso']= legislacao.des_inciso |
|||
dic_dados['alinea']= legislacao.des_alinea |
|||
dic_dados['item']= legislacao.des_item |
|||
lst_legis_citadas.append(dic_dados) |
|||
|
|||
|
|||
# #o bloco abaixo gera o dicionario de Documentos Acessórios(153) |
|||
|
|||
lst_acessorios = [] |
|||
for documento in context.zsql.documento_acessorio_obter_zsql(cod_materia = materia.cod_materia): |
|||
dic_dados = {} |
|||
dic_dados['tipo']= documento.tip_documento |
|||
dic_dados['nome']= documento.nom_documento |
|||
dic_dados['data']= documento.dat_documento |
|||
dic_dados['autor']= documento.nom_autor_documento |
|||
dic_dados['ementa']= documento.txt_ementa |
|||
dic_dados['indexacao']= documento.txt_indexacao |
|||
lst_acessorios.append(dic_dados) |
|||
|
|||
caminho=context.pdf_detalhe_materia_gerar(imagem, rodape,inf_basicas_dic,orig_externa_dic,lst_mat_anexadas,lst_autoria, |
|||
lst_des_iniciais,dic_tramitacoes,lst_relatorias,lst_numeracoes, |
|||
lst_legis_citadas,lst_acessorios,sessao=session.id) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,133 @@ |
|||
##parameters=sessao,imagem,data,lst_documentos,dic_cabecalho,lst_rodape,dic_filtro |
|||
|
|||
"""relatorio_documento.py |
|||
External method para gerar o arquivo rml do resultado de uma pesquisa de documentos administrativos |
|||
Autor: Luciano De Fazio |
|||
Empresa: OpenLegis Consultoria |
|||
versão: 1.0 |
|||
""" |
|||
import time |
|||
from cStringIO import StringIO |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def cabecalho(inf_basicas_dic,imagem): |
|||
"""Gera o codigo rml do cabecalho""" |
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' |
|||
tmp_data+='\t\t\t\t<lines>2cm 25.4cm 19cm 25.4cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="15"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + dic_cabecalho['nom_casa'] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="12"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="26.6cm">Sistema de Apoio ao Processo Legislativo</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="2.2cm" y="24.6cm">Relatório de Documentos Administrativos</drawString>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def rodape(lst_rodape): |
|||
"""Gera o codigo rml do rodape""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + lst_rodape[2] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + lst_rodape[0] + '</drawCentredString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + lst_rodape[1] + '</drawCentredString>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def paraStyle(): |
|||
"""Gera o codigo rml que define o estilo dos paragrafos""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t<stylesheet>\n' |
|||
tmp_data+='\t\t<blockTableStyle id="Standard_Outline">\n' |
|||
tmp_data+='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp_data+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp_data+='\t\t</blockTableStyle>\n' |
|||
tmp_data+='\t\t<initialize>\n' |
|||
tmp_data+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp_data+='\t\t</initialize>\n' |
|||
tmp_data+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="CENTER"/>\n' |
|||
tmp_data+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="12" alignment="justify"/>\n' |
|||
tmp_data+='\t</stylesheet>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def documentos(lst_documentos): |
|||
"""Gera o codigo rml do conteudo da pesquisa de documentos administrativos""" |
|||
|
|||
tmp_data='' |
|||
|
|||
#inicio do bloco que contem os flowables |
|||
tmp_data+='\t<story>\n' |
|||
|
|||
for dic in lst_documentos: |
|||
#espaco inicial |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
|
|||
#condicao para a quebra de pagina |
|||
tmp_data+='\t\t<condPageBreak height="2cm"/>\n' |
|||
|
|||
#materias |
|||
if dic['titulo']!=None: |
|||
tmp_data+='\t\t<para style="P1">' + dic['titulo'] + '</para>\n' |
|||
tmp_data+='\t\t<para style="P1">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
if dic['txt_assunto']!=None: |
|||
txt_assunto = dic['txt_assunto'].replace('&','&') |
|||
tmp_data+='\t\t<para style="P2">' + txt_assunto + '</para>\n' |
|||
|
|||
if dic['txt_interessado']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>Interessado:</b> ' + dic['txt_interessado'] + '</para>\n' |
|||
if dic['localizacao_atual']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>Localização Atual:</b> ' + dic['localizacao_atual'] + '</para>\n' |
|||
if dic['des_situacao']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>Situação:</b> ' + dic['des_situacao'] + '</para>\n' |
|||
if dic['ultima_acao']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>Última Ação:</b> ' + dic['ultima_acao'] + '</para>\n' |
|||
|
|||
tmp_data+='\t</story>\n' |
|||
return tmp_data |
|||
|
|||
def principal(sessao,imagem,data,lst_documentos,dic_cabecalho,lst_rodape,dic_filtro={}): |
|||
"""Funcao pricipal que gera a estrutura global do arquivo rml""" |
|||
|
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp_data+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp_data+='<document filename="relatorio.pdf">\n' |
|||
tmp_data+='\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Documentos Administrativos" author="OpenLegis" allowSplitting="20">\n' |
|||
tmp_data+='\t\t<pageTemplate id="first">\n' |
|||
tmp_data+='\t\t\t<pageGraphics>\n' |
|||
tmp_data+=cabecalho(dic_cabecalho,imagem) |
|||
tmp_data+=rodape(lst_rodape) |
|||
tmp_data+='\t\t\t</pageGraphics>\n' |
|||
tmp_data+='\t\t\t<frame id="first" x1="2cm" y1="3.5cm" width="17cm" height="21cm"/>\n' |
|||
tmp_data+='\t\t</pageTemplate>\n' |
|||
tmp_data+='\t</template>\n' |
|||
tmp_data+=paraStyle() |
|||
tmp_data+=documentos(lst_documentos) |
|||
tmp_data+='</document>\n' |
|||
tmp_pdf=parseString(tmp_data) |
|||
|
|||
if hasattr(context.temp_folder,arquivoPdf): |
|||
context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
context.temp_folder.manage_addFile(arquivoPdf) |
|||
arq=context.temp_folder[arquivoPdf] |
|||
arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
return "/temp_folder/"+arquivoPdf |
|||
|
|||
return principal(sessao,imagem,data,lst_documentos,dic_cabecalho,lst_rodape,dic_filtro) |
@ -0,0 +1,124 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
|
|||
data=DateTime().strftime('%d/%m/%Y') |
|||
|
|||
#Abaixo é gerada a string para o rodapé da página |
|||
casa={} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]]=item[1] |
|||
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
if len(casa["num_cep"])==8: |
|||
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] |
|||
else: |
|||
cep="" |
|||
|
|||
linha1=casa["end_casa"] |
|||
if cep!="": |
|||
if casa["end_casa"]!="" and casa["end_casa"]!=None: |
|||
linha1 = linha1 + " - " |
|||
linha1 = linha1 + "CEP "+cep |
|||
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: |
|||
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf |
|||
if casa["num_tel"]!="" and casa["num_tel"]!=None: |
|||
linha1 = linha1 + " Tel.: "+ casa["num_tel"] |
|||
|
|||
linha2=casa["end_web_casa"] |
|||
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: |
|||
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: |
|||
linha2 = linha2 + " - " |
|||
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] |
|||
|
|||
data_emissao=DateTime().strftime("%d/%m/%Y") |
|||
rodape=[linha1,linha2,data_emissao] |
|||
|
|||
#Por fim, gera-se as entradas para o cabeçalho |
|||
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") |
|||
for uf in estados: |
|||
if localidade[0].sgl_uf==uf.sgl_uf: |
|||
nom_estado=uf.nom_localidade |
|||
break |
|||
cabecalho={} |
|||
cabecalho["nom_casa"]=casa["nom_casa"] |
|||
cabecalho["nom_estado"]="Estado de "+nom_estado |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
#Por fim, utiliza o PythonScript para pesquisar os documentos e gerar os dados |
|||
|
|||
documentos=[] |
|||
REQUEST=context.REQUEST |
|||
for documento in context.zsql.documento_administrativo_pesquisar_zsql(tip_documento=REQUEST['lst_tip_documento'], |
|||
num_documento=REQUEST['txt_num_documento'], ano_documento=REQUEST['txt_ano_documento'], |
|||
num_protocolo=REQUEST['txt_num_protocolo'], ind_tramitacao=REQUEST['rad_tramitando'], |
|||
des_assunto=REQUEST['txa_txt_assunto'], cod_status=REQUEST['lst_status'], |
|||
txt_interessado=REQUEST['txa_txt_interessado'], dat_apres1=REQUEST['dt_apres1'], |
|||
dat_apres2=REQUEST['dt_apres2'], rd_ordem=REQUEST['rd_ordenacao']): |
|||
dic={} |
|||
|
|||
dic['titulo']=documento.sgl_tipo_documento+" "+str(documento.num_documento)+" "+str(documento.ano_documento)+" - "+documento.des_tipo_documento |
|||
dic['txt_assunto']=documento.txt_assunto |
|||
dic['txt_interessado']=documento.txt_interessado |
|||
|
|||
des_status = '' |
|||
txt_tramitacao='' |
|||
|
|||
dic['localizacao_atual']=" " |
|||
for tramitacao in context.zsql.tramitacao_administrativo_obter_zsql(cod_documento=documento.cod_documento,ind_ult_tramitacao=1): |
|||
if tramitacao.cod_unid_tram_dest: |
|||
cod_unid_tram = tramitacao.cod_unid_tram_dest |
|||
else: |
|||
cod_unid_tram = tramitacao.cod_unid_tram_local |
|||
|
|||
for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = cod_unid_tram): |
|||
if unidade_tramitacao.cod_orgao: |
|||
dic['localizacao_atual']=unidade_tramitacao.nom_orgao |
|||
else: |
|||
dic['localizacao_atual']=unidade_tramitacao.nom_comissao |
|||
|
|||
des_status=tramitacao.des_status |
|||
txt_tramitacao=tramitacao.txt_tramitacao |
|||
|
|||
dic['des_situacao']=des_status |
|||
dic['ultima_acao']=txt_tramitacao |
|||
|
|||
documentos.append(dic) |
|||
|
|||
filtro={} # Dicionário que conterá os dados do filtro |
|||
|
|||
# Atribuições diretas do REQUEST |
|||
filtro['numero']=REQUEST.txt_num_documento |
|||
filtro['ano']=REQUEST.txt_ano_documento |
|||
filtro['interessado']=REQUEST.txa_txt_interessado |
|||
filtro['assunto']=REQUEST.txa_txt_assunto |
|||
|
|||
filtro['tipo_documento']='' |
|||
if REQUEST.lst_tip_documento!='': |
|||
for tipo_documento in context.zsql.tipo_documento_administrativo_obter_zsql(ind_excluido=0, tip_documento=REQUEST.lst_tip_documento): |
|||
filtro['tipo_documento']= tipo_documento.sgl_tipo_documento + ' - ' + tipo_documento.des_tipo_documento |
|||
|
|||
filtro['tramitando']='' |
|||
if REQUEST.rad_tramitando=='1': |
|||
filtro['tramitacao']='Sim' |
|||
elif REQUEST['rad_tramitando']=='0': |
|||
filtro['tramitacao']='Não' |
|||
|
|||
filtro['situacao_atual']='' |
|||
if REQUEST.lst_status!='': |
|||
for status in context.zsql.status_tramitacao_administrativo_obter_zsql(ind_exluido=0,cod_status=REQUEST.lst_status): |
|||
filtro['situacao_atual']=status.sgl_status + ' - ' + status.des_status |
|||
|
|||
sessao=session.id |
|||
caminho = context.pdf_documento_administrativo_gerar(sessao,imagem,data,documentos,cabecalho,rodape,filtro) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,152 @@ |
|||
##parameters=sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro |
|||
|
|||
"""relatorio_materia.py |
|||
External method para gerar o arquivo rml do resultado de uma pesquisa de matérias |
|||
Autor: Leandro Gasparotto Valladares |
|||
Empresa: Interlegis |
|||
versão: 1.0 |
|||
""" |
|||
import time |
|||
from cStringIO import StringIO |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def cabecalho(dic_cabecalho,imagem): |
|||
"""Gera o codigo rml do cabecalho""" |
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' |
|||
tmp_data+='\t\t\t\t<lines>2cm 25cm 19cm 25cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="18"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + dic_cabecalho['nom_casa'] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="16"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="07cm" y="26.5cm">' + dic_cabecalho['nom_estado'] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="15"/>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">SECRETARIA</drawCentredString>\n' |
|||
return tmp_data |
|||
|
|||
def rodape(lst_rodape): |
|||
"""Gera o codigo rml do rodape""" |
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + lst_rodape[2] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + lst_rodape[0] + '</drawCentredString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + lst_rodape[1] + '</drawCentredString>\n' |
|||
return tmp_data |
|||
|
|||
def paraStyle(): |
|||
"""Gera o codigo rml que define o estilo dos paragrafos""" |
|||
tmp_data='' |
|||
tmp_data+='\t<stylesheet>\n' |
|||
tmp_data+='\t\t<blockTableStyle id="Standard_Outline">\n' |
|||
tmp_data+='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp_data+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp_data+='\t\t</blockTableStyle>\n' |
|||
tmp_data+='\t\t<initialize>\n' |
|||
tmp_data+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp_data+='\t\t</initialize>\n' |
|||
tmp_data+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="CENTER"/>\n' |
|||
tmp_data+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="13.0" leading="13" alignment="LEFT"/>\n' |
|||
tmp_data+='\t</stylesheet>\n' |
|||
return tmp_data |
|||
|
|||
def materias(lst_materias): |
|||
"""Gera o codigo rml do conteudo da pesquisa de materias""" |
|||
|
|||
tmp_data='' |
|||
|
|||
#inicio do bloco que contem os flowables |
|||
tmp_data+='\t<story>\n' |
|||
|
|||
for dic in lst_materias: |
|||
#espaco inicial |
|||
# tmp_data+='\t\t<para style="P2">\n' |
|||
# tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
# tmp_data+='\t\t</para>\n' |
|||
# tmp_data+='\t\t<para style="P2">\n' |
|||
# tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
# tmp_data+='\t\t</para>\n' |
|||
|
|||
#condicao para a quebra de pagina |
|||
tmp_data+='\t\t<condPageBreak height="16cm"/>\n' |
|||
|
|||
#materias |
|||
# if dic['titulo']!=None: |
|||
# tmp_data+='\t\t<para style="P1">' + dic['titulo'] + '</para>\n' |
|||
# tmp_data+='\t\t<para style="P1">\n' |
|||
# tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
# tmp_data+='\t\t</para>\n' |
|||
|
|||
if dic['materia']!=None: |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
tmp_data+='\t\t<para style="P2"><b>INDICAÇÃO:</b> ' + dic['materia'] + '</para>\n' |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
|
|||
if dic['dat_apresentacao']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>DATA DE ENTRADA:</b> ' + dic['dat_apresentacao'] + '</para>\n' |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
|
|||
if dic['nom_autor']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>AUTOR:</b> ' + dic['nom_autor'] + '</para>\n' |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
|
|||
if dic['txt_ementa']!=None: |
|||
txt_ementa = dic['txt_ementa'].replace('&','&') |
|||
tmp_data+='\t\t<para style="P2"><b>EMENTA:</b> ' + dic['txt_ementa'] + '</para>\n' |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
|
|||
tmp_data+='\t</story>\n' |
|||
return tmp_data |
|||
|
|||
|
|||
def principal(sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro={}): |
|||
"""Funcao pricipal que gera a estrutura global do arquivo rml""" |
|||
|
|||
# if sessao: |
|||
# arquivoPdf=sessao+".pdf" |
|||
# else: |
|||
# arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp_data+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp_data+='<document filename="relatorio.pdf">\n' |
|||
tmp_data+='\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n' |
|||
tmp_data+='\t\t<pageTemplate id="first">\n' |
|||
tmp_data+='\t\t\t<pageGraphics>\n' |
|||
tmp_data+=cabecalho(dic_cabecalho,imagem) |
|||
tmp_data+=rodape(lst_rodape) |
|||
tmp_data+='\t\t\t</pageGraphics>\n' |
|||
tmp_data+='\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="21cm"/>\n' |
|||
tmp_data+='\t\t</pageTemplate>\n' |
|||
tmp_data+='\t</template>\n' |
|||
tmp_data+=paraStyle() |
|||
tmp_data+=materias(lst_materias) |
|||
tmp_data+='</document>\n' |
|||
|
|||
try: |
|||
tmp_pdf=parseString(unicode(tmp_data, 'utf-8')) |
|||
except: |
|||
tmp_pdf=parseString(unicode(tmp_data, 'utf-8')) |
|||
|
|||
if hasattr(context.temp_folder,arquivoPdf): |
|||
context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
context.temp_folder.manage_addFile(arquivoPdf) |
|||
arq=context.temp_folder[arquivoPdf] |
|||
arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
return "/temp_folder/"+arquivoPdf |
|||
|
|||
return principal(sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro) |
@ -0,0 +1,200 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
|
|||
data=DateTime().strftime('%d/%m/%Y') |
|||
|
|||
#Abaixo é gerada a string para o rodapé da página |
|||
casa={} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]]=item[1] |
|||
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
if len(casa["num_cep"])==8: |
|||
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] |
|||
else: |
|||
cep="" |
|||
|
|||
linha1=casa["end_casa"] |
|||
if cep!="": |
|||
if casa["end_casa"]!="" and casa["end_casa"]!=None: |
|||
linha1 = linha1 + " - " |
|||
linha1 = linha1 + "CEP "+cep |
|||
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: |
|||
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf |
|||
if casa["num_tel"]!="" and casa["num_tel"]!=None: |
|||
linha1 = linha1 + " Tel.: "+ casa["num_tel"] |
|||
|
|||
linha2=casa["end_web_casa"] |
|||
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: |
|||
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: |
|||
linha2 = linha2 + " - " |
|||
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] |
|||
|
|||
data_emissao=DateTime().strftime("%d/%m/%Y") |
|||
rodape=[linha1,linha2,data_emissao] |
|||
|
|||
#Por fim, gera-se as entradas para o cabeçalho |
|||
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") |
|||
for uf in estados: |
|||
if localidade[0].sgl_uf==uf.sgl_uf: |
|||
nom_estado=uf.nom_localidade |
|||
break |
|||
cabecalho={} |
|||
cabecalho["nom_casa"]=casa["nom_casa"] |
|||
cabecalho["nom_estado"]="Estado de "+nom_estado |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.sapl_site.sapl_skin.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
#Verifica o tamanho da lista das materias selecionadas vindas do form |
|||
REQUEST=context.REQUEST |
|||
if REQUEST.txt_check=='1': |
|||
cod_mat = REQUEST['check_ind'] |
|||
materias=[] |
|||
REQUEST=context.REQUEST |
|||
for materia in context.zsql.materia_obter_zsql(cod_materia=cod_mat): |
|||
dic={} |
|||
dic['titulo']="INDICAÃÃO: "+str(materia.num_ident_basica)+" "+str(materia.ano_ident_basica) |
|||
dic['materia']=str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) |
|||
dic['dat_apresentacao']=materia.dat_apresentacao |
|||
dic['txt_ementa']=materia.txt_ementa |
|||
|
|||
dic['nom_autor'] = " " |
|||
for autoria in context.zsql.autoria_obter_zsql(cod_materia=materia.cod_materia, ind_primeiro_autor=1): |
|||
for autor in context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor): |
|||
if autor.des_tipo_autor=='Parlamentar': |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): |
|||
dic['nom_autor']=parlamentar.nom_completo |
|||
elif autor.des_tipo_autor=='Comissao': |
|||
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): |
|||
dic['nom_autor']=comissao.nom_comissao |
|||
else: |
|||
dic['nom_autor']=autor.nom_autor |
|||
|
|||
des_status = '' |
|||
txt_tramitacao='' |
|||
data_ultima_acao = '' |
|||
|
|||
dic['localizacao_atual']=" " |
|||
for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia,ind_ult_tramitacao=1): |
|||
if tramitacao.cod_unid_tram_dest: |
|||
cod_unid_tram = tramitacao.cod_unid_tram_dest |
|||
else: |
|||
cod_unid_tram = tramitacao.cod_unid_tram_local |
|||
|
|||
for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = cod_unid_tram): |
|||
if unidade_tramitacao.cod_orgao: |
|||
dic['localizacao_atual']=unidade_tramitacao.nom_orgao |
|||
elif unidade_tramitacao.cod_parlamentar: |
|||
dic['localizacao_atual']=unidade_tramitacao.nom_parlamentar |
|||
else: |
|||
dic['localizacao_atual']=unidade_tramitacao.nom_comissao |
|||
|
|||
des_status=tramitacao.des_status |
|||
txt_tramitacao=tramitacao.txt_tramitacao |
|||
data_ultima_acao = tramitacao.dat_tramitacao |
|||
|
|||
dic['des_situacao']=des_status |
|||
dic['ultima_acao']=txt_tramitacao |
|||
dic['data_ultima_acao']=data_ultima_acao |
|||
|
|||
dic['norma_juridica_vinculada'] = "Não há nenhuma norma jurídica vinculada" |
|||
for norma in context.zsql.materia_buscar_norma_juridica_zsql(cod_materia=materia.cod_materia): |
|||
dic['norma_juridica_vinculada']=norma.des_norma+" "+str(norma.num_norma)+"/"+str(norma.ano_norma) |
|||
|
|||
materias.append(dic) |
|||
|
|||
else: |
|||
codigo = REQUEST.check_ind |
|||
materias=[] |
|||
REQUEST=context.REQUEST |
|||
for cod_mat in codigo: |
|||
for materia in context.zsql.materia_obter_zsql(cod_materia=cod_mat): |
|||
dic={} |
|||
dic['titulo']="INDICAÃÃO: "+str(materia.num_ident_basica)+" "+str(materia.ano_ident_basica) |
|||
dic['materia']=str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) |
|||
dic['dat_apresentacao']=materia.dat_apresentacao |
|||
dic['txt_ementa']=materia.txt_ementa |
|||
|
|||
dic['nom_autor'] = " " |
|||
for autoria in context.zsql.autoria_obter_zsql(cod_materia=materia.cod_materia, ind_primeiro_autor=1): |
|||
for autor in context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor): |
|||
if autor.des_tipo_autor=='Parlamentar': |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): |
|||
dic['nom_autor']=parlamentar.nom_completo |
|||
elif autor.des_tipo_autor=='Comissao': |
|||
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): |
|||
dic['nom_autor']=comissao.nom_comissao |
|||
else: |
|||
dic['nom_autor']=autor.nom_autor |
|||
|
|||
des_status = '' |
|||
txt_tramitacao='' |
|||
data_ultima_acao = '' |
|||
|
|||
dic['localizacao_atual']=" " |
|||
for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia,ind_ult_tramitacao=1): |
|||
if tramitacao.cod_unid_tram_dest: |
|||
cod_unid_tram = tramitacao.cod_unid_tram_dest |
|||
else: |
|||
cod_unid_tram = tramitacao.cod_unid_tram_local |
|||
|
|||
for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = cod_unid_tram): |
|||
if unidade_tramitacao.cod_orgao: |
|||
dic['localizacao_atual']=unidade_tramitacao.nom_orgao |
|||
elif unidade_tramitacao.cod_parlamentar: |
|||
dic['localizacao_atual']=unidade_tramitacao.nom_parlamentar |
|||
else: |
|||
dic['localizacao_atual']=unidade_tramitacao.nom_comissao |
|||
|
|||
des_status=tramitacao.des_status |
|||
txt_tramitacao=tramitacao.txt_tramitacao |
|||
data_ultima_acao = tramitacao.dat_tramitacao |
|||
|
|||
dic['des_situacao']=des_status |
|||
dic['ultima_acao']=txt_tramitacao |
|||
dic['data_ultima_acao']=data_ultima_acao |
|||
|
|||
dic['norma_juridica_vinculada'] = "Não há nenhuma norma jurídica vinculada" |
|||
for norma in context.zsql.materia_buscar_norma_juridica_zsql(cod_materia=materia.cod_materia): |
|||
dic['norma_juridica_vinculada']=norma.des_norma+" "+str(norma.num_norma)+"/"+str(norma.ano_norma) |
|||
|
|||
materias.append(dic) |
|||
|
|||
filtro={} # Dicionário que conterá os dados do filtro |
|||
|
|||
# Atribuições diretas do REQUEST |
|||
#filtro['data_apres']=REQUEST.data |
|||
|
|||
#filtro['tipo_materia']='' |
|||
#for tipo_materia in context.zsql.tipo_materia_legislativa_obter_zsql(ind_excluido=0, tip_materia=9): |
|||
# filtro['tipo_materia']= tipo_materia.sgl_tipo_materia + ' - ' + tipo_materia.des_tipo_materia |
|||
|
|||
#filtro['partido']='' |
|||
#if REQUEST.lst_cod_partido!='': |
|||
# for partido in context.zsql.partido_obter_zsql(ind_excluido=0,cod_partido=REQUEST.lst_cod_partido): |
|||
# filtro['partido']=partido.sgl_partido + ' - ' + partido.nom_partido |
|||
|
|||
#filtro['tramitando']='' |
|||
#if REQUEST.rad_tramitando=='1': |
|||
# filtro['tramitacao']='Sim' |
|||
#elif REQUEST['rad_tramitando']=='0': |
|||
# filtro['tramitacao']='Não' |
|||
|
|||
#filtro['situacao_atual']='' |
|||
#if REQUEST.lst_status!='': |
|||
# for status in context.zsql.status_tramitacao_obter_zsql(ind_exluido=0,cod_status=REQUEST.lst_status): |
|||
# filtro['situacao_atual']=status.sgl_status + ' - ' + status.des_status |
|||
|
|||
sessao=session.id |
|||
caminho = context.pdf_espelho_gerar(sessao,imagem,data,materias,cabecalho,rodape,filtro) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,119 @@ |
|||
##parameters=sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro |
|||
|
|||
"""relatorio_protocolo.py |
|||
External method para gerar o arquivo rml da etiqueta de protocolo |
|||
Autor: Luciano De Fazio |
|||
Empresa: OpenLegis Consultoria |
|||
versão: 1.0 |
|||
""" |
|||
import time |
|||
from cStringIO import StringIO |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def cabecalho(inf_basicas_dic,imagem): |
|||
"""Gera o codigo rml do cabecalho""" |
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' |
|||
tmp_data+='\t\t\t\t<lines>2cm 25.4cm 19cm 25.4cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="15"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + dic_cabecalho['nom_casa'] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="12"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="26.6cm">Sistema de Apoio ao Processo Legislativo</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="2.2cm" y="24.6cm">Relatório de Controle do Protocolo</drawString>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def rodape(lst_rodape): |
|||
"""Gera o codigo rml do rodape""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + lst_rodape[2] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + lst_rodape[0] + '</drawCentredString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + lst_rodape[1] + '</drawCentredString>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def paraStyle(): |
|||
"""Gera o codigo rml que define o estilo dos paragrafos""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t<stylesheet>\n' |
|||
tmp_data+='\t\t<blockTableStyle id="Standard_Outline">\n' |
|||
tmp_data+='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp_data+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp_data+='\t\t</blockTableStyle>\n' |
|||
tmp_data+='\t\t<initialize>\n' |
|||
tmp_data+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp_data+='\t\t</initialize>\n' |
|||
tmp_data+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="5.0" leading="6" alignment="CENTER"/>\n' |
|||
tmp_data+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="8.0" leading="9" alignment="CENTER"/>\n' |
|||
tmp_data+='\t</stylesheet>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def protocolos(lst_protocolos): |
|||
"""Gera o codigo rml do conteudo da pesquisa de protocolos""" |
|||
|
|||
tmp_data='' |
|||
|
|||
#inicio do bloco que contem os flowables |
|||
tmp_data+='\t<story>\n' |
|||
|
|||
for dic in lst_protocolos: |
|||
#condicao para a quebra de pagina |
|||
tmp_data+='\t\t<condPageBreak height="8mm"/>\n' |
|||
|
|||
#protocolos |
|||
if dic['titulo']!=None: |
|||
tmp_data+='\t\t<para style="P1">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
tmp_data+='\t\t<para style="P2"><b>'+dic_cabecalho['nom_casa']+'</b></para>\n' |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
tmp_data+='\t\t<barCode code="Code128" x="0.15cm" barHeight="0.34in" barWidth="0.018in">' +dic['titulo']+ '</barCode>\n' |
|||
tmp_data+='\t\t<para style="P2"><b>PROTOCOLO GERAL '+dic['titulo']+'</b></para>\n' |
|||
if dic['data']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>'+dic['data']+'</b></para>\n' |
|||
tmp_data+='\t\t<para style="P2"><b>'+dic['natureza']+' - '+dic['ident_processo']+'</b></para>\n' |
|||
|
|||
tmp_data+='\t</story>\n' |
|||
return tmp_data |
|||
|
|||
def principal(sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro={}): |
|||
"""Funcao pricipal que gera a estrutura global do arquivo rml""" |
|||
|
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp_data+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp_data+='<document filename="etiquetas.pdf">\n' |
|||
tmp_data+='\t<template pageSize="(62mm, 29mm)" title="Etiquetas de Protocolo" author="Luciano De Fazio" allowSplitting="20">\n' |
|||
tmp_data+='\t\t<pageTemplate id="first">\n' |
|||
tmp_data+='\t\t\t<pageGraphics>\n' |
|||
tmp_data+='\t\t\t<frame id="first" x1="0.03cm" y1="0.1cm" width="61mm" height="29mm"/>\n' |
|||
tmp_data+='\t\t\t</pageGraphics>\n' |
|||
tmp_data+='\t\t</pageTemplate>\n' |
|||
tmp_data+='\t</template>\n' |
|||
tmp_data+=paraStyle() |
|||
tmp_data+=protocolos(lst_protocolos) |
|||
tmp_data+='</document>\n' |
|||
tmp_pdf=parseString(tmp_data) |
|||
|
|||
if hasattr(context.temp_folder,arquivoPdf): |
|||
context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
context.temp_folder.manage_addFile(arquivoPdf) |
|||
arq=context.temp_folder[arquivoPdf] |
|||
arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
return "/temp_folder/"+arquivoPdf |
|||
|
|||
return principal(sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro) |
@ -0,0 +1,127 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
|
|||
data=DateTime().strftime('%d/%m/%Y') |
|||
|
|||
#Abaixo é gerada a string para o rodapé da página |
|||
casa={} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]]=item[1] |
|||
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
if len(casa["num_cep"])==8: |
|||
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] |
|||
else: |
|||
cep="" |
|||
|
|||
linha1=casa["end_casa"] |
|||
if cep!="": |
|||
if casa["end_casa"]!="" and casa["end_casa"]!=None: |
|||
linha1 = linha1 + " - " |
|||
linha1 = linha1 + "CEP "+cep |
|||
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: |
|||
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf |
|||
if casa["num_tel"]!="" and casa["num_tel"]!=None: |
|||
linha1 = linha1 + " Tel.: "+ casa["num_tel"] |
|||
|
|||
linha2=casa["end_web_casa"] |
|||
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: |
|||
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: |
|||
linha2 = linha2 + " - " |
|||
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] |
|||
|
|||
data_emissao=DateTime().strftime("%d/%m/%Y") |
|||
rodape=[linha1,linha2,data_emissao] |
|||
|
|||
#Por fim, gera-se as entradas para o cabeçalho |
|||
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") |
|||
for uf in estados: |
|||
if localidade[0].sgl_uf==uf.sgl_uf: |
|||
nom_estado=uf.nom_localidade |
|||
break |
|||
cabecalho={} |
|||
cabecalho["nom_casa"]=casa["nom_casa"] |
|||
cabecalho["nom_estado"]="Estado de "+nom_estado |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
#Por fim, utiliza o PythonScript para pesquisar os protocolos e gerar os dados |
|||
|
|||
protocolos=[] |
|||
REQUEST=context.REQUEST |
|||
for protocolo in context.zsql.protocolo_pesquisar_zsql(tip_protocolo=REQUEST['rad_tip_protocolo'], |
|||
cod_protocolo=REQUEST['txt_num_protocolo'], ano_protocolo=REQUEST['txt_ano_protocolo'], |
|||
tip_documento=REQUEST['lst_tip_documento'], tip_processo=REQUEST['rad_tip_processo'], |
|||
tip_materia=REQUEST['lst_tip_materia'], des_assunto=REQUEST['txt_assunto'], |
|||
cod_autor=REQUEST['hdn_cod_autor'], des_interessado=REQUEST['txa_txt_interessado'], |
|||
dat_apres=REQUEST['dt_apres'], dat_apres2=REQUEST['dt_apres2']): |
|||
dic={} |
|||
|
|||
dic['titulo']=str(protocolo.cod_protocolo) |
|||
|
|||
dic['data']='Data: '+context.pysc.iso_to_port_pysc(protocolo.dat_protocolo)+' Horário: '+protocolo.hor_protocolo[0:2]+':'+protocolo.hor_protocolo[3:5] |
|||
|
|||
dic['txt_assunto']=protocolo.txt_assunto_ementa |
|||
|
|||
dic['txt_interessado']=protocolo.txt_interessado |
|||
|
|||
dic['nom_autor'] = " " |
|||
if protocolo.cod_autor!=None: |
|||
for autor in context.zsql.autor_obter_zsql(cod_autor=protocolo.cod_autor): |
|||
if autor.des_tipo_autor=='Parlamentar': |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): |
|||
dic['nom_autor']=parlamentar.nom_completo |
|||
elif autor.des_tipo_autor=='Comissao': |
|||
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): |
|||
dic['nom_autor']=comissao.nom_comissao |
|||
else: |
|||
dic['nom_autor']=autor.nom_autor |
|||
|
|||
dic['natureza']='' |
|||
if protocolo.tip_processo==0: |
|||
dic['natureza']='Administrativo' |
|||
if protocolo.tip_processo==1: |
|||
dic['natureza']='Legislativo' |
|||
|
|||
dic['num_materia']='' |
|||
for materia in context.zsql.materia_obter_zsql(num_protocolo=protocolo.cod_protocolo,ano_ident_basica=protocolo.ano_protocolo): |
|||
dic['num_materia']=materia.sgl_tipo_materia+' '+str(materia.num_ident_basica)+'/'+str(materia.ano_ident_basica) |
|||
|
|||
dic['num_documento']='' |
|||
for documento in context.zsql.documento_administrativo_obter_zsql(num_protocolo=protocolo.cod_protocolo): |
|||
dic['num_documento']=documento.sgl_tipo_documento+' '+str(documento.num_documento)+'/'+ str(documento.ano_documento) |
|||
|
|||
dic['ident_processo']=dic['num_materia'] or dic['num_documento'] |
|||
|
|||
dic['processo']=protocolo.des_tipo_materia or protocolo.des_tipo_documento |
|||
|
|||
dic['anulado']='' |
|||
if protocolo.ind_anulado==1: |
|||
dic['anulado']='Nulo' |
|||
|
|||
protocolos.append(dic) |
|||
|
|||
filtro={} # Dicionário que conterá os dados do filtro |
|||
|
|||
# Atribuições diretas do REQUEST |
|||
filtro['numero']=REQUEST.txt_num_protocolo |
|||
filtro['ano']=REQUEST.txt_ano_protocolo |
|||
filtro['tipo_protocolo']=REQUEST.rad_tip_protocolo |
|||
filtro['tipo_processo']=REQUEST.rad_tip_processo |
|||
filtro['assunto']=REQUEST.txt_assunto |
|||
filtro['autor']=REQUEST.hdn_cod_autor |
|||
filtro['interessado']=REQUEST.txa_txt_interessado |
|||
|
|||
sessao=session.id |
|||
caminho = context.pdf_etiqueta_protocolo_gerar(sessao,imagem,data,protocolos,cabecalho,rodape,filtro) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,119 @@ |
|||
##parameters=sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro |
|||
|
|||
"""relatorio_materia.py |
|||
External method para gerar o arquivo rml do resultado de uma pesquisa de matérias |
|||
Autor: Leandro Gasparotto Valladares |
|||
Empresa: Interlegis |
|||
versão: 1.0 |
|||
""" |
|||
import time |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def cabecalho(dic_cabecalho,imagem): |
|||
"""Gera o codigo rml do cabecalho""" |
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' |
|||
tmp_data+='\t\t\t\t<lines>2cm 25cm 19cm 25cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="16"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="27.1cm">' + dic_cabecalho['nom_casa'] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="13"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="26.5cm">' + dic_cabecalho['nom_estado'] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">Relatório de Matérias Legislativas</drawCentredString>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def rodape(lst_rodape): |
|||
"""Gera o codigo rml do rodape""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + lst_rodape[2] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + lst_rodape[0] + '</drawCentredString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + lst_rodape[1] + '</drawCentredString>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def paraStyle(): |
|||
"""Gera o codigo rml que define o estilo dos paragrafos""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t<stylesheet>\n' |
|||
tmp_data+='\t\t<blockTableStyle id="Standard_Outline">\n' |
|||
tmp_data+='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp_data+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp_data+='\t\t</blockTableStyle>\n' |
|||
tmp_data+='\t\t<initialize>\n' |
|||
tmp_data+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp_data+='\t\t</initialize>\n' |
|||
tmp_data+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="12" spaceAfter="2" alignment="left"/>\n' |
|||
tmp_data+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="9.0" leading="12" spaceAfter="2" alignment="justify"/>\n' |
|||
tmp_data+='\t</stylesheet>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def materias(lst_materias): |
|||
"""Gera o codigo rml do conteudo da pesquisa de materias""" |
|||
|
|||
tmp_data='' |
|||
|
|||
#inicio do bloco que contem os flowables |
|||
tmp_data+='\t<story>\n' |
|||
|
|||
for dic in lst_materias: |
|||
#espaco inicial |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
|
|||
#condicao para a quebra de pagina |
|||
tmp_data+='\t\t<condPageBreak height="1.5cm"/>\n' |
|||
|
|||
#materias |
|||
tmp_data+='\t\t<para style="P1"> <b>'+ dic['titulo'] +'</b> - <b>Autor: </b>' + dic['nom_autor'] + ' </para>\n' |
|||
if dic['txt_ementa']!=None: |
|||
txt_ementa = dic['txt_ementa'].replace('&','&') |
|||
tmp_data+='\t\t<para style="P2"> '+ txt_ementa +' </para>\n' |
|||
tmp_data+='\t\t<para style="P2"><b>Situação:</b> ' + dic['des_situacao'] + '/ <b>Norma Jurídica Vinculada:</b> ' + dic['norma_vinculada'] + '</para>\n' |
|||
|
|||
tmp_data+='\t</story>\n' |
|||
return tmp_data |
|||
|
|||
def principal(sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro={}): |
|||
"""Funcao pricipal que gera a estrutura global do arquivo rml""" |
|||
|
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp_data+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp_data+='<document filename="relatorio.pdf">\n' |
|||
tmp_data+='\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n' |
|||
tmp_data+='\t\t<pageTemplate id="first">\n' |
|||
tmp_data+='\t\t\t<pageGraphics>\n' |
|||
tmp_data+=cabecalho(dic_cabecalho,imagem) |
|||
tmp_data+=rodape(lst_rodape) |
|||
tmp_data+='\t\t\t</pageGraphics>\n' |
|||
tmp_data+='\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="21cm"/>\n' |
|||
tmp_data+='\t\t</pageTemplate>\n' |
|||
tmp_data+='\t</template>\n' |
|||
tmp_data+=paraStyle() |
|||
tmp_data+=materias(lst_materias) |
|||
tmp_data+='</document>\n' |
|||
tmp_pdf=parseString(tmp_data) |
|||
|
|||
return tmp_pdf |
|||
|
|||
# if hasattr(context.temp_folder,arquivoPdf): |
|||
# context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
# context.temp_folder.manage_addFile(arquivoPdf) |
|||
# arq=context.temp_folder[arquivoPdf] |
|||
# arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
# return "/temp_folder/"+arquivoPdf |
|||
|
|||
# return principal(sessao,imagem,data,lst_materias,dic_cabecalho,lst_rodape,dic_filtro) |
@ -0,0 +1,155 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
#print request |
|||
#return printed |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
|
|||
data=DateTime().strftime('%d/%m/%Y') |
|||
|
|||
#Abaixo é gerada a string para o rodapé da página |
|||
casa={} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]]=item[1] |
|||
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
if len(casa["num_cep"])==8: |
|||
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] |
|||
else: |
|||
cep="" |
|||
|
|||
linha1=casa["end_casa"] |
|||
if cep!="": |
|||
if casa["end_casa"]!="" and casa["end_casa"]!=None: |
|||
linha1 = linha1 + " - " |
|||
linha1 = linha1 + "CEP "+cep |
|||
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: |
|||
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf |
|||
if casa["num_tel"]!="" and casa["num_tel"]!=None: |
|||
linha1 = linha1 + " Tel.: "+ casa["num_tel"] |
|||
|
|||
linha2=casa["end_web_casa"] |
|||
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: |
|||
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: |
|||
linha2 = linha2 + " - " |
|||
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] |
|||
|
|||
data_emissao=DateTime().strftime("%d/%m/%Y") |
|||
rodape=[linha1,linha2,data_emissao] |
|||
|
|||
#Por fim, gera-se as entradas para o cabeçalho |
|||
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") |
|||
for uf in estados: |
|||
if localidade[0].sgl_uf==uf.sgl_uf: |
|||
nom_estado=uf.nom_localidade |
|||
break |
|||
cabecalho={} |
|||
cabecalho["nom_casa"]=casa["nom_casa"] |
|||
cabecalho["nom_estado"]="Estado de "+nom_estado |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
#Por fim, utiliza o PythonScript para pesquisar as matérias e gerar os dados |
|||
|
|||
materias=[] |
|||
REQUEST=context.REQUEST |
|||
for materia in context.zsql.materia_pesquisar_zsql(tip_id_basica=REQUEST['lst_tip_materia'], num_ident_basica=REQUEST['txt_numero'], |
|||
ano_ident_basica=REQUEST['txt_ano'], ind_tramitacao=REQUEST['rad_tramitando'], |
|||
des_assunto=REQUEST['txt_assunto'], nom_relator=REQUEST['txt_relator'], |
|||
cod_status=REQUEST['lst_status'], des_tipo_autor=REQUEST['lst_tip_autor'], |
|||
dat_apresentacao=REQUEST['dt_apres'], dat_apresentacao2=REQUEST['dt_apres2'], |
|||
dat_publicacao=REQUEST['dt_public'], dat_publicacao2=REQUEST['dt_public2'], |
|||
cod_partido=REQUEST['lst_cod_partido'],cod_autor=REQUEST['hdn_cod_autor'], |
|||
rd_ordem=REQUEST['rd_ordenacao'],rd_ordem_td=REQUEST['rd_ordem_td']): |
|||
|
|||
dic={} |
|||
|
|||
dic['titulo']=materia.sgl_tipo_materia+" "+materia.des_tipo_materia+" "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) |
|||
dic['txt_ementa']=materia.txt_ementa |
|||
dic['nom_autor'] = " " |
|||
for autoria in context.zsql.autoria_obter_zsql(cod_materia=materia.cod_materia): |
|||
for autor in context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor): |
|||
if autor.des_tipo_autor=='Parlamentar': |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): |
|||
dic['nom_autor']=parlamentar.nom_completo |
|||
elif autor.des_tipo_autor=='Comissao': |
|||
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): |
|||
dic['nom_autor']=comissao.nom_comissao |
|||
else: |
|||
dic['nom_autor']=autor.nom_autor |
|||
|
|||
des_status = '' |
|||
txt_tramitacao='' |
|||
|
|||
dic['localizacao_atual']=" " |
|||
for tramitacao in context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia,ind_ult_tramitacao=1): |
|||
if tramitacao.cod_unid_tram_dest: |
|||
cod_unid_tram = tramitacao.cod_unid_tram_dest |
|||
else: |
|||
cod_unid_tram = tramitacao.cod_unid_tram_local |
|||
|
|||
for unidade_tramitacao in context.zsql.unidade_tramitacao_obter_zsql(cod_unid_tramitacao = cod_unid_tram): |
|||
if unidade_tramitacao.cod_orgao: |
|||
dic['localizacao_atual']=unidade_tramitacao.nom_orgao |
|||
else: |
|||
dic['localizacao_atual']=unidade_tramitacao.nom_comissao |
|||
|
|||
des_status=tramitacao.des_status |
|||
txt_tramitacao=tramitacao.txt_tramitacao |
|||
|
|||
dic['des_situacao']=des_status |
|||
dic['ultima_acao']=txt_tramitacao |
|||
|
|||
|
|||
dic['norma_vinculada']=" " |
|||
for norma_vinculada in context.zsql.materia_buscar_norma_juridica_zsql(cod_materia=materia.cod_materia): |
|||
dic['norma_vinculada']=norma_vinculada.des_norma+" "+str(norma_vinculada.num_norma)+"/"+str(norma_vinculada.ano_norma) |
|||
|
|||
materias.append(dic) |
|||
|
|||
filtro={} # Dicionário que conterá os dados do filtro |
|||
|
|||
# Atribuições diretas do REQUEST |
|||
filtro['numero']=REQUEST.txt_numero |
|||
filtro['ano']=REQUEST.txt_ano |
|||
filtro['autor']=REQUEST.hdn_txt_autor |
|||
filtro['tipo_autor']=REQUEST.lst_tip_autor |
|||
filtro['relator']=REQUEST.txt_relator |
|||
filtro['assunto']=REQUEST.txt_assunto |
|||
|
|||
# Atribuição do restante dos dados que precisam de processamento |
|||
if REQUEST.hdn_txt_autor==' ': # Corrige bug do Netscape |
|||
filtro['autor']='' |
|||
|
|||
filtro['tipo_materia']='' |
|||
if REQUEST.lst_tip_materia!='': |
|||
for tipo_materia in context.zsql.tipo_materia_legislativa_obter_zsql(ind_excluido=0, tip_materia=REQUEST.lst_tip_materia): |
|||
filtro['tipo_materia']= tipo_materia.sgl_tipo_materia + ' - ' + tipo_materia.des_tipo_materia |
|||
|
|||
filtro['partido']='' |
|||
if REQUEST.lst_cod_partido!='': |
|||
for partido in context.zsql.partido_obter_zsql(ind_excluido=0,cod_partido=REQUEST.lst_cod_partido): |
|||
filtro['partido']=partido.sgl_partido + ' - ' + partido.nom_partido |
|||
|
|||
filtro['tramitando']='' |
|||
if REQUEST.rad_tramitando=='1': |
|||
filtro['tramitacao']='Sim' |
|||
elif REQUEST['rad_tramitando']=='0': |
|||
filtro['tramitacao']='Não' |
|||
|
|||
filtro['situacao_atual']='' |
|||
if REQUEST.lst_status!='': |
|||
for status in context.zsql.status_tramitacao_obter_zsql(ind_excluido=0,cod_status=REQUEST.lst_status): |
|||
filtro['situacao_atual']=status.sgl_status + ' - ' + status.des_status |
|||
|
|||
sessao=session.id |
|||
caminho = context.pdf_materia_gerar(sessao,imagem,data,materias,cabecalho,rodape,filtro) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,126 @@ |
|||
##parameters=sessao,imagem,data,lst_normas,dic_cabecalho,lst_rodape,dic_filtro |
|||
|
|||
"""relatorio_norma.py |
|||
External method para gerar o arquivo rml do resultado de uma pesquisa de normas |
|||
Autor: Luciano De Fazio |
|||
Empresa: OpenLegis Consultoria |
|||
versão: 1.0 |
|||
""" |
|||
import time |
|||
from cStringIO import StringIO |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def cabecalho(inf_basicas_dic,imagem): |
|||
"""Gera o codigo rml do cabecalho""" |
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' |
|||
tmp_data+='\t\t\t\t<lines>2cm 25.4cm 19cm 25.4cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="15"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + dic_cabecalho['nom_casa'] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="12"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="26.6cm">Sistema de Apoio ao Processo Legislativo</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="2.2cm" y="24.6cm">Relatório de Normas Jurídicas</drawString>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def rodape(lst_rodape): |
|||
"""Gera o codigo rml do rodape""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + lst_rodape[2] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + lst_rodape[0] + '</drawCentredString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + lst_rodape[1] + '</drawCentredString>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def paraStyle(): |
|||
"""Gera o codigo rml que define o estilo dos paragrafos""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t<stylesheet>\n' |
|||
tmp_data+='\t\t<blockTableStyle id="Standard_Outline">\n' |
|||
tmp_data+='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp_data+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp_data+='\t\t</blockTableStyle>\n' |
|||
tmp_data+='\t\t<initialize>\n' |
|||
tmp_data+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp_data+='\t\t</initialize>\n' |
|||
tmp_data+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="CENTER"/>\n' |
|||
tmp_data+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="13" alignment="justify"/>\n' |
|||
tmp_data+='\t</stylesheet>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def normas(lst_normas): |
|||
"""Gera o codigo rml do conteudo da pesquisa de normas""" |
|||
|
|||
tmp_data='' |
|||
|
|||
#inicio do bloco que contem os flowables |
|||
tmp_data+='\t<story>\n' |
|||
|
|||
for dic in lst_normas: |
|||
#espaco inicial |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
|
|||
#condicao para a quebra de pagina |
|||
tmp_data+='\t\t<condPageBreak height="4cm"/>\n' |
|||
|
|||
#normas |
|||
if dic['titulo']!=None: |
|||
tmp_data+='\t\t<para style="P1">' + dic['titulo'] + '</para>\n' |
|||
tmp_data+='\t\t<para style="P1">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
if dic['txt_ementa']!=None: |
|||
txt_ementa = dic['txt_ementa'].replace('&','&') |
|||
tmp_data+='\t\t<para style="P2">' + txt_ementa + '</para>\n' |
|||
if dic['materia_vinculada']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>Matéria Legislativa:</b> ' + dic['materia_vinculada'] + '</para>\n' |
|||
|
|||
tmp_data+='\t</story>\n' |
|||
return tmp_data |
|||
|
|||
def principal(sessao,imagem,data,lst_normas,dic_cabecalho,lst_rodape,dic_filtro={}): |
|||
"""Funcao pricipal que gera a estrutura global do arquivo rml""" |
|||
|
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp_data+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp_data+='<document filename="relatorio.pdf">\n' |
|||
tmp_data+='\t<template pageSize="(21cm, 29.7cm)" title="Relatório de Normas Jurídicas" author="Luciano De Fazio" allowSplitting="20">\n' |
|||
tmp_data+='\t\t<pageTemplate id="first">\n' |
|||
tmp_data+='\t\t\t<pageGraphics>\n' |
|||
tmp_data+=cabecalho(dic_cabecalho,imagem) |
|||
tmp_data+=rodape(lst_rodape) |
|||
tmp_data+='\t\t\t</pageGraphics>\n' |
|||
tmp_data+='\t\t\t<frame id="first" x1="2cm" y1="3cm" width="17cm" height="21cm"/>\n' |
|||
tmp_data+='\t\t</pageTemplate>\n' |
|||
tmp_data+='\t</template>\n' |
|||
tmp_data+=paraStyle() |
|||
tmp_data+=normas(lst_normas) |
|||
tmp_data+='</document>\n' |
|||
tmp_pdf=parseString(tmp_data) |
|||
|
|||
if hasattr(context.temp_folder,arquivoPdf): |
|||
context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
context.temp_folder.manage_addFile(arquivoPdf) |
|||
arq=context.temp_folder[arquivoPdf] |
|||
arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
return "/temp_folder/"+arquivoPdf |
|||
|
|||
return principal(sessao,imagem,data,lst_normas,dic_cabecalho,lst_rodape,dic_filtro) |
@ -0,0 +1,94 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
|
|||
data=DateTime().strftime('%d/%m/%Y') |
|||
|
|||
#Abaixo é gerada a string para o rodapé da página |
|||
casa={} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]]=item[1] |
|||
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
if len(casa["num_cep"])==8: |
|||
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] |
|||
else: |
|||
cep="" |
|||
|
|||
linha1=casa["end_casa"] |
|||
if cep!="": |
|||
if casa["end_casa"]!="" and casa["end_casa"]!=None: |
|||
linha1 = linha1 + " - " |
|||
linha1 = linha1 + "CEP "+cep |
|||
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: |
|||
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf |
|||
if casa["num_tel"]!="" and casa["num_tel"]!=None: |
|||
linha1 = linha1 + " Tel.: "+ casa["num_tel"] |
|||
|
|||
linha2=casa["end_web_casa"] |
|||
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: |
|||
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: |
|||
linha2 = linha2 + " - " |
|||
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] |
|||
|
|||
data_emissao=DateTime().strftime("%d/%m/%Y") |
|||
rodape=[linha1,linha2,data_emissao] |
|||
|
|||
#Por fim, gera-se as entradas para o cabeçalho |
|||
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") |
|||
for uf in estados: |
|||
if localidade[0].sgl_uf==uf.sgl_uf: |
|||
nom_estado=uf.nom_localidade |
|||
break |
|||
cabecalho={} |
|||
cabecalho["nom_casa"]=casa["nom_casa"] |
|||
cabecalho["nom_estado"]="Estado de "+nom_estado |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
#Por fim, utiliza o PythonScript para pesquisar as normas e gerar os dados |
|||
|
|||
normas=[] |
|||
REQUEST=context.REQUEST |
|||
for norma in context.zsql.norma_juridica_obter_zsql(tip_norma=REQUEST['lst_tip_norma'], num_norma=REQUEST['txt_numero'], |
|||
ano_norma=REQUEST['txt_ano'], des_assunto=REQUEST['txt_assunto'], |
|||
cod_assunto=REQUEST['lst_assunto_norma'], dat_norma=REQUEST['dt_norma'], |
|||
dat_norma2=REQUEST['dt_norma2'], dat_publicacao=REQUEST['dt_public'], |
|||
dat_publicacao2=REQUEST['dt_public2'],rd_ordem=REQUEST['rd_ordenacao']): |
|||
|
|||
dic={} |
|||
|
|||
dic['titulo']=norma.sgl_tipo_norma+" Nº "+str(norma.num_norma)+" de "+str(norma.dat_norma)+" - "+norma.des_tipo_norma |
|||
dic['txt_ementa']=norma.txt_ementa |
|||
|
|||
dic['materia_vinculada']=" " |
|||
if norma.cod_materia!=None: |
|||
for materia_vinculada in context.zsql.materia_obter_zsql(cod_materia=str(norma.cod_materia)): |
|||
dic['materia_vinculada']=materia_vinculada.sgl_tipo_materia+" "+str(materia_vinculada.num_ident_basica)+"/"+str(materia_vinculada.ano_ident_basica) |
|||
|
|||
normas.append(dic) |
|||
|
|||
filtro={} # Dicionário que conterá os dados do filtro |
|||
|
|||
# Atribuições diretas do REQUEST |
|||
filtro['numero']=REQUEST.txt_numero |
|||
filtro['ano']=REQUEST.txt_ano |
|||
filtro['assunto']=REQUEST.txt_assunto |
|||
|
|||
filtro['tipo_norma']='' |
|||
if REQUEST.lst_tip_norma!='': |
|||
for tipo_norma in context.zsql.tipo_norma_juridica_obter_zsql(ind_excluido=0, tip_norma=REQUEST.lst_tip_norma): |
|||
filtro['tipo_norma']= tipo_norma.sgl_tipo_norma + ' - ' + tipo_norma.des_tipo_norma |
|||
|
|||
sessao=session.id |
|||
caminho = context.pdf_norma_gerar(sessao,imagem,data,normas,cabecalho,rodape,filtro) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,210 @@ |
|||
##parameters=sessao,imagem,dat_ordem,lst_splen,lst_pauta,dic_cabecalho,lst_rodape |
|||
|
|||
"""relatorio_ordem.py |
|||
External method para gerar o arquivo rml da ordem do dia |
|||
Autor: Leandro Gasparotto Valladares |
|||
Empresa: Interlegis |
|||
versão: 1.0 |
|||
""" |
|||
import os |
|||
import time |
|||
from cStringIO import StringIO |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def cabecalho(dic_cabecalho,dat_ordem,imagem): |
|||
"""Gera o codigo rml do cabecalho""" |
|||
|
|||
tmp='' |
|||
tmp+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' |
|||
tmp+='\t\t\t\t<lines>2cm 25cm 19cm 25cm</lines>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="12"/>\n' |
|||
#tmp+='\t\t\t\t<drawString x="4cm" y="27.2cm">' + str(dic_cabecalho['nom_casa']) + '</drawString>\n' |
|||
#tmp+='\t\t\t\t<setFont name="Helvetica" size="14"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + str(dic_cabecalho['nom_estado']) + '</drawString>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="14"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="5cm" y="26.5cm">' + str(dic_cabecalho['nom_casa']) + '</drawString>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="14"/>\n' |
|||
#tmp+='\t\t\t\t<drawString x="5cm" y="27.9cm">' + "Palacio 11 de Outubro" + '</drawString>\n' |
|||
#tmp+='\t\t\t\t<setFont name="Helvetica" size="10"/>\n' |
|||
|
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">Relatório da Ordem do Dia</drawCentredString>\n' |
|||
|
|||
return tmp |
|||
|
|||
def rodape(lst_rodape): |
|||
""" Gera o codigo rml do rodape""" |
|||
|
|||
tmp='' |
|||
tmp+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + lst_rodape[2] + '</drawString>\n' |
|||
tmp+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' |
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + lst_rodape[0] + '</drawCentredString>\n' |
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + lst_rodape[1] + '</drawCentredString>\n' |
|||
|
|||
return tmp |
|||
|
|||
def paraStyle(): |
|||
""" Gera o codigo rml que define o estilo dos paragrafos""" |
|||
|
|||
tmp='' |
|||
tmp+='\t<stylesheet>\n' |
|||
tmp+='\t\t<blockTableStyle id="Standard_Outline">\n' |
|||
tmp+='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp+='\t\t</blockTableStyle>\n' |
|||
tmp+='\t\t<initialize>\n' |
|||
tmp+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp+='\t\t</initialize>\n' |
|||
tmp+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="12.0" leading="12" alignment="CENTER"/>\n' |
|||
tmp+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="9.0" leading="10" alignment="LEFT"/>\n' |
|||
tmp+='\t\t<paraStyle name="P3" fontName="Helvetica" fontSize="10.0" leading="10" alignment="JUSTIFY"/>\n' |
|||
tmp+='\t</stylesheet>\n' |
|||
|
|||
return tmp |
|||
|
|||
#def splen(lst_splen): |
|||
def pauta(lst_splen, lst_pauta): |
|||
""" Funcao que gera o codigo rml da sessao plenaria """ |
|||
|
|||
tmp='' |
|||
|
|||
#inicio do bloco |
|||
tmp+='\t<story>\n' |
|||
|
|||
for dicsp in lst_splen: |
|||
#espaço inicial |
|||
tmp+='\t\t<para style="P1">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
tmp+='\t\t<para style="P1">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
|
|||
#condicao para a quebra de pagina |
|||
tmp+='\t\t<condPageBreak height="4cm"/>\n' |
|||
|
|||
#sessao plenaria |
|||
if dicsp['sessao']!=None: |
|||
tmp+='\t\t<para style="P1">' + dicsp['sessao'].replace('&','&') + '</para>\n' |
|||
tmp+='\t\t<para style="P1">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
|
|||
if dicsp['datasessao']!=None: |
|||
tmp+='\t\t<para style="P1">' + dicsp['datasessao'].replace('&','&') + '</para>\n' |
|||
tmp+='\t\t<para style="P1">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
|
|||
# tmp+='\t</story>\n' |
|||
# return tmp |
|||
# |
|||
#def pauta(lst_pauta): |
|||
# """ Funcao que gera o codigo rml da pauta da ordem do dia""" |
|||
|
|||
# tmp='' |
|||
|
|||
#inicio do bloco que contem os flowables |
|||
# tmp+='\t<story>\n' |
|||
|
|||
for dic in lst_pauta: |
|||
#espaco inicial |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
|
|||
#condicao para a quebra de pagina |
|||
tmp+='\t\t<condPageBreak height="4cm"/>\n' |
|||
|
|||
#pauta |
|||
if dic['num_ordem']!=None: |
|||
tmp+='\t\t<para style="P2">Item nº ' + str(dic['num_ordem']) + '</para>' |
|||
if dic['id_materia']!=None: |
|||
tmp+='\t\t<para style="P1">' + dic['id_materia'] + '</para>\n' |
|||
tmp+='\t\t<para style="P1">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
if dic['txt_ementa']!=None: |
|||
tmp+='\t\t<para style="P3">' + dic['txt_ementa'].replace('&','&') + '</para>\n' |
|||
tmp+='\t\t<para style="P3">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
if dic['des_numeracao']!=None: |
|||
tmp+='\t\t<para style="P2"><b>Processo:</b> ' + dic['des_numeracao'] + '</para>\n' |
|||
if dic['des_turno']!=None: |
|||
tmp+='\t\t<para style="P2"><b>Turno:</b> ' + dic['des_turno'] + '</para>\n' |
|||
if dic['nom_autor']!=None: |
|||
tmp+='\t\t<para style="P2"><b>Autor:</b> ' + dic['nom_autor'] + '</para>\n' |
|||
if dic['des_situacao']!=None: |
|||
tmp+='\t\t<para style="P2"><b>Situação:</b> ' + dic['des_situacao'] + '</para>\n' |
|||
# if dic['des_numeracao']!=None: |
|||
# tmp+='\t\t<para style="P2"><b>Processo Nº:</b> ' + dic['des_numeracao'] + '</para>\n' |
|||
|
|||
|
|||
# indice = 0 |
|||
# for relator in dic['lst_relator']: |
|||
# indice = indice + 1 |
|||
# if (relator != None): |
|||
# if (indice < 2): |
|||
# tmp+='\t\t<xpre style="P2"><b>Relator</b>: ' + relator + '</xpre>\n' |
|||
# else: |
|||
# tmp+='\t\t<pre style="P2"> ' + relator + '</pre>\n' |
|||
|
|||
tmp+='\t</story>\n' |
|||
return tmp |
|||
|
|||
def principal(sessao,imagem,dat_ordem,lst_splen,lst_pauta,dic_cabecalho,lst_rodape): |
|||
"""Funcao principal que gera a estrutura global do arquivo rml contendo o relatorio de uma ordem do dia. |
|||
ordem_dia_[data da ordem do dia do relatório].pdf |
|||
Retorna: |
|||
Parâmetros: |
|||
dat_ordem => A data da ordem do dia. |
|||
splen => Uma lista de dicionários contendo as sessões plenárias do dia. |
|||
pauta => Uma lista de dicionários contendo a pauta da ordem do dia numa sessão plenária. |
|||
cabecalho => Um dicionário contendo informações para o Cabeçalho do relatório, incluindo a imagem. |
|||
rodapé => Uma lista contendo informações para o Rodapé do relatório. |
|||
""" |
|||
|
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp='' |
|||
tmp+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp+='<document filename="relatorio.pdf">\n' |
|||
tmp+='\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n' |
|||
tmp+='\t\t<pageTemplate id="first">\n' |
|||
tmp+='\t\t\t<pageGraphics>\n' |
|||
tmp+=cabecalho(dic_cabecalho,dat_ordem,imagem) |
|||
tmp+=rodape(lst_rodape) |
|||
tmp+='\t\t\t</pageGraphics>\n' |
|||
tmp+='\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="21cm"/>\n' |
|||
tmp+='\t\t</pageTemplate>\n' |
|||
tmp+='\t</template>\n' |
|||
tmp+=paraStyle() |
|||
# tmp+=splen(lst_splen) |
|||
tmp+=pauta(lst_splen, lst_pauta) |
|||
tmp+='</document>\n' |
|||
|
|||
tmp_pdf=parseString(tmp) |
|||
|
|||
|
|||
# try: |
|||
# tmp_pdf=parseString(unicode(tmp, 'utf-8')) |
|||
# except: |
|||
# tmp_pdf=parseString(unicode(tmp, 'utf-8')) |
|||
|
|||
if hasattr(context.temp_folder,arquivoPdf): |
|||
context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
context.temp_folder.manage_addFile(arquivoPdf) |
|||
arq=context.temp_folder[arquivoPdf] |
|||
arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
return "/temp_folder/"+arquivoPdf |
|||
|
|||
return principal(sessao,imagem,dat_ordem,lst_splen,lst_pauta,dic_cabecalho,lst_rodape) |
@ -0,0 +1,138 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
if context.REQUEST['cod_sessao_plen']!='': |
|||
cod_sessao_plen = context.REQUEST['cod_sessao_plen'] |
|||
splen = [] # lista contendo as sessões plenárias na data indicada |
|||
pauta = [] # lista contendo a pauta da ordem do dia a ser impressa |
|||
data = "" |
|||
for dat_sessao in context.zsql.sessao_plenaria_obter_zsql(cod_sessao_plen=cod_sessao_plen,ind_excluido=0): |
|||
data = context.pysc.data_converter_pysc(dat_sessao.dat_inicio_sessao) # converte data para formato yyyy/mm/dd |
|||
dat_ordem = context.pysc.data_converter_pysc(dat_sessao.dat_inicio_sessao) # converte data para formato yyyy/mm/dd |
|||
# seleciona dados da sessão plenária |
|||
for sp in context.zsql.sessao_plenaria_obter_zsql(dat_inicio_sessao=data, ind_excluido=0): |
|||
dicsp = {} # dicionário que armazenará os dados a serem impressos de uma sessão plenária |
|||
ts = context.zsql.tipo_sessao_plenaria_obter_zsql(tip_sessao=sp.tip_sessao)[0] |
|||
dicsp["sessao"] = str(sp.num_sessao_plen)+"ª Sessao "+ts.nom_sessao+" da "+str(sp.num_sessao_leg)+"ª Sessao Legislativa da "+str(sp.num_legislatura)+"ª Legislatura" |
|||
dia = context.pysc.data_converter_por_extenso_pysc(data=sp.dat_inicio_sessao) |
|||
hora = context.pysc.hora_formatar_pysc(hora=sp.hr_inicio_sessao) |
|||
dicsp["datasessao"] = "Dia "+str(dia)+" ("+str(sp.dia_sessao)+") - Inicio as "+hora |
|||
splen.append(dicsp) |
|||
# seleciona as matérias que compõem a pauta na data escolhida |
|||
for ordem in context.zsql.ordem_dia_obter_zsql(dat_ordem=data, ind_excluido=0): |
|||
# seleciona os detalhes de uma matéria |
|||
materia = context.zsql.materia_obter_zsql(cod_materia=ordem.cod_materia)[0] |
|||
dic = {} # dicionário que armazenará os dados a serem impressos de uma matéria |
|||
dic["num_ordem"] = ordem.num_ordem |
|||
dic["id_materia"] = materia.des_tipo_materia+" - Nº "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) |
|||
# dic["id_materia"] = materia.sgl_tipo_materia+" - "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica)+" - "+materia.des_tipo_materia |
|||
dic["txt_ementa"] = ordem.txt_observacao |
|||
# numeracao do processo 26/02/2011 |
|||
dic["des_numeracao"]="" |
|||
numeracao = context.zsql.numeracao_obter_zsql(cod_materia=ordem.cod_materia) |
|||
if len(numeracao): |
|||
numeracao = numeracao[0] |
|||
dic["des_numeracao"] = str(numeracao.num_materia)+"/"+str(numeracao.ano_materia) |
|||
dic["des_turno"]="" |
|||
dic["des_situacao"] = "" |
|||
tramitacao = context.zsql.tramitacao_obter_zsql(cod_materia=ordem.cod_materia, ind_ult_tramitacao=1) |
|||
if len(tramitacao): |
|||
tramitacao = tramitacao[0] |
|||
if tramitacao.sgl_turno != "": |
|||
for turno in [("P","Primeiro"), ("S","Segundo"), ("U","Único"), ("L","Suplementar"), ("A","Votação Única em Regime de Urgência"), ("B","1ª Votação"), ("C","2ª e 3ª Votações")]: |
|||
if tramitacao.sgl_turno == turno[0]: |
|||
dic["des_turno"] = turno[1] |
|||
|
|||
dic["des_situacao"] = tramitacao.des_status |
|||
if dic["des_situacao"]==None: |
|||
dic["des_situacao"] = " " |
|||
|
|||
dic["nom_autor"] = '' |
|||
autoria = context.zsql.autoria_obter_zsql(cod_materia=ordem.cod_materia, ind_primeiro_autor=1) |
|||
if len(autoria): # se existe autor |
|||
autoria = autoria[0] |
|||
try: |
|||
autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor) |
|||
if len(autor): |
|||
autor = autor[0] |
|||
|
|||
if autor.des_tipo_autor == "Parlamentar": |
|||
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar)[0] |
|||
dic["nom_autor"] = parlamentar.nom_parlamentar |
|||
|
|||
elif autor.des_tipo_autor == "Comissao": |
|||
comissao = context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao)[0] |
|||
dic["nom_autor"] = comissao.nom_comissao |
|||
else: |
|||
dic["nom_autor"] = autor.nom_autor |
|||
except: |
|||
pass |
|||
lst_relator = [] # lista contendo os relatores da matéria |
|||
for relatoria in context.zsql.relatoria_obter_zsql(cod_materia=ordem.cod_materia): |
|||
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=relatoria.cod_parlamentar)[0] |
|||
comissao = context.zsql.comissao_obter_zsql(cod_comissao=relatoria.cod_comissao)[0] |
|||
lst_relator.append(parlamentar.nom_parlamentar+" - "+comissao.nom_comissao) |
|||
if not len(lst_relator): |
|||
lst_relator = [''] |
|||
dic["lst_relator"] = lst_relator |
|||
|
|||
# adiciona o dicionário na pauta |
|||
pauta.append(dic) |
|||
|
|||
# obtém as propriedades da casa legislativa para montar o cabeçalho e o rodapé da página |
|||
casa = {} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]] = item[1] |
|||
|
|||
# obtém a localidade |
|||
localidade = context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
|
|||
# monta o cabeçalho da página |
|||
cabecalho = {} |
|||
estado = context.zsql.localidade_obter_zsql(tip_localidade="U") |
|||
for uf in estado: |
|||
if localidade[0].sgl_uf == uf.sgl_uf: |
|||
nom_estado = uf.nom_localidade |
|||
break |
|||
|
|||
cabecalho["nom_casa"] = casa["nom_casa"] |
|||
cabecalho["nom_estado"] = "Estado do "+nom_estado |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
# monta o rodapé da página |
|||
num_cep = casa["num_cep"] |
|||
if len(casa["num_cep"]) == 8: |
|||
num_cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] |
|||
|
|||
linha1 = casa["end_casa"] |
|||
if num_cep!=None and num_cep!="": |
|||
if casa["end_casa"]!="" and casa["end_casa"]!=None: |
|||
linha1 = linha1 +" " |
|||
linha1 = linha1 +" CEP: "+num_cep |
|||
if localidade[0].nom_localidade!=None and localidade[0].nom_localidade!="": |
|||
linha1 = linha1 +" "+localidade[0].nom_localidade +" - "+localidade[0].sgl_uf |
|||
if casa["num_tel"]!=None and casa["num_tel"]!="": |
|||
linha1 = linha1 +" Tel.: "+casa["num_tel"] |
|||
|
|||
linha2 = casa["end_web_casa"] |
|||
if casa["end_email_casa"]!=None and casa["end_email_casa"]!="": |
|||
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: |
|||
linha2= linha2 + " - " |
|||
linha2 = linha2 +"E-mail: "+casa["end_email_casa"] |
|||
dat_emissao = DateTime().strftime("%d/%m/%Y") |
|||
rodape = [linha1, linha2, dat_emissao] |
|||
|
|||
sessao=session.id |
|||
caminho = context.pdf_ordem_dia_gerar( sessao, imagem, dat_ordem, splen, pauta, cabecalho, rodape) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,196 @@ |
|||
##parameters=rodape_dic, sessao='', imagem, inf_basicas_dic, lst_votacao, lst_expediente_materia |
|||
"""Script para geração do PDF das pautas das sessoes plenarias |
|||
Autor Luciano De Fázio - 06/11/2012 |
|||
versão: 1.0 |
|||
""" |
|||
import time |
|||
from cStringIO import StringIO |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def cabecalho(inf_basicas_dic,imagem): |
|||
""" |
|||
""" |
|||
tmp='' |
|||
tmp+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' |
|||
tmp+='\t\t\t\t<lines>2cm 25.4cm 19cm 25.4cm</lines>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica-Bold" size="14"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + str(inf_basicas_dic["nom_camara"]) + '</drawString>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="12"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="5cm" y="26.6cm">Sistema de Apoio ao Processo Legislativo</drawString>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica-Bold" size="12"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="2.2cm" y="24.6cm">Pauta da ' + str(inf_basicas_dic['num_sessao_plen']) + 'ª Reunião ' + str(inf_basicas_dic['nom_sessao']) + ' da ' + str(inf_basicas_dic['num_sessao_leg']) + 'ª Sessão Legislativa da ' + str(inf_basicas_dic['num_legislatura']) + 'ª Legislatura </drawString>\n' |
|||
return tmp |
|||
|
|||
def rodape(rodape_dic): |
|||
""" |
|||
""" |
|||
tmp='' |
|||
linha1 = rodape_dic['end_casa'] |
|||
linha2 = '' |
|||
if rodape_dic['end_casa']!="" and rodape_dic['end_casa']!=None: |
|||
linha1 = linha1 + " - " |
|||
if rodape_dic['num_cep']!="" and rodape_dic['num_cep']!=None: |
|||
linha1 = linha1 + "CEP " + rodape_dic['num_cep'] |
|||
if rodape_dic['nom_localidade']!="" and rodape_dic['nom_localidade']!=None: |
|||
linha1 = linha1 + " - " + rodape_dic['nom_localidade'] |
|||
if rodape_dic['sgl_uf']!="" and rodape_dic['sgl_uf']!=None: |
|||
linha1 = linha1 + " " + rodape_dic['sgl_uf'] |
|||
if rodape_dic['num_tel']!="" and rodape_dic['num_tel']!=None: |
|||
linha1 = linha1 + " Tel: "+ rodape_dic['num_tel'] |
|||
if rodape_dic['end_web_casa']!="" and rodape_dic['end_web_casa']!=None: |
|||
linha1 = rodape_dic['end_web_casa'] |
|||
if rodape_dic['end_email_casa']!="" and rodape_dic['end_email_casa']!=None: |
|||
linha2 = linha2 + " - E-mail: " + rodape_dic['end_email_casa'] |
|||
if rodape_dic['data_emissao']!="" and rodape_dic['data_emissao']!=None: |
|||
data_emissao = rodape_dic['data_emissao'] |
|||
|
|||
tmp+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + data_emissao + '</drawString>\n' |
|||
tmp+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' |
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + linha1 + '</drawCentredString>\n' |
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + linha2 + '</drawCentredString>\n' |
|||
|
|||
return tmp |
|||
|
|||
def paraStyle(): |
|||
""" |
|||
""" |
|||
tmp='' |
|||
tmp+='\t<stylesheet>\n' |
|||
tmp+='\t\t<blockTableStyle id="repeater" spaceBefore="12">\n' |
|||
tmp+='\t\t\t<lineStyle kind="OUTLINE" colorName="black" thickness="0.5"/>\n' |
|||
tmp+='\t\t\t<lineStyle kind="GRID" colorName="gray" thickness="0.25"/>\n' |
|||
tmp+='\t\t\t<blockFont name="Helvetica-Bold" size="8" leading="8" start="0,0" stop="-1,0"/>\n' |
|||
tmp+='\t\t\t<blockBottomPadding length="1"/>\n' |
|||
tmp+='\t\t\t<blockBackground colorName="silver" start="0,0" stop="-1,0"/>\n' |
|||
tmp+='\t\t\t<lineStyle kind="LINEBELOW" colorName="black" start="0,0" stop="-1,0" thickness="0.5"/>\n' |
|||
tmp+='\t\t\t<!--body section-->\n' |
|||
tmp+='\t\t\t<blockFont name="Helvetica" size="8" leading="9" start="0,1" stop="-1,-1"/>\n' |
|||
tmp+='\t\t\t<blockTopPadding length="1" start="0,1" stop="-1,-1"/>\n' |
|||
tmp+='\t\t\t<blockAlignment value="LEFT" start="1,1" stop="-1,-1"/>\n' |
|||
tmp+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp+='\t\t</blockTableStyle>\n' |
|||
|
|||
tmp+='\t\t<blockTableStyle id="votacao">\n' |
|||
tmp+='\t\t\t<blockFont name="Helvetica" size="8" leading="9" start="0,0" stop="-1,0"/>\n' |
|||
tmp+='\t\t\t<blockBackground colorName="silver" start="0,0" stop="3,0" />\n' |
|||
tmp+='\t\t\t<lineStyle kind="GRID" colorName="silver" />\n' |
|||
tmp+='\t\t\t<lineStyle kind="LINEBELOW" colorName="black" start="0,0" stop="-1,0" thickness="0.5"/>\n' |
|||
tmp +='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp+='\t\t</blockTableStyle>\n' |
|||
tmp+='\t\t<initialize>\n' |
|||
tmp+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp+='\t\t</initialize>\n' |
|||
tmp+='\t\t<paraStyle name="style.Title" fontName="Helvetica" fontSize="11" leading="13" alignment="RIGHT"/>\n' |
|||
tmp+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="12.0" textColor="silver" leading="14" spaceBefore="12" alignment="LEFT"/>\n' |
|||
tmp+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="10" alignment="JUSTIFY"/>\n' |
|||
tmp+='\t\t<paraStyle name="P3" fontName="Helvetica" fontSize="9" leading="10" spaceAfter="3" alignment="LEFT"/>\n' |
|||
tmp+='\t\t<paraStyle name="P4" fontName="Helvetica" fontSize="8" leading="9" spaceAfter="3" alignment="JUSTIFY"/>\n' |
|||
tmp+='\t\t<paraStyle name="texto_projeto" fontName="Helvetica" fontSize="12.0" leading="12" spaceAfter="10" alignment="JUSTIFY"/>\n' |
|||
tmp+='\t\t<paraStyle name="numOrdem" alignment="CENTER"/>\n' |
|||
tmp+='\t</stylesheet>\n' |
|||
|
|||
return tmp |
|||
|
|||
def inf_basicas(inf_basicas_dic): |
|||
""" |
|||
""" |
|||
tmp="" |
|||
nom_sessao = inf_basicas_dic['nom_sessao'] |
|||
num_sessao_plen = inf_basicas_dic["num_sessao_plen"] |
|||
num_sessao_leg = inf_basicas_dic["num_sessao_leg"] |
|||
num_legislatura = inf_basicas_dic["num_legislatura"] |
|||
dat_inicio_sessao = inf_basicas_dic["dat_inicio_sessao"] |
|||
hr_inicio_sessao = inf_basicas_dic["hr_inicio_sessao"] |
|||
dat_fim_sessao = inf_basicas_dic["dat_fim_sessao"] |
|||
hr_fim_sessao = inf_basicas_dic["hr_fim_sessao"] |
|||
|
|||
tmp+='\t\t<para style="P1">Informações Básicas</para>\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
tmp+='\t\t<para style="P2" spaceAfter="5"><b>Tipo da Sessão: </b> ' + nom_sessao + '</para>\n' |
|||
tmp+='\t\t<para style="P2" spaceAfter="5"><b>Abertura: </b> ' + dat_inicio_sessao + ' <b>- </b> ' + hr_inicio_sessao + '</para>\n' |
|||
|
|||
return tmp |
|||
|
|||
|
|||
def expediente_materia(lst_expediente_materia): |
|||
""" |
|||
""" |
|||
tmp = '' |
|||
tmp+='<para style="P1">Matérias do Expediente</para>\n\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
tmp+='<blockTable style="repeater" repeatRows="1">\n' |
|||
tmp+='<tr><td >Matéria</td><td>Ementa</td><td>Situação</td></tr>\n' |
|||
for expediente_materia in lst_expediente_materia: |
|||
tmp+= '<tr><td><para style="P3"><b>' + str(expediente_materia['num_ordem']) + '</b> - ' + expediente_materia['id_materia'] + '</para>\n' + '<para style="P3"><b>Autor: </b>' + expediente_materia['nom_autor'] +'</para></td>\n' |
|||
txt_ementa = expediente_materia['txt_ementa'].replace('&','&') |
|||
tmp+='<td><para style="P4">' + txt_ementa + '</para></td>\n' |
|||
tmp+='<td><para style="P3">' + expediente_materia['des_situacao'] + '</para></td></tr>\n' |
|||
|
|||
tmp+='\t\t</blockTable>\n' |
|||
return tmp |
|||
|
|||
def votacao(lst_votacao): |
|||
""" |
|||
""" |
|||
|
|||
tmp = '' |
|||
tmp+='<para style="P1">Matérias da Ordem do Dia</para>\n\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
tmp+='<blockTable style="repeater" repeatRows="1">\n' |
|||
tmp+='<tr><td >Matéria</td><td >Ementa</td><td>Situação</td></tr>\n' |
|||
for votacao in lst_votacao: |
|||
tmp+= '<tr><td><para style="P3"><b>' + str(votacao['num_ordem']) + '</b> - ' + votacao['id_materia'] + '</para>\n' + '<para style="P3"><b>Processo: </b>' + votacao['des_numeracao'] + '</para>\n' + '<para style="P3"><b>Turno: </b>' + votacao['des_turno'] + '</para>\n' + '<para style="P3"><b>Autor: </b>' + votacao['nom_autor'] + '</para></td>\n' |
|||
tmp+='<td><para style="P4">' + votacao['txt_ementa'] + '</para></td>\n' |
|||
tmp+='<td><para style="P3">' + votacao['des_situacao'] + '</para></td></tr>\n' |
|||
|
|||
tmp+='\t\t</blockTable>\n' |
|||
return tmp |
|||
|
|||
def principal(cabecalho, rodape, sessao, imagem, inf_basicas_dic): |
|||
""" |
|||
""" |
|||
|
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp='' |
|||
tmp+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp+='<document filename="relatorio.pdf">\n' |
|||
tmp+='\t<template pageSize="(21cm, 29.7cm)" title="Pauta da Sessao Plenaria" author="Interlegis" allowSplitting="20">\n' |
|||
tmp+='\t\t<pageTemplate id="first">\n' |
|||
tmp+='\t\t\t<pageGraphics>\n' |
|||
tmp+=cabecalho(inf_basicas_dic,imagem) |
|||
tmp+=rodape(rodape_dic) |
|||
tmp+='\t\t\t</pageGraphics>\n' |
|||
tmp+='\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="20.5cm"/>\n' |
|||
tmp+='\t\t</pageTemplate>\n' |
|||
tmp+='\t</template>\n' |
|||
tmp+=paraStyle() |
|||
tmp+='\t<story>\n' |
|||
tmp+=inf_basicas(inf_basicas_dic) |
|||
tmp+=expediente_materia(lst_expediente_materia) |
|||
tmp+=votacao(lst_votacao) |
|||
tmp+='\t</story>\n' |
|||
tmp+='</document>\n' |
|||
tmp_pdf=parseString(tmp) |
|||
|
|||
if hasattr(context.temp_folder,arquivoPdf): |
|||
context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
context.temp_folder.manage_addFile(arquivoPdf) |
|||
arq=context.temp_folder[arquivoPdf] |
|||
arq.manage_edit(title='Arquivo PDF temporario.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
return "/temp_folder/"+arquivoPdf |
|||
|
|||
return principal(cabecalho, rodape, sessao, imagem, inf_basicas_dic) |
@ -0,0 +1,162 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
|
|||
if context.REQUEST['data']!='': |
|||
dat_inicio_sessao = context.REQUEST['data'] |
|||
pauta = [] # lista contendo a pauta da ordem do dia a ser impressa |
|||
data = context.pysc.data_converter_pysc(dat_inicio_sessao) # converte data para formato yyyy/mm/dd |
|||
codigo = context.REQUEST['cod_sessao_plen'] |
|||
|
|||
# seleciona as matérias que compõem a pauta na data escolhida |
|||
for sessao in context.zsql.sessao_plenaria_obter_zsql(dat_inicio_sessao=data, cod_sessao_plen=codigo, ind_excluido=0): |
|||
inf_basicas_dic = {} # dicionário que armazenará as informacoes basicas da sessao plenaria |
|||
# seleciona o tipo da sessao plenaria |
|||
tipo_sessao = context.zsql.tipo_sessao_plenaria_obter_zsql(tip_sessao=sessao.tip_sessao,ind_excluido=0)[0] |
|||
inf_basicas_dic["nom_sessao"] = tipo_sessao.nom_sessao |
|||
inf_basicas_dic["num_sessao_plen"] = sessao.num_sessao_plen |
|||
inf_basicas_dic["nom_sessao"] = tipo_sessao.nom_sessao |
|||
inf_basicas_dic["num_legislatura"] = sessao.num_legislatura |
|||
inf_basicas_dic["num_sessao_leg"] = sessao.num_sessao_leg |
|||
inf_basicas_dic["dat_inicio_sessao"] = sessao.dat_inicio_sessao |
|||
inf_basicas_dic["hr_inicio_sessao"] = sessao.hr_inicio_sessao |
|||
inf_basicas_dic["dat_fim_sessao"] = sessao.dat_fim_sessao |
|||
inf_basicas_dic["hr_fim_sessao"] = sessao.hr_fim_sessao |
|||
|
|||
# Lista das matérias do Expediente, incluindo o status da tramitação |
|||
lst_expediente_materia=[] |
|||
for expediente_materia in context.zsql.votacao_expediente_materia_obter_zsql(dat_ordem=data,cod_sessao_plen=codigo,ind_excluido=0): |
|||
|
|||
# seleciona os detalhes de uma matéria |
|||
materia = context.zsql.materia_obter_zsql(cod_materia=expediente_materia.cod_materia)[0] |
|||
|
|||
dic_expediente_materia = {} |
|||
dic_expediente_materia["num_ordem"] = expediente_materia.num_ordem |
|||
dic_expediente_materia["id_materia"] = materia.sgl_tipo_materia+" - "+materia.des_tipo_materia+" No. "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) |
|||
dic_expediente_materia["txt_ementa"] = materia.txt_ementa |
|||
dic_expediente_materia["ordem_observacao"] = expediente_materia.ordem_observacao |
|||
|
|||
dic_expediente_materia["des_numeracao"]="" |
|||
numeracao = context.zsql.numeracao_obter_zsql(cod_materia=expediente_materia.cod_materia) |
|||
if len(numeracao): |
|||
numeracao = numeracao[0] |
|||
dic_expediente_materia["des_numeracao"] = str(numeracao.num_materia)+"/"+str(numeracao.ano_materia) |
|||
|
|||
dic_expediente_materia["nom_autor"] = '' |
|||
autoria = context.zsql.autoria_obter_zsql(cod_materia=expediente_materia.cod_materia, ind_primeiro_autor=1) |
|||
if len(autoria) > 0: # se existe autor |
|||
autoria = autoria[0] |
|||
autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor) |
|||
if len(autor) > 0: |
|||
autor = autor[0] |
|||
|
|||
if autor.des_tipo_autor == "Parlamentar": |
|||
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar)[0] |
|||
dic_expediente_materia["nom_autor"] = parlamentar.nom_parlamentar |
|||
elif autor.des_tipo_autor == "Comissao": |
|||
comissao = context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao)[0] |
|||
dic_expediente_materia["nom_autor"] = comissao.nom_comissao |
|||
else: |
|||
dic_expediente_materia["nom_autor"] = autor.nom_autor |
|||
|
|||
dic_expediente_materia["des_turno"]="" |
|||
dic_expediente_materia["des_situacao"] = "" |
|||
tramitacao = context.zsql.tramitacao_obter_zsql(cod_materia=expediente_materia.cod_materia, ind_ult_tramitacao=1) |
|||
if len(tramitacao): |
|||
tramitacao = tramitacao[0] |
|||
if tramitacao.sgl_turno != "": |
|||
for turno in [("P","Primeiro"), ("S","Segundo"), ("U","Único"), ("F","Final"), ("L","Suplementar"), ("A","Votação Única em Regime de Urgência"), ("B","1ª Votação"), ("C","2ª e 3ª Votações")]: |
|||
if tramitacao.sgl_turno == turno[0]: |
|||
dic_expediente_materia["des_turno"] = turno[1] |
|||
|
|||
dic_expediente_materia["des_situacao"] = tramitacao.des_status |
|||
if dic_expediente_materia["des_situacao"]==None: |
|||
dic_expediente_materia["des_situacao"] = " " |
|||
lst_expediente_materia.append(dic_expediente_materia) |
|||
|
|||
|
|||
# Lista das matérias da Ordem do Dia, incluindo o status da tramitação |
|||
lst_votacao=[] |
|||
for votacao in context.zsql.votacao_ordem_dia_obter_zsql(dat_ordem=data,cod_sessao_plen=codigo,ind_excluido=0): |
|||
|
|||
# seleciona os detalhes de uma matéria |
|||
materia = context.zsql.materia_obter_zsql(cod_materia=votacao.cod_materia)[0] |
|||
|
|||
dic_votacao = {} |
|||
dic_votacao["num_ordem"] = votacao.num_ordem |
|||
dic_votacao["id_materia"] = materia.sgl_tipo_materia+" - "+materia.des_tipo_materia+" No. "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) |
|||
dic_votacao["txt_ementa"] = materia.txt_ementa |
|||
dic_votacao["ordem_observacao"] = votacao.ordem_observacao |
|||
|
|||
dic_votacao["des_numeracao"]="" |
|||
numeracao = context.zsql.numeracao_obter_zsql(cod_materia=votacao.cod_materia) |
|||
if len(numeracao): |
|||
numeracao = numeracao[0] |
|||
dic_votacao["des_numeracao"] = str(numeracao.num_materia)+"/"+str(numeracao.ano_materia) |
|||
|
|||
dic_votacao["nom_autor"] = '' |
|||
autoria = context.zsql.autoria_obter_zsql(cod_materia=votacao.cod_materia, ind_primeiro_autor=1) |
|||
if len(autoria) > 0: # se existe autor |
|||
autoria = autoria[0] |
|||
autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor) |
|||
if len(autor) > 0: |
|||
autor = autor[0] |
|||
|
|||
if autor.des_tipo_autor == "Parlamentar": |
|||
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar)[0] |
|||
dic_votacao["nom_autor"] = parlamentar.nom_parlamentar |
|||
elif autor.des_tipo_autor == "Comissao": |
|||
comissao = context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao)[0] |
|||
dic_votacao["nom_autor"] = comissao.nom_comissao |
|||
else: |
|||
dic_votacao["nom_autor"] = autor.nom_autor |
|||
|
|||
dic_votacao["des_turno"]="" |
|||
dic_votacao["des_situacao"] = "" |
|||
tramitacao = context.zsql.tramitacao_obter_zsql(cod_materia=votacao.cod_materia, ind_ult_tramitacao=1) |
|||
if len(tramitacao): |
|||
tramitacao = tramitacao[0] |
|||
if tramitacao.sgl_turno != "": |
|||
for turno in [("P","Primeiro"), ("S","Segundo"), ("U","Único"), ("L","Suplementar"), ("A","Votação Única em Regime de Urgência"), ("B","1ª Votação"), ("C","2ª e 3ª Votações")]: |
|||
if tramitacao.sgl_turno == turno[0]: |
|||
dic_votacao["des_turno"] = turno[1] |
|||
|
|||
dic_votacao["des_situacao"] = tramitacao.des_status |
|||
if dic_votacao["des_situacao"]==None: |
|||
dic_votacao["des_situacao"] = " " |
|||
lst_votacao.append(dic_votacao) |
|||
|
|||
# obtém as propriedades da casa legislativa para montar o cabeçalho e o rodapé da página |
|||
cabecalho={} |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
#Abaixo é gerado o dic do rodapé da página (linha 7) |
|||
casa={} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]]=item[1] |
|||
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
data_emissao= DateTime().strftime("%d/%m/%Y") |
|||
rodape= casa |
|||
rodape['data_emissao']= data_emissao |
|||
|
|||
inf_basicas_dic['nom_camara']= casa['nom_casa'] |
|||
REQUEST=context.REQUEST |
|||
for local in context.zsql.localidade_obter_zsql(cod_localidade = casa['cod_localidade']): |
|||
rodape['nom_localidade']= " "+local.nom_localidade |
|||
rodape['sgl_uf']= local.sgl_uf |
|||
|
|||
# return lst_votacao |
|||
sessao=session.id |
|||
caminho = context.pdf_pauta_sessao_gerar(rodape, sessao, imagem, inf_basicas_dic, lst_votacao, lst_expediente_materia) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,136 @@ |
|||
##parameters=sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro |
|||
|
|||
"""relatorio_protocolo.py |
|||
External method para gerar o arquivo rml do resultado de uma pesquisa de protocolos |
|||
Autor: Luciano De Fazio |
|||
Empresa: OpenLegis Consultoria |
|||
versão: 1.0 |
|||
""" |
|||
import time |
|||
from cStringIO import StringIO |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def cabecalho(inf_basicas_dic,imagem): |
|||
"""Gera o codigo rml do cabecalho""" |
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' |
|||
tmp_data+='\t\t\t\t<lines>2cm 25.4cm 19cm 25.4cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="15"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + dic_cabecalho['nom_casa'] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="12"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="5cm" y="26.6cm">Sistema de Apoio ao Processo Legislativo</drawString>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica-Bold" size="13"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="2.2cm" y="24.6cm">Relatório de Controle do Protocolo</drawString>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def rodape(lst_rodape): |
|||
"""Gera o codigo rml do rodape""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' |
|||
tmp_data+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + lst_rodape[2] + '</drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + lst_rodape[0] + '</drawCentredString>\n' |
|||
tmp_data+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + lst_rodape[1] + '</drawCentredString>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def paraStyle(): |
|||
"""Gera o codigo rml que define o estilo dos paragrafos""" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='\t<stylesheet>\n' |
|||
tmp_data+='\t\t<blockTableStyle id="Standard_Outline">\n' |
|||
tmp_data+='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp_data+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp_data+='\t\t</blockTableStyle>\n' |
|||
tmp_data+='\t\t<initialize>\n' |
|||
tmp_data+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp_data+='\t\t</initialize>\n' |
|||
tmp_data+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="CENTER"/>\n' |
|||
tmp_data+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="13" alignment="justify"/>\n' |
|||
tmp_data+='\t</stylesheet>\n' |
|||
|
|||
return tmp_data |
|||
|
|||
def protocolos(lst_protocolos): |
|||
"""Gera o codigo rml do conteudo da pesquisa de protocolos""" |
|||
|
|||
tmp_data='' |
|||
|
|||
#inicio do bloco que contem os flowables |
|||
tmp_data+='\t<story>\n' |
|||
|
|||
for dic in lst_protocolos: |
|||
#espaco inicial |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
tmp_data+='\t\t<para style="P2">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
|
|||
#condicao para a quebra de pagina |
|||
tmp_data+='\t\t<condPageBreak height="4cm"/>\n' |
|||
|
|||
#protocolos |
|||
if dic['titulo']!=None: |
|||
tmp_data+='\t\t<para style="P1">Protocolo ' + dic['titulo'] + '</para>\n' |
|||
tmp_data+='\t\t<para style="P1">\n' |
|||
tmp_data+='\t\t\t<font color="white"> </font>\n' |
|||
tmp_data+='\t\t</para>\n' |
|||
if dic['txt_assunto']!=None: |
|||
txt_assunto = dic['txt_assunto'].replace('&','&') |
|||
tmp_data+='\t\t<para style="P2">' + txt_assunto + '</para>\n' |
|||
if dic['txt_interessado']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>Interessado:</b> ' + dic['txt_interessado'] + '</para>\n' |
|||
elif dic['nom_autor']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>Autor:</b> ' + dic['nom_autor'] + '</para>\n' |
|||
if dic['natureza']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>Natureza Processo:</b> ' + dic['natureza'] + '</para>\n' |
|||
if dic['processo']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>Classificação:</b> ' + dic['processo'] + '</para>\n' |
|||
if dic['data']!=None: |
|||
tmp_data+='\t\t<para style="P2"><b>Data Protocolo:</b> ' + dic['data'] + '</para>\n' |
|||
if dic['anulado']!="": |
|||
tmp_data+='\t\t<para style="P2"><b>** PROTOCOLO ANULADO **</b> ' '</para>\n' |
|||
|
|||
tmp_data+='\t</story>\n' |
|||
return tmp_data |
|||
|
|||
def principal(sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro={}): |
|||
"""Funcao pricipal que gera a estrutura global do arquivo rml""" |
|||
|
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp_data='' |
|||
tmp_data+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp_data+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp_data+='<document filename="relatorio.pdf">\n' |
|||
tmp_data+='\t<template pageSize="(21cm, 29.7cm)" title="Relatório de Protocolos" author="Luciano De Fazio" allowSplitting="20">\n' |
|||
tmp_data+='\t\t<pageTemplate id="first">\n' |
|||
tmp_data+='\t\t\t<pageGraphics>\n' |
|||
tmp_data+=cabecalho(dic_cabecalho,imagem) |
|||
tmp_data+=rodape(lst_rodape) |
|||
tmp_data+='\t\t\t</pageGraphics>\n' |
|||
tmp_data+='\t\t\t<frame id="first" x1="2cm" y1="3cm" width="17cm" height="21cm"/>\n' |
|||
tmp_data+='\t\t</pageTemplate>\n' |
|||
tmp_data+='\t</template>\n' |
|||
tmp_data+=paraStyle() |
|||
tmp_data+=protocolos(lst_protocolos) |
|||
tmp_data+='</document>\n' |
|||
tmp_pdf=parseString(tmp_data) |
|||
|
|||
if hasattr(context.temp_folder,arquivoPdf): |
|||
context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
context.temp_folder.manage_addFile(arquivoPdf) |
|||
arq=context.temp_folder[arquivoPdf] |
|||
arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
return "/temp_folder/"+arquivoPdf |
|||
|
|||
return principal(sessao,imagem,data,lst_protocolos,dic_cabecalho,lst_rodape,dic_filtro) |
@ -0,0 +1,117 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
|
|||
data=DateTime().strftime('%d/%m/%Y') |
|||
|
|||
#Abaixo é gerada a string para o rodapé da página |
|||
casa={} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]]=item[1] |
|||
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
if len(casa["num_cep"])==8: |
|||
cep=casa["num_cep"][:4]+"-"+casa["num_cep"][5:] |
|||
else: |
|||
cep="" |
|||
|
|||
linha1=casa["end_casa"] |
|||
if cep!="": |
|||
if casa["end_casa"]!="" and casa["end_casa"]!=None: |
|||
linha1 = linha1 + " - " |
|||
linha1 = linha1 + "CEP "+cep |
|||
if localidade[0].nom_localidade!="" and localidade[0].nom_localidade!=None: |
|||
linha1 = linha1 + " - "+localidade[0].nom_localidade+" "+localidade[0].sgl_uf |
|||
if casa["num_tel"]!="" and casa["num_tel"]!=None: |
|||
linha1 = linha1 + " Tel.: "+ casa["num_tel"] |
|||
|
|||
linha2=casa["end_web_casa"] |
|||
if casa["end_email_casa"]!="" and casa["end_email_casa"]!=None: |
|||
if casa["end_web_casa"]!="" and casa["end_web_casa"]!=None: |
|||
linha2 = linha2 + " - " |
|||
linha2 = linha2 + "E-mail: "+casa["end_email_casa"] |
|||
|
|||
data_emissao=DateTime().strftime("%d/%m/%Y") |
|||
rodape=[linha1,linha2,data_emissao] |
|||
|
|||
#Por fim, gera-se as entradas para o cabeçalho |
|||
estados=context.zsql.localidade_obter_zsql(tip_localidade="u") |
|||
for uf in estados: |
|||
if localidade[0].sgl_uf==uf.sgl_uf: |
|||
nom_estado=uf.nom_localidade |
|||
break |
|||
cabecalho={} |
|||
cabecalho["nom_casa"]=casa["nom_casa"] |
|||
cabecalho["nom_estado"]="Estado de "+nom_estado |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
#Por fim, utiliza o PythonScript para pesquisar os protocolos e gerar os dados |
|||
|
|||
protocolos=[] |
|||
REQUEST=context.REQUEST |
|||
for protocolo in context.zsql.protocolo_pesquisar_zsql(tip_protocolo=REQUEST['rad_tip_protocolo'], |
|||
cod_protocolo=REQUEST['txt_num_protocolo'], ano_protocolo=REQUEST['txt_ano_protocolo'], |
|||
tip_documento=REQUEST['lst_tip_documento'], tip_processo=REQUEST['rad_tip_processo'], |
|||
tip_materia=REQUEST['lst_tip_materia'], des_assunto=REQUEST['txt_assunto'], |
|||
cod_autor=REQUEST['hdn_cod_autor'], des_interessado=REQUEST['txa_txt_interessado'], |
|||
dat_apres=REQUEST['dt_apres'], dat_apres2=REQUEST['dt_apres2']): |
|||
dic={} |
|||
|
|||
dic['titulo']=str(protocolo.cod_protocolo)+'/'+str(protocolo.ano_protocolo) |
|||
|
|||
dic['data']=context.pysc.iso_to_port_pysc(protocolo.dat_protocolo)+' - <b>Horário:</b>'+protocolo.hor_protocolo |
|||
|
|||
dic['txt_assunto']=protocolo.txt_assunto_ementa |
|||
|
|||
dic['txt_interessado']=protocolo.txt_interessado |
|||
|
|||
dic['nom_autor'] = " " |
|||
if protocolo.cod_autor!=None: |
|||
for autor in context.zsql.autor_obter_zsql(cod_autor=protocolo.cod_autor): |
|||
if autor.des_tipo_autor=='Parlamentar': |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar): |
|||
dic['nom_autor']=parlamentar.nom_completo |
|||
elif autor.des_tipo_autor=='Comissao': |
|||
for comissao in context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao): |
|||
dic['nom_autor']=comissao.nom_comissao |
|||
else: |
|||
dic['nom_autor']=autor.nom_autor |
|||
|
|||
dic['natureza']='' |
|||
if protocolo.tip_processo==0: |
|||
dic['natureza']='Administrativo' |
|||
if protocolo.tip_processo==1: |
|||
dic['natureza']='Legislativo' |
|||
|
|||
dic['processo']=protocolo.des_tipo_materia or protocolo.des_tipo_documento |
|||
|
|||
dic['anulado']='' |
|||
if protocolo.ind_anulado==1: |
|||
dic['anulado']='Nulo' |
|||
|
|||
protocolos.append(dic) |
|||
|
|||
filtro={} # Dicionário que conterá os dados do filtro |
|||
|
|||
# Atribuições diretas do REQUEST |
|||
filtro['numero']=REQUEST.txt_num_protocolo |
|||
filtro['ano']=REQUEST.txt_ano_protocolo |
|||
filtro['tipo_protocolo']=REQUEST.rad_tip_protocolo |
|||
filtro['tipo_processo']=REQUEST.rad_tip_processo |
|||
filtro['assunto']=REQUEST.txt_assunto |
|||
filtro['autor']=REQUEST.hdn_cod_autor |
|||
filtro['interessado']=REQUEST.txa_txt_interessado |
|||
|
|||
sessao=session.id |
|||
caminho = context.pdf_protocolo_gerar(sessao,imagem,data,protocolos,cabecalho,rodape,filtro) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,287 @@ |
|||
##parameters=rodape_dic, sessao='', imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao, lst_expedientes, lst_expediente_materia, lst_oradores_expediente, lst_presenca_ordem_dia, lst_votacao, lst_oradores |
|||
"""Script para geração do PDF das sessoes plenarias |
|||
Autor: Gustavo Lepri |
|||
Atualizado por Luciano De Fázio - 22/03/2012 |
|||
versão: 1.0 |
|||
""" |
|||
import time |
|||
from cStringIO import StringIO |
|||
|
|||
from trml2pdf import parseString |
|||
|
|||
|
|||
def cabecalho(inf_basicas_dic,imagem): |
|||
""" |
|||
""" |
|||
tmp='' |
|||
tmp+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n' |
|||
tmp+='\t\t\t\t<lines>2cm 25.4cm 19cm 25.4cm</lines>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica-Bold" size="16"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="5cm" y="27.1cm">' + str(inf_basicas_dic["nom_camara"]) + '</drawString>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="12"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="5cm" y="26.6cm">Sistema de Apoio ao Processo Legislativo</drawString>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica-Bold" size="12"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="2.2cm" y="24.6cm">Resumo da ' + str(inf_basicas_dic['num_sessao_plen']) + 'ª Reunião ' + str(inf_basicas_dic['nom_sessao']) + ' da ' + str(inf_basicas_dic['num_sessao_leg']) + 'ª Sessão Legislativa da ' + str(inf_basicas_dic['num_legislatura']) + 'ª Legislatura </drawString>\n' |
|||
return tmp |
|||
|
|||
def rodape(rodape_dic): |
|||
""" |
|||
""" |
|||
tmp='' |
|||
linha1 = rodape_dic['end_casa'] |
|||
linha2 = '' |
|||
if rodape_dic['end_casa']!="" and rodape_dic['end_casa']!=None: |
|||
linha1 = linha1 + " - " |
|||
if rodape_dic['num_cep']!="" and rodape_dic['num_cep']!=None: |
|||
linha1 = linha1 + "CEP " + rodape_dic['num_cep'] |
|||
if rodape_dic['nom_localidade']!="" and rodape_dic['nom_localidade']!=None: |
|||
linha1 = linha1 + " - " + rodape_dic['nom_localidade'] |
|||
if rodape_dic['sgl_uf']!="" and rodape_dic['sgl_uf']!=None: |
|||
linha1 = linha1 + " " + rodape_dic['sgl_uf'] |
|||
if rodape_dic['num_tel']!="" and rodape_dic['num_tel']!=None: |
|||
linha1 = linha1 + " Tel: "+ rodape_dic['num_tel'] |
|||
if rodape_dic['end_web_casa']!="" and rodape_dic['end_web_casa']!=None: |
|||
linha2 = rodape_dic['end_web_casa'] |
|||
if rodape_dic['end_email_casa']!="" and rodape_dic['end_email_casa']!=None: |
|||
linha2 = linha2 + " - E-mail: " + rodape_dic['end_email_casa'] |
|||
if rodape_dic['data_emissao']!="" and rodape_dic['data_emissao']!=None: |
|||
data_emissao = rodape_dic['data_emissao'] |
|||
|
|||
tmp+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n' |
|||
tmp+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n' |
|||
tmp+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + data_emissao + '</drawString>\n' |
|||
tmp+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n' |
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + linha1 + '</drawCentredString>\n' |
|||
tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + linha2 + '</drawCentredString>\n' |
|||
|
|||
return tmp |
|||
|
|||
def paraStyle(): |
|||
""" |
|||
""" |
|||
tmp='' |
|||
tmp+='\t<stylesheet>\n' |
|||
tmp+='\t\t<blockTableStyle id="repeater" spaceBefore="12">\n' |
|||
tmp+='\t\t\t<lineStyle kind="OUTLINE" colorName="black" thickness="0.5"/>\n' |
|||
tmp+='\t\t\t<lineStyle kind="GRID" colorName="gray" thickness="0.25"/>\n' |
|||
tmp+='\t\t\t<blockFont name="Helvetica-Bold" size="8" leading="8" start="0,0" stop="-1,0"/>\n' |
|||
tmp+='\t\t\t<blockBottomPadding length="1"/>\n' |
|||
tmp+='\t\t\t<blockBackground colorName="silver" start="0,0" stop="-1,0"/>\n' |
|||
tmp+='\t\t\t<lineStyle kind="LINEBELOW" colorName="black" start="0,0" stop="-1,0" thickness="0.5"/>\n' |
|||
tmp+='\t\t\t<!--body section-->\n' |
|||
tmp+='\t\t\t<blockFont name="Helvetica" size="8" leading="9" start="0,1" stop="-1,-1"/>\n' |
|||
tmp+='\t\t\t<blockTopPadding length="1" start="0,1" stop="-1,-1"/>\n' |
|||
tmp+='\t\t\t<blockAlignment value="LEFT" start="1,1" stop="-1,-1"/>\n' |
|||
tmp+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp+='\t\t</blockTableStyle>\n' |
|||
|
|||
tmp+='\t\t<blockTableStyle id="votacao">\n' |
|||
tmp+='\t\t\t<blockFont name="Helvetica" size="8" leading="9" start="0,0" stop="-1,0"/>\n' |
|||
tmp+='\t\t\t<blockBackground colorName="silver" start="0,0" stop="3,0" />\n' |
|||
tmp+='\t\t\t<lineStyle kind="GRID" colorName="silver" />\n' |
|||
tmp+='\t\t\t<lineStyle kind="LINEBELOW" colorName="black" start="0,0" stop="-1,0" thickness="0.5"/>\n' |
|||
tmp +='\t\t\t<blockAlignment value="LEFT"/>\n' |
|||
tmp+='\t\t\t<blockValign value="TOP"/>\n' |
|||
tmp+='\t\t</blockTableStyle>\n' |
|||
tmp+='\t\t<initialize>\n' |
|||
tmp+='\t\t\t<paraStyle name="all" alignment="justify"/>\n' |
|||
tmp+='\t\t</initialize>\n' |
|||
tmp+='\t\t<paraStyle name="style.Title" fontName="Helvetica" fontSize="11" leading="13" alignment="RIGHT"/>\n' |
|||
tmp+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="12.0" textColor="gray" leading="14" spaceBefore="12" alignment="LEFT"/>\n' |
|||
tmp+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="10" alignment="JUSTIFY"/>\n' |
|||
tmp+='\t\t<paraStyle name="P3" fontName="Helvetica" fontSize="9" leading="10" spaceAfter="3" alignment="LEFT"/>\n' |
|||
tmp+='\t\t<paraStyle name="P4" fontName="Helvetica" fontSize="8" leading="9" spaceAfter="3" alignment="JUSTIFY"/>\n' |
|||
tmp+='\t\t<paraStyle name="texto_projeto" fontName="Helvetica" fontSize="12.0" leading="12" spaceAfter="10" alignment="JUSTIFY"/>\n' |
|||
tmp+='\t\t<paraStyle name="numOrdem" alignment="CENTER"/>\n' |
|||
tmp+='\t</stylesheet>\n' |
|||
|
|||
return tmp |
|||
|
|||
def inf_basicas(inf_basicas_dic): |
|||
""" |
|||
""" |
|||
tmp="" |
|||
nom_sessao = inf_basicas_dic['nom_sessao'] |
|||
num_sessao_plen = inf_basicas_dic["num_sessao_plen"] |
|||
num_sessao_leg = inf_basicas_dic["num_sessao_leg"] |
|||
num_legislatura = inf_basicas_dic["num_legislatura"] |
|||
dat_inicio_sessao = inf_basicas_dic["dat_inicio_sessao"] |
|||
hr_inicio_sessao = inf_basicas_dic["hr_inicio_sessao"] |
|||
dat_fim_sessao = inf_basicas_dic["dat_fim_sessao"] |
|||
hr_fim_sessao = inf_basicas_dic["hr_fim_sessao"] |
|||
if hr_fim_sessao is None: |
|||
hr_fim_sessao = '' |
|||
|
|||
tmp+='\t\t<para style="P1">Informações Básicas</para>\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
tmp+='\t\t<para style="P2" spaceAfter="5"><b>Tipo da Sessão: </b> ' + nom_sessao + '</para>\n' |
|||
tmp+='\t\t<para style="P2" spaceAfter="5"><b>Abertura: </b> ' + dat_inicio_sessao + ' <b>- </b> ' + hr_inicio_sessao + '</para>\n' |
|||
tmp+='\t\t<para style="P2" spaceAfter="5"><b>Encerramento: </b> ' + dat_fim_sessao + ' <b>- </b> ' + hr_fim_sessao + '</para>\n' |
|||
|
|||
return tmp |
|||
|
|||
def mesa(lst_mesa): |
|||
""" |
|||
|
|||
""" |
|||
tmp='' |
|||
tmp+='\t\t<para style="P1">Mesa Diretora</para>\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
for mesa in lst_mesa: |
|||
tmp+='\t\t<para style="P2" spaceAfter="5"><b>'+ str(mesa['des_cargo']) +':</b> ' + str(mesa['nom_parlamentar']) + '/' + str(mesa['sgl_partido']) +'</para>\n' |
|||
return tmp |
|||
|
|||
def presenca(lst_presenca_sessao): |
|||
""" |
|||
|
|||
""" |
|||
tmp = '' |
|||
tmp+='\t\t<para style="P1">Lista de Presença da Sessão</para>\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
for presenca in lst_presenca_sessao: |
|||
tmp+='\t\t<para style="P2" spaceAfter="5">'+ str(presenca['nom_parlamentar']) + '/' + str(presenca['sgl_partido']) +'</para>\n' |
|||
return tmp |
|||
|
|||
def expedientes(lst_expedientes): |
|||
""" |
|||
|
|||
""" |
|||
tmp = '' |
|||
tmp+='\t\t<para style="P1">Expedientes</para>\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
for expediente in lst_expedientes: |
|||
tmp+='\t\t<para style="P2"><b>' + expediente['nom_expediente'] +': </b></para>\n' + '<para style="P2">' + str(expediente['txt_expediente']) +'</para>\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
return tmp |
|||
|
|||
def expediente_materia(lst_expediente_materia): |
|||
""" |
|||
""" |
|||
tmp = '' |
|||
tmp+='\t\t<para style="P1">Matérias do Expediente</para>\n\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
tmp+='<blockTable style="repeater" repeatRows="1">\n' |
|||
tmp+='<tr><td >Matéria</td><td>Ementa</td><td>Resultado da Votação</td></tr>\n' |
|||
for expediente_materia in lst_expediente_materia: |
|||
tmp+= '<tr><td><para style="P3"><b>' + str(expediente_materia['num_ordem']) + '</b> - ' + expediente_materia['id_materia'] + '</para>\n' + '<para style="P3"><b>Turno: </b>' + expediente_materia['des_turno'] + '</para>\n' + '<para style="P3"><b>Autor: </b>' + expediente_materia['nom_autor'] +'</para></td>\n' |
|||
txt_ementa = expediente_materia['txt_ementa'].replace('&','&') |
|||
tmp+='<td><para style="P4">' + txt_ementa + '</para></td>\n' |
|||
tmp+='<td><para style="P3"><b>' + expediente_materia['nom_resultado'] + '</b></para>\n' + '<para style="P3">' + expediente_materia['votacao_observacao'] + '</para></td></tr>\n' |
|||
|
|||
tmp+='\t\t</blockTable>\n' |
|||
return tmp |
|||
|
|||
def oradores_expediente(lst_oradores_expediente): |
|||
""" |
|||
|
|||
""" |
|||
tmp = '' |
|||
tmp+='\t\t<para style="P1">Oradores do Expediente</para>\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
for orador_expediente in lst_oradores_expediente: |
|||
tmp+='\t\t<para style="P2" spaceAfter="5"><b>'+ str(orador_expediente['num_ordem']) +'</b> - ' + orador_expediente['nom_parlamentar'] + '/' + str(orador_expediente['sgl_partido']) +'</para>\n' |
|||
return tmp |
|||
|
|||
def presenca_ordem_dia(lst_presenca_ordem_dia): |
|||
""" |
|||
|
|||
""" |
|||
tmp = '' |
|||
tmp+='\t\t<para style="P1">Lista de Presença da Ordem do Dia</para>\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
for presenca_ordem_dia in lst_presenca_ordem_dia: |
|||
tmp+='\t\t<para style="P2" spaceAfter="5">'+ str(presenca_ordem_dia['nom_parlamentar']) + '/' + str(presenca_ordem_dia['sgl_partido']) +'</para>\n' |
|||
return tmp |
|||
|
|||
def votacao(lst_votacao): |
|||
""" |
|||
""" |
|||
|
|||
tmp = '' |
|||
tmp+='<para style="P1">Matérias da Ordem do Dia</para>\n\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
tmp+='<blockTable style="repeater" repeatRows="1">\n' |
|||
tmp+='<tr><td >Matéria</td><td>Ementa</td><td>Resultado da Votação</td></tr>\n' |
|||
for votacao in lst_votacao: |
|||
tmp+= '<tr><td><para style="P3"><b>'+ str(votacao['num_ordem']) + '</b> - ' + votacao['id_materia'] + '</para>\n' + '<para style="P3"><b>Turno:</b> ' + votacao['des_turno'] + '</para>\n' + '<para style="P3"><b>Autor: </b>' + votacao['nom_autor'] +'</para></td>\n' |
|||
txt_ementa = votacao['txt_ementa'].replace('&','&') |
|||
tmp+='<td><para style="P4">' + txt_ementa + '</para></td>\n' |
|||
tmp+='<td><para style="P3"><b>' + votacao['nom_resultado'] + '</b></para>\n' + '<para style="P3">' + votacao['votacao_observacao'] + '</para></td></tr>\n' |
|||
|
|||
tmp+='\t\t</blockTable>\n' |
|||
return tmp |
|||
|
|||
def oradores(lst_oradores): |
|||
""" |
|||
|
|||
""" |
|||
tmp = '' |
|||
tmp+='\t\t<para style="P1">Oradores das Explicações Pessoais</para>\n' |
|||
tmp+='\t\t<para style="P2">\n' |
|||
tmp+='\t\t\t<font color="white"> </font>\n' |
|||
tmp+='\t\t</para>\n' |
|||
for orador in lst_oradores: |
|||
tmp+='\t\t<para style="P2" spaceAfter="5"><b>'+ str(orador['num_ordem']) +'</b> - ' + orador['nom_parlamentar'] + '/' + str(orador['sgl_partido']) +'</para>\n' |
|||
return tmp |
|||
|
|||
def principal(cabecalho, rodape, sessao, imagem, inf_basicas_dic): |
|||
""" |
|||
""" |
|||
|
|||
arquivoPdf=str(int(time.time()*100))+".pdf" |
|||
|
|||
tmp='' |
|||
tmp+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n' |
|||
tmp+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n' |
|||
tmp+='<document filename="relatorio.pdf">\n' |
|||
tmp+='\t<template pageSize="(21cm, 29.7cm)" title="Sessao Plenaria" author="Interlegis" allowSplitting="20">\n' |
|||
tmp+='\t\t<pageTemplate id="first">\n' |
|||
tmp+='\t\t\t<pageGraphics>\n' |
|||
tmp+=cabecalho(inf_basicas_dic,imagem) |
|||
tmp+=rodape(rodape_dic) |
|||
tmp+='\t\t\t</pageGraphics>\n' |
|||
tmp+='\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="20.5cm"/>\n' |
|||
tmp+='\t\t</pageTemplate>\n' |
|||
tmp+='\t</template>\n' |
|||
tmp+=paraStyle() |
|||
tmp+='\t<story>\n' |
|||
tmp+=inf_basicas(inf_basicas_dic) |
|||
tmp+=mesa(lst_mesa) |
|||
tmp+=presenca(lst_presenca_sessao) |
|||
tmp+=expedientes(lst_expedientes) |
|||
tmp+=expediente_materia(lst_expediente_materia) |
|||
tmp+=oradores_expediente(lst_oradores_expediente) |
|||
tmp+=presenca_ordem_dia(lst_presenca_ordem_dia) |
|||
tmp+=votacao(lst_votacao) |
|||
tmp+=oradores(lst_oradores) |
|||
tmp+='\t</story>\n' |
|||
tmp+='</document>\n' |
|||
tmp_pdf=parseString(tmp) |
|||
|
|||
if hasattr(context.temp_folder,arquivoPdf): |
|||
context.temp_folder.manage_delObjects(ids=arquivoPdf) |
|||
context.temp_folder.manage_addFile(arquivoPdf) |
|||
arq=context.temp_folder[arquivoPdf] |
|||
arq.manage_edit(title='Arquivo PDF temporario.',filedata=tmp_pdf,content_type='application/pdf') |
|||
|
|||
return "/temp_folder/"+arquivoPdf |
|||
|
|||
return principal(cabecalho, rodape, sessao, imagem, inf_basicas_dic) |
@ -0,0 +1,241 @@ |
|||
import os |
|||
|
|||
request=context.REQUEST |
|||
response=request.RESPONSE |
|||
session= request.SESSION |
|||
|
|||
if context.REQUEST['data']!='': |
|||
dat_inicio_sessao = context.REQUEST['data'] |
|||
pauta = [] # lista contendo a pauta da ordem do dia a ser impressa |
|||
data = context.pysc.data_converter_pysc(dat_inicio_sessao) # converte data para formato yyyy/mm/dd |
|||
codigo = context.REQUEST['cod_sessao_plen'] |
|||
|
|||
# seleciona as matérias que compõem a pauta na data escolhida |
|||
for sessao in context.zsql.sessao_plenaria_obter_zsql(dat_inicio_sessao=data, cod_sessao_plen=codigo, ind_excluido=0): |
|||
inf_basicas_dic = {} # dicionário que armazenará as informacoes basicas da sessao plenaria |
|||
# seleciona o tipo da sessao plenaria |
|||
tipo_sessao = context.zsql.tipo_sessao_plenaria_obter_zsql(tip_sessao=sessao.tip_sessao,ind_excluido=0)[0] |
|||
inf_basicas_dic["num_sessao_plen"] = sessao.num_sessao_plen |
|||
inf_basicas_dic["nom_sessao"] = tipo_sessao.nom_sessao |
|||
inf_basicas_dic["num_legislatura"] = sessao.num_legislatura |
|||
inf_basicas_dic["num_sessao_leg"] = sessao.num_sessao_leg |
|||
inf_basicas_dic["dat_inicio_sessao"] = sessao.dat_inicio_sessao |
|||
inf_basicas_dic["hr_inicio_sessao"] = sessao.hr_inicio_sessao |
|||
inf_basicas_dic["dat_fim_sessao"] = sessao.dat_fim_sessao |
|||
inf_basicas_dic["hr_fim_sessao"] = sessao.hr_fim_sessao |
|||
|
|||
# Lista da composicao da mesa diretora |
|||
lst_mesa = [] |
|||
for composicao in context.zsql.composicao_mesa_sessao_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen,ind_excluido=0): |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=composicao.cod_parlamentar,ind_excluido=0): |
|||
for cargo in context.zsql.cargo_mesa_obter_zsql(cod_cargo=composicao.cod_cargo, ind_excluido=0): |
|||
dic_mesa = {} |
|||
dic_mesa['nom_parlamentar'] = parlamentar.nom_parlamentar |
|||
dic_mesa['sgl_partido'] = parlamentar.sgl_partido |
|||
dic_mesa['des_cargo'] = cargo.des_cargo |
|||
lst_mesa.append(dic_mesa) |
|||
|
|||
# Lista de presença na sessão |
|||
lst_presenca_sessao = [] |
|||
for presenca in context.zsql.presenca_sessao_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0): |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=presenca.cod_parlamentar,ind_excluido=0): |
|||
dic_presenca = {} |
|||
dic_presenca["nom_parlamentar"] = parlamentar.nom_parlamentar |
|||
dic_presenca['sgl_partido'] = parlamentar.sgl_partido |
|||
lst_presenca_sessao.append(dic_presenca) |
|||
|
|||
# Exibe os Expedientes |
|||
lst_expedientes = [] |
|||
dic_expedientes = None |
|||
for tip_expediente in context.zsql.tipo_expediente_obter_zsql(): |
|||
for expediente in context.zsql.expediente_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen,cod_expediente=tip_expediente.cod_expediente, ind_excluido=0): |
|||
dic_expedientes = {} |
|||
dic_expedientes["nom_expediente"] = tip_expediente.nom_expediente |
|||
dic_expedientes["txt_expediente"] = expediente.txt_expediente |
|||
|
|||
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 context.zsql.votacao_expediente_materia_obter_zsql(dat_ordem = data, cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0): |
|||
|
|||
# seleciona os detalhes de uma matéria |
|||
materia = context.zsql.materia_obter_zsql(cod_materia=expediente_materia.cod_materia)[0] |
|||
|
|||
dic_expediente_materia = {} |
|||
dic_expediente_materia["num_ordem"] = expediente_materia.num_ordem |
|||
dic_expediente_materia["id_materia"] = materia.sgl_tipo_materia+" "+materia.des_tipo_materia+" "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) |
|||
dic_expediente_materia["des_numeracao"]="" |
|||
|
|||
numeracao = context.zsql.numeracao_obter_zsql(cod_materia=expediente_materia.cod_materia) |
|||
if len(numeracao): |
|||
numeracao = numeracao[0] |
|||
dic_expediente_materia["des_numeracao"] = str(numeracao.num_materia)+"/"+str(numeracao.ano_materia) |
|||
|
|||
tram = context.zsql.tramitacao_turno_obter_zsql(cod_materia=materia.cod_materia, dat_inicio_sessao=data) |
|||
dic_expediente_materia["des_turno"]="" |
|||
if len(tram): |
|||
tram_turno = tram[0] |
|||
if tram_turno.sgl_turno != "": |
|||
for turno in [("P","Primeiro"), ("S","Segundo"), ("U","Único"), ("L","Suplementar"), ("A","Votação Única em Regime de Urgência"), ("B","1ª Votação"), ("C","2ª e 3ª Votações"), ("F", "Final")]: |
|||
if tram_turno.sgl_turno == turno[0]: |
|||
dic_expediente_materia["des_turno"] = turno[1] |
|||
|
|||
dic_expediente_materia["txt_ementa"] = materia.txt_ementa |
|||
dic_expediente_materia["ordem_observacao"] = expediente_materia.ordem_observacao |
|||
dic_expediente_materia["nom_autor"] = "" |
|||
autoria = context.zsql.autoria_obter_zsql(cod_materia=expediente_materia.cod_materia, ind_primeiro_autor=1) |
|||
if len(autoria) > 0: # se existe autor |
|||
autoria = autoria[0] |
|||
autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor) |
|||
if len(autor) > 0: |
|||
autor = autor[0] |
|||
try: |
|||
if autor.des_tipo_autor == "Parlamentar": |
|||
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar)[0] |
|||
dic_expediente_materia["nom_autor"] = parlamentar.nom_parlamentar |
|||
elif autor.des_tipo_autor == "Comissao": |
|||
comissao = context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao)[0] |
|||
dic_expediente_materia["nom_autor"] = comissao.nom_comissao |
|||
elif autor.nom_autor != "": |
|||
dic_expediente_materia["nom_autor"] = autor.nom_autor |
|||
else: |
|||
dic_expediente_materia["nom_autor"] = autor.des_tipo_autor |
|||
except: |
|||
dic_expediente_materia["nom_autor"] = "NC-em" |
|||
|
|||
dic_expediente_materia["votacao_observacao"]="" |
|||
if expediente_materia.tip_resultado_votacao: |
|||
resultado = context.zsql.tipo_resultado_votacao_obter_zsql(tip_resultado_votacao=expediente_materia.tip_resultado_votacao, ind_excluido=0) |
|||
for i in resultado: |
|||
dic_expediente_materia["nom_resultado"] = i.nom_resultado |
|||
if expediente_materia.votacao_observacao: |
|||
dic_expediente_materia["votacao_observacao"] = expediente_materia.votacao_observacao |
|||
else: |
|||
dic_expediente_materia["nom_resultado"] = "Matéria não votada" |
|||
dic_expediente_materia["votacao_observacao"] = "Vazio" |
|||
lst_expediente_materia.append(dic_expediente_materia) |
|||
|
|||
# Lista dos oradores do Expediente |
|||
lst_oradores_expediente = [] |
|||
for orador_expediente in context.zsql.oradores_expediente_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0): |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=orador_expediente.cod_parlamentar,ind_excluido=0): |
|||
dic_oradores_expediente = {} |
|||
dic_oradores_expediente["num_ordem"] = orador_expediente.num_ordem |
|||
dic_oradores_expediente["nom_parlamentar"] = parlamentar.nom_parlamentar |
|||
dic_oradores_expediente['sgl_partido'] = parlamentar.sgl_partido |
|||
lst_oradores_expediente.append(dic_oradores_expediente) |
|||
|
|||
# Lista presença na ordem do dia |
|||
lst_presenca_ordem_dia = [] |
|||
for presenca_ordem_dia in context.zsql.presenca_ordem_dia_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen,ind_excluido=0): |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=presenca_ordem_dia.cod_parlamentar,ind_excluido=0): |
|||
dic_presenca_ordem_dia = {} |
|||
dic_presenca_ordem_dia['nom_parlamentar'] = parlamentar.nom_parlamentar |
|||
dic_presenca_ordem_dia['sgl_partido'] = parlamentar.sgl_partido |
|||
lst_presenca_ordem_dia.append(dic_presenca_ordem_dia) |
|||
|
|||
# Lista das matérias da Ordem do Dia, incluindo o resultado das votacoes |
|||
lst_votacao=[] |
|||
for votacao in context.zsql.votacao_ordem_dia_obter_zsql(dat_ordem = data, cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0): |
|||
|
|||
# seleciona os detalhes de uma matéria |
|||
materia = context.zsql.materia_obter_zsql(cod_materia=votacao.cod_materia)[0] |
|||
|
|||
dic_votacao = {} |
|||
dic_votacao["num_ordem"] = votacao.num_ordem |
|||
dic_votacao["id_materia"] = materia.sgl_tipo_materia+" "+materia.des_tipo_materia+" "+str(materia.num_ident_basica)+"/"+str(materia.ano_ident_basica) |
|||
dic_votacao["des_numeracao"]="" |
|||
numeracao = context.zsql.numeracao_obter_zsql(cod_materia=votacao.cod_materia) |
|||
if len(numeracao): |
|||
numeracao = numeracao[0] |
|||
dic_votacao["des_numeracao"] = str(numeracao.num_materia)+"/"+str(numeracao.ano_materia) |
|||
dic_votacao["des_turno"]="" |
|||
tramitacao = context.zsql.tramitacao_obter_zsql(cod_materia=materia.cod_materia, ind_ult_tramitacao=1) |
|||
if len(tramitacao): |
|||
tramitacao = tramitacao[0] |
|||
tram = context.zsql.tramitacao_turno_obter_zsql(cod_materia=materia.cod_materia, dat_inicio_sessao=data) |
|||
if len(tram): |
|||
tram_turno = tram[0] |
|||
if tram_turno.sgl_turno != "": |
|||
for turno in [("P","Primeiro"), ("S","Segundo"), ("U","Único"), ("L","Suplementar"), ("F","Final"), ("A","Votação Única em Regime de Urgência"), ("B","1ª Votação"), ("C","2ª e 3ª Votações")]: |
|||
if tram_turno.sgl_turno == turno[0]: |
|||
dic_votacao["des_turno"] = turno[1] |
|||
dic_votacao["txt_ementa"] = materia.txt_ementa |
|||
dic_votacao["ordem_observacao"] = votacao.ordem_observacao |
|||
dic_votacao["nom_autor"] = "" |
|||
autoria = context.zsql.autoria_obter_zsql(cod_materia=votacao.cod_materia, ind_primeiro_autor=1) |
|||
if len(autoria) > 0: # se existe autor |
|||
autoria = autoria[0] |
|||
autor = context.zsql.autor_obter_zsql(cod_autor=autoria.cod_autor) |
|||
if len(autor) > 0: |
|||
autor = autor[0] |
|||
try: |
|||
if autor.des_tipo_autor == "Parlamentar": |
|||
parlamentar = context.zsql.parlamentar_obter_zsql(cod_parlamentar=autor.cod_parlamentar)[0] |
|||
dic_votacao["nom_autor"] = parlamentar.nom_parlamentar |
|||
elif autor.des_tipo_autor == "Comissao": |
|||
comissao = context.zsql.comissao_obter_zsql(cod_comissao=autor.cod_comissao)[0] |
|||
dic_votacao["nom_autor"] = comissao.nom_comissao |
|||
elif autor.nom_autor != "": |
|||
dic_votacao["nom_autor"] = autor.nom_autor |
|||
else: |
|||
dic_votacao["nom_autor"] = autor.des_tipo_autor |
|||
except: |
|||
dic_votacao["nom_autor"] = "NC-od" |
|||
|
|||
dic_votacao["votacao_observacao"]="" |
|||
if votacao.tip_resultado_votacao: |
|||
resultado = context.zsql.tipo_resultado_votacao_obter_zsql(tip_resultado_votacao=votacao.tip_resultado_votacao, ind_excluido=0) |
|||
for i in resultado: |
|||
dic_votacao["nom_resultado"] = i.nom_resultado |
|||
if votacao.votacao_observacao: |
|||
dic_votacao["votacao_observacao"] = votacao.votacao_observacao |
|||
else: |
|||
dic_votacao["nom_resultado"] = "Matéria não votada" |
|||
dic_votacao["votacao_observacao"] = "Vazio" |
|||
lst_votacao.append(dic_votacao) |
|||
|
|||
# Lista dos oradores nas Explicações Pessoais |
|||
lst_oradores = [] |
|||
for orador in context.zsql.oradores_obter_zsql(cod_sessao_plen=sessao.cod_sessao_plen, ind_excluido=0): |
|||
for parlamentar in context.zsql.parlamentar_obter_zsql(cod_parlamentar=orador.cod_parlamentar,ind_excluido=0): |
|||
dic_oradores = {} |
|||
dic_oradores["num_ordem"] = orador.num_ordem |
|||
dic_oradores["nom_parlamentar"] = parlamentar.nom_parlamentar |
|||
dic_oradores['sgl_partido'] = parlamentar.sgl_partido |
|||
lst_oradores.append(dic_oradores) |
|||
|
|||
# obtém as propriedades da casa legislativa para montar o cabeçalho e o rodapé da página |
|||
cabecalho={} |
|||
|
|||
# tenta buscar o logotipo da casa LOGO_CASA |
|||
if hasattr(context.sapl_documentos.props_sapl,'logo_casa.gif'): |
|||
imagem = context.sapl_documentos.props_sapl['logo_casa.gif'].absolute_url() |
|||
else: |
|||
imagem = context.imagens.absolute_url() + "/brasao_transp.gif" |
|||
|
|||
#Abaixo é gerado o dic do rodapé da página (linha 7) |
|||
casa={} |
|||
aux=context.sapl_documentos.props_sapl.propertyItems() |
|||
for item in aux: |
|||
casa[item[0]]=item[1] |
|||
localidade=context.zsql.localidade_obter_zsql(cod_localidade=casa["cod_localidade"]) |
|||
data_emissao= DateTime().strftime("%d/%m/%Y") |
|||
rodape= casa |
|||
rodape['data_emissao']= data_emissao |
|||
|
|||
inf_basicas_dic['nom_camara']= casa['nom_casa'] |
|||
REQUEST=context.REQUEST |
|||
for local in context.zsql.localidade_obter_zsql(cod_localidade = casa['cod_localidade']): |
|||
rodape['nom_localidade']= " "+local.nom_localidade |
|||
rodape['sgl_uf']= local.sgl_uf |
|||
|
|||
# return lst_votacao |
|||
sessao=session.id |
|||
caminho = context.pdf_sessao_plenaria_gerar(rodape, sessao, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao, lst_expedientes, lst_expediente_materia, lst_oradores_expediente, lst_presenca_ordem_dia, lst_votacao, lst_oradores) |
|||
if caminho=='aviso': |
|||
return response.redirect('mensagem_emitir_proc') |
|||
else: |
|||
response.redirect(caminho) |
@ -0,0 +1,3 @@ |
|||
# from django.test import TestCase |
|||
|
|||
# Create your tests here. |
@ -0,0 +1,7 @@ |
|||
from django.conf.urls import url |
|||
|
|||
from .views import relatorio_materia |
|||
|
|||
urlpatterns = [ |
|||
url(r'^relatorios/materia$', relatorio_materia, name='relatorio_materia'), |
|||
] |
@ -0,0 +1,175 @@ |
|||
from datetime import datetime |
|||
|
|||
from django.http import HttpResponse |
|||
|
|||
from base.models import CasaLegislativa |
|||
from base.views import ESTADOS |
|||
from materia.models import Autoria, MateriaLegislativa, Tramitacao |
|||
|
|||
from .templates import pdf_materia_gerar |
|||
|
|||
|
|||
def get_cabecalho(casa): |
|||
|
|||
cabecalho = {} |
|||
cabecalho["nom_casa"] = casa.nome |
|||
cabecalho["nom_estado"] = "Estado de " + ESTADOS[casa.uf.upper()] |
|||
return cabecalho |
|||
|
|||
|
|||
def get_imagem(casa): |
|||
|
|||
if casa.logotipo: |
|||
return casa.logotipo.path |
|||
else: |
|||
# TODO: recuperar de uma variavel de sistema |
|||
return 'static/img/brasao_transp.gif' |
|||
|
|||
|
|||
def get_rodape(casa): |
|||
|
|||
if len(casa.cep) == 8: |
|||
cep = casa.cep[:4] + "-" + casa.cep[5:] |
|||
else: |
|||
cep = "" |
|||
|
|||
linha1 = casa.endereco |
|||
|
|||
if cep: |
|||
if casa.endereco: |
|||
linha1 = linha1 + " - " |
|||
linha1 = linha1 + "CEP " + cep |
|||
|
|||
# substituindo nom_localidade por municipio e sgl_uf por uf |
|||
if casa.municipio: |
|||
linha1 = linha1 + " - " + casa.municipio + " " + casa.uf |
|||
|
|||
if casa.telefone: |
|||
linha1 = linha1 + " Tel.: " + casa.telefone |
|||
|
|||
if casa.endereco_web: |
|||
linha2 = casa.endereco_web |
|||
else: |
|||
linha2 = "" |
|||
|
|||
if casa.email: |
|||
if casa.endereco_web: |
|||
linha2 = linha2 + " - " |
|||
linha2 = linha2 + "E-mail: " + casa.email |
|||
|
|||
data_emissao = datetime.today().strftime("%d/%m/%Y") |
|||
|
|||
return [linha1, linha2, data_emissao] |
|||
|
|||
|
|||
def get_materias(mats): |
|||
|
|||
materias = [] |
|||
for materia in mats: |
|||
dic = {} |
|||
dic['titulo'] = materia.tipo.sigla + " " + materia.tipo.descricao \ |
|||
+ " " + str(materia.numero) + "/" + str(materia.ano) |
|||
dic['txt_ementa'] = materia.ementa |
|||
|
|||
autores = Autoria.objects.filter(materia=materia) |
|||
dic['nom_autor'] = " " |
|||
for autoria in autores: |
|||
if autoria.autor.parlamentar: |
|||
dic['nom_autor'] = autoria.autor.parlamentar.nome_completo |
|||
elif autoria.autor.comissao: |
|||
dic['nom_autor'] = autoria.autor.comissao.nome |
|||
|
|||
des_status = '' |
|||
txt_tramitacao = '' |
|||
|
|||
dic['localizacao_atual'] = " " |
|||
|
|||
tramitacoes = Tramitacao.objects.filter( |
|||
unidade_tramitacao_destino__isnull=True).order_by( |
|||
'data_tramitacao') |
|||
|
|||
for tramitacao in tramitacoes: |
|||
des_status = tramitacao.status.descricao |
|||
txt_tramitacao = tramitacao.texto |
|||
|
|||
# for tramitacao in context.zsql |
|||
# .tramitacao_obter_zsql(cod_materia |
|||
# =materia.cod_materia,ind_ult_tramitacao=1): |
|||
# if tramitacao.cod_unid_tram_dest: |
|||
# cod_unid_tram = tramitacao.cod_unid_tram_dest |
|||
# else: |
|||
# cod_unid_tram = tramitacao.cod_unid_tram_local |
|||
# for unidade_tramitacao in |
|||
# context.zsql |
|||
# .unidade_tramitacao_obter_zsql( |
|||
# cod_unid_tramitacao = cod_unid_tram): |
|||
# if unidade_tramitacao.cod_orgao: |
|||
# dic['localizacao_atual']=unidade_tramitacao.nom_orgao |
|||
# else: |
|||
# dic['localizacao_atual']=unidade_tramitacao.nom_comissao |
|||
# des_status=tramitacao.des_status |
|||
# txt_tramitacao=tramitacao.txt_tramitacao |
|||
|
|||
dic['des_situacao'] = des_status |
|||
dic['ultima_acao'] = txt_tramitacao |
|||
|
|||
dic['norma_vinculada'] = " " |
|||
# for norma_vinculada in context.zsql |
|||
# .materia_buscar_norma_juridica_zsql(cod_materia=materia.cod_materia): |
|||
# dic['norma_vinculada']= |
|||
# norma_vinculada.des_norma+" " |
|||
# +str(norma_vinculada.num_norma)+"/"+str(norma_vinculada.ano_norma) |
|||
|
|||
materias.append(dic) |
|||
|
|||
return materias |
|||
|
|||
|
|||
def relatorio_materia(request): |
|||
# Create the HttpResponse object with the appropriate PDF headers. |
|||
response = HttpResponse(content_type='application/pdf') |
|||
response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"' |
|||
|
|||
# Create the PDF object, using the response object as its "file." |
|||
# p = canvas.Canvas(response) |
|||
|
|||
# Draw things on the PDF. Here's where the PDF generation happens. |
|||
# See the ReportLab documentation for the full list of functionality. |
|||
|
|||
casa = CasaLegislativa.objects.first() |
|||
|
|||
cabecalho = get_cabecalho(casa) |
|||
rodape = get_rodape(casa) |
|||
imagem = get_imagem(casa) |
|||
|
|||
mats = MateriaLegislativa.objects.all()[:50] |
|||
|
|||
materias = get_materias(mats) |
|||
|
|||
pdf = pdf_materia_gerar.principal(None, |
|||
imagem, |
|||
None, |
|||
materias, |
|||
cabecalho, |
|||
rodape) |
|||
|
|||
response.write(pdf) |
|||
|
|||
return response |
|||
|
|||
# p.drawString(100, 30, imagem) |
|||
|
|||
# Close the PDF object cleanly, and we're done. |
|||
# p.showPage() |
|||
# p.save() |
|||
|
|||
# filename = "advert-%s.pdf" % id |
|||
# response = HttpResponse(mimetype='application/pdf') |
|||
# response['Content-Disposition'] = 'attachment; filename=%s' % filename |
|||
|
|||
# t = loader.get_template('print/pdf/advert.rml') |
|||
# c = Context({ |
|||
# 'filename' : filename, |
|||
# 'advert' : advert, |
|||
# 'request' : request, |
|||
# }) |
After Width: | Height: | Size: 7.5 KiB |
Loading…
Reference in new issue