source: publico/il.sapl/trunk/il/sapl/skins/relatorios/pdf_detalhe_materia_gerar.py @ 7752

Última Alteração nesse arquivo desde 7752 foi 7752, incluída por gustavolepri, 5 anos atrás

primeira versão alpha do egg do SAPL

  • Propriedade svn:executable mudada para *
File size: 16.5 KB
Linha 
1##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=''
2
3"""relatorio_detalhe_materia.py
4   External method para gerar o arquivo rml do resultado da pesquisa de uma matéria
5   Autor: Leandro Gasparotto Valladares
6   Empresa: Interlegis
7   versão: 1.0
8"""
9from trml2pdf import parseString
10from cStringIO import StringIO
11import time
12
13def cabecalho(dic_inf_basicas,imagem):
14    """
15    Função que gera o código rml do cabeçalho da página
16    """
17
18    tmp=''
19    tmp+='\t\t\t\t<image x="2.1cm" y="25.7cm" width="59" height="62" file="' + imagem + '"/>\n'
20    tmp+='\t\t\t\t<lines>2cm 24.5cm 19cm 24.5cm</lines>\n'
21    if dic_inf_basicas['nom_camara']!="" and dic_inf_basicas['nom_camara']!=None:
22        tmp+='\t\t\t\t<setFont name="Helvetica" size="16"/>\n'
23        tmp+='\t\t\t\t<drawString x="5cm" y="27.2cm">' + dic_inf_basicas['nom_camara'] + '</drawString>\n'
24    tmp+='\t\t\t\t<setFont name="Helvetica" size="14"/>\n'
25    tmp+='\t\t\t\t<drawString x="5cm" y="26.5cm">Sistema de Apoio ao Processo Legislativo</drawString>\n'
26    if str(dic_inf_basicas['nom_projeto']) != "" and str(dic_inf_basicas['nom_projeto']) != None:
27        tmp+='\t\t\t\t<setFont name="Helvetica" size="15"/>\n'
28        tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="25.2cm">' + str(dic_inf_basicas['nom_projeto']) + '</drawCentredString>\n'
29    if str(dic_inf_basicas['cod_projeto']) != "" and str(dic_inf_basicas['cod_projeto']) != None:
30        tmp+='\t\t\t\t<setFont name="Helvetica" size="15"/>\n'
31        tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="24.7cm">' + str(dic_inf_basicas['cod_projeto']) + '</drawCentredString>\n'
32    return tmp
33
34def rodape(dic_rodape):
35    """
36    Função que gera o codigo rml do rodape da pagina.
37    """
38
39    tmp=''
40    linha1 = dic_rodape['end_casa']
41    if dic_rodape['end_casa']!="" and dic_rodape['end_casa']!=None:
42        linha1 = linha1 + " - "
43    if dic_rodape['num_cep']!="" and dic_rodape['num_cep']!=None:
44        linha1 = linha1 + "CEP " + dic_rodape['num_cep']
45    if dic_rodape['nom_localidade']!="" and dic_rodape['nom_localidade']!=None:
46        linha1 = linha1 + " - " + dic_rodape['nom_localidade']
47    if dic_rodape['sgl_uf']!="" and dic_rodape['sgl_uf']!=None:
48        inha1 = linha1 + " " + dic_rodape['sgl_uf']
49    if dic_rodape['num_tel']!="" and dic_rodape['num_tel']!=None:
50        linha1 = linha1 + " Tel: "+ dic_rodape['num_tel']
51    if dic_rodape['end_web_casa']!="" and dic_rodape['end_web_casa']!=None:
52        linha2 = dic_rodape['end_web_casa']
53    if dic_rodape['end_email_casa']!="" and dic_rodape['end_email_casa']!=None:
54        linha2 = linha2 + " - E-mail: " + dic_rodape['end_email_casa']
55    if dic_rodape['data_emissao']!="" and dic_rodape['data_emissao']!=None:
56        data_emissao = dic_rodape['data_emissao']
57
58    tmp+='\t\t\t\t<lines>2cm 3.2cm 19cm 3.2cm</lines>\n'
59    tmp+='\t\t\t\t<setFont name="Helvetica" size="8"/>\n'
60    tmp+='\t\t\t\t<drawString x="2cm" y="3.3cm">' + data_emissao + '</drawString>\n'
61    tmp+='\t\t\t\t<drawString x="17.9cm" y="3.3cm">Página <pageNumber/></drawString>\n'
62    tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.7cm">' + linha1 + '</drawCentredString>\n'
63    tmp+='\t\t\t\t<drawCentredString x="10.5cm" y="2.3cm">' + linha2 + '</drawCentredString>\n'
64
65    return tmp
66
67def paraStyle():
68    """Função que gera o código rml que define o estilo dos parágrafos"""
69   
70    tmp=''
71    tmp+='\t<stylesheet>\n'
72    tmp+='\t\t<blockTableStyle id="Standard_Outline">\n'
73    tmp+='\t\t\t<blockAlignment value="LEFT"/>\n'
74    tmp+='\t\t\t<blockValign value="TOP"/>\n'
75    tmp+='\t\t</blockTableStyle>\n'
76    tmp+='\t\t<initialize>\n'
77    tmp+='\t\t\t<paraStyle name="all" alignment="justify"/>\n'
78    tmp+='\t\t</initialize>\n'
79    #titulo do parágrafo: é por default centralizado
80    tmp+='\t\t<paraStyle name="style.Title" fontName="Helvetica" fontSize="11" leading="13" alignment="RIGHT"/>\n'
81    tmp+='\t\t<paraStyle name="P1" fontName="Helvetica-Bold" fontSize="12.0" textColor="gray" leading="14" spaceBefore="6" alignment="LEFT"/>\n'
82    tmp+='\t\t<paraStyle name="P2" fontName="Helvetica" fontSize="10.0" leading="10" alignment="LEFT"/>\n'
83    tmp+='\t\t<paraStyle name="texto_projeto" fontName="Helvetica" fontSize="12.0" leading="12" spaceAfter="10" alignment="JUSTIFY"/>\n'
84    tmp+='\t</stylesheet>\n'
85
86    return tmp
87
88def inf_basicas(dic_inf_basicas):
89    """
90    Função que gera o código rml das funções básicas do relatório
91    """
92
93    tmp=''
94    #Texto do projeto
95    texto_projeto = str(dic_inf_basicas['texto_projeto'])
96    if texto_projeto != "" and texto_projeto != None :
97        tmp+='\t\t<para style="texto_projeto">' + texto_projeto.replace('&','&amp;') + '</para>\n'
98
99    #início das informações básicas
100    tmp+='\t\t<para style="P1">Informações Básicas</para>\n'
101    if str(dic_inf_basicas['apresentada']) != "" and str(dic_inf_basicas['apresentada']) != None:
102        tmp+='\t\t<para style="P2"><b>Apresentada em: </b> ' + str(dic_inf_basicas['apresentada']) + '</para>\n'
103
104    if str(dic_inf_basicas['formato']) != "" and str(dic_inf_basicas['formato']) != None:
105        tmp+='\t\t<para style="P2"><b>Formato: </b> ' + str(dic_inf_basicas['formato']) + '</para>\n'
106
107    if dic_inf_basicas['publicada']==0:
108        tmp+='\t\t<para style="P2"><b>Publicada:</b> Não</para>\n'
109    else:
110        tmp+='\t\t<para style="P2"><b>Publicada:</b> Sim</para>\n'
111
112    if str(dic_inf_basicas['objeto']) != "" and str(dic_inf_basicas['objeto']) != None:
113        tmp+='\t\t<para style="P2"><b>Objeto: </b> ' + str(dic_inf_basicas['objeto']) + '</para>\n'
114
115    if dic_inf_basicas['tramitacao']==0:
116        tmp+='\t\t<para style="P2"><b>Tramitação:</b> Não</para>\n'
117    else:
118        tmp+='\t\t<para style="P2"><b>Tramitação:</b> Sim</para>\n'
119
120    if str(dic_inf_basicas['reg_tramitacao']) != "" and str(dic_inf_basicas['reg_tramitacao']) != None:
121        tmp+='\t\t<para style="P2"><b>Regime: </b> ' + str(dic_inf_basicas['reg_tramitacao']) + '</para>\n'
122
123    if str(dic_inf_basicas['prazo']) != "" and str(dic_inf_basicas['prazo']) != None:
124        tmp+='\t\t<para style="P2"><b>Dias de prazo: </b> ' + str(dic_inf_basicas['prazo']) + '</para>\n'
125
126    if str(dic_inf_basicas['fim_prazo']) != "" and str(dic_inf_basicas['fim_prazo']) != None:
127        tmp+='\t\t<para style="P2"><b>Data do fim do prazo: </b> ' + str(dic_inf_basicas['fim_prazo']) + '</para>\n'
128
129    if dic_inf_basicas['mat_complementar'] == 0:
130        tmp+='\t\t<para style="P2"><b>Matéria Complementar:</b> Não</para>\n'
131    else:
132        tmp+='\t\t<para style="P2"><b>Matéria Complementar:</b> Sim</para>\n'
133
134    if dic_inf_basicas['polemica'] == 0:
135        tmp+='\t\t<para style="P2"><b>Polêmica:</b> Não</para>\n'
136    else:
137        tmp+='\t\t<para style="P2"><b>Polêmica:</b> Sim</para>\n'
138
139    apelido = dic_inf_basicas['apelido']
140    if apelido != "" and apelido != None:
141        tmp+='\t\t<para style="P2"><b>Apelido: </b> ' + apelido.replace('&','&amp;') + '</para>\n'
142
143    indexacao = dic_inf_basicas['indexacao']
144    if indexacao != "" and indexacao != None:
145        tmp+='\t\t<para style="P2"><b>Indexação: </b> ' + indexacao.replace('&','&amp;') + '</para>\n'
146
147    observacao = dic_inf_basicas['observacao']
148    if observacao != "" and observacao != None:
149        tmp+='\t\t<para style="P2"><b>Observação: </b> ' + observacao.replace('&','&amp;') + '</para>\n'
150
151    return tmp
152
153def orig_externa(dic_orig_externa):
154    """
155    Função que gera o código rml da origem externa
156    """
157
158    tmp=''
159    tmp+='\t\t<para style="P1">Origem Externa</para>\n'
160    try:
161        if dic_orig_externa['local'] != "" and dic_orig_externa['local'] != None:
162            tmp+='\t\t<para style="P2"><b>Local:</b> ' + dic_orig_externa['local'] + '</para>\n'
163
164        if dic_orig_externa['data'] != "" and dic_orig_externa['data'] != None:
165            tmp+='\t\t<para style="P2"><b>Data:</b> ' + dic_orig_externa['data'] + '</para>\n'
166
167        if dic_orig_externa['tipo'] != "" and dic_orig_externa['tipo'] != None:
168            tmp+='\t\t<para style="P2"><b>Tipo:</b> ' + dic_orig_externa['tipo'] + '</para>\n'
169
170        if dic_orig_externa['numero_ano'] != "" and dic_orig_externa['numero_ano'] != None:
171            tmp+='\t\t<para style="P2"><b>Número/Ano:</b> ' + dic_orig_externa['numero_ano'] + '</para>\n'
172    except: pass
173
174    return tmp
175
176def mat_anexadas(lst_mat_anexadas):
177
178    tmp=''
179    tmp+='\t\t<para style="P1">Matérias Anexadas</para>\n'
180    for dic_mat in  lst_mat_anexadas:
181        if dic_mat['nom_mat']!="" and dic_mat['nom_mat']!= None:
182            tmp+='\t\t<para style="P2"><b>Nome da matéria:</b> ' + dic_mat['nom_mat'] + '</para>\n'
183            tmp+='\t\t<para style="P2"><b>Data:</b> ' + dic_mat['data'] + '</para>\n'
184            tmp+='\t\t<para style="P2"><b>Data final:</b> ' + str(dic_mat['data_fim']) + '</para>\n'
185    return tmp
186
187def autoria(lst_autoria):
188
189    tmp=''
190    tmp+='\t\t<para style="P1">Autores</para>\n'
191    for dic_autor in lst_autoria:
192        if dic_autor['nom_autor'] != "" and dic_autor['nom_autor'] != None:
193            tmp+='\t\t<para style="P2"><b>Nome do Autor:</b> ' + dic_autor['nom_autor'] + '</para>\n'
194
195        if dic_autor['nom_autor'] != "" and dic_autor['cargo'] != None:
196            tmp+='\t\t<para style="P2"><b>Cargo:</b> ' + dic_autor['cargo'] + '</para>\n'
197
198        if dic_autor['nom_autor'] != "" and dic_autor['tipo'] != None:
199            tmp+='\t\t<para style="P2"><b>Tipo:</b> ' + dic_autor['tipo'] + '</para>\n'
200    return tmp
201
202def despachos_iniciais(lst_des_iniciais):
203
204    tmp=''
205    tmp+='\t\t<para style="P1">Despachos Iniciais</para>\n'
206    for dic_dados in lst_des_iniciais:
207        if dic_dados['nom_comissao']==None:
208            dic_dados['nom_comissao']=" "
209        tmp+='\t\t<para style="P2"><b>Nome da comissão:</b> ' + dic_dados['nom_comissao'] + '</para>\n'
210    return tmp
211
212def tramitacoes(dic_tramitacoes):
213
214    tmp=''
215    tmp+='\t\t<para style="P1">Última Tramitação</para>\n'
216    try:
217        tmp+='\t\t<para style="P2"><b>Data Ação:</b> ' + str(dic_tramitacoes['data']) + '</para>\n'
218        tmp+='\t\t<para style="P2"><b>Unidade Local:</b> ' + dic_tramitacoes['unidade'] + '</para>\n'
219        tmp+='\t\t<para style="P2"><b>Encaminhada em:</b> ' + str(dic_tramitacoes['data_enc']) + '</para>\n'
220        tmp+='\t\t<para style="P2"><b>Destino:</b> ' + dic_tramitacoes['destino'] + '</para>\n'
221        tmp+='\t\t<para style="P2"><b>Turno:</b> ' + dic_tramitacoes['turno'] + '</para>\n'
222        tmp+='\t\t<para style="P2"><b>Status:</b> ' + dic_tramitacoes['status'] + '</para>\n'
223        if dic_tramitacoes['urgente']==0:
224            tmp+='\t\t<para style="P2"><b>Urgente:</b> Não</para>\n'
225        else:
226            tmp+='\t\t<para style="P2"><b>Urgente:</b> Sim</para>\n'
227
228        tmp+='\t\t<para style="P2"><b>Data do fim do prazo:</b> ' + str(dic_tramitacoes['data_fim']) + '</para>\n'
229        if dic_tramitacoes['texto_acao'] != "" and dic_tramitacoes['texto_acao'] != None :
230            tmp+='\t\t<para style="P2"><b>Texto da Ação:</b> ' + dic_tramitacoes['texto_acao'].replace('&','&amp;') + '</para>\n'
231
232    except: pass
233    return tmp
234
235def relatorias(lst_relatorias):
236
237    tmp=''
238    tmp+='\t\t<para style="P1">Relatorias</para>\n'
239    for dic_comissao in lst_relatorias:
240        tmp+='\t\t<para style="P2"><b>Comissão:</b> ' + dic_comissao['nom_comissao'] + '</para>\n'
241        tmp+='\t\t<para style="P2"><b>Data Designação:</b> ' + str(dic_comissao['data_desig']) + '</para>\n'
242        tmp+='\t\t<para style="P2"><b>Parlamentar:</b> ' + dic_comissao['parlamentar'] + '</para>\n'
243        tmp+='\t\t<para style="P2"><b>Data Destituição:</b> ' + str(dic_comissao['data_dest']) + '</para>\n'
244        tmp+='\t\t<para style="P2"><b>Motivo Fim Relatoria:</b> ' + dic_comissao['motivo'] + '</para>\n'
245    return tmp
246
247def numeracoes(lst_numeracoes):
248
249    tmp=''
250    tmp+='\t\t<para style="P1">Numerações</para>\n'
251    for dic_dados in lst_numeracoes:
252        tmp+='\t\t<para style="P2"><b>Nome:</b> ' + dic_dados['nome'] + '</para>\n'
253        tmp+='\t\t<para style="P2"><b>Ano:</b> ' + str(dic_dados['ano']) + '</para>\n'
254    return tmp
255
256def legislacoes_citadas(lst_leg_citadas):
257
258    tmp=''
259    tmp+='\t\t<para style="P1">Legislações Citadas</para>\n'
260    for dic_dados in lst_leg_citadas:
261        tmp+='\t\t<para style="P2"><b>Tipo Norma:</b> ' + str(dic_dados['nome_lei']) + '</para>\n'
262        tmp+='\t\t<para style="P2"><b>Disposição:</b> ' + str(dic_dados['disposicao']) + '</para>\n'
263        tmp+='\t\t<para style="P2"><b>Parte:</b> ' + str(dic_dados['parte']) + '</para>\n'
264        tmp+='\t\t<para style="P2"><b>Livro:</b> ' + str(dic_dados['livro']) + '</para>\n'
265        tmp+='\t\t<para style="P2"><b>Tí­tulo:</b> ' + str(dic_dados['titulo']) + '</para>\n'
266        tmp+='\t\t<para style="P2"><b>Capí­tulo:</b> ' + str(dic_dados['capitulo']) + '</para>\n'
267        tmp+='\t\t<para style="P2"><b>Seção:</b> ' + str(dic_dados['secao']) + '</para>\n'
268        tmp+='\t\t<para style="P2"><b>Subseção:</b> ' + str(dic_dados['subsecao']) + '</para>\n'
269        tmp+='\t\t<para style="P2"><b>Artigo:</b> ' + str(dic_dados['artigo']) + '</para>\n'
270        tmp+='\t\t<para style="P2"><b>Parágrafo:</b> ' + str(dic_dados['paragrafo']) + '</para>\n'
271        tmp+='\t\t<para style="P2"><b>Inciso:</b> ' + str(dic_dados['inciso']) + '</para>\n'
272        tmp+='\t\t<para style="P2"><b>Alí­nea:</b> ' + str(dic_dados['alinea']) + '</para>\n'
273        tmp+='\t\t<para style="P2"><b>Item:</b> ' + str(dic_dados['item']) + '</para>\n'
274    return tmp
275
276def documentos_acessorios(lst_acessorios):
277
278    tmp=''
279    tmp+='\t\t<para style="P1">Documentos Acessórios</para>\n'
280    for dic_dados in lst_acessorios:
281        if dic_dados['tipo']!=None:
282            tmp+='\t\t<para style="P2"><b>Tipo:</b> ' + dic_dados['tipo'] + '</para>\n'
283
284        if dic_dados['nome']!=None:
285            tmp+='\t\t<para style="P2"><b>Nome:</b> ' + dic_dados['nome'] + '</para>\n'
286
287        tmp+='\t\t<para style="P2"><b>Data:</b> ' + dic_dados['data'] + '</para>\n'
288        if dic_dados['autor']!=None:
289            tmp+='\t\t<para style="P2"><b>Autor:</b> ' + dic_dados['autor'] + '</para>\n'
290
291        if dic_dados['ementa']!=None:
292            tmp+='\t\t<para style="P2"><b>Ementa:</b> ' + dic_dados['ementa'].replace('&','&amp;') + '</para>\n'
293        if dic_dados['indexacao']!=None:
294            tmp+='\t\t<para style="P2"><b>Ementa:</b> ' + dic_dados['indexacao'].replace('&','&amp;') + '</para>\n'
295    return tmp
296
297def principal(imagem, dic_rodape,dic_inf_basicas,dic_orig_externa,lst_mat_anexadas,lst_autoria,lst_des_iniciais,
298              dic_tramitacoes,lst_relatorias,lst_numeracoes,lst_leg_citadas,lst_acessorios,sessao=''):
299    """
300    Função principal responsável por chamar as funções que irão gerar o código rml apropriado
301    """
302
303    arquivoPdf=str(int(time.time()*100))+".pdf"
304
305    tmp=''
306    tmp+='<?xml version="1.0" encoding="utf-8" standalone="no" ?>\n'
307    tmp+='<!DOCTYPE document SYSTEM "rml_1_0.dtd">\n'
308    tmp+='<document filename="relatorio.pdf">\n'
309    tmp+='\t<template pageSize="(21cm, 29.7cm)" title="Relatorio de Materias" author="Interlegis" allowSplitting="20">\n'
310    tmp+='\t\t<pageTemplate id="first">\n'
311    tmp+='\t\t\t<pageGraphics>\n'
312    tmp+=cabecalho(dic_inf_basicas,imagem)
313    tmp+=rodape(dic_rodape)
314    tmp+='\t\t\t</pageGraphics>\n'
315    tmp+='\t\t\t<frame id="first" x1="2cm" y1="4cm" width="17cm" height="20.5cm"/>\n'
316    tmp+='\t\t</pageTemplate>\n'
317    tmp+='\t</template>\n'
318    tmp+=paraStyle()
319    tmp+='\t<story>\n'
320    tmp+=inf_basicas(dic_inf_basicas)
321    tmp+=orig_externa(dic_orig_externa)
322    tmp+=mat_anexadas(lst_mat_anexadas)
323    tmp+=autoria(lst_autoria)
324    tmp+=despachos_iniciais(lst_des_iniciais)
325    tmp+=tramitacoes(dic_tramitacoes)
326    tmp+=relatorias(lst_relatorias)
327    tmp+=numeracoes(lst_numeracoes)
328    tmp+=legislacoes_citadas(lst_leg_citadas)
329    tmp+=documentos_acessorios(lst_acessorios)
330    tmp+='\t</story>\n'
331    tmp+='</document>\n'
332    tmp_pdf=parseString(tmp)
333
334    if hasattr(context.temp_folder,arquivoPdf):
335        context.temp_folder.manage_delObjects(ids=arquivoPdf)
336    context.temp_folder.manage_addFile(arquivoPdf)
337    arq=context.temp_folder[arquivoPdf]
338    arq.manage_edit(title='Arquivo PDF temporário.',filedata=tmp_pdf,content_type='application/pdf')
339
340#   try: 
341#     tmp_pdf=parseString(unicode(tmp, 'utf-8')) 
342#   except: 
343#     tmp_pdf=parseString(unicode(tmp, 'utf-8'))
344
345    return "/temp_folder/"+arquivoPdf
346
347return principal(imagem, dic_rodape,dic_inf_basicas,dic_orig_externa,lst_mat_anexadas,lst_autoria,lst_des_iniciais,
348                 dic_tramitacoes,lst_relatorias,lst_numeracoes,lst_leg_citadas,lst_acessorios,sessao)
Note: Veja TracBrowser para ajuda no uso do navegador do trac.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.