Browse Source

Generate PDFs reports (wip)

pull/202/head
Edward Ribeiro 9 years ago
parent
commit
0c0f728147
  1. 58
      base/views.py
  2. 6
      comissoes/urls.py
  3. 7
      comissoes/views.py
  4. 4
      qa_check.sh
  5. 0
      relatorios/__init__.py
  6. 3
      relatorios/admin.py
  7. 0
      relatorios/migrations/__init__.py
  8. 3
      relatorios/models.py
  9. 9
      relatorios/templates/mensagem_emitir_proc.dtml
  10. 90
      relatorios/templates/pdf_capa_processo_gerar.py
  11. 138
      relatorios/templates/pdf_capa_processo_preparar_pysc.py
  12. 350
      relatorios/templates/pdf_detalhe_materia_gerar.py
  13. 267
      relatorios/templates/pdf_detalhe_materia_preparar_pysc.py
  14. 133
      relatorios/templates/pdf_documento_administrativo_gerar.py
  15. 124
      relatorios/templates/pdf_documento_administrativo_preparar_pysc.py
  16. 152
      relatorios/templates/pdf_espelho_gerar.py
  17. 200
      relatorios/templates/pdf_espelho_preparar_pysc.py
  18. 119
      relatorios/templates/pdf_etiqueta_protocolo_gerar.py
  19. 127
      relatorios/templates/pdf_etiqueta_protocolo_preparar_pysc.py
  20. 119
      relatorios/templates/pdf_materia_gerar.py
  21. 155
      relatorios/templates/pdf_materia_preparar_pysc.py
  22. 126
      relatorios/templates/pdf_norma_gerar.py
  23. 94
      relatorios/templates/pdf_norma_preparar_pysc.py
  24. 210
      relatorios/templates/pdf_ordem_dia_gerar.py
  25. 138
      relatorios/templates/pdf_ordem_dia_preparar_pysc.py
  26. 196
      relatorios/templates/pdf_pauta_sessao_gerar.py
  27. 162
      relatorios/templates/pdf_pauta_sessao_preparar_pysc.py
  28. 136
      relatorios/templates/pdf_protocolo_gerar.py
  29. 117
      relatorios/templates/pdf_protocolo_preparar_pysc.py
  30. 287
      relatorios/templates/pdf_sessao_plenaria_gerar.py
  31. 241
      relatorios/templates/pdf_sessao_plenaria_preparar_pysc.py
  32. 3
      relatorios/tests.py
  33. 7
      relatorios/urls.py
  34. 175
      relatorios/views.py
  35. 1
      sapl/urls.py
  36. BIN
      static/img/brasao_transp.gif

58
base/views.py

@ -29,41 +29,41 @@ class HelpView(TemplateView):
return ['ajuda/%s.html' % self.kwargs['topic']] return ['ajuda/%s.html' % self.kwargs['topic']]
ESTADOS = ["", ESTADOS = {"": "",
"AC", "AC": "ACRE",
"AL", "AL": "ALAGOAS",
"AM", "AM": "AMAZONAS",
"AP", "AP": "AMAPÁ",
"BA", "BA": "BAHIA",
"CE", "CE": "CEARÁ",
"DF", "DF": "DISTRITO FEDERAL",
"ES", "ES": "ESPíRITO SANTO",
"GO", "GO": "GOIÁS",
"MA", "MA": "MARANHÃO",
"MG", "MG": "MINAS GERAIS",
"MS", "MS": "MATO GROSSO DO SUL",
"MT", "MT": "MATO GROSSO",
"PA", "PA": "PARÁ",
"PB", "PB": "PARAÍBA",
"PE", "PE": "PERNAMBUCO",
"PI", "PI": "PIAUÍ",
"PR", "PR": "PARANÁ",
"RJ", "RJ": "RIO DE JANEIRO",
"RN", "RN": "RIO GRANDE DO NORTE",
"RO", "RO": "RONDÔNIA",
"RR", "RR": "RORAIMA",
"RS", "RS": "RIO GRANDE DO SUL",
"SC", "SC": "SANTA CATARINA",
"SE", "SE": "SERGIPE",
"SP", "SP": "SÃO PAULO",
"TO"] "TO": "TOCANTINS"}
class CasaLegislativaTabelaAuxForm(ModelForm): class CasaLegislativaTabelaAuxForm(ModelForm):
uf = forms.ChoiceField(required=True, uf = forms.ChoiceField(required=True,
label='UF', label='UF',
choices=[(a, a) for a in ESTADOS], choices=[(uf, uf) for uf in ESTADOS.keys()],
widget=forms.Select( widget=forms.Select(
attrs={'class': 'selector'})) attrs={'class': 'selector'}))

6
comissoes/urls.py

@ -3,9 +3,9 @@ from django.conf.urls import include, url
from comissoes.views import (CadastrarComissaoView, from comissoes.views import (CadastrarComissaoView,
ComissaoParlamentarEditView, ComissaoParlamentarEditView,
ComissaoParlamentarIncluirView, ComposicaoView, ComissaoParlamentarIncluirView, ComposicaoView,
MateriasView, ReunioesView, cargo_crud, MateriasTramitacaoListView, MateriasView,
comissao_crud, periodo_composicao_crud, ReunioesView, cargo_crud, comissao_crud,
tipo_comissao_crud, MateriasTramitacaoListView) periodo_composicao_crud, tipo_comissao_crud)
comissao_url_patterns = comissao_crud.urlpatterns + [ comissao_url_patterns = comissao_crud.urlpatterns + [
url(r'^(?P<pk>\d+)/composicao$', url(r'^(?P<pk>\d+)/composicao$',

7
comissoes/views.py

@ -1,4 +1,3 @@
import sapl
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import ButtonHolder, Fieldset, Layout, Submit from crispy_forms.layout import ButtonHolder, Fieldset, Layout, Submit
from django import forms from django import forms
@ -8,13 +7,15 @@ from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import ListView from django.views.generic import ListView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView
import sapl
from materia.models import Tramitacao
from parlamentares.models import Filiacao from parlamentares.models import Filiacao
from sapl.crud import build_crud from sapl.crud import build_crud
from vanilla import GenericView
from .models import (CargoComissao, Comissao, Composicao, Participacao, from .models import (CargoComissao, Comissao, Composicao, Participacao,
Periodo, TipoComissao) Periodo, TipoComissao)
from materia.models import Tramitacao
cargo_crud = build_crud( cargo_crud = build_crud(
CargoComissao, 'cargo_comissao', [ CargoComissao, 'cargo_comissao', [

4
qa_check.sh

@ -3,5 +3,5 @@
# QA checks: run this before every commit # QA checks: run this before every commit
./manage.py check ./manage.py check
flake8 --exclude='ipython_log.py*,migrations' . flake8 --exclude='ipython_log.py*,migrations,templates' .
isort --check-only --skip='migrations' --skip='ipython_log.py' -rc . isort --check-only --skip='migrations' --skip='templates' --skip='ipython_log.py' -rc .

0
relatorios/__init__.py

3
relatorios/admin.py

@ -0,0 +1,3 @@
# from django.contrib import admin
# Register your models here.

0
relatorios/migrations/__init__.py

3
relatorios/models.py

@ -0,0 +1,3 @@
# from django.db import models
# Create your models here.

9
relatorios/templates/mensagem_emitir_proc.dtml

@ -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>

90
relatorios/templates/pdf_capa_processo_gerar.py

@ -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)

138
relatorios/templates/pdf_capa_processo_preparar_pysc.py

@ -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&#176; ' +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)

350
relatorios/templates/pdf_detalhe_materia_gerar.py

@ -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('&','&amp;') + '</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('&','&amp;') + '</para>\n'
indexacao = dic_inf_basicas['indexacao']
if indexacao != "" and indexacao != None:
tmp+='\t\t<para style="P2"><b>Indexação: </b> ' + indexacao.replace('&','&amp;') + '</para>\n'
observacao = dic_inf_basicas['observacao']
if observacao != "" and observacao != None:
tmp+='\t\t<para style="P2"><b>Observação: </b> ' + observacao.replace('&','&amp;') + '</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('&','&amp;') + '</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('&','&amp;') + '</para>\n'
if dic_dados['indexacao']!=None:
tmp+='\t\t<para style="P2"><b>Ementa:</b> ' + dic_dados['indexacao'].replace('&','&amp;') + '</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)

267
relatorios/templates/pdf_detalhe_materia_preparar_pysc.py

@ -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+ ""+ 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) + ""+ 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)

133
relatorios/templates/pdf_documento_administrativo_gerar.py

@ -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('&','&amp;')
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)

124
relatorios/templates/pdf_documento_administrativo_preparar_pysc.py

@ -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)

152
relatorios/templates/pdf_espelho_gerar.py

@ -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('&','&amp;')
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)

200
relatorios/templates/pdf_espelho_preparar_pysc.py

@ -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)

119
relatorios/templates/pdf_etiqueta_protocolo_gerar.py

@ -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)

127
relatorios/templates/pdf_etiqueta_protocolo_preparar_pysc.py

@ -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)

119
relatorios/templates/pdf_materia_gerar.py

@ -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('&','&amp;')
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)

155
relatorios/templates/pdf_materia_preparar_pysc.py

@ -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)

126
relatorios/templates/pdf_norma_gerar.py

@ -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('&','&amp;')
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)

94
relatorios/templates/pdf_norma_preparar_pysc.py

@ -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+""+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)

210
relatorios/templates/pdf_ordem_dia_gerar.py

@ -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('&','&amp;') + '</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('&','&amp;') + '</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('&','&amp;') + '</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)

138
relatorios/templates/pdf_ordem_dia_preparar_pysc.py

@ -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)

196
relatorios/templates/pdf_pauta_sessao_gerar.py

@ -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('&','&amp;')
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)

162
relatorios/templates/pdf_pauta_sessao_preparar_pysc.py

@ -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)

136
relatorios/templates/pdf_protocolo_gerar.py

@ -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('&','&amp;')
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)

117
relatorios/templates/pdf_protocolo_preparar_pysc.py

@ -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)

287
relatorios/templates/pdf_sessao_plenaria_gerar.py

@ -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('&','&amp;')
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('&','&amp;')
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)

241
relatorios/templates/pdf_sessao_plenaria_preparar_pysc.py

@ -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)

3
relatorios/tests.py

@ -0,0 +1,3 @@
# from django.test import TestCase
# Create your tests here.

7
relatorios/urls.py

@ -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'),
]

175
relatorios/views.py

@ -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,
# })

1
sapl/urls.py

@ -30,6 +30,7 @@ urlpatterns = [
url(r'', include('painel.urls')), url(r'', include('painel.urls')),
url(r'', include('protocoloadm.urls')), url(r'', include('protocoloadm.urls')),
url(r'', include('compilacao.urls')), url(r'', include('compilacao.urls')),
url(r'', include('relatorios.urls')),
# must come at the end # must come at the end
# so that base /sistema/ url doesn't capture its children # so that base /sistema/ url doesn't capture its children

BIN
static/img/brasao_transp.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Loading…
Cancel
Save