From a12787eb1fd5059d4a22a8241138f7ee58f9de9a Mon Sep 17 00:00:00 2001 From: Eduardo Edson Batista Cordeiro Alves Date: Tue, 19 Jan 2016 11:30:44 -0200 Subject: [PATCH] Add relatorio documento administrativo --- materia/views.py | 9 +- parlamentares/views.py | 5 +- .../pdf_documento_administrativo_gerar.py | 187 +++++++++-------- relatorios/templates/pdf_ordem_dia_gerar.py | 11 +- relatorios/urls.py | 9 +- relatorios/views.py | 193 +++++++++++++++++- 6 files changed, 311 insertions(+), 103 deletions(-) diff --git a/materia/views.py b/materia/views.py index 9656d6e0a..13b90e6bb 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1,9 +1,6 @@ from datetime import date, datetime from re import sub -import sapl -from comissoes.models import Comissao, Composicao -from compilacao.views import IntegracaoTaView from crispy_forms.helper import FormHelper from crispy_forms.layout import ButtonHolder, Column, Fieldset, Layout, Submit from django import forms @@ -18,11 +15,15 @@ from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from django.views.generic import ListView from django.views.generic.edit import FormMixin +from vanilla.views import GenericView + +import sapl +from comissoes.models import Comissao, Composicao +from compilacao.views import IntegracaoTaView from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from parlamentares.models import Parlamentar from sapl.crud import build_crud from sessao.models import AcompanharMateria -from vanilla.views import GenericView from .models import (Anexada, Autor, Autoria, DespachoInicial, DocumentoAcessorio, MateriaLegislativa, Numeracao, Orgao, diff --git a/parlamentares/views.py b/parlamentares/views.py index fd21296a8..57391226d 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -1,7 +1,6 @@ import os from re import sub -import sapl from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, ButtonHolder, Fieldset, Layout, Submit from django import forms @@ -12,9 +11,11 @@ from django.utils.html import strip_tags from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from django.views.generic.edit import FormMixin -from sapl.crud import build_crud from vanilla import GenericView +import sapl +from sapl.crud import build_crud + from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente, Filiacao, Legislatura, Mandato, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar, diff --git a/relatorios/templates/pdf_documento_administrativo_gerar.py b/relatorios/templates/pdf_documento_administrativo_gerar.py index 73790a52b..1df69121f 100755 --- a/relatorios/templates/pdf_documento_administrativo_gerar.py +++ b/relatorios/templates/pdf_documento_administrativo_gerar.py @@ -1,7 +1,8 @@ -##parameters=sessao,imagem,data,lst_documentos,dic_cabecalho,lst_rodape,dic_filtro +# 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 + 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 @@ -11,115 +12,128 @@ import time from trml2pdf import parseString -def cabecalho(inf_basicas_dic,imagem): +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' + 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' + \ + inf_basicas_dic['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' + 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' + 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='' + tmp_data = '' - #inicio do bloco que contem os flowables - tmp_data+='\t\n' + # 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' + # 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={}): + +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) + 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) return tmp_pdf @@ -131,4 +145,5 @@ def principal(sessao,imagem,data,lst_documentos,dic_cabecalho,lst_rodape,dic_fil # return "/temp_folder/"+arquivoPdf -# return principal(sessao,imagem,data,lst_documentos,dic_cabecalho,lst_rodape,dic_filtro) +# return +# principal(sessao,imagem,data,lst_documentos,dic_cabecalho,lst_rodape,dic_filtro) diff --git a/relatorios/templates/pdf_ordem_dia_gerar.py b/relatorios/templates/pdf_ordem_dia_gerar.py index c74fe8c2a..732f8eb39 100755 --- a/relatorios/templates/pdf_ordem_dia_gerar.py +++ b/relatorios/templates/pdf_ordem_dia_gerar.py @@ -212,10 +212,10 @@ def principal(sessao, imagem, dat_ordem, lst_splen, lst_pauta, dic_cabecalho, ls return tmp_pdf -# # try: -# # tmp_pdf=parseString(unicode(tmp, 'utf-8')) -# # except: -# # tmp_pdf=parseString(unicode(tmp, 'utf-8')) +# 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) @@ -226,4 +226,5 @@ def principal(sessao, imagem, dat_ordem, lst_splen, lst_pauta, dic_cabecalho, ls # return "/temp_folder/" + arquivoPdf -# return principal(sessao, imagem, dat_ordem, lst_splen, lst_pauta, dic_cabecalho, lst_rodape) +# return principal(sessao, imagem, dat_ordem, lst_splen, lst_pauta, +# dic_cabecalho, lst_rodape) diff --git a/relatorios/urls.py b/relatorios/urls.py index 3340b168e..15a3da226 100644 --- a/relatorios/urls.py +++ b/relatorios/urls.py @@ -1,9 +1,16 @@ from django.conf.urls import url -from .views import relatorio_materia, relatorio_processo +from .views import (relatorio_documento_administrativo, relatorio_materia, + relatorio_ordem_dia, relatorio_processo) urlpatterns = [ url(r'^relatorios/materia$', relatorio_materia, name='relatorio_materia'), url(r'^relatorios/cap_processo$', relatorio_processo, name='relatorio_cap_processo'), + url(r'^relatorios/ordem_dia$', relatorio_ordem_dia, + name='relatorio_ordem_dia'), + url(r'^relatorios/relatorio_documento_administrativo$', + relatorio_documento_administrativo, + name='relatorio_documento_administrativo'), + ] diff --git a/relatorios/views.py b/relatorios/views.py index e3d962bf4..0bb31988a 100644 --- a/relatorios/views.py +++ b/relatorios/views.py @@ -1,15 +1,19 @@ from datetime import datetime +from django.http import HttpResponse + from base.models import CasaLegislativa from base.views import ESTADOS from comissoes.models import Comissao -from django.http import HttpResponse -from materia.models import (Autor, Autoria, MateriaLegislativa, Tramitacao, - Numeracao) +from materia.models import (Autor, Autoria, MateriaLegislativa, Numeracao, + Tramitacao, UnidadeTramitacao) from parlamentares.models import Parlamentar -from protocoloadm.models import Protocolo, DocumentoAdministrativo +from protocoloadm.models import (DocumentoAdministrativo, Protocolo, + TramitacaoAdministrativo) +from sessao.models import OrdemDia, SessaoPlenaria -from .templates import pdf_capa_processo_gerar, pdf_materia_gerar +from .templates import (pdf_capa_processo_gerar, + pdf_documento_administrativo_gerar, pdf_materia_gerar) def get_cabecalho(casa): @@ -251,3 +255,182 @@ def relatorio_processo(request): response.write(pdf) return response + + +def get_ordem_dia(ordem, sessao): + pass + + # splen = [] + # pauta = [] + # data = '' + + # for dat_sessao in SessaoPlenaria.objects.filter(id=sessao.id): + # data = dat_sessao.data_inicio + # dat_ordem = dat_sessao.data_inicio + + # 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) + + +def relatorio_ordem_dia(request): + ''' + pdf_ordem_dia_gerar.py + ''' + + response = HttpResponse(content_type='application/pdf') + response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"' + + casa = CasaLegislativa.objects.first() + + cabecalho = get_cabecalho(casa) + rodape = get_rodape(casa) + imagem = get_imagem(casa) + + ordem = OrdemDia.objects.all()[:50] + sessao = SessaoPlenaria.objects.first() + ordem_pdf = get_ordem_dia(ordem, sessao) + + pdf = pdf_capa_processo_gerar.principal(None, + imagem, + None, + ordem_pdf, + cabecalho, + rodape) + + response.write(pdf) + + return response + + +def relatorio_documento_administrativo(request): + ''' + pdf_documento_administrativo_gerar.py + ''' + + response = HttpResponse(content_type='application/pdf') + response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"' + + casa = CasaLegislativa.objects.first() + + cabecalho = get_cabecalho(casa) + rodape = get_rodape(casa) + imagem = get_imagem(casa) + + docs = DocumentoAdministrativo.objects.all()[:50] + doc_pdf = get_documento_administrativo(docs) + + pdf = pdf_documento_administrativo_gerar.principal( + None, + imagem, + None, + doc_pdf, + cabecalho, + rodape) + response.write(pdf) + + return response + + +def get_documento_administrativo(docs): + + documentos = [] + for d in docs: + dic = {} + dic['titulo'] = str(d) + dic['txt_assunto'] = d.assunto + dic['txt_interessado'] = d.interessado + + des_status = '' + txt_tramitacao = '' + + dic['localizacao_atual'] = ' ' + # Será removido o 'última'? + for t in TramitacaoAdministrativo.objects.filter( + documento=d, ultima=True): + if t.unidade_tramitacao_destino: + cod_unid_tram = t.unidade_tramitacao_destino + else: + cod_unid_tram = t.unidade_tramitacao_destino + + for unidade_tramitacao in UnidadeTramitacao.objects.filter( + id=cod_unid_tram): + if unidade_tramitacao.orgao: + dic['localizacao_atual'] = unidade_tramitacao.orgao + else: + dic['localizacao_atual'] = unidade_tramitacao.comissao + + des_status = t.status.descricao + txt_tramitacao = t.texto + + dic['des_situacao'] = des_status + dic['ultima_acao'] = txt_tramitacao + + documentos.append(dic) + return documentos