from datetime import datetime
from bs4 import BeautifulSoup
from django.http import HttpResponse
from django.utils.translation import ugettext_lazy as _
from base.models import CasaLegislativa
from comissoes.models import Comissao
from materia.models import (Autor, Autoria, MateriaLegislativa, Numeracao,
                            Tramitacao, UnidadeTramitacao)
from parlamentares.models import (CargoMesa, ComposicaoMesa, Filiacao,
                                  Parlamentar)
from protocoloadm.models import (DocumentoAdministrativo, Protocolo,
                                 TramitacaoAdministrativo)
from sapl.utils import UF
from sessao.models import (ExpedienteMateria, ExpedienteSessao, Orador,
                           OradorExpediente, OrdemDia, PresencaOrdemDia,
                           RegistroVotacao, SessaoPlenaria,
                           SessaoPlenariaPresenca, TipoExpediente)
from .templates import (pdf_capa_processo_gerar,
                        pdf_documento_administrativo_gerar, pdf_espelho_gerar,
                        pdf_etiqueta_protocolo_gerar, pdf_materia_gerar,
                        pdf_ordem_dia_gerar, pdf_pauta_sessao_gerar,
                        pdf_protocolo_gerar, pdf_sessao_plenaria_gerar)
uf_dic = dict(UF)
def get_kwargs_params(request, fields):
    kwargs = {}
    for i in fields:
        if '__icontains' in i:
            x = i[:-11]  # remove '__icontains'
        else:
            x = i
        if x in request.GET:
            kwargs[i] = request.GET[x]
    return kwargs
def get_cabecalho(casa):
    cabecalho = {}
    cabecalho["nom_casa"] = casa.nome
    # FIXME i18n
    cabecalho["nom_estado"] = "Estado de " + uf_dic[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 + str(_("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 + str(_(" Tel.: ")) + casa.telefone
    if casa.endereco_web:
        linha2 = casa.endereco_web
    else:
        linha2 = ""
    if casa.email:
        if casa.endereco_web:
            linha2 = linha2 + " - "
        linha2 = linha2 + str(_("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):
    '''
        pdf_materia_gerar.py
    '''
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = (
        'inline; filename="relatorio_materia.pdf"')
    casa = CasaLegislativa.objects.first()
    cabecalho = get_cabecalho(casa)
    rodape = get_rodape(casa)
    imagem = get_imagem(casa)
    kwargs = get_kwargs_params(request, ['numero',
                                         'ano',
                                         'autor',
                                         'tipo_autor',
                                         'relator',
                                         'interessado__icontains'
                                         ])
    mats = MateriaLegislativa.objects.filter(**kwargs)
    materias = get_materias(mats)
    pdf = pdf_materia_gerar.principal(imagem,
                                      materias,
                                      cabecalho,
                                      rodape)
    response.write(pdf)
    return response
def get_capa_processo(prot):
    protocolos = []
    for p in prot:
        dic = {}
        dic['numero'] = str(p.numero)
        dic['ano'] = str(p.ano)
        dic['data'] = str(p.data) + ' - ' + str(p.hora)
        dic['txt_assunto'] = p.assunto_ementa
        dic['txt_interessado'] = p.interessado
        dic['nom_autor'] = " "
        dic['titulo'] = " "
        if p.autor is not None:
            for autor in Autor.objects.filter(id=p.autor.id):
                if autor.tipo == 'Parlamentar':
                    for parlamentar in Parlamentar.objects.filter(
                            id=p.autor.parlamentar.id):
                        dic['nom_autor'] = parlamentar.nome_completo or ' '
                elif autor.tipo == 'Comissao':
                    for comissao in Comissao.objects.filter(
                            id=p.autor.comissao.id):
                        dic['nom_autor'] = comissao.nome or ' '
                else:
                    dic['nom_autor'] = autor.nome or ' '
        else:
            dic['nom_autor'] = p.interessado
        dic['natureza'] = ''
        if p.tipo_processo == 0:
            dic['natureza'] = 'Administrativo'
        if p.tipo_processo == 1:
            dic['natureza'] = 'Legislativo'
        dic['ident_processo'] = str(p.tipo_materia) or str(p.tipo_documento)
        dic['sgl_processo'] = str(p.tipo_materia) or str(p.tipo_documento)
        dic['num_materia'] = ''
        for materia in MateriaLegislativa.objects.filter(
                numero_protocolo=p.numero, ano=p.ano):
            dic['num_materia'] = str(materia.numero) + '/' + str(materia.ano)
        dic['num_documento'] = ''
        for documento in DocumentoAdministrativo.objects.filter(
                numero=p.numero):
            dic['num_documento'] = str(
                documento.numero) + '/' + str(documento.ano)
        dic['num_processo'] = dic['num_materia'] or dic['num_documento']
        dic['numeracao'] = ''
        for materia_num in MateriaLegislativa.objects.filter(
                numero_protocolo=p.numero, ano=p.ano):
            for numera in Numeracao.objects.filter(materia=materia_num):
                # FIXME i18n
                dic['numeracao'] = 'PROCESSO N° ' + \
                    str(numera.numero) + '/' + str(numera.ano)
        dic['anulado'] = ''
        if p.anulado == 1:
            dic['anulado'] = 'Nulo'
        protocolos.append(dic)
    return protocolos
def relatorio_capa_processo(request):
    '''
        pdf_capa_processo_gerar.py
    '''
    response = HttpResponse(content_type='application/pdf')
    response[
        'Content-Disposition'] = ('inline; filename="relatorio_processo.pdf"')
    casa = CasaLegislativa.objects.first()
    cabecalho = get_cabecalho(casa)
    rodape = get_rodape(casa)
    imagem = get_imagem(casa)
    kwargs = get_kwargs_params(request, ['numero',
                                         'ano',
                                         'tipo_protocolo',
                                         'tipo_processo',
                                         'assunto__icontains',
                                         # 'interessado__icontains'
                                         ])
    protocolos = Protocolo.objects.filter(**kwargs)
    protocolos_pdf = get_capa_processo(protocolos)
    pdf = pdf_capa_processo_gerar.principal(imagem,
                                            protocolos_pdf,
                                            cabecalho,
                                            rodape)
    response.write(pdf)
    return response
def get_ordem_dia(ordem, sessao):
    # TODO: fazer implementação de ordem dia
    pass
def relatorio_ordem_dia(request):
    '''
        pdf_ordem_dia_gerar.py
    '''
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = (
        'inline; filename="relatorio_ordem_dia.pdf"')
    casa = CasaLegislativa.objects.first()
    cabecalho = get_cabecalho(casa)
    rodape = get_rodape(casa)
    imagem = get_imagem(casa)
    kwargs = get_kwargs_params(request, ['numero_ordem'])
    ordem = OrdemDia.objects.filter(**kwargs)
    sessao = SessaoPlenaria.objects.first()
    ordem_pdf = get_ordem_dia(ordem, sessao)
    pdf = pdf_ordem_dia_gerar.principal(imagem,
                                        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'] = (
            'inline; filename="relatorio_documento_administrativo.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(
        imagem,
        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
def relatorio_espelho(request):
    '''
        pdf_espelho_gerar.py
    '''
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = (
        'inline; filename="relatorio_espelho.pdf"')
    casa = CasaLegislativa.objects.first()
    cabecalho = get_cabecalho(casa)
    rodape = get_rodape(casa)
    imagem = get_imagem(casa)
    mats = MateriaLegislativa.objects.all()[:50]
    mat_pdf = get_espelho(mats)
    pdf = pdf_espelho_gerar.principal(
        imagem,
        mat_pdf,
        cabecalho,
        rodape)
    response.write(pdf)
    return response
def get_espelho(mats):
    materias = []
    for m in mats:
        dic = {}
        dic['titulo'] = str(m)
        dic['materia'] = str(m.numero) + '/' + str(m.ano)
        dic['dat_apresentacao'] = str(m.data_apresentacao)
        dic['txt_ementa'] = m.ementa
        dic['nom_autor'] = ' '
        for autoria in Autoria.objects.filter(materia=m, primeiro_autor=True):
            for autor in Autor.objects.filter(id=autoria.autor.id):
                if autor.tipo == 'Parlamentar':
                    for parlamentar in Parlamentar.objects.filter(
                            id=autor.parlamentar.id):
                        dic['nom_autor'] = parlamentar.nome_completo
                elif autor.tipo == 'Comissao':
                    for comissao in Comissao.objects.filter(
                            id=autor.comissao.id):
                        dic['nom_autor'] = str(comissao)
                else:
                    dic['nom_autor'] = autor.nome
        des_status = ''
        txt_tramitacao = ''
        data_ultima_acao = ''
        dic['localizacao_atual'] = " "
        for tramitacao in Tramitacao.objects.filter(materia=m):
            if tramitacao.unidade_tramitacao_destino:
                cod_unid_tram = tramitacao.unidade_tramitacao_destino
            else:
                cod_unid_tram = tramitacao.unidade_tramitacao_local
            for unidade_tramitacao in UnidadeTramitacao.objects.filter(
                    id=cod_unid_tram.id):
                if unidade_tramitacao.orgao:
                    dic['localizacao_atual'] = unidade_tramitacao.orgao
                elif unidade_tramitacao.parlamentar:
                    dic['localizacao_atual'] = unidade_tramitacao.parlamentar
                else:
                    dic['localizacao_atual'] = unidade_tramitacao.comissao
            des_status = tramitacao.status
            txt_tramitacao = tramitacao.texto
            data_ultima_acao = tramitacao.data_tramitacao
        dic['des_situacao'] = des_status
        dic['ultima_acao'] = txt_tramitacao
        dic['data_ultima_acao'] = data_ultima_acao
        dic['norma_juridica_vinculada'] = str(_('Não há nenhuma \
                                           norma jurídica vinculada'))
        # TODO
        # 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)
    return materias
def get_sessao_plenaria(sessao, casa):
    inf_basicas_dic = {}
    inf_basicas_dic["num_sessao_plen"] = str(sessao.numero)
    inf_basicas_dic["nom_sessao"] = sessao.tipo.nome
    inf_basicas_dic["num_legislatura"] = str(sessao.legislatura)
    inf_basicas_dic["num_sessao_leg"] = sessao.sessao_legislativa.numero
    inf_basicas_dic["dat_inicio_sessao"] = sessao.data_inicio.strftime(
        "%d/%m/%Y")
    inf_basicas_dic["hr_inicio_sessao"] = sessao.hora_inicio
    if sessao.data_fim:
        inf_basicas_dic["dat_fim_sessao"] = \
            sessao.data_fim.strftime("%d/%m/%Y")
    else:
        inf_basicas_dic["dat_fim_sessao"] = ''
    inf_basicas_dic["hr_fim_sessao"] = sessao.hora_fim
    inf_basicas_dic["nom_camara"] = casa.nome
    # Lista da composicao da mesa diretora
    lst_mesa = []
    for composicao in ComposicaoMesa.objects.filter(
            sessao_legislativa=sessao.sessao_legislativa):
        for parlamentar in Parlamentar.objects.filter(
                id=composicao.parlamentar.id):
            for cargo in CargoMesa.objects.filter(id=composicao.cargo.id):
                dic_mesa = {}
                dic_mesa['nom_parlamentar'] = parlamentar.nome_parlamentar
                dic_mesa['sgl_partido'] = Filiacao.objects.filter(
                    parlamentar=parlamentar).first().partido.sigla
                dic_mesa['des_cargo'] = cargo.descricao
                lst_mesa.append(dic_mesa)
    # Lista de presença na sessão
    lst_presenca_sessao = []
    for presenca in SessaoPlenariaPresenca.objects.filter(
            sessao_plenaria=sessao):
        for parlamentar in Parlamentar.objects.filter(
                id=presenca.parlamentar.id):
            dic_presenca = {}
            dic_presenca["nom_parlamentar"] = parlamentar.nome_parlamentar
            dic_presenca['sgl_partido'] = Filiacao.objects.filter(
                parlamentar=parlamentar).first().partido.sigla
            lst_presenca_sessao.append(dic_presenca)
    # Exibe os Expedientes
    lst_expedientes = []
    for tip_expediente in TipoExpediente.objects.all():
        for expediente in ExpedienteSessao.objects.filter(
                sessao_plenaria=sessao, tipo=tip_expediente):
            dic_expedientes = {}
            dic_expedientes["nom_expediente"] = str(tip_expediente)
            dic_expedientes["txt_expediente"] = (
                BeautifulSoup(expediente.conteudo).text)
            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 ExpedienteMateria.objects.filter(
            sessao_plenaria=sessao):
        # seleciona os detalhes de uma matéria
        materia = MateriaLegislativa.objects.filter(
            id=expediente_materia.materia.id).first()
        dic_expediente_materia = {}
        dic_expediente_materia["num_ordem"] = expediente_materia.numero_ordem
        dic_expediente_materia["id_materia"] = (materia.tipo.sigla + ' ' +
                                                materia.tipo.descricao + ' ' +
                                                str(materia.numero) + '/' +
                                                str(materia.ano))
        dic_expediente_materia["des_numeracao"] = ' '
        numeracao = Numeracao.objects.filter(
            materia=expediente_materia.materia).first()
        if numeracao is not None:
            dic_expediente_materia["des_numeracao"] = (
                str(numeracao.numero) + '/' + str(numeracao.ano))
        dic_expediente_materia["des_turno"] = ' '
        tram = Tramitacao.objects.filter(
            materia=materia).first()
        if tram is not None:
            if tram.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 == turno[0]:
                        dic_expediente_materia["des_turno"] = turno[1]
        dic_expediente_materia["txt_ementa"] = str(materia.ementa)
        dic_expediente_materia["ordem_observacao"] = ' '  # TODO
        dic_expediente_materia["nom_autor"] = ' '
        autoria = Autoria.objects.filter(
            materia=materia, primeiro_autor=True).first()
        if autoria is not None:
            autor = Autor.objects.filter(id=autoria.autor.id)
            if autor is not None:
                autor = autor.first()
            if autor.tipo == 'Parlamentar':
                parlamentar = Parlamentar.objects.filter(
                    id=autor.parlamentar.id)
                dic_expediente_materia["nom_autor"] = str(
                    parlamentar.nome_completo)
            elif autor.tipo == 'Comissao':
                comissao = Comissao.objects.filter(id=autor.comissao.id)
                dic_expediente_materia["nom_autor"] = str(comissao)
            else:
                dic_expediente_materia["nom_autor"] = str(autor.nome)
        elif autoria is None:
            dic_expediente_materia["nom_autor"] = 'Desconhecido'
        dic_expediente_materia["votacao_observacao"] = ' '
        if not expediente_materia.resultado:
            resultado = RegistroVotacao.objects.filter(
                tipo_resultado_votacao=expediente_materia.tipo_votacao)
            for i in resultado:
                dic_expediente_materia["nom_resultado"] = (
                    i.tipo_resultado_votacao.nome)
                dic_expediente_materia["votacao_observacao"] = (
                    expediente_materia.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 OradorExpediente.objects.filter(
            sessao_plenaria=sessao):
        parlamentar = Parlamentar.objects.get(
            id=orador_expediente.parlamentar.id)
        dic_oradores_expediente = {}
        dic_oradores_expediente["num_ordem"] = (
            orador_expediente.numero_ordem)
        dic_oradores_expediente["nom_parlamentar"] = (
            parlamentar.nome_parlamentar)
        dic_oradores_expediente['sgl_partido'] = (
            Filiacao.objects.filter(
                parlamentar=parlamentar).first().partido.sigla)
        lst_oradores_expediente.append(dic_oradores_expediente)
    # Lista presença na ordem do dia
    lst_presenca_ordem_dia = []
    for presenca_ordem_dia in PresencaOrdemDia.objects.filter(
            sessao_plenaria=sessao):
        for parlamentar in Parlamentar.objects.filter(
                id=presenca_ordem_dia.parlamentar.id):
            dic_presenca_ordem_dia = {}
            dic_presenca_ordem_dia['nom_parlamentar'] = (
                parlamentar.nome_parlamentar)
            dic_presenca_ordem_dia['sgl_partido'] = (
                Filiacao.objects.filter(
                    parlamentar=parlamentar).first().partido.sigla)
            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 OrdemDia.objects.filter(
            sessao_plenaria=sessao):
        # seleciona os detalhes de uma matéria
        materia = MateriaLegislativa.objects.filter(
            id=votacao.materia.id).first()
        dic_votacao = {}
        dic_votacao["num_ordem"] = votacao.numero_ordem
        dic_votacao["id_materia"] = (
            materia.tipo.sigla + ' ' +
            materia.tipo.descricao + ' ' +
            str(materia.numero) + '/' +
            str(materia.ano))
        dic_votacao["des_numeracao"] = ' '
        numeracao = Numeracao.objects.filter(
            materia=votacao.materia).first()
        if numeracao is not None:
            dic_votacao["des_numeracao"] = (
                str(numeracao.numero) +
                '/' +
                str(numeracao.ano))
        dic_votacao["des_turno"] = ' '
        tramitacao = Tramitacao.objects.filter(
            materia=materia).first()
        if tramitacao is not None:
            if not tramitacao.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 tramitacao.turno == turno[0]:
                        dic_votacao["des_turno"] = turno[1]
        dic_votacao["txt_ementa"] = materia.ementa
        dic_votacao["ordem_observacao"] = votacao.observacao
        dic_votacao["nom_autor"] = ' '
        autoria = Autoria.objects.filter(
            materia=materia, primeiro_autor=True).first()
        if autoria is not None:
            autor = Autor.objects.filter(id=autoria.autor.id)
            if autor is not None:
                autor = autor.first()
            if autor.tipo == 'Parlamentar':
                parlamentar = Parlamentar.objects.filter(
                    id=autor.parlamentar.id)
                dic_votacao["nom_autor"] = str(parlamentar.nome_completo)
            elif autor.tipo == 'Comissao':
                comissao = Comissao.objects.filter(
                    id=autor.comissao.id)
                dic_votacao["nom_autor"] = str(comissao)
            else:
                dic_votacao["nom_autor"] = str(autor.nome)
        elif autoria is None:
            dic_votacao["nom_autor"] = 'Desconhecido'
        dic_votacao["votacao_observacao"] = ' '
        if not votacao.resultado:
            resultado = RegistroVotacao.objects.filter(
                tipo_resultado_votacao=votacao.tipo_votacao)
            for i in resultado:
                dic_votacao["nom_resultado"] = i.tipo_resultado_votacao.nome
                if votacao.observacao:
                    dic_votacao["votacao_observacao"] = 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 Orador.objects.filter(
            sessao_plenaria=sessao):
        for parlamentar in Parlamentar.objects.filter(
                id=orador.parlamentar.id):
            dic_oradores = {}
            dic_oradores["num_ordem"] = orador.numero_ordem
            dic_oradores["nom_parlamentar"] = parlamentar.nome_parlamentar
            dic_oradores['sgl_partido'] = (
                Filiacao.objects.filter(
                    parlamentar=parlamentar).first().partido.sigla)
            lst_oradores.append(dic_oradores)
    return (inf_basicas_dic,
            lst_mesa,
            lst_presenca_sessao,
            lst_expedientes,
            lst_expediente_materia,
            lst_oradores_expediente,
            lst_presenca_ordem_dia,
            lst_votacao,
            lst_oradores)
def relatorio_sessao_plenaria(request, pk):
    '''
        pdf_sessao_plenaria_gerar.py
    '''
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = (
        'inline; filename="relatorio_protocolo.pdf"')
    casa = CasaLegislativa.objects.first()
    cabecalho = get_cabecalho(casa)
    rodape = get_rodape(casa)
    imagem = get_imagem(casa)
    sessao = SessaoPlenaria.objects.get(id=pk)
    (inf_basicas_dic,
     lst_mesa,
     lst_presenca_sessao,
     lst_expedientes,
     lst_expediente_materia,
     lst_oradores_expediente,
     lst_presenca_ordem_dia,
     lst_votacao,
     lst_oradores) = get_sessao_plenaria(sessao, casa)
    pdf = pdf_sessao_plenaria_gerar.principal(
        cabecalho,
        rodape,
        imagem,
        None,
        inf_basicas_dic,
        lst_mesa,
        lst_presenca_sessao,
        lst_expedientes,
        lst_expediente_materia,
        lst_oradores_expediente,
        lst_presenca_ordem_dia,
        lst_votacao,
        lst_oradores)
    response.write(pdf)
    return response
def get_protocolos(prots):
    protocolos = []
    for protocolo in prots:
        dic = {}
        dic['titulo'] = str(protocolo.numero) + '/' + str(protocolo.ano)
        dic['data'] = protocolo.data.strftime(
            "%d/%m/%Y") + ' - Horário:' + protocolo.hora.strftime(
            "%H:%m")
        dic['txt_assunto'] = protocolo.assunto_ementa
        dic['txt_interessado'] = protocolo.interessado
        dic['nom_autor'] = " "
        if protocolo.autor:
            if protocolo.autor.parlamentar:
                dic['nom_autor'] = protocolo.autor.parlamentar.nome_completo
            elif protocolo.autor.comissao:
                dic['nom_autor'] = protocolo.autor.comissao.nome
        dic['natureza'] = ''
        if protocolo.tipo_documento:
            dic['natureza'] = 'Administrativo'
            dic['processo'] = protocolo.tipo_documento.descricao
        elif protocolo.tipo_materia:
            dic['natureza'] = 'Legislativo'
            dic['processo'] = protocolo.tipo_materia.descricao
        else:
            dic['natureza'] = 'Indefinida'
            dic['processo'] = ''
        dic['anulado'] = ''
        if protocolo.anulado:
            dic['anulado'] = 'Nulo'
        protocolos.append(dic)
    return protocolos
def relatorio_protocolo(request):
    '''
        pdf_protocolo_gerar.py
    '''
    response = HttpResponse(content_type='application/pdf')
    response[
        'Content-Disposition'] = (
            'inline; filename="relatorio_protocolo.pdf"')
    casa = CasaLegislativa.objects.first()
    cabecalho = get_cabecalho(casa)
    rodape = get_rodape(casa)
    imagem = get_imagem(casa)
    kwargs = get_kwargs_params(request, ['numero',
                                         'ano',
                                         'tipo_protocolo',
                                         'tipo_processo',
                                         'autor',
                                         'assunto__icontains',
                                         'interessado__icontains'])
    protocolos = Protocolo.objects.filter(**kwargs)
    protocolo_data = get_protocolos(protocolos)
    pdf = pdf_protocolo_gerar.principal(imagem,
                                        protocolo_data,
                                        cabecalho,
                                        rodape)
    response.write(pdf)
    return response
def relatorio_etiqueta_protocolo(request, nro, ano):
    '''
        pdf_etiqueta_protocolo_gerar.py
    '''
    response = HttpResponse(content_type='application/pdf')
    response[
        'Content-Disposition'] = (
            'inline; filename="relatorio_etiqueta_protocolo.pdf"')
    casa = CasaLegislativa.objects.first()
    cabecalho = get_cabecalho(casa)
    rodape = get_rodape(casa)
    imagem = get_imagem(casa)
    protocolo = Protocolo.objects.filter(numero=nro, ano=ano)
    protocolo_data = get_etiqueta_protocolos(protocolo)
    pdf = pdf_etiqueta_protocolo_gerar.principal(imagem,
                                                 protocolo_data,
                                                 cabecalho,
                                                 rodape)
    response.write(pdf)
    return response
def get_etiqueta_protocolos(prots):
    protocolos = []
    for p in prots:
        dic = {}
        dic['titulo'] = str(p.numero) + '/' + str(p.ano)
        dic['data'] = 'Data: ' + p.data.strftime(
            "%d/%m/%Y") + ' - Horário: ' + p.hora.strftime("%H:%m")
        dic['txt_assunto'] = p.assunto_ementa
        dic['txt_interessado'] = p.interessado
        dic['nom_autor'] = ' '
        if p.autor:
            if p.autor.parlamentar:
                dic['nom_autor'] = p.autor.parlamentar.nome_completo
            elif p.autor.comissao:
                dic['nom_autor'] = p.autor.comissao.nome
        dic['natureza'] = ''
        if p.tipo_processo == 0:
            dic['natureza'] = 'Administrativo'
        if p.tipo_processo == 1:
            dic['natureza'] = 'Legislativo'
        dic['num_materia'] = ''
        for materia in MateriaLegislativa.objects.filter(
                numero_protocolo=p.numero, ano=p.ano):
            dic['num_materia'] = str(materia)
        dic['num_documento'] = ''
        for documento in DocumentoAdministrativo.objects.filter(
                numero_protocolo=p.numero):
            dic['num_documento'] = str(documento)
        dic['ident_processo'] = dic['num_materia'] or dic['num_documento']
        dic['processo'] = (str(p.tipo_materia) or
                           str(p.tipo_documento))
        dic['anulado'] = ''
        if p.anulado:
            dic['anulado'] = 'Nulo'
        protocolos.append(dic)
    return protocolos
def relatorio_pauta_sessao(request):
    '''
        pdf__pauta_sessao_gerar.py
    '''
    response = HttpResponse(content_type='application/pdf')
    response[
        'Content-Disposition'] = (
            'inline; filename="relatorio_pauta_sessao.pdf"')
    casa = CasaLegislativa.objects.first()
    cabecalho = get_cabecalho(casa)
    rodape = get_rodape(casa)
    imagem = get_imagem(casa)
    sessao = SessaoPlenaria.objects.first()
    lst_expediente_materia, lst_votacao, inf_basicas_dic = get_pauta_sessao(
        sessao, casa)
    pdf = pdf_pauta_sessao_gerar.principal(cabecalho,
                                           rodape,
                                           sessao,
                                           imagem,
                                           inf_basicas_dic,
                                           lst_expediente_materia,
                                           lst_votacao)
    response.write(pdf)
    return response
def get_pauta_sessao(sessao, casa):
    inf_basicas_dic = {}
    inf_basicas_dic["nom_sessao"] = sessao.tipo.nome
    inf_basicas_dic["num_sessao_plen"] = sessao.numero
    inf_basicas_dic["num_legislatura"] = sessao.legislatura
    inf_basicas_dic["num_sessao_leg"] = sessao.legislatura
    inf_basicas_dic["dat_inicio_sessao"] = sessao.data_inicio
    inf_basicas_dic["hr_inicio_sessao"] = sessao.hora_inicio
    inf_basicas_dic["dat_fim_sessao"] = sessao.data_fim
    inf_basicas_dic["hr_fim_sessao"] = sessao.hora_fim
    inf_basicas_dic["nom_camara"] = casa.nome
    lst_expediente_materia = []
    for expediente_materia in ExpedienteMateria.objects.filter(
            data_ordem=sessao.data_inicio, sessao_plenaria=sessao):
        materia = MateriaLegislativa.objects.filter(
            id=expediente_materia.materia.id).first()
        dic_expediente_materia = {}
        dic_expediente_materia["num_ordem"] = str(
            expediente_materia.numero_ordem)
        dic_expediente_materia["id_materia"] = str(
            materia.numero) + "/" + str(materia.ano)
        dic_expediente_materia["txt_ementa"] = materia.ementa
        dic_expediente_materia["ordem_observacao"] = str(
            expediente_materia.observacao)
        dic_expediente_materia["des_numeracao"] = ' '
        numeracao = Numeracao.objects.filter(materia=materia)
        if numeracao is not None:
            numeracao = numeracao.first()
            dic_expediente_materia["des_numeracao"] = str(numeracao)
        dic_expediente_materia["nom_autor"] = ' '
        autoria = Autoria.objects.filter(
            materia=materia, primeiro_autor=True).first()
        if autoria is not None:
            autor = Autor.objects.filter(id=autoria.autor.id)
            if autor is not None:
                autor = autor.first()
            if autor.tipo == 'Parlamentar':
                parlamentar = Parlamentar.objects.filter(
                    id=autor.parlamentar.id)
                dic_expediente_materia["nom_autor"] = str(
                    parlamentar.nome_completo)
            elif autor.tipo == 'Comissao':
                comissao = Comissao.objects.filter(id=autor.comissao.id)
                dic_expediente_materia["nom_autor"] = str(comissao)
            else:
                dic_expediente_materia["nom_autor"] = str(autor.nome)
        elif autoria is None:
            dic_expediente_materia["nom_autor"] = 'Desconhecido'
        dic_expediente_materia["des_turno"] = ' '
        dic_expediente_materia["des_situacao"] = ' '
        tramitacao = Tramitacao.objects.filter(materia=materia)
        if tramitacao is not None:
            tramitacao = tramitacao.first()
            if tramitacao.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.turno == turno.first():
                        dic_expediente_materia["des_turno"] = turno.first()
            dic_expediente_materia["des_situacao"] = tramitacao.status
            if dic_expediente_materia["des_situacao"] is None:
                dic_expediente_materia["des_situacao"] = ' '
        lst_expediente_materia.append(dic_expediente_materia)
    lst_votacao = []
    for votacao in OrdemDia.objects.filter(
            data_ordem=sessao.data_inicio, sessao_plenaria=sessao):
        materia = MateriaLegislativa.objects.filter(
            id=votacao.materia.id).first()
        dic_votacao = {}
        dic_votacao["num_ordem"] = votacao.numero_ordem
        dic_votacao["id_materia"] = str(
            materia.numero) + "/" + str(materia.ano)
        dic_votacao["txt_ementa"] = materia.ementa
        dic_votacao["ordem_observacao"] = votacao.observacao
        dic_votacao["des_numeracao"] = ' '
        numeracao = Numeracao.objects.filter(materia=materia)
        # if numeracao is not None:
        #     numeracao = numeracao.first()
        #     dic_votacao["des_numeracao"] = str(
        #         numeracao.numero) + '/' + str(numeracao.ano)
        dic_votacao["nom_autor"] = ' '
        autoria = Autoria.objects.filter(
            materia=materia, primeiro_autor=True).first()
        if autoria is not None:
            autor = Autor.objects.filter(id=autoria.autor.id)
            if autor is not None:
                autor = autor.first()
            if autor.tipo == 'Parlamentar':
                parlamentar = Parlamentar.objects.filter(
                    id=autor.parlamentar.id)
                dic_votacao["nom_autor"] = str(parlamentar.nome_completo)
            elif autor.tipo == 'Comissao':
                comissao = Comissao.objects.filter(
                    id=autor.comissao.id)
                dic_votacao["nom_autor"] = str(comissao)
            else:
                dic_votacao["nom_autor"] = str(autor.nome)
        elif autoria is None:
            dic_votacao["nom_autor"] = 'Desconhecido'
        dic_votacao["des_turno"] = ' '
        dic_votacao["des_situacao"] = ' '
        tramitacao = Tramitacao.objects.filter(materia=materia)
        if tramitacao is not None:
            tramitacao = tramitacao.first()
            if tramitacao.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.turno == turno.first():
                        dic_votacao["des_turno"] = turno.first()
            dic_votacao["des_situacao"] = tramitacao.status
            if dic_votacao["des_situacao"] is None:
                dic_votacao["des_situacao"] = ' '
        lst_votacao.append(dic_votacao)
    return (lst_expediente_materia,
            lst_votacao,
            inf_basicas_dic)