diff --git a/base/views.py b/base/views.py index 59dd2a43b..8a80676d7 100644 --- a/base/views.py +++ b/base/views.py @@ -29,41 +29,41 @@ class HelpView(TemplateView): return ['ajuda/%s.html' % self.kwargs['topic']] -ESTADOS = ["", - "AC", - "AL", - "AM", - "AP", - "BA", - "CE", - "DF", - "ES", - "GO", - "MA", - "MG", - "MS", - "MT", - "PA", - "PB", - "PE", - "PI", - "PR", - "RJ", - "RN", - "RO", - "RR", - "RS", - "SC", - "SE", - "SP", - "TO"] +ESTADOS = {"": "", + "AC": "ACRE", + "AL": "ALAGOAS", + "AM": "AMAZONAS", + "AP": "AMAPÁ", + "BA": "BAHIA", + "CE": "CEARÁ", + "DF": "DISTRITO FEDERAL", + "ES": "ESPíRITO SANTO", + "GO": "GOIÁS", + "MA": "MARANHÃO", + "MG": "MINAS GERAIS", + "MS": "MATO GROSSO DO SUL", + "MT": "MATO GROSSO", + "PA": "PARÁ", + "PB": "PARAÍBA", + "PE": "PERNAMBUCO", + "PI": "PIAUÍ", + "PR": "PARANÁ", + "RJ": "RIO DE JANEIRO", + "RN": "RIO GRANDE DO NORTE", + "RO": "RONDÔNIA", + "RR": "RORAIMA", + "RS": "RIO GRANDE DO SUL", + "SC": "SANTA CATARINA", + "SE": "SERGIPE", + "SP": "SÃO PAULO", + "TO": "TOCANTINS"} class CasaLegislativaTabelaAuxForm(ModelForm): uf = forms.ChoiceField(required=True, label='UF', - choices=[(a, a) for a in ESTADOS], + choices=[(uf, uf) for uf in ESTADOS.keys()], widget=forms.Select( attrs={'class': 'selector'})) diff --git a/comissoes/urls.py b/comissoes/urls.py index 68df16eea..4415c0283 100644 --- a/comissoes/urls.py +++ b/comissoes/urls.py @@ -3,9 +3,9 @@ from django.conf.urls import include, url from comissoes.views import (CadastrarComissaoView, ComissaoParlamentarEditView, ComissaoParlamentarIncluirView, ComposicaoView, - MateriasView, ReunioesView, cargo_crud, - comissao_crud, periodo_composicao_crud, - tipo_comissao_crud, MateriasTramitacaoListView) + MateriasTramitacaoListView, MateriasView, + ReunioesView, cargo_crud, comissao_crud, + periodo_composicao_crud, tipo_comissao_crud) comissao_url_patterns = comissao_crud.urlpatterns + [ url(r'^(?P\d+)/composicao$', diff --git a/comissoes/views.py b/comissoes/views.py index 66c1be4e4..9268d6794 100644 --- a/comissoes/views.py +++ b/comissoes/views.py @@ -1,4 +1,3 @@ -import sapl from crispy_forms.helper import FormHelper from crispy_forms.layout import ButtonHolder, Fieldset, Layout, Submit from django import forms @@ -8,13 +7,15 @@ from django.forms import ModelForm from django.utils.translation import ugettext_lazy as _ from django.views.generic import ListView from django.views.generic.edit import FormMixin +from vanilla import GenericView + +import sapl +from materia.models import Tramitacao from parlamentares.models import Filiacao from sapl.crud import build_crud -from vanilla import GenericView from .models import (CargoComissao, Comissao, Composicao, Participacao, Periodo, TipoComissao) -from materia.models import Tramitacao cargo_crud = build_crud( CargoComissao, 'cargo_comissao', [ diff --git a/qa_check.sh b/qa_check.sh index 0015ab373..8cdd35116 100755 --- a/qa_check.sh +++ b/qa_check.sh @@ -3,5 +3,5 @@ # QA checks: run this before every commit ./manage.py check -flake8 --exclude='ipython_log.py*,migrations' . -isort --check-only --skip='migrations' --skip='ipython_log.py' -rc . +flake8 --exclude='ipython_log.py*,migrations,templates' . +isort --check-only --skip='migrations' --skip='templates' --skip='ipython_log.py' -rc . diff --git a/relatorios/__init__.py b/relatorios/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/relatorios/admin.py b/relatorios/admin.py new file mode 100644 index 000000000..4185d360e --- /dev/null +++ b/relatorios/admin.py @@ -0,0 +1,3 @@ +# from django.contrib import admin + +# Register your models here. diff --git a/relatorios/migrations/__init__.py b/relatorios/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/relatorios/models.py b/relatorios/models.py new file mode 100644 index 000000000..0b4331b36 --- /dev/null +++ b/relatorios/models.py @@ -0,0 +1,3 @@ +# from django.db import models + +# Create your models here. diff --git a/relatorios/templates/mensagem_emitir_proc.dtml b/relatorios/templates/mensagem_emitir_proc.dtml new file mode 100644 index 000000000..6bf1f70fc --- /dev/null +++ b/relatorios/templates/mensagem_emitir_proc.dtml @@ -0,0 +1,9 @@ + + + + diff --git a/relatorios/templates/pdf_capa_processo_gerar.py b/relatorios/templates/pdf_capa_processo_gerar.py new file mode 100755 index 000000000..dcd2607c4 --- /dev/null +++ b/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\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\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\n' + + for dic in lst_protocolos: + #condicao para a quebra de pagina + tmp_data+='\t\t\n' + + #protocolos + tmp_data+='\t\t' +dic['titulo']+ '\n' + tmp_data+='\t\tProtocolo: ' +dic['titulo']+ '\n' + tmp_data+='\t\t'+ dic['data']+ '\n' + tmp_data+='\t\t'+dic['numeracao']+'\n' + tmp_data+='\t\t'+dic['sgl_processo']+' '+dic['ident_processo']+ ' '+dic['num_processo']+ '\n' + tmp_data+='\t\tAutor: ' +dic['nom_autor']+ '\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + tmp_data+='\t\tEmenta: ' +dic['txt_assunto']+ '\n' + + tmp_data+='\t\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+='\n' + tmp_data+='\n' + tmp_data+='\n' + tmp_data+='\t\n' + tmp_data+=paraStyle() + tmp_data+=protocolos(lst_protocolos) + tmp_data+='\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) diff --git a/relatorios/templates/pdf_capa_processo_preparar_pysc.py b/relatorios/templates/pdf_capa_processo_preparar_pysc.py new file mode 100755 index 000000000..789c2a50d --- /dev/null +++ b/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° ' +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) diff --git a/relatorios/templates/pdf_detalhe_materia_gerar.py b/relatorios/templates/pdf_detalhe_materia_gerar.py new file mode 100755 index 000000000..6caf197ea --- /dev/null +++ b/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\n' + tmp+='\t\t\t\t2cm 24.5cm 19cm 24.5cm\n' + if dic_inf_basicas['nom_camara']!="" and dic_inf_basicas['nom_camara']!=None: + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + dic_inf_basicas['nom_camara'] + '\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\tSistema de Apoio ao Processo Legislativo\n' + if str(dic_inf_basicas['nom_projeto']) != "" and str(dic_inf_basicas['nom_projeto']) != None: + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + str(dic_inf_basicas['nom_projeto']) + '\n' + if str(dic_inf_basicas['cod_projeto']) != "" and str(dic_inf_basicas['cod_projeto']) != None: + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + str(dic_inf_basicas['cod_projeto']) + '\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\t2cm 3.2cm 19cm 3.2cm\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + data_emissao + '\n' + tmp+='\t\t\t\tPágina \n' + tmp+='\t\t\t\t' + linha1 + '\n' + tmp+='\t\t\t\t' + linha2 + '\n' + + return tmp + +def paraStyle(): + """Função que gera o código rml que define o estilo dos parágrafos""" + + tmp='' + tmp+='\t\n' + tmp+='\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\n' + #titulo do parágrafo: é por default centralizado + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\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' + texto_projeto.replace('&','&') + '\n' + + #início das informações básicas + tmp+='\t\tInformações Básicas\n' + if str(dic_inf_basicas['apresentada']) != "" and str(dic_inf_basicas['apresentada']) != None: + tmp+='\t\tApresentada em: ' + str(dic_inf_basicas['apresentada']) + '\n' + + if str(dic_inf_basicas['formato']) != "" and str(dic_inf_basicas['formato']) != None: + tmp+='\t\tFormato: ' + str(dic_inf_basicas['formato']) + '\n' + + if dic_inf_basicas['publicada']==0: + tmp+='\t\tPublicada: Não\n' + else: + tmp+='\t\tPublicada: Sim\n' + + if str(dic_inf_basicas['objeto']) != "" and str(dic_inf_basicas['objeto']) != None: + tmp+='\t\tObjeto: ' + str(dic_inf_basicas['objeto']) + '\n' + + if dic_inf_basicas['tramitacao']==0: + tmp+='\t\tTramitação: Não\n' + else: + tmp+='\t\tTramitação: Sim\n' + + if str(dic_inf_basicas['reg_tramitacao']) != "" and str(dic_inf_basicas['reg_tramitacao']) != None: + tmp+='\t\tRegime: ' + str(dic_inf_basicas['reg_tramitacao']) + '\n' + + if str(dic_inf_basicas['prazo']) != "" and str(dic_inf_basicas['prazo']) != None: + tmp+='\t\tDias de prazo: ' + str(dic_inf_basicas['prazo']) + '\n' + + if str(dic_inf_basicas['fim_prazo']) != "" and str(dic_inf_basicas['fim_prazo']) != None: + tmp+='\t\tData do fim do prazo: ' + str(dic_inf_basicas['fim_prazo']) + '\n' + + if dic_inf_basicas['mat_complementar'] == 0: + tmp+='\t\tMatéria Complementar: Não\n' + else: + tmp+='\t\tMatéria Complementar: Sim\n' + + if dic_inf_basicas['polemica'] == 0: + tmp+='\t\tPolêmica: Não\n' + else: + tmp+='\t\tPolêmica: Sim\n' + + apelido = dic_inf_basicas['apelido'] + if apelido != "" and apelido != None: + tmp+='\t\tApelido: ' + apelido.replace('&','&') + '\n' + + indexacao = dic_inf_basicas['indexacao'] + if indexacao != "" and indexacao != None: + tmp+='\t\tIndexação: ' + indexacao.replace('&','&') + '\n' + + observacao = dic_inf_basicas['observacao'] + if observacao != "" and observacao != None: + tmp+='\t\tObservação: ' + observacao.replace('&','&') + '\n' + + return tmp + +def orig_externa(dic_orig_externa): + """ + Função que gera o código rml da origem externa + """ + + tmp='' + tmp+='\t\tOrigem Externa\n' + try: + if dic_orig_externa['local'] != "" and dic_orig_externa['local'] != None: + tmp+='\t\tLocal: ' + dic_orig_externa['local'] + '\n' + + if dic_orig_externa['data'] != "" and dic_orig_externa['data'] != None: + tmp+='\t\tData: ' + dic_orig_externa['data'] + '\n' + + if dic_orig_externa['tipo'] != "" and dic_orig_externa['tipo'] != None: + tmp+='\t\tTipo: ' + dic_orig_externa['tipo'] + '\n' + + if dic_orig_externa['numero_ano'] != "" and dic_orig_externa['numero_ano'] != None: + tmp+='\t\tNúmero/Ano: ' + dic_orig_externa['numero_ano'] + '\n' + except: pass + + return tmp + +def mat_anexadas(lst_mat_anexadas): + + tmp='' + tmp+='\t\tMatérias Anexadas\n' + for dic_mat in lst_mat_anexadas: + if dic_mat['nom_mat']!="" and dic_mat['nom_mat']!= None: + tmp+='\t\tNome da matéria: ' + dic_mat['nom_mat'] + '\n' + tmp+='\t\tData: ' + dic_mat['data'] + '\n' + tmp+='\t\tData final: ' + str(dic_mat['data_fim']) + '\n' + return tmp + +def autoria(lst_autoria): + + tmp='' + tmp+='\t\tAutores\n' + for dic_autor in lst_autoria: + if dic_autor['nom_autor'] != "" and dic_autor['nom_autor'] != None: + tmp+='\t\tNome do Autor: ' + dic_autor['nom_autor'] + '\n' + + if dic_autor['nom_autor'] != "" and dic_autor['cargo'] != None: + tmp+='\t\tCargo: ' + dic_autor['cargo'] + '\n' + + if dic_autor['nom_autor'] != "" and dic_autor['tipo'] != None: + tmp+='\t\tTipo: ' + dic_autor['tipo'] + '\n' + return tmp + +def despachos_iniciais(lst_des_iniciais): + + tmp='' + tmp+='\t\tDespachos Iniciais\n' + for dic_dados in lst_des_iniciais: + if dic_dados['nom_comissao']==None: + dic_dados['nom_comissao']=" " + tmp+='\t\tNome da comissão: ' + dic_dados['nom_comissao'] + '\n' + return tmp + +def tramitacoes(dic_tramitacoes): + + tmp='' + tmp+='\t\tÚltima Tramitação\n' + try: + tmp+='\t\tData Ação: ' + str(dic_tramitacoes['data']) + '\n' + tmp+='\t\tUnidade Local: ' + dic_tramitacoes['unidade'] + '\n' + tmp+='\t\tEncaminhada em: ' + str(dic_tramitacoes['data_enc']) + '\n' + tmp+='\t\tDestino: ' + dic_tramitacoes['destino'] + '\n' + tmp+='\t\tTurno: ' + dic_tramitacoes['turno'] + '\n' + tmp+='\t\tStatus: ' + dic_tramitacoes['status'] + '\n' + if dic_tramitacoes['urgente']==0: + tmp+='\t\tUrgente: Não\n' + else: + tmp+='\t\tUrgente: Sim\n' + + tmp+='\t\tData do fim do prazo: ' + str(dic_tramitacoes['data_fim']) + '\n' + if dic_tramitacoes['texto_acao'] != "" and dic_tramitacoes['texto_acao'] != None : + tmp+='\t\tTexto da Ação: ' + dic_tramitacoes['texto_acao'].replace('&','&') + '\n' + + except: pass + return tmp + +def relatorias(lst_relatorias): + + tmp='' + tmp+='\t\tRelatorias\n' + for dic_comissao in lst_relatorias: + tmp+='\t\tComissão: ' + dic_comissao['nom_comissao'] + '\n' + tmp+='\t\tData Designação: ' + str(dic_comissao['data_desig']) + '\n' + tmp+='\t\tParlamentar: ' + dic_comissao['parlamentar'] + '\n' + tmp+='\t\tData Destituição: ' + str(dic_comissao['data_dest']) + '\n' + tmp+='\t\tMotivo Fim Relatoria: ' + dic_comissao['motivo'] + '\n' + return tmp + +def numeracoes(lst_numeracoes): + + tmp='' + tmp+='\t\tNumerações\n' + for dic_dados in lst_numeracoes: + tmp+='\t\tNome: ' + dic_dados['nome'] + '\n' + tmp+='\t\tAno: ' + str(dic_dados['ano']) + '\n' + return tmp + +def legislacoes_citadas(lst_leg_citadas): + + tmp='' + tmp+='\t\tLegislações Citadas\n' + for dic_dados in lst_leg_citadas: + tmp+='\t\tTipo Norma: ' + str(dic_dados['nome_lei']) + '\n' + tmp+='\t\tDisposição: ' + str(dic_dados['disposicao']) + '\n' + tmp+='\t\tParte: ' + str(dic_dados['parte']) + '\n' + tmp+='\t\tLivro: ' + str(dic_dados['livro']) + '\n' + tmp+='\t\tTí­tulo: ' + str(dic_dados['titulo']) + '\n' + tmp+='\t\tCapí­tulo: ' + str(dic_dados['capitulo']) + '\n' + tmp+='\t\tSeção: ' + str(dic_dados['secao']) + '\n' + tmp+='\t\tSubseção: ' + str(dic_dados['subsecao']) + '\n' + tmp+='\t\tArtigo: ' + str(dic_dados['artigo']) + '\n' + tmp+='\t\tParágrafo: ' + str(dic_dados['paragrafo']) + '\n' + tmp+='\t\tInciso: ' + str(dic_dados['inciso']) + '\n' + tmp+='\t\tAlí­nea: ' + str(dic_dados['alinea']) + '\n' + tmp+='\t\tItem: ' + str(dic_dados['item']) + '\n' + return tmp + +def documentos_acessorios(lst_acessorios): + + tmp='' + tmp+='\t\tDocumentos Acessórios\n' + for dic_dados in lst_acessorios: + if dic_dados['tipo']!=None: + tmp+='\t\tTipo: ' + dic_dados['tipo'] + '\n' + + if dic_dados['nome']!=None: + tmp+='\t\tNome: ' + dic_dados['nome'] + '\n' + + tmp+='\t\tData: ' + dic_dados['data'] + '\n' + if dic_dados['autor']!=None: + tmp+='\t\tAutor: ' + dic_dados['autor'] + '\n' + + if dic_dados['ementa']!=None: + tmp+='\t\tEmenta: ' + dic_dados['ementa'].replace('&','&') + '\n' + if dic_dados['indexacao']!=None: + tmp+='\t\tEmenta: ' + dic_dados['indexacao'].replace('&','&') + '\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+='\n' + tmp+='\n' + tmp+='\n' + tmp+='\t\n' + tmp+=paraStyle() + tmp+='\t\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\n' + tmp+='\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) diff --git a/relatorios/templates/pdf_detalhe_materia_preparar_pysc.py b/relatorios/templates/pdf_detalhe_materia_preparar_pysc.py new file mode 100644 index 000000000..f28adccb1 --- /dev/null +++ b/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+ "nº"+ numeracao.num_materia + dic_dados['ano']= numeracao.ano_materia + lst_numeracoes.append(dic_dados) + + +# #o bloco abaixo gera o dicionário de legislacoes citadas(132) + + lst_legis_citadas = [] + dic_dados = {} + for legislacao in context.zsql.legislacao_citada_obter_zsql(cod_materia = materia.cod_materia): + norma = context.zsql.norma_juridica_obter_zsql(cod_norma = legislacao.cod_norma_sel) + dic_dados['nome_lei']= str(norma[0].tip_norma_sel) + " nº"+ str(norma[0].num_norma) + " de"+ str(norma[0].ano_norma) + dic_dados['disposicao']= legislacao.des_disposicoes + dic_dados['parte']= legislacao.des_parte + dic_dados['livro']= legislacao.des_livro + dic_dados['titulo']= legislacao.des_titulo + dic_dados['capitulo']= legislacao.des_capitulo + dic_dados['secao']= legislacao.des_secao + dic_dados['subsecao']= legislacao.des_subsecao + dic_dados['artigo']= legislacao.des_artigo + dic_dados['paragrafo']= legislacao.des_paragrafo + dic_dados['inciso']= legislacao.des_inciso + dic_dados['alinea']= legislacao.des_alinea + dic_dados['item']= legislacao.des_item + lst_legis_citadas.append(dic_dados) + + +# #o bloco abaixo gera o dicionario de Documentos Acessórios(153) + + lst_acessorios = [] + for documento in context.zsql.documento_acessorio_obter_zsql(cod_materia = materia.cod_materia): + dic_dados = {} + dic_dados['tipo']= documento.tip_documento + dic_dados['nome']= documento.nom_documento + dic_dados['data']= documento.dat_documento + dic_dados['autor']= documento.nom_autor_documento + dic_dados['ementa']= documento.txt_ementa + dic_dados['indexacao']= documento.txt_indexacao + lst_acessorios.append(dic_dados) + +caminho=context.pdf_detalhe_materia_gerar(imagem, rodape,inf_basicas_dic,orig_externa_dic,lst_mat_anexadas,lst_autoria, + lst_des_iniciais,dic_tramitacoes,lst_relatorias,lst_numeracoes, + lst_legis_citadas,lst_acessorios,sessao=session.id) +if caminho=='aviso': + return response.redirect('mensagem_emitir_proc') +else: + response.redirect(caminho) diff --git a/relatorios/templates/pdf_documento_administrativo_gerar.py b/relatorios/templates/pdf_documento_administrativo_gerar.py new file mode 100755 index 000000000..78c6437f8 --- /dev/null +++ b/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\n' + tmp_data+='\t\t\t\t2cm 25.4cm 19cm 25.4cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + dic_cabecalho['nom_casa'] + '\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\tSistema de Apoio ao Processo Legislativo\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\tRelatório de Documentos Administrativos\n' + + return tmp_data + +def rodape(lst_rodape): + """Gera o codigo rml do rodape""" + + tmp_data='' + tmp_data+='\t\t\t\t2cm 3.2cm 19cm 3.2cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + lst_rodape[2] + '\n' + tmp_data+='\t\t\t\tPágina \n' + tmp_data+='\t\t\t\t' + lst_rodape[0] + '\n' + tmp_data+='\t\t\t\t' + lst_rodape[1] + '\n' + + return tmp_data + +def paraStyle(): + """Gera o codigo rml que define o estilo dos paragrafos""" + + tmp_data='' + tmp_data+='\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\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\n' + + for dic in lst_documentos: + #espaco inicial + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + + #condicao para a quebra de pagina + tmp_data+='\t\t\n' + + #materias + if dic['titulo']!=None: + tmp_data+='\t\t' + dic['titulo'] + '\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + if dic['txt_assunto']!=None: + txt_assunto = dic['txt_assunto'].replace('&','&') + tmp_data+='\t\t' + txt_assunto + '\n' + + if dic['txt_interessado']!=None: + tmp_data+='\t\tInteressado: ' + dic['txt_interessado'] + '\n' + if dic['localizacao_atual']!=None: + tmp_data+='\t\tLocalização Atual: ' + dic['localizacao_atual'] + '\n' + if dic['des_situacao']!=None: + tmp_data+='\t\tSituação: ' + dic['des_situacao'] + '\n' + if dic['ultima_acao']!=None: + tmp_data+='\t\tÚltima Ação: ' + dic['ultima_acao'] + '\n' + + tmp_data+='\t\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+='\n' + tmp_data+='\n' + tmp_data+='\n' + tmp_data+='\t\n' + tmp_data+=paraStyle() + tmp_data+=documentos(lst_documentos) + tmp_data+='\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) diff --git a/relatorios/templates/pdf_documento_administrativo_preparar_pysc.py b/relatorios/templates/pdf_documento_administrativo_preparar_pysc.py new file mode 100755 index 000000000..d94a9ef21 --- /dev/null +++ b/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) diff --git a/relatorios/templates/pdf_espelho_gerar.py b/relatorios/templates/pdf_espelho_gerar.py new file mode 100644 index 000000000..c85cfb266 --- /dev/null +++ b/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\n' + tmp_data+='\t\t\t\t2cm 25cm 19cm 25cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + dic_cabecalho['nom_casa'] + '\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + dic_cabecalho['nom_estado'] + '\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\tSECRETARIA\n' + return tmp_data + +def rodape(lst_rodape): + """Gera o codigo rml do rodape""" + tmp_data='' + tmp_data+='\t\t\t\t2cm 3.2cm 19cm 3.2cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + lst_rodape[2] + '\n' + tmp_data+='\t\t\t\t' + lst_rodape[0] + '\n' + tmp_data+='\t\t\t\t' + lst_rodape[1] + '\n' + return tmp_data + +def paraStyle(): + """Gera o codigo rml que define o estilo dos paragrafos""" + tmp_data='' + tmp_data+='\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\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\n' + + for dic in lst_materias: + #espaco inicial +# tmp_data+='\t\t\n' +# tmp_data+='\t\t\t \n' +# tmp_data+='\t\t\n' +# tmp_data+='\t\t\n' +# tmp_data+='\t\t\t \n' +# tmp_data+='\t\t\n' + + #condicao para a quebra de pagina + tmp_data+='\t\t\n' + + #materias +# if dic['titulo']!=None: +# tmp_data+='\t\t' + dic['titulo'] + '\n' +# tmp_data+='\t\t\n' +# tmp_data+='\t\t\t \n' +# tmp_data+='\t\t\n' + + if dic['materia']!=None: + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + tmp_data+='\t\tINDICAÇÃO: ' + dic['materia'] + '\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + + if dic['dat_apresentacao']!=None: + tmp_data+='\t\tDATA DE ENTRADA: ' + dic['dat_apresentacao'] + '\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + + if dic['nom_autor']!=None: + tmp_data+='\t\tAUTOR: ' + dic['nom_autor'] + '\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + + if dic['txt_ementa']!=None: + txt_ementa = dic['txt_ementa'].replace('&','&') + tmp_data+='\t\tEMENTA: ' + dic['txt_ementa'] + '\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + + tmp_data+='\t\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+='\n' + tmp_data+='\n' + tmp_data+='\n' + tmp_data+='\t\n' + tmp_data+=paraStyle() + tmp_data+=materias(lst_materias) + tmp_data+='\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) diff --git a/relatorios/templates/pdf_espelho_preparar_pysc.py b/relatorios/templates/pdf_espelho_preparar_pysc.py new file mode 100644 index 000000000..6dc4a8662 --- /dev/null +++ b/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) diff --git a/relatorios/templates/pdf_etiqueta_protocolo_gerar.py b/relatorios/templates/pdf_etiqueta_protocolo_gerar.py new file mode 100755 index 000000000..f78318883 --- /dev/null +++ b/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\n' + tmp_data+='\t\t\t\t2cm 25.4cm 19cm 25.4cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + dic_cabecalho['nom_casa'] + '\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\tSistema de Apoio ao Processo Legislativo\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\tRelatório de Controle do Protocolo\n' + + return tmp_data + +def rodape(lst_rodape): + """Gera o codigo rml do rodape""" + + tmp_data='' + tmp_data+='\t\t\t\t2cm 3.2cm 19cm 3.2cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + lst_rodape[2] + '\n' + tmp_data+='\t\t\t\tPágina \n' + tmp_data+='\t\t\t\t' + lst_rodape[0] + '\n' + tmp_data+='\t\t\t\t' + lst_rodape[1] + '\n' + + return tmp_data + +def paraStyle(): + """Gera o codigo rml que define o estilo dos paragrafos""" + + tmp_data='' + tmp_data+='\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\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\n' + + for dic in lst_protocolos: + #condicao para a quebra de pagina + tmp_data+='\t\t\n' + + #protocolos + if dic['titulo']!=None: + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + tmp_data+='\t\t'+dic_cabecalho['nom_casa']+'\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + tmp_data+='\t\t' +dic['titulo']+ '\n' + tmp_data+='\t\tPROTOCOLO GERAL '+dic['titulo']+'\n' + if dic['data']!=None: + tmp_data+='\t\t'+dic['data']+'\n' + tmp_data+='\t\t'+dic['natureza']+' - '+dic['ident_processo']+'\n' + + tmp_data+='\t\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+='\n' + tmp_data+='\n' + tmp_data+='\n' + tmp_data+='\t\n' + tmp_data+=paraStyle() + tmp_data+=protocolos(lst_protocolos) + tmp_data+='\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) diff --git a/relatorios/templates/pdf_etiqueta_protocolo_preparar_pysc.py b/relatorios/templates/pdf_etiqueta_protocolo_preparar_pysc.py new file mode 100755 index 000000000..12508e9d5 --- /dev/null +++ b/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) diff --git a/relatorios/templates/pdf_materia_gerar.py b/relatorios/templates/pdf_materia_gerar.py new file mode 100755 index 000000000..c629c46e9 --- /dev/null +++ b/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\n' + tmp_data+='\t\t\t\t2cm 25cm 19cm 25cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + dic_cabecalho['nom_casa'] + '\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + dic_cabecalho['nom_estado'] + '\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\tRelatório de Matérias Legislativas\n' + + return tmp_data + +def rodape(lst_rodape): + """Gera o codigo rml do rodape""" + + tmp_data='' + tmp_data+='\t\t\t\t2cm 3.2cm 19cm 3.2cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + lst_rodape[2] + '\n' + tmp_data+='\t\t\t\tPágina \n' + tmp_data+='\t\t\t\t' + lst_rodape[0] + '\n' + tmp_data+='\t\t\t\t' + lst_rodape[1] + '\n' + + return tmp_data + +def paraStyle(): + """Gera o codigo rml que define o estilo dos paragrafos""" + + tmp_data='' + tmp_data+='\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\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\n' + + for dic in lst_materias: + #espaco inicial + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + + #condicao para a quebra de pagina + tmp_data+='\t\t\n' + + #materias + tmp_data+='\t\t '+ dic['titulo'] +' - Autor: ' + dic['nom_autor'] + ' \n' + if dic['txt_ementa']!=None: + txt_ementa = dic['txt_ementa'].replace('&','&') + tmp_data+='\t\t '+ txt_ementa +' \n' + tmp_data+='\t\tSituação: ' + dic['des_situacao'] + '/ Norma Jurídica Vinculada: ' + dic['norma_vinculada'] + '\n' + + tmp_data+='\t\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+='\n' + tmp_data+='\n' + tmp_data+='\n' + tmp_data+='\t\n' + tmp_data+=paraStyle() + tmp_data+=materias(lst_materias) + tmp_data+='\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) diff --git a/relatorios/templates/pdf_materia_preparar_pysc.py b/relatorios/templates/pdf_materia_preparar_pysc.py new file mode 100644 index 000000000..083621565 --- /dev/null +++ b/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) diff --git a/relatorios/templates/pdf_norma_gerar.py b/relatorios/templates/pdf_norma_gerar.py new file mode 100755 index 000000000..6ea85d82f --- /dev/null +++ b/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\n' + tmp_data+='\t\t\t\t2cm 25.4cm 19cm 25.4cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + dic_cabecalho['nom_casa'] + '\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\tSistema de Apoio ao Processo Legislativo\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\tRelatório de Normas Jurídicas\n' + + return tmp_data + +def rodape(lst_rodape): + """Gera o codigo rml do rodape""" + + tmp_data='' + tmp_data+='\t\t\t\t2cm 3.2cm 19cm 3.2cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + lst_rodape[2] + '\n' + tmp_data+='\t\t\t\tPágina \n' + tmp_data+='\t\t\t\t' + lst_rodape[0] + '\n' + tmp_data+='\t\t\t\t' + lst_rodape[1] + '\n' + + return tmp_data + +def paraStyle(): + """Gera o codigo rml que define o estilo dos paragrafos""" + + tmp_data='' + tmp_data+='\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\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\n' + + for dic in lst_normas: + #espaco inicial + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + + #condicao para a quebra de pagina + tmp_data+='\t\t\n' + + #normas + if dic['titulo']!=None: + tmp_data+='\t\t' + dic['titulo'] + '\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + if dic['txt_ementa']!=None: + txt_ementa = dic['txt_ementa'].replace('&','&') + tmp_data+='\t\t' + txt_ementa + '\n' + if dic['materia_vinculada']!=None: + tmp_data+='\t\tMatéria Legislativa: ' + dic['materia_vinculada'] + '\n' + + tmp_data+='\t\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+='\n' + tmp_data+='\n' + tmp_data+='\n' + tmp_data+='\t\n' + tmp_data+=paraStyle() + tmp_data+=normas(lst_normas) + tmp_data+='\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) diff --git a/relatorios/templates/pdf_norma_preparar_pysc.py b/relatorios/templates/pdf_norma_preparar_pysc.py new file mode 100755 index 000000000..a75138e91 --- /dev/null +++ b/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+" Nº "+str(norma.num_norma)+" de "+str(norma.dat_norma)+" - "+norma.des_tipo_norma + dic['txt_ementa']=norma.txt_ementa + + dic['materia_vinculada']=" " + if norma.cod_materia!=None: + for materia_vinculada in context.zsql.materia_obter_zsql(cod_materia=str(norma.cod_materia)): + dic['materia_vinculada']=materia_vinculada.sgl_tipo_materia+" "+str(materia_vinculada.num_ident_basica)+"/"+str(materia_vinculada.ano_ident_basica) + + normas.append(dic) + +filtro={} # Dicionário que conterá os dados do filtro + +# Atribuições diretas do REQUEST +filtro['numero']=REQUEST.txt_numero +filtro['ano']=REQUEST.txt_ano +filtro['assunto']=REQUEST.txt_assunto + +filtro['tipo_norma']='' +if REQUEST.lst_tip_norma!='': + for tipo_norma in context.zsql.tipo_norma_juridica_obter_zsql(ind_excluido=0, tip_norma=REQUEST.lst_tip_norma): + filtro['tipo_norma']= tipo_norma.sgl_tipo_norma + ' - ' + tipo_norma.des_tipo_norma + +sessao=session.id +caminho = context.pdf_norma_gerar(sessao,imagem,data,normas,cabecalho,rodape,filtro) +if caminho=='aviso': + return response.redirect('mensagem_emitir_proc') +else: + response.redirect(caminho) diff --git a/relatorios/templates/pdf_ordem_dia_gerar.py b/relatorios/templates/pdf_ordem_dia_gerar.py new file mode 100755 index 000000000..df315c1ac --- /dev/null +++ b/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\n' + tmp+='\t\t\t\t2cm 25cm 19cm 25cm\n' + tmp+='\t\t\t\t\n' + #tmp+='\t\t\t\t' + str(dic_cabecalho['nom_casa']) + '\n' + #tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + str(dic_cabecalho['nom_estado']) + '\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + str(dic_cabecalho['nom_casa']) + '\n' + tmp+='\t\t\t\t\n' + #tmp+='\t\t\t\t' + "Palacio 11 de Outubro" + '\n' + #tmp+='\t\t\t\t\n' + + tmp+='\t\t\t\tRelatório da Ordem do Dia\n' + + return tmp + +def rodape(lst_rodape): + """ Gera o codigo rml do rodape""" + + tmp='' + tmp+='\t\t\t\t2cm 3.2cm 19cm 3.2cm\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + lst_rodape[2] + '\n' + tmp+='\t\t\t\tPágina \n' + tmp+='\t\t\t\t' + lst_rodape[0] + '\n' + tmp+='\t\t\t\t' + lst_rodape[1] + '\n' + + return tmp + +def paraStyle(): + """ Gera o codigo rml que define o estilo dos paragrafos""" + + tmp='' + tmp+='\t\n' + tmp+='\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\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\n' + + for dicsp in lst_splen: + #espaço inicial + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + + #condicao para a quebra de pagina + tmp+='\t\t\n' + + #sessao plenaria + if dicsp['sessao']!=None: + tmp+='\t\t' + dicsp['sessao'].replace('&','&') + '\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + + if dicsp['datasessao']!=None: + tmp+='\t\t' + dicsp['datasessao'].replace('&','&') + '\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + +# tmp+='\t\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\n' + + for dic in lst_pauta: + #espaco inicial + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + + #condicao para a quebra de pagina + tmp+='\t\t\n' + + #pauta + if dic['num_ordem']!=None: + tmp+='\t\tItem nº ' + str(dic['num_ordem']) + '' + if dic['id_materia']!=None: + tmp+='\t\t' + dic['id_materia'] + '\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + if dic['txt_ementa']!=None: + tmp+='\t\t' + dic['txt_ementa'].replace('&','&') + '\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + if dic['des_numeracao']!=None: + tmp+='\t\tProcesso: ' + dic['des_numeracao'] + '\n' + if dic['des_turno']!=None: + tmp+='\t\tTurno: ' + dic['des_turno'] + '\n' + if dic['nom_autor']!=None: + tmp+='\t\tAutor: ' + dic['nom_autor'] + '\n' + if dic['des_situacao']!=None: + tmp+='\t\tSituação: ' + dic['des_situacao'] + '\n' +# if dic['des_numeracao']!=None: +# tmp+='\t\tProcesso Nº: ' + dic['des_numeracao'] + '\n' + + +# indice = 0 +# for relator in dic['lst_relator']: +# indice = indice + 1 +# if (relator != None): +# if (indice < 2): +# tmp+='\t\tRelator: ' + relator + '\n' +# else: +# tmp+='\t\t
              ' + relator + '
\n' + + tmp+='\t
\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+='\n' + tmp+='\n' + tmp+='\n' + tmp+='\t\n' + tmp+=paraStyle() +# tmp+=splen(lst_splen) + tmp+=pauta(lst_splen, lst_pauta) + tmp+='\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) diff --git a/relatorios/templates/pdf_ordem_dia_preparar_pysc.py b/relatorios/templates/pdf_ordem_dia_preparar_pysc.py new file mode 100644 index 000000000..928b1b943 --- /dev/null +++ b/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) diff --git a/relatorios/templates/pdf_pauta_sessao_gerar.py b/relatorios/templates/pdf_pauta_sessao_gerar.py new file mode 100755 index 000000000..83b00c801 --- /dev/null +++ b/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\n' + tmp+='\t\t\t\t2cm 25.4cm 19cm 25.4cm\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + str(inf_basicas_dic["nom_camara"]) + '\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\tSistema de Apoio ao Processo Legislativo\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\tPauta 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 \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\t2cm 3.2cm 19cm 3.2cm\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + data_emissao + '\n' + tmp+='\t\t\t\tPágina \n' + tmp+='\t\t\t\t' + linha1 + '\n' + tmp+='\t\t\t\t' + linha2 + '\n' + + return tmp + +def paraStyle(): + """ + """ + tmp='' + tmp+='\t\n' + tmp+='\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\n' + + tmp+='\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp +='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\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\tInformações Básicas\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + tmp+='\t\tTipo da Sessão: ' + nom_sessao + '\n' + tmp+='\t\tAbertura: ' + dat_inicio_sessao + ' - ' + hr_inicio_sessao + '\n' + + return tmp + + +def expediente_materia(lst_expediente_materia): + """ + """ + tmp = '' + tmp+='Matérias do Expediente\n\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + tmp+='\n' + tmp+='MatériaEmentaSituação\n' + for expediente_materia in lst_expediente_materia: + tmp+= '' + str(expediente_materia['num_ordem']) + ' - ' + expediente_materia['id_materia'] + '\n' + 'Autor: ' + expediente_materia['nom_autor'] +'\n' + txt_ementa = expediente_materia['txt_ementa'].replace('&','&') + tmp+='' + txt_ementa + '\n' + tmp+='' + expediente_materia['des_situacao'] + '\n' + + tmp+='\t\t\n' + return tmp + +def votacao(lst_votacao): + """ + """ + + tmp = '' + tmp+='Matérias da Ordem do Dia\n\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + tmp+='\n' + tmp+='MatériaEmentaSituação\n' + for votacao in lst_votacao: + tmp+= '' + str(votacao['num_ordem']) + ' - ' + votacao['id_materia'] + '\n' + 'Processo: ' + votacao['des_numeracao'] + '\n' + 'Turno: ' + votacao['des_turno'] + '\n' + 'Autor: ' + votacao['nom_autor'] + '\n' + tmp+='' + votacao['txt_ementa'] + '\n' + tmp+='' + votacao['des_situacao'] + '\n' + + tmp+='\t\t\n' + return tmp + +def principal(cabecalho, rodape, sessao, imagem, inf_basicas_dic): + """ + """ + + arquivoPdf=str(int(time.time()*100))+".pdf" + + tmp='' + tmp+='\n' + tmp+='\n' + tmp+='\n' + tmp+='\t\n' + tmp+=paraStyle() + tmp+='\t\n' + tmp+=inf_basicas(inf_basicas_dic) + tmp+=expediente_materia(lst_expediente_materia) + tmp+=votacao(lst_votacao) + tmp+='\t\n' + tmp+='\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) diff --git a/relatorios/templates/pdf_pauta_sessao_preparar_pysc.py b/relatorios/templates/pdf_pauta_sessao_preparar_pysc.py new file mode 100755 index 000000000..1db6443d4 --- /dev/null +++ b/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) diff --git a/relatorios/templates/pdf_protocolo_gerar.py b/relatorios/templates/pdf_protocolo_gerar.py new file mode 100755 index 000000000..62a1486a9 --- /dev/null +++ b/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\n' + tmp_data+='\t\t\t\t2cm 25.4cm 19cm 25.4cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + dic_cabecalho['nom_casa'] + '\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\tSistema de Apoio ao Processo Legislativo\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\tRelatório de Controle do Protocolo\n' + + return tmp_data + +def rodape(lst_rodape): + """Gera o codigo rml do rodape""" + + tmp_data='' + tmp_data+='\t\t\t\t2cm 3.2cm 19cm 3.2cm\n' + tmp_data+='\t\t\t\t\n' + tmp_data+='\t\t\t\t' + lst_rodape[2] + '\n' + tmp_data+='\t\t\t\tPágina \n' + tmp_data+='\t\t\t\t' + lst_rodape[0] + '\n' + tmp_data+='\t\t\t\t' + lst_rodape[1] + '\n' + + return tmp_data + +def paraStyle(): + """Gera o codigo rml que define o estilo dos paragrafos""" + + tmp_data='' + tmp_data+='\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\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\n' + + for dic in lst_protocolos: + #espaco inicial + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + + #condicao para a quebra de pagina + tmp_data+='\t\t\n' + + #protocolos + if dic['titulo']!=None: + tmp_data+='\t\tProtocolo ' + dic['titulo'] + '\n' + tmp_data+='\t\t\n' + tmp_data+='\t\t\t \n' + tmp_data+='\t\t\n' + if dic['txt_assunto']!=None: + txt_assunto = dic['txt_assunto'].replace('&','&') + tmp_data+='\t\t' + txt_assunto + '\n' + if dic['txt_interessado']!=None: + tmp_data+='\t\tInteressado: ' + dic['txt_interessado'] + '\n' + elif dic['nom_autor']!=None: + tmp_data+='\t\tAutor: ' + dic['nom_autor'] + '\n' + if dic['natureza']!=None: + tmp_data+='\t\tNatureza Processo: ' + dic['natureza'] + '\n' + if dic['processo']!=None: + tmp_data+='\t\tClassificação: ' + dic['processo'] + '\n' + if dic['data']!=None: + tmp_data+='\t\tData Protocolo: ' + dic['data'] + '\n' + if dic['anulado']!="": + tmp_data+='\t\t** PROTOCOLO ANULADO ** ' '\n' + + tmp_data+='\t\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+='\n' + tmp_data+='\n' + tmp_data+='\n' + tmp_data+='\t\n' + tmp_data+=paraStyle() + tmp_data+=protocolos(lst_protocolos) + tmp_data+='\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) diff --git a/relatorios/templates/pdf_protocolo_preparar_pysc.py b/relatorios/templates/pdf_protocolo_preparar_pysc.py new file mode 100755 index 000000000..6f53849e7 --- /dev/null +++ b/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)+' - Horário:'+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) diff --git a/relatorios/templates/pdf_sessao_plenaria_gerar.py b/relatorios/templates/pdf_sessao_plenaria_gerar.py new file mode 100644 index 000000000..a153749bc --- /dev/null +++ b/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\n' + tmp+='\t\t\t\t2cm 25.4cm 19cm 25.4cm\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + str(inf_basicas_dic["nom_camara"]) + '\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\tSistema de Apoio ao Processo Legislativo\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\tResumo 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 \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\t2cm 3.2cm 19cm 3.2cm\n' + tmp+='\t\t\t\t\n' + tmp+='\t\t\t\t' + data_emissao + '\n' + tmp+='\t\t\t\tPágina \n' + tmp+='\t\t\t\t' + linha1 + '\n' + tmp+='\t\t\t\t' + linha2 + '\n' + + return tmp + +def paraStyle(): + """ + """ + tmp='' + tmp+='\t\n' + tmp+='\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\n' + + tmp+='\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\t\n' + tmp +='\t\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\t\n' + tmp+='\t\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\tInformações Básicas\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + tmp+='\t\tTipo da Sessão: ' + nom_sessao + '\n' + tmp+='\t\tAbertura: ' + dat_inicio_sessao + ' - ' + hr_inicio_sessao + '\n' + tmp+='\t\tEncerramento: ' + dat_fim_sessao + ' - ' + hr_fim_sessao + '\n' + + return tmp + +def mesa(lst_mesa): + """ + + """ + tmp='' + tmp+='\t\tMesa Diretora\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + for mesa in lst_mesa: + tmp+='\t\t'+ str(mesa['des_cargo']) +': ' + str(mesa['nom_parlamentar']) + '/' + str(mesa['sgl_partido']) +'\n' + return tmp + +def presenca(lst_presenca_sessao): + """ + + """ + tmp = '' + tmp+='\t\tLista de Presença da Sessão\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + for presenca in lst_presenca_sessao: + tmp+='\t\t'+ str(presenca['nom_parlamentar']) + '/' + str(presenca['sgl_partido']) +'\n' + return tmp + +def expedientes(lst_expedientes): + """ + + """ + tmp = '' + tmp+='\t\tExpedientes\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + for expediente in lst_expedientes: + tmp+='\t\t' + expediente['nom_expediente'] +': \n' + '' + str(expediente['txt_expediente']) +'\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + return tmp + +def expediente_materia(lst_expediente_materia): + """ + """ + tmp = '' + tmp+='\t\tMatérias do Expediente\n\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + tmp+='\n' + tmp+='MatériaEmentaResultado da Votação\n' + for expediente_materia in lst_expediente_materia: + tmp+= '' + str(expediente_materia['num_ordem']) + ' - ' + expediente_materia['id_materia'] + '\n' + 'Turno: ' + expediente_materia['des_turno'] + '\n' + 'Autor: ' + expediente_materia['nom_autor'] +'\n' + txt_ementa = expediente_materia['txt_ementa'].replace('&','&') + tmp+='' + txt_ementa + '\n' + tmp+='' + expediente_materia['nom_resultado'] + '\n' + '' + expediente_materia['votacao_observacao'] + '\n' + + tmp+='\t\t\n' + return tmp + +def oradores_expediente(lst_oradores_expediente): + """ + + """ + tmp = '' + tmp+='\t\tOradores do Expediente\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + for orador_expediente in lst_oradores_expediente: + tmp+='\t\t'+ str(orador_expediente['num_ordem']) +' - ' + orador_expediente['nom_parlamentar'] + '/' + str(orador_expediente['sgl_partido']) +'\n' + return tmp + +def presenca_ordem_dia(lst_presenca_ordem_dia): + """ + + """ + tmp = '' + tmp+='\t\tLista de Presença da Ordem do Dia\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + for presenca_ordem_dia in lst_presenca_ordem_dia: + tmp+='\t\t'+ str(presenca_ordem_dia['nom_parlamentar']) + '/' + str(presenca_ordem_dia['sgl_partido']) +'\n' + return tmp + +def votacao(lst_votacao): + """ + """ + + tmp = '' + tmp+='Matérias da Ordem do Dia\n\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + tmp+='\n' + tmp+='MatériaEmentaResultado da Votação\n' + for votacao in lst_votacao: + tmp+= ''+ str(votacao['num_ordem']) + ' - ' + votacao['id_materia'] + '\n' + 'Turno: ' + votacao['des_turno'] + '\n' + 'Autor: ' + votacao['nom_autor'] +'\n' + txt_ementa = votacao['txt_ementa'].replace('&','&') + tmp+='' + txt_ementa + '\n' + tmp+='' + votacao['nom_resultado'] + '\n' + '' + votacao['votacao_observacao'] + '\n' + + tmp+='\t\t\n' + return tmp + +def oradores(lst_oradores): + """ + + """ + tmp = '' + tmp+='\t\tOradores das Explicações Pessoais\n' + tmp+='\t\t\n' + tmp+='\t\t\t \n' + tmp+='\t\t\n' + for orador in lst_oradores: + tmp+='\t\t'+ str(orador['num_ordem']) +' - ' + orador['nom_parlamentar'] + '/' + str(orador['sgl_partido']) +'\n' + return tmp + +def principal(cabecalho, rodape, sessao, imagem, inf_basicas_dic): + """ + """ + + arquivoPdf=str(int(time.time()*100))+".pdf" + + tmp='' + tmp+='\n' + tmp+='\n' + tmp+='\n' + tmp+='\t\n' + tmp+=paraStyle() + tmp+='\t\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\n' + tmp+='\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) diff --git a/relatorios/templates/pdf_sessao_plenaria_preparar_pysc.py b/relatorios/templates/pdf_sessao_plenaria_preparar_pysc.py new file mode 100644 index 000000000..547e34b3f --- /dev/null +++ b/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) diff --git a/relatorios/tests.py b/relatorios/tests.py new file mode 100644 index 000000000..a79ca8be5 --- /dev/null +++ b/relatorios/tests.py @@ -0,0 +1,3 @@ +# from django.test import TestCase + +# Create your tests here. diff --git a/relatorios/urls.py b/relatorios/urls.py new file mode 100644 index 000000000..f61a13901 --- /dev/null +++ b/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'), +] diff --git a/relatorios/views.py b/relatorios/views.py new file mode 100644 index 000000000..6461f3222 --- /dev/null +++ b/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, +# }) diff --git a/sapl/urls.py b/sapl/urls.py index 0eb48d1cc..2afef0e3c 100644 --- a/sapl/urls.py +++ b/sapl/urls.py @@ -30,6 +30,7 @@ urlpatterns = [ url(r'', include('painel.urls')), url(r'', include('protocoloadm.urls')), url(r'', include('compilacao.urls')), + url(r'', include('relatorios.urls')), # must come at the end # so that base /sistema/ url doesn't capture its children diff --git a/static/img/brasao_transp.gif b/static/img/brasao_transp.gif new file mode 100644 index 000000000..2d9ac82c6 Binary files /dev/null and b/static/img/brasao_transp.gif differ