Browse Source

Conserto do OsTicket #986795 (#3424)

Co-authored-by: Gustavo274 <Gustavo274@github.com>
pull/3427/head
Gustavo274 4 years ago
committed by GitHub
parent
commit
12847db6dc
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 182
      sapl/relatorios/views.py
  2. 86
      sapl/sessao/views.py

182
sapl/relatorios/views.py

@ -112,7 +112,7 @@ def get_materias(mats):
for materia in mats: for materia in mats:
dic = {} dic = {}
dic['titulo'] = materia.tipo.sigla + " " + materia.tipo.descricao \ dic['titulo'] = materia.tipo.sigla + " " + materia.tipo.descricao \
+ " " + str(materia.numero) + "/" + str(materia.ano) + " " + str(materia.numero) + "/" + str(materia.ano)
dic['txt_ementa'] = materia.ementa dic['txt_ementa'] = materia.ementa
dic['nom_autor'] = ', '.join( dic['nom_autor'] = ', '.join(
@ -535,7 +535,8 @@ def get_sessao_plenaria(sessao, casa):
for composicao in IntegranteMesa.objects.select_related('parlamentar', 'cargo')\ for composicao in IntegranteMesa.objects.select_related('parlamentar', 'cargo')\
.filter(sessao_plenaria=sessao)\ .filter(sessao_plenaria=sessao)\
.order_by('cargo_id'): .order_by('cargo_id'):
partido_sigla = Filiacao.objects.filter(parlamentar=composicao.parlamentar).first() partido_sigla = Filiacao.objects.filter(
parlamentar=composicao.parlamentar).first()
sigla = '' if not partido_sigla else partido_sigla.partido.sigla sigla = '' if not partido_sigla else partido_sigla.partido.sigla
lst_mesa.append({ lst_mesa.append({
'nom_parlamentar': composicao.parlamentar.nome_parlamentar, 'nom_parlamentar': composicao.parlamentar.nome_parlamentar,
@ -545,7 +546,8 @@ def get_sessao_plenaria(sessao, casa):
# Lista de presença na sessão # Lista de presença na sessão
lst_presenca_sessao = [] lst_presenca_sessao = []
presenca = SessaoPlenariaPresenca.objects.filter(sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar') presenca = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
for parlamentar in [p.parlamentar for p in presenca]: for parlamentar in [p.parlamentar for p in presenca]:
lst_presenca_sessao.append({ lst_presenca_sessao.append({
"nom_parlamentar": parlamentar.nome_parlamentar, "nom_parlamentar": parlamentar.nome_parlamentar,
@ -554,7 +556,8 @@ def get_sessao_plenaria(sessao, casa):
# Lista de ausencias na sessão # Lista de ausencias na sessão
lst_ausencia_sessao = [] lst_ausencia_sessao = []
ausencia = JustificativaAusencia.objects.filter(sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar') ausencia = JustificativaAusencia.objects.filter(
sessao_plenaria=sessao).order_by('parlamentar__nome_parlamentar')
for ausente in ausencia: for ausente in ausencia:
lst_ausencia_sessao.append({ lst_ausencia_sessao.append({
"parlamentar": ausente.parlamentar, "parlamentar": ausente.parlamentar,
@ -564,7 +567,8 @@ def get_sessao_plenaria(sessao, casa):
# Exibe os Expedientes # Exibe os Expedientes
lst_expedientes = [] lst_expedientes = []
expedientes = ExpedienteSessao.objects.filter(sessao_plenaria=sessao).order_by('tipo__nome') expedientes = ExpedienteSessao.objects.filter(
sessao_plenaria=sessao).order_by('tipo__nome')
for e in expedientes: for e in expedientes:
conteudo = e.conteudo conteudo = e.conteudo
if not is_empty(conteudo): if not is_empty(conteudo):
@ -572,9 +576,11 @@ def get_sessao_plenaria(sessao, casa):
# https://github.com/interlegis/sapl/issues/1046 # https://github.com/interlegis/sapl/issues/1046
conteudo = re.sub('style=".*?"', '', conteudo) conteudo = re.sub('style=".*?"', '', conteudo)
conteudo = re.sub('class=".*?"', '', conteudo) conteudo = re.sub('class=".*?"', '', conteudo)
conteudo = re.sub('align=".*?"', '', conteudo) # OSTicket Ticket #796450 # OSTicket Ticket #796450
conteudo = re.sub('align=".*?"', '', conteudo)
conteudo = re.sub('<p\s+>', '<p>', conteudo) conteudo = re.sub('<p\s+>', '<p>', conteudo)
conteudo = re.sub('<br\s+/>', '<br/>', conteudo) # OSTicket Ticket #796450 # OSTicket Ticket #796450
conteudo = re.sub('<br\s+/>', '<br/>', conteudo)
conteudo = html.unescape(conteudo) conteudo = html.unescape(conteudo)
# escape special character '&' # escape special character '&'
@ -612,12 +618,15 @@ def get_sessao_plenaria(sessao, casa):
"votacao_observacao": ' ' "votacao_observacao": ' '
} }
numeracao = Numeracao.objects.filter(materia=expediente_materia.materia).first() numeracao = Numeracao.objects.filter(
materia=expediente_materia.materia).first()
if numeracao: if numeracao:
dic_expediente_materia["des_numeracao"] = (str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia)) dic_expediente_materia["des_numeracao"] = (
str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia))
autoria = materia.autoria_set.all() autoria = materia.autoria_set.all()
dic_expediente_materia['num_autores'] = 'Autores' if len(autoria) > 1 else 'Autor' dic_expediente_materia['num_autores'] = 'Autores' if len(
autoria) > 1 else 'Autor'
if autoria: if autoria:
for a in autoria: for a in autoria:
if a.autor.nome: if a.autor.nome:
@ -630,14 +639,19 @@ def get_sessao_plenaria(sessao, casa):
materia=expediente_materia.materia).first() materia=expediente_materia.materia).first()
rp = expediente_materia.retiradapauta_set.filter( rp = expediente_materia.retiradapauta_set.filter(
materia=expediente_materia.materia).first() materia=expediente_materia.materia).first()
rl = expediente_materia.registroleitura_set.filter(
materia=expediente_materia.materia).first()
if rv: if rv:
resultado = rv.tipo_resultado_votacao.nome resultado = rv.tipo_resultado_votacao.nome
resultado_observacao = rv.observacao resultado_observacao = rv.observacao
elif rp: elif rp:
resultado = rp.tipo_de_retirada.descricao resultado = rp.tipo_de_retirada.descricao
resultado_observacao = rp.observacao resultado_observacao = rp.observacao
elif rl:
resultado = _('Matéria lida')
resultado_observacao = rl.observacao
else: else:
resultado = _('Matéria lida') \ resultado = _('Matéria não lida') \
if expediente_materia.tipo_votacao == 4 \ if expediente_materia.tipo_votacao == 4 \
else _('Matéria não votada') else _('Matéria não votada')
resultado_observacao = _(' ') resultado_observacao = _(' ')
@ -652,7 +666,7 @@ def get_sessao_plenaria(sessao, casa):
# Lista dos votos nominais das matérias do Expediente # Lista dos votos nominais das matérias do Expediente
lst_expediente_materia_vot_nom = [] lst_expediente_materia_vot_nom = []
materias_expediente_votacao_nominal = ExpedienteMateria.objects.filter(sessao_plenaria=sessao,tipo_votacao=2)\ materias_expediente_votacao_nominal = ExpedienteMateria.objects.filter(sessao_plenaria=sessao, tipo_votacao=2)\
.order_by('-materia') .order_by('-materia')
for mevn in materias_expediente_votacao_nominal: for mevn in materias_expediente_votacao_nominal:
@ -672,8 +686,10 @@ def get_sessao_plenaria(sessao, casa):
# Lista dos oradores do Expediente # Lista dos oradores do Expediente
lst_oradores_expediente = [] lst_oradores_expediente = []
for orador_expediente in OradorExpediente.objects.filter(sessao_plenaria=sessao).order_by('numero_ordem'): for orador_expediente in OradorExpediente.objects.filter(sessao_plenaria=sessao).order_by('numero_ordem'):
parlamentar = Parlamentar.objects.get(id=orador_expediente.parlamentar.id) parlamentar = Parlamentar.objects.get(
partido_sigla = Filiacao.objects.filter(parlamentar=parlamentar).first() id=orador_expediente.parlamentar.id)
partido_sigla = Filiacao.objects.filter(
parlamentar=parlamentar).first()
lst_oradores_expediente.append({ lst_oradores_expediente.append({
"num_ordem": orador_expediente.numero_ordem, "num_ordem": orador_expediente.numero_ordem,
"nom_parlamentar": parlamentar.nome_parlamentar, "nom_parlamentar": parlamentar.nome_parlamentar,
@ -709,7 +725,8 @@ def get_sessao_plenaria(sessao, casa):
numeracao = materia.numeracao_set.first() numeracao = materia.numeracao_set.first()
if numeracao: if numeracao:
dic_votacao["des_numeracao"] = (str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia)) dic_votacao["des_numeracao"] = (
str(numeracao.numero_materia) + '/' + str(numeracao.ano_materia))
materia_em_tramitacao = materia.materiaemtramitacao_set.first() materia_em_tramitacao = materia.materiaemtramitacao_set.first()
dic_votacao.update({ dic_votacao.update({
@ -736,14 +753,19 @@ def get_sessao_plenaria(sessao, casa):
materia=votacao.materia).first() materia=votacao.materia).first()
rp = votacao.retiradapauta_set.filter( rp = votacao.retiradapauta_set.filter(
materia=votacao.materia).first() materia=votacao.materia).first()
rl = votacao.registroleitura_set.filter(
materia=votacao.materia).first()
if rv: if rv:
resultado = rv.tipo_resultado_votacao.nome resultado = rv.tipo_resultado_votacao.nome
resultado_observacao = rv.observacao resultado_observacao = rv.observacao
elif rp: elif rp:
resultado = rp.tipo_de_retirada.descricao resultado = rp.tipo_de_retirada.descricao
resultado_observacao = rp.observacao resultado_observacao = rp.observacao
elif rl:
resultado = _('Matéria lida')
resultado_observacao = rl.observacao
else: else:
resultado = _('Matéria lida') if \ resultado = _('Matéria não lida') if \
votacao.tipo_votacao == 4 else _('Matéria não votada') votacao.tipo_votacao == 4 else _('Matéria não votada')
resultado_observacao = _(' ') resultado_observacao = _(' ')
@ -777,11 +799,14 @@ def get_sessao_plenaria(sessao, casa):
# Lista dos oradores da Ordem do Dia # Lista dos oradores da Ordem do Dia
lst_oradores_ordemdia = [] lst_oradores_ordemdia = []
oradores_ordem_dia = OradorOrdemDia.objects.filter(sessao_plenaria=sessao).order_by('numero_ordem') oradores_ordem_dia = OradorOrdemDia.objects.filter(
sessao_plenaria=sessao).order_by('numero_ordem')
for orador_ordemdia in oradores_ordem_dia: for orador_ordemdia in oradores_ordem_dia:
parlamentar_orador = Parlamentar.objects.get(id=orador_ordemdia.parlamentar.id) parlamentar_orador = Parlamentar.objects.get(
sigla_partido = Filiacao.objects.filter(parlamentar=parlamentar_orador).first() id=orador_ordemdia.parlamentar.id)
sigla_partido = Filiacao.objects.filter(
parlamentar=parlamentar_orador).first()
lst_oradores_ordemdia.append({ lst_oradores_ordemdia.append({
"num_ordem": orador_ordemdia.numero_ordem, "num_ordem": orador_ordemdia.numero_ordem,
@ -794,7 +819,8 @@ def get_sessao_plenaria(sessao, casa):
lst_oradores = [] lst_oradores = []
for orador in Orador.objects.select_related('parlamentar').filter(sessao_plenaria=sessao).order_by('numero_ordem'): for orador in Orador.objects.select_related('parlamentar').filter(sessao_plenaria=sessao).order_by('numero_ordem'):
parlamentar = orador.parlamentar parlamentar = orador.parlamentar
partido_sigla = orador.parlamentar.filiacao_set.select_related('partido', 'parlamentar').first() partido_sigla = orador.parlamentar.filiacao_set.select_related(
'partido', 'parlamentar').first()
lst_oradores.append({ lst_oradores.append({
"num_ordem": orador.numero_ordem, "num_ordem": orador.numero_ordem,
"nom_parlamentar": parlamentar.nome_parlamentar, "nom_parlamentar": parlamentar.nome_parlamentar,
@ -841,7 +867,8 @@ def get_sessao_plenaria(sessao, casa):
def get_turno(materia): def get_turno(materia):
descricao_turno = '' descricao_turno = ''
descricao_tramitacao = '' descricao_tramitacao = ''
tramitacoes = materia.tramitacao_set.order_by('-data_tramitacao', '-id').all() tramitacoes = materia.tramitacao_set.order_by(
'-data_tramitacao', '-id').all()
tramitacoes_turno = tramitacoes.exclude(turno="") tramitacoes_turno = tramitacoes.exclude(turno="")
if tramitacoes: if tramitacoes:
@ -850,7 +877,8 @@ def get_turno(materia):
if t[0] == tramitacoes_turno.first().turno: if t[0] == tramitacoes_turno.first().turno:
descricao_turno = str(t[1]) descricao_turno = str(t[1])
break break
descricao_tramitacao = tramitacoes.first().status.descricao if tramitacoes.first().status else 'Não informada' descricao_tramitacao = tramitacoes.first(
).status.descricao if tramitacoes.first().status else 'Não informada'
return descricao_turno, descricao_tramitacao return descricao_turno, descricao_tramitacao
@ -936,10 +964,10 @@ def get_protocolos(prots):
ts = timezone.localtime(protocolo.timestamp) ts = timezone.localtime(protocolo.timestamp)
if protocolo.timestamp: if protocolo.timestamp:
dic['data'] = ts.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' + \ dic['data'] = ts.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' + \
ts.strftime("%H:%m") ts.strftime("%H:%m")
else: else:
dic['data'] = protocolo.data.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' \ dic['data'] = protocolo.data.strftime("%d/%m/%Y") + ' - <b>Horário:</b>' \
+ protocolo.hora.strftime("%H:%m") + protocolo.hora.strftime("%H:%m")
dic['txt_assunto'] = protocolo.assunto_ementa dic['txt_assunto'] = protocolo.assunto_ementa
@ -1030,7 +1058,7 @@ def relatorio_etiqueta_protocolo(request, nro, ano):
protocolo = Protocolo.objects.filter(numero=nro, ano=ano) protocolo = Protocolo.objects.filter(numero=nro, ano=ano)
m = MateriaLegislativa.objects.filter(numero_protocolo=nro,ano=ano) m = MateriaLegislativa.objects.filter(numero_protocolo=nro, ano=ano)
protocolo_data = get_etiqueta_protocolos(protocolo) protocolo_data = get_etiqueta_protocolos(protocolo)
@ -1067,7 +1095,7 @@ def get_etiqueta_protocolos(prots):
for materia in MateriaLegislativa.objects.filter( for materia in MateriaLegislativa.objects.filter(
numero_protocolo=p.numero, ano=p.ano): numero_protocolo=p.numero, ano=p.ano):
dic['num_materia'] = materia.tipo.sigla + ' ' + \ dic['num_materia'] = materia.tipo.sigla + ' ' + \
str(materia.numero) + '/' + str(materia.ano) str(materia.numero) + '/' + str(materia.ano)
dic['natureza'] = '' dic['natureza'] = ''
if p.tipo_processo == 0: if p.tipo_processo == 0:
@ -1079,7 +1107,7 @@ def get_etiqueta_protocolos(prots):
for documento in DocumentoAdministrativo.objects.filter( for documento in DocumentoAdministrativo.objects.filter(
protocolo=p): protocolo=p):
dic['num_documento'] = documento.tipo.sigla + ' ' + \ dic['num_documento'] = documento.tipo.sigla + ' ' + \
str(documento.numero) + '/' + str(documento.ano) str(documento.numero) + '/' + str(documento.ano)
dic['ident_processo'] = dic['num_materia'] or dic['num_documento'] dic['ident_processo'] = dic['num_materia'] or dic['num_documento']
@ -1145,7 +1173,7 @@ def get_pauta_sessao(sessao, casa):
dic_expediente_materia = {} dic_expediente_materia = {}
dic_expediente_materia["tipo_materia"] = materia.tipo.sigla + \ dic_expediente_materia["tipo_materia"] = materia.tipo.sigla + \
' - ' + materia.tipo.descricao ' - ' + materia.tipo.descricao
dic_expediente_materia["num_ordem"] = str( dic_expediente_materia["num_ordem"] = str(
expediente_materia.numero_ordem) expediente_materia.numero_ordem)
dic_expediente_materia["id_materia"] = str( dic_expediente_materia["id_materia"] = str(
@ -1189,7 +1217,7 @@ def get_pauta_sessao(sessao, casa):
id=votacao.materia.id).first() id=votacao.materia.id).first()
dic_votacao = {} dic_votacao = {}
dic_votacao["tipo_materia"] = materia.tipo.sigla + \ dic_votacao["tipo_materia"] = materia.tipo.sigla + \
' - ' + materia.tipo.descricao ' - ' + materia.tipo.descricao
dic_votacao["num_ordem"] = votacao.numero_ordem dic_votacao["num_ordem"] = votacao.numero_ordem
dic_votacao["id_materia"] = str( dic_votacao["id_materia"] = str(
materia.numero) + "/" + str(materia.ano) materia.numero) + "/" + str(materia.ano)
@ -1231,9 +1259,11 @@ def get_pauta_sessao(sessao, casa):
# https://github.com/interlegis/sapl/issues/1046 # https://github.com/interlegis/sapl/issues/1046
conteudo = re.sub('style=".*?"', '', conteudo) conteudo = re.sub('style=".*?"', '', conteudo)
conteudo = re.sub('class=".*?"', '', conteudo) conteudo = re.sub('class=".*?"', '', conteudo)
conteudo = re.sub('align=".*?"', '', conteudo) # OSTicket Ticket #796450 # OSTicket Ticket #796450
conteudo = re.sub('align=".*?"', '', conteudo)
conteudo = re.sub('<p\s+>', '<p>', conteudo) conteudo = re.sub('<p\s+>', '<p>', conteudo)
conteudo = re.sub('<br\s+/>', '<br/>', conteudo) # OSTicket Ticket #796450 # OSTicket Ticket #796450
conteudo = re.sub('<br\s+/>', '<br/>', conteudo)
conteudo = html.unescape(conteudo) conteudo = html.unescape(conteudo)
# escape special character '&' # escape special character '&'
@ -1263,7 +1293,8 @@ def make_pdf(base_url, main_template, header_template, main_css='', header_css='
# Template of header # Template of header
html = HTML(base_url=base_url, string=header_template) html = HTML(base_url=base_url, string=header_template)
header = html.render(stylesheets=[CSS(string='@page {size:A4; margin:1cm;}')]) header = html.render(
stylesheets=[CSS(string='@page {size:A4; margin:1cm;}')])
header_page = header.pages[0] header_page = header.pages[0]
header_body = get_page_body(header_page._page_box.all_children()) header_body = get_page_body(header_page._page_box.all_children())
@ -1301,12 +1332,15 @@ def resumo_ata_pdf(request, pk):
context.update({'object': sessao_plenaria}) context.update({'object': sessao_plenaria})
context.update({'data': dt.today().strftime('%d/%m/%Y')}) context.update({'data': dt.today().strftime('%d/%m/%Y')})
context.update({'rodape': rodape}) context.update({'rodape': rodape})
header_context = {"casa": casa, 'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL} header_context = {"casa": casa,
'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL}
html_template = render_to_string('relatorios/relatorio_ata.html', context) html_template = render_to_string('relatorios/relatorio_ata.html', context)
html_header = render_to_string('relatorios/header_ata.html', header_context) html_header = render_to_string(
'relatorios/header_ata.html', header_context)
pdf_file = make_pdf(base_url=base_url, main_template=html_template, header_template=html_header) pdf_file = make_pdf(
base_url=base_url, main_template=html_template, header_template=html_header)
response = HttpResponse(content_type='application/pdf;') response = HttpResponse(content_type='application/pdf;')
response['Content-Disposition'] = 'inline; filename=relatorio.pdf' response['Content-Disposition'] = 'inline; filename=relatorio.pdf'
@ -1324,12 +1358,15 @@ def cria_relatorio(request, context, html_string, header_info=""):
context.update({'data': dt.today().strftime('%d/%m/%Y')}) context.update({'data': dt.today().strftime('%d/%m/%Y')})
context.update({'rodape': rodape}) context.update({'rodape': rodape})
header_context = {"casa": casa, 'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL, 'info': header_info} header_context = {"casa": casa, 'logotipo': casa.logotipo,
'MEDIA_URL': MEDIA_URL, 'info': header_info}
html_template = render_to_string(html_string, context) html_template = render_to_string(html_string, context)
html_header = render_to_string('relatorios/header_ata.html', header_context) html_header = render_to_string(
'relatorios/header_ata.html', header_context)
pdf_file = make_pdf(base_url=base_url, main_template=html_template, header_template=html_header) pdf_file = make_pdf(
base_url=base_url, main_template=html_template, header_template=html_header)
response = HttpResponse(content_type='application/pdf;') response = HttpResponse(content_type='application/pdf;')
response['Content-Disposition'] = 'inline; filename=relatorio.pdf' response['Content-Disposition'] = 'inline; filename=relatorio.pdf'
@ -1409,7 +1446,7 @@ def relatorio_pauta_sessao_weasy(obj, request, context):
return cria_relatorio(request, context, 'relatorios/relatorio_pauta_sessao.html', info) return cria_relatorio(request, context, 'relatorios/relatorio_pauta_sessao.html', info)
def relatorio_sessao_plenaria_pdf(request, pk): def relatorio_sessao_plenaria_pdf(request, pk):
base_url = request.build_absolute_uri() base_url = request.build_absolute_uri()
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
username = request.user.username username = request.user.username
@ -1463,24 +1500,24 @@ def relatorio_sessao_plenaria_pdf(request, pk):
} }
context = { context = {
"inf_basicas_dic": inf_basicas_dic, "inf_basicas_dic": inf_basicas_dic,
"cont_mult_dic": cont_mult_dic, "cont_mult_dic": cont_mult_dic,
"lst_mesa": lst_mesa, "lst_mesa": lst_mesa,
"lst_expediente_materia_vot_nom": lst_expediente_materia_vot_nom, "lst_expediente_materia_vot_nom": lst_expediente_materia_vot_nom,
"lst_presenca_sessao": lst_presenca_sessao, "lst_presenca_sessao": lst_presenca_sessao,
"lst_ausencia_sessao": lst_ausencia_sessao, "lst_ausencia_sessao": lst_ausencia_sessao,
"lst_expedientes": lst_expedientes, "lst_expedientes": lst_expedientes,
"lst_expediente_materia": lst_expediente_materia, "lst_expediente_materia": lst_expediente_materia,
"lst_oradores_expediente": lst_oradores_expediente, "lst_oradores_expediente": lst_oradores_expediente,
"lst_presenca_ordem_dia": lst_presenca_ordem_dia, "lst_presenca_ordem_dia": lst_presenca_ordem_dia,
"lst_votacao": lst_votacao, "lst_votacao": lst_votacao,
"lst_oradores_ordemdia": lst_oradores_ordemdia, "lst_oradores_ordemdia": lst_oradores_ordemdia,
"lst_votacao_vot_nom": lst_votacao_vot_nom, "lst_votacao_vot_nom": lst_votacao_vot_nom,
"lst_oradores": lst_oradores, "lst_oradores": lst_oradores,
"lst_ocorrencias": lst_ocorrencias, "lst_ocorrencias": lst_ocorrencias,
"rodape": rodape, "rodape": rodape,
"data": dt.today().strftime('%d/%m/%Y') "data": dt.today().strftime('%d/%m/%Y')
} }
ordenacao = ResumoOrdenacao.objects.get_or_create()[0] ordenacao = ResumoOrdenacao.objects.get_or_create()[0]
try: try:
@ -1520,7 +1557,8 @@ def relatorio_sessao_plenaria_pdf(request, pk):
'decimo_quarto_ordenacao': 'ocorrencias_sessao.html' 'decimo_quarto_ordenacao': 'ocorrencias_sessao.html'
}) })
html_template = render_to_string('relatorios/relatorio_sessao_plenaria.html', context) html_template = render_to_string(
'relatorios/relatorio_sessao_plenaria.html', context)
info = "Resumo da {}ª Reunião {} \ info = "Resumo da {}ª Reunião {} \
da {}ª Sessão Legislativa da {} \ da {}ª Sessão Legislativa da {} \
@ -1535,7 +1573,8 @@ def relatorio_sessao_plenaria_pdf(request, pk):
"logotipo": casa.logotipo, "logotipo": casa.logotipo,
"info": info}) "info": info})
pdf_file = make_pdf(base_url=base_url, main_template=html_template, header_template=html_header) pdf_file = make_pdf(
base_url=base_url, main_template=html_template, header_template=html_header)
response = HttpResponse(content_type='application/pdf;') response = HttpResponse(content_type='application/pdf;')
response['Content-Disposition'] = 'inline; filename=relatorio.pdf' response['Content-Disposition'] = 'inline; filename=relatorio.pdf'
@ -1548,32 +1587,35 @@ def relatorio_sessao_plenaria_pdf(request, pk):
def gera_etiqueta_ml(materia_legislativa, base_url): def gera_etiqueta_ml(materia_legislativa, base_url):
confg = ConfigEtiquetaMateriaLegislativa.objects.first() confg = ConfigEtiquetaMateriaLegislativa.objects.first()
ml_info = unidecode.unidecode("{}/{}-{}".format(materia_legislativa.numero, ml_info = unidecode.unidecode("{}/{}-{}".format(materia_legislativa.numero,
materia_legislativa.ano, materia_legislativa.ano,
materia_legislativa.tipo.sigla)) materia_legislativa.tipo.sigla))
base64_data = create_barcode(ml_info, 100, 500) base64_data = create_barcode(ml_info, 100, 500)
barcode = 'data:image/png;base64,{0}'.format(base64_data) barcode = 'data:image/png;base64,{0}'.format(base64_data)
max_ementa_size = 240 max_ementa_size = 240
ementa = materia_legislativa.ementa ementa = materia_legislativa.ementa
ementa = ementa if len(ementa) < max_ementa_size else ementa[:max_ementa_size]+"..." ementa = ementa if len(
ementa) < max_ementa_size else ementa[:max_ementa_size]+"..."
context = { context = {
'numero': materia_legislativa.numero, 'numero': materia_legislativa.numero,
'ano': materia_legislativa.ano, 'ano': materia_legislativa.ano,
'tipo': materia_legislativa.tipo, 'tipo': materia_legislativa.tipo,
'data_apresentacao':materia_legislativa.data_apresentacao, 'data_apresentacao': materia_legislativa.data_apresentacao,
'autores': materia_legislativa.autores.all(), 'autores': materia_legislativa.autores.all(),
'ementa':ementa, 'ementa': ementa,
'largura': confg.largura, 'largura': confg.largura,
'altura':confg.largura, 'altura': confg.largura,
'barcode': barcode 'barcode': barcode
} }
main_template = render_to_string('relatorios/etiqueta_materia_legislativa.html', context) main_template = render_to_string(
'relatorios/etiqueta_materia_legislativa.html', context)
html = HTML(base_url=base_url, string=main_template) html = HTML(base_url=base_url, string=main_template)
main_doc = html.render(stylesheets=[CSS(string="@page {{size: {}cm {}cm;}}".format(confg.largura,confg.altura))]) main_doc = html.render(stylesheets=[CSS(
string="@page {{size: {}cm {}cm;}}".format(confg.largura, confg.altura))])
pdf_file = main_doc.write_pdf() pdf_file = main_doc.write_pdf()
return pdf_file return pdf_file
@ -1582,7 +1624,7 @@ def gera_etiqueta_ml(materia_legislativa, base_url):
def etiqueta_materia_legislativa(request, pk): def etiqueta_materia_legislativa(request, pk):
base_url = request.build_absolute_uri() base_url = request.build_absolute_uri()
materia_legislativa = MateriaLegislativa.objects.get(pk=pk) materia_legislativa = MateriaLegislativa.objects.get(pk=pk)
pdf_file = gera_etiqueta_ml(materia_legislativa, base_url) pdf_file = gera_etiqueta_ml(materia_legislativa, base_url)
response = HttpResponse(content_type='application/pdf;') response = HttpResponse(content_type='application/pdf;')
@ -1590,4 +1632,4 @@ def etiqueta_materia_legislativa(request, pk):
response['Content-Transfer-Encoding'] = 'binary' response['Content-Transfer-Encoding'] = 'binary'
response.write(pdf_file) response.write(pdf_file)
return response return response

86
sapl/sessao/views.py

@ -86,7 +86,8 @@ def reordena_materias(request, pk, tipo, ordenacao):
"ordemdia": "sapl.sessao:ordemdia_list" "ordemdia": "sapl.sessao:ordemdia_list"
} }
materias = TIPOS_MATERIAS[tipo].objects.filter(sessao_plenaria_id=pk).order_by(*TIPOS_ORDENACAO[ordenacao]) materias = TIPOS_MATERIAS[tipo].objects.filter(
sessao_plenaria_id=pk).order_by(*TIPOS_ORDENACAO[ordenacao])
update_list = [] update_list = []
for numero, materia in enumerate(materias, 1): for numero, materia in enumerate(materias, 1):
@ -102,11 +103,12 @@ def verifica_presenca(request, model, spk, is_leitura=False):
if not model.objects.filter(sessao_plenaria_id=spk).exists(): if not model.objects.filter(sessao_plenaria_id=spk).exists():
username = request.user.username username = request.user.username
if is_leitura: if is_leitura:
text = 'Leitura não pode ser feita sem presenças' text = 'Leitura não pode ser feita sem presenças'
else: else:
text = 'Votação não pode ser aberta sem presenças' text = 'Votação não pode ser aberta sem presenças'
logger.error("user={}. {} (sessao_plenaria_id={}).".format(username,text, spk)) logger.error("user={}. {} (sessao_plenaria_id={}).".format(
username, text, spk))
msg = _(text) msg = _(text)
messages.add_message(request, messages.ERROR, msg) messages.add_message(request, messages.ERROR, msg)
return False return False
@ -182,7 +184,7 @@ def abrir_votacao(request, pk, spk):
is_leitura = materia_votacao.tipo_votacao == 4 is_leitura = materia_votacao.tipo_votacao == 4
if (verifica_presenca(request, presenca_model, spk, is_leitura) and if (verifica_presenca(request, presenca_model, spk, is_leitura) and
verifica_votacoes_abertas(request) and verifica_votacoes_abertas(request) and
verifica_sessao_iniciada(request, spk, is_leitura)): verifica_sessao_iniciada(request, spk, is_leitura)):
materia_votacao.votacao_aberta = True materia_votacao.votacao_aberta = True
sessao = SessaoPlenaria.objects.get(id=spk) sessao = SessaoPlenaria.objects.get(id=spk)
sessao.painel_aberto = True sessao.painel_aberto = True
@ -204,7 +206,8 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
for i, row in enumerate(context['rows']): for i, row in enumerate(context['rows']):
materia = context['object_list'][i].materia materia = context['object_list'][i].materia
obj = context['object_list'][i] obj = context['object_list'][i]
url_materia = reverse('sapl.materia:materialegislativa_detail', kwargs={'pk': materia.id}) url_materia = reverse(
'sapl.materia:materialegislativa_detail', kwargs={'pk': materia.id})
numeracao = materia.numeracao_set.first() if materia.numeracao_set.first() else "-" numeracao = materia.numeracao_set.first() if materia.numeracao_set.first() else "-"
autoria = materia.autoria_set.filter(primeiro_autor=True) autoria = materia.autoria_set.filter(primeiro_autor=True)
autor = ', '.join([str(a.autor) for a in autoria]) if autoria else "-" autor = ', '.join([str(a.autor) for a in autoria]) if autoria else "-"
@ -239,9 +242,12 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
# url em toda a string de title_materia # url em toda a string de title_materia
context['rows'][i][1] = (title_materia, None) context['rows'][i][1] = (title_materia, None)
exist_resultado = obj.registrovotacao_set.filter(materia=obj.materia).exists() exist_resultado = obj.registrovotacao_set.filter(
exist_retirada = obj.retiradapauta_set.filter(materia=obj.materia).exists() materia=obj.materia).exists()
exist_leitura = obj.registroleitura_set.filter(materia=obj.materia).exists() exist_retirada = obj.retiradapauta_set.filter(
materia=obj.materia).exists()
exist_leitura = obj.registroleitura_set.filter(
materia=obj.materia).exists()
if (obj.tipo_votacao != 4 and not exist_resultado and not exist_retirada) or\ if (obj.tipo_votacao != 4 and not exist_resultado and not exist_retirada) or\
(obj.tipo_votacao == 4 and not exist_leitura): (obj.tipo_votacao == 4 and not exist_leitura):
@ -559,7 +565,7 @@ def filtra_materias_copia_sessao_ajax(request):
} for opcao in lista_materias_disponiveis_copia } for opcao in lista_materias_disponiveis_copia
] ]
return JsonResponse({ 'materias': lista_materias }) return JsonResponse({'materias': lista_materias})
class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView): class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView):
@ -571,7 +577,8 @@ class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView):
TransferenciaMateriasSessaoAbstract, self TransferenciaMateriasSessaoAbstract, self
).get_context_data(**kwargs) ).get_context_data(**kwargs)
sessao_plenaria_atual = SessaoPlenaria.objects.get(pk=self.kwargs['pk']) sessao_plenaria_atual = SessaoPlenaria.objects.get(
pk=self.kwargs['pk'])
context['subnav_template_name'] = 'sessao/subnav.yaml' context['subnav_template_name'] = 'sessao/subnav.yaml'
context['root_pk'] = self.kwargs['pk'] context['root_pk'] = self.kwargs['pk']
@ -627,7 +634,7 @@ class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView):
messages.add_message(request, messages.ERROR, msg) messages.add_message(request, messages.ERROR, msg)
msg_c = _( msg_c = _(
'Se o problema persistir, entre em contato com o suporte do ' \ 'Se o problema persistir, entre em contato com o suporte do '
'Interlegis.' 'Interlegis.'
) )
messages.add_message(request, messages.WARNING, msg_c) messages.add_message(request, messages.WARNING, msg_c)
@ -925,7 +932,6 @@ class OradorCrud(MasterDetailCrud):
form_class = OradorForm form_class = OradorForm
template_name = 'sessao/oradores_create.html' template_name = 'sessao/oradores_create.html'
def get_initial(self): def get_initial(self):
return {'id_sessao': self.kwargs['pk']} return {'id_sessao': self.kwargs['pk']}
@ -937,7 +943,8 @@ class OradorCrud(MasterDetailCrud):
if tipo_sessao.nome == "Solene": if tipo_sessao.nome == "Solene":
context.update( context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'}) {'subnav_template_name': 'sessao/subnav-solene.yaml'})
ultimo_orador = Orador.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() ultimo_orador = Orador.objects.filter(
sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context return context
@ -1009,7 +1016,8 @@ class OradorExpedienteCrud(OradorCrud):
if tipo_sessao.nome == "Solene": if tipo_sessao.nome == "Solene":
context.update( context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'}) {'subnav_template_name': 'sessao/subnav-solene.yaml'})
ultimo_orador = OradorExpediente.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() ultimo_orador = OradorExpediente.objects.filter(
sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context return context
@ -1074,6 +1082,7 @@ class OradorExpedienteCrud(OradorCrud):
class OradorOrdemDiaCrud(OradorCrud): class OradorOrdemDiaCrud(OradorCrud):
model = OradorOrdemDia model = OradorOrdemDia
class CreateView(MasterDetailCrud.CreateView): class CreateView(MasterDetailCrud.CreateView):
form_class = OradorOrdemDiaForm form_class = OradorOrdemDiaForm
template_name = 'sessao/oradores_create.html' template_name = 'sessao/oradores_create.html'
@ -1087,7 +1096,8 @@ class OradorOrdemDiaCrud(OradorCrud):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
ultimo_orador = OradorOrdemDia.objects.filter(sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() ultimo_orador = OradorOrdemDia.objects.filter(
sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first()
context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0
return context return context
@ -1936,20 +1946,26 @@ def get_materias_expediente(sessao_plenaria):
rv = m.registrovotacao_set.filter(materia=m.materia).first() rv = m.registrovotacao_set.filter(materia=m.materia).first()
rp = m.retiradapauta_set.filter(materia=m.materia).first() rp = m.retiradapauta_set.filter(materia=m.materia).first()
rl = m.registroleitura_set.filter(materia=m.materia).first()
if rv: if rv:
resultado = rv.tipo_resultado_votacao.nome resultado = rv.tipo_resultado_votacao.nome
resultado_observacao = rv.observacao resultado_observacao = rv.observacao
elif rp: elif rp:
resultado = rp.tipo_de_retirada.descricao resultado = rp.tipo_de_retirada.descricao
resultado_observacao = rp.observacao resultado_observacao = rp.observacao
elif rl:
resultado = _('Matéria lida')
resultado_observacao = rl.observacao
else: else:
resultado = _('Matéria lida') if m.tipo_votacao == 4 else _('Matéria não votada') resultado = _('Matéria não lida') if m.tipo_votacao == 4 else _(
'Matéria não votada')
resultado_observacao = '' resultado_observacao = ''
voto_nominal = [] voto_nominal = []
if m.tipo_votacao == 2: if m.tipo_votacao == 2:
for voto in VotoParlamentar.objects.filter(expediente=m.id): for voto in VotoParlamentar.objects.filter(expediente=m.id):
voto_nominal.append((voto.parlamentar.nome_completo, voto.voto)) voto_nominal.append(
(voto.parlamentar.nome_completo, voto.voto))
voto = RegistroVotacao.objects.filter(expediente=m.id).last() voto = RegistroVotacao.objects.filter(expediente=m.id).last()
if voto: if voto:
@ -1978,7 +1994,7 @@ def get_materias_expediente(sessao_plenaria):
'voto_nao': voto_nao, 'voto_nao': voto_nao,
'voto_abstencoes': voto_abstencoes, 'voto_abstencoes': voto_abstencoes,
'voto_nominal': voto_nominal, 'voto_nominal': voto_nominal,
'observacao_materia': m.materia.observacao, 'observacao_materia': m.materia.observacao,
'observacao': m.observacao 'observacao': m.observacao
}) })
@ -2061,20 +2077,26 @@ def get_materias_ordem_do_dia(sessao_plenaria):
# Verificar resultado # Verificar resultado
rv = o.registrovotacao_set.filter(materia=o.materia).first() rv = o.registrovotacao_set.filter(materia=o.materia).first()
rp = o.retiradapauta_set.filter(materia=o.materia).first() rp = o.retiradapauta_set.filter(materia=o.materia).first()
rl = o.registroleitura_set.filter(materia=o.materia).first()
if rv: if rv:
resultado = rv.tipo_resultado_votacao.nome resultado = rv.tipo_resultado_votacao.nome
resultado_observacao = rv.observacao resultado_observacao = rv.observacao
elif rp: elif rp:
resultado = rp.tipo_de_retirada.descricao resultado = rp.tipo_de_retirada.descricao
resultado_observacao = rp.observacao resultado_observacao = rp.observacao
elif rl:
resultado = _('Matéria lida')
resultado_observacao = rl.observacao
else: else:
resultado = _('Matéria lida') if o.tipo_votacao == 4 else _('Matéria não votada') resultado = _('Matéria não lida') if o.tipo_votacao == 4 else _(
'Matéria não votada')
resultado_observacao = '' resultado_observacao = ''
voto_nominal = [] voto_nominal = []
if o.tipo_votacao == 2: if o.tipo_votacao == 2:
for voto in VotoParlamentar.objects.filter(ordem=o.id): for voto in VotoParlamentar.objects.filter(ordem=o.id):
voto_nominal.append((voto.parlamentar.nome_completo, voto.voto)) voto_nominal.append(
(voto.parlamentar.nome_completo, voto.voto))
voto = RegistroVotacao.objects.filter(ordem=o.id).last() voto = RegistroVotacao.objects.filter(ordem=o.id).last()
if voto: if voto:
@ -2104,7 +2126,7 @@ def get_materias_ordem_do_dia(sessao_plenaria):
'voto_nao': voto_nao, 'voto_nao': voto_nao,
'voto_abstencoes': voto_abstencoes, 'voto_abstencoes': voto_abstencoes,
'voto_nominal': voto_nominal, 'voto_nominal': voto_nominal,
'observacao': o.observacao 'observacao': o.observacao
}) })
return {'materias_ordem': materias_ordem} return {'materias_ordem': materias_ordem}
@ -3435,7 +3457,8 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
self.logger.error("user=" + username + ". " + str(e)) self.logger.error("user=" + username + ". " + str(e))
return self.form_invalid(form) return self.form_invalid(form)
else: else:
expediente = ExpedienteMateria.objects.get(id=expediente_id) expediente = ExpedienteMateria.objects.get(
id=expediente_id)
resultado = TipoResultadoVotacao.objects.get( resultado = TipoResultadoVotacao.objects.get(
id=request.POST['resultado_votacao']) id=request.POST['resultado_votacao'])
expediente.resultado = resultado.nome expediente.resultado = resultado.nome
@ -3586,7 +3609,8 @@ class PautaSessaoDetailView(DetailView):
# ===================================================================== # =====================================================================
# Identificação Básica # Identificação Básica
abertura = self.object.data_inicio.strftime('%d/%m/%Y') abertura = self.object.data_inicio.strftime('%d/%m/%Y')
encerramento = self.object.data_fim.strftime('%d/%m/%Y') if self.object.data_fim else "" encerramento = self.object.data_fim.strftime(
'%d/%m/%Y') if self.object.data_fim else ""
hora_inicio = self.object.hora_inicio hora_inicio = self.object.hora_inicio
hora_fim = self.object.hora_fim hora_fim = self.object.hora_fim
@ -3612,7 +3636,8 @@ class PautaSessaoDetailView(DetailView):
resultado = _('Matéria não votada') resultado = _('Matéria não votada')
resultado_observacao = _(' ') resultado_observacao = _(' ')
ultima_tramitacao = m.materia.tramitacao_set.order_by('-data_tramitacao', '-id').first() ultima_tramitacao = m.materia.tramitacao_set.order_by(
'-data_tramitacao', '-id').first()
numeracao = m.materia.numeracao_set.first() numeracao = m.materia.numeracao_set.first()
materias_expediente.append({ materias_expediente.append({
@ -3662,7 +3687,8 @@ class PautaSessaoDetailView(DetailView):
resultado = _('Matéria não votada') resultado = _('Matéria não votada')
resultado_observacao = _(' ') resultado_observacao = _(' ')
ultima_tramitacao = o.materia.tramitacao_set.order_by('-data_tramitacao', '-id').first() ultima_tramitacao = o.materia.tramitacao_set.order_by(
'-data_tramitacao', '-id').first()
numeracao = o.materia.numeracao_set.first() numeracao = o.materia.numeracao_set.first()
materias_ordem.append({ materias_ordem.append({
@ -3792,7 +3818,7 @@ def verifica_materia_sessao_plenaria_ajax(request):
sessao_plenaria=pk_sessao_plenaria, materia=id_materia_selecionada sessao_plenaria=pk_sessao_plenaria, materia=id_materia_selecionada
).exists() ).exists()
return JsonResponse({ 'is_materia_presente': is_materia_presente }) return JsonResponse({'is_materia_presente': is_materia_presente})
class AdicionarVariasMateriasExpediente(PermissionRequiredForAppCrudMixin, class AdicionarVariasMateriasExpediente(PermissionRequiredForAppCrudMixin,
@ -4727,7 +4753,7 @@ class AbstractLeituraView(FormView):
page = '' page = ''
if 'page' in self.request.GET: if 'page' in self.request.GET:
page = '?page={}'.format(self.request.GET['page']) page = '?page={}'.format(self.request.GET['page'])
pk = self.kwargs['pk'] pk = self.kwargs['pk']
if self.expediente: if self.expediente:
url = reverse('sapl.sessao:expedientemateria_list', url = reverse('sapl.sessao:expedientemateria_list',
@ -4746,8 +4772,8 @@ class AbstractLeituraView(FormView):
'pk': self.kwargs['pk'], 'pk': self.kwargs['pk'],
'iso': 1 if not self.expediente else 0, 'iso': 1 if not self.expediente else 0,
'oid': self.kwargs['oid'], 'oid': self.kwargs['oid'],
}, },
) + page ) + page
return url return url

Loading…
Cancel
Save