Browse Source

Fix #1435 (#1454)

* Remove código desnecessário e faz ajustes na lógica

* Melhorias no codigo do Painel
pull/1452/merge
Eduardo Calil 7 years ago
committed by Edward
parent
commit
9144ff6999
  1. 303
      sapl/painel/views.py
  2. 67
      sapl/templates/painel/index.html

303
sapl/painel/views.py

@ -16,7 +16,7 @@ from sapl.parlamentares.models import Filiacao, Votante
from sapl.sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia,
RegistroVotacao, SessaoPlenaria,
SessaoPlenariaPresenca, VotoParlamentar)
from sapl.utils import get_client_ip
from sapl.utils import filiacao_data, get_client_ip, parlamentares_ativos
from .models import Cronometro
@ -252,8 +252,6 @@ def get_cronometro_status(request, name):
cronometro = ''
return cronometro
# ##############################ORDEM DO DIA##################################
def get_materia_aberta(pk):
return OrdemDia.objects.filter(
@ -261,56 +259,43 @@ def get_materia_aberta(pk):
def get_presentes(pk, response, materia):
filiacao = Filiacao.objects.filter(
data_desfiliacao__isnull=True, parlamentar__ativo=True)
parlamentar_partido = {}
for f in filiacao:
parlamentar_partido[
f.parlamentar.nome_parlamentar] = f.partido.sigla
sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter(
if type(materia) == OrdemDia:
presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=pk)
presentes_sessao_plenaria = [
p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca]
num_presentes_sessao_plen = len(presentes_sessao_plenaria)
elif type(materia) == ExpedienteMateria:
presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=pk)
presenca_ordem_dia = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=pk)
presentes_ordem_dia = []
for p in presenca_ordem_dia:
nome_parlamentar = p.parlamentar.nome_parlamentar
try:
parlamentar_partido[nome_parlamentar]
except KeyError:
presentes_ordem_dia.append(
{'id': p.id,
'nome': nome_parlamentar,
'partido': str(_('Sem Registro')),
})
num_presentes = len(presentes)
data_sessao = materia.sessao_plenaria.data_inicio
presentes_list = []
for p in presentes:
filiacao = filiacao_data(p.parlamentar, data_sessao, data_sessao)
if not filiacao:
partido = _('Sem Registro')
else:
presentes_ordem_dia.append(
{'id': p.id,
'nome': nome_parlamentar,
'partido': parlamentar_partido[nome_parlamentar],
})
num_presentes_ordem_dia = len(presentes_ordem_dia)
partido = filiacao
presentes_list.append(
{'id': p.id,
'parlamentar_id': p.parlamentar.id,
'nome': p.parlamentar.nome_parlamentar,
'partido': partido,
'voto': ''
})
if materia.tipo_votacao == 1:
tipo_votacao = str(_('Simbólica'))
response = get_votos(response, materia)
tipo_votacao = 'Simbólica'
elif materia.tipo_votacao == 2:
tipo_votacao = 'Nominal'
response = get_votos_nominal(response, materia)
elif materia.tipo_votacao == 3:
tipo_votacao = 'Secreta'
response = get_votos(response, materia)
response.update({
'presentes_ordem_dia': presentes_ordem_dia,
'num_presentes_ordem_dia': num_presentes_ordem_dia,
'presentes_sessao_plenaria': presentes_sessao_plenaria,
'num_presentes_sessao_plenaria': num_presentes_sessao_plen,
'presentes': presentes_list,
'num_presentes': num_presentes,
'status_painel': 'ABERTO',
'msg_painel': str(_('Votação aberta!')),
'tipo_resultado': materia.resultado,
@ -321,76 +306,11 @@ def get_presentes(pk, response, materia):
return response
# ########################EXPEDIENTE############################################
def get_materia_expediente_aberta(pk):
return ExpedienteMateria.objects.filter(
sessao_plenaria_id=pk, votacao_aberta=True).last()
def get_presentes_expediente(pk, response, materia):
filiacao = Filiacao.objects.filter(
data_desfiliacao__isnull=True, parlamentar__ativo=True)
parlamentar_partido = {}
for f in filiacao:
parlamentar_partido[
f.parlamentar.nome_parlamentar] = f.partido.sigla
sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=pk)
presentes_sessao_plenaria = [
p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca]
num_presentes_sessao_plen = len(presentes_sessao_plenaria)
presenca_expediente = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=pk)
presentes_expediente = []
for p in presenca_expediente:
nome_parlamentar = p.parlamentar.nome_parlamentar
try:
parlamentar_partido[nome_parlamentar]
except KeyError:
presentes_expediente.append(
{'id': p.id,
'nome': nome_parlamentar,
'partido': str(_('Sem Registro')),
})
else:
presentes_expediente.append(
{'id': p.id,
'nome': nome_parlamentar,
'partido': parlamentar_partido[nome_parlamentar],
})
num_presentes_expediente = len(presentes_expediente)
if materia.tipo_votacao == 1:
tipo_votacao = 'Simbólica'
response = get_votos(response, materia)
elif materia.tipo_votacao == 2:
tipo_votacao = 'Nominal'
response = get_votos_nominal(response, materia)
elif materia.tipo_votacao == 3:
tipo_votacao = 'Secreta'
response = get_votos(response, materia)
response.update({
'presentes_expediente': presentes_expediente,
'num_presentes_expediente': num_presentes_expediente,
'presentes_sessao_plenaria': presentes_sessao_plenaria,
'num_presentes_sessao_plenaria': num_presentes_sessao_plen,
'status_painel': str(_('ABERTO')),
'msg_painel': str(_('Votação aberta!')),
'tipo_resultado': tipo_votacao,
'observacao_materia': materia.observacao,
'materia_legislativa_texto': str(materia.materia)})
return response
# ##########################GENERAL FUNCTIONS#############################
def response_nenhuma_materia(response):
response.update({
'status_painel': 'FECHADO',
@ -399,60 +319,10 @@ def response_nenhuma_materia(response):
def get_votos(response, materia):
if materia.tipo_votacao == 1:
tipo_votacao = 'Simbólica'
elif materia.tipo_votacao == 2:
tipo_votacao = 'Nominal'
elif materia.tipo_votacao == 3:
tipo_votacao = 'Secreta'
if type(materia) == OrdemDia:
registro = RegistroVotacao.objects.filter(
ordem=materia, materia=materia.materia).last()
else:
registro = RegistroVotacao.objects.filter(
expediente=materia, materia=materia.materia).last()
if registro:
total = (registro.numero_votos_sim +
registro.numero_votos_nao +
registro.numero_abstencoes)
response.update({
'numero_votos_sim': registro.numero_votos_sim,
'numero_votos_nao': registro.numero_votos_nao,
'numero_abstencoes': registro.numero_abstencoes,
'total_votos': total,
'tipo_votacao': tipo_votacao,
'tipo_resultado': registro.tipo_resultado_votacao.nome,
'natureza_resultado': registro.tipo_resultado_votacao.natureza,
})
else:
response.update({
'numero_votos_sim': 0,
'numero_votos_nao': 0,
'numero_abstencoes': 0,
'total_votos': 0,
'tipo_votacao': tipo_votacao,
'tipo_resultado': 'Ainda não foi votada.',
'natureza_resultado': None,
})
return response
def get_votos_nominal(response, materia):
votos = []
if materia.tipo_votacao == 1:
tipo_votacao = 'Simbólica'
elif materia.tipo_votacao == 2:
tipo_votacao = 'Nominal'
elif materia.tipo_votacao == 3:
tipo_votacao = 'Secreta'
if type(materia) == OrdemDia:
registro = RegistroVotacao.objects.filter(
ordem=materia, materia=materia.materia).last()
else:
elif type(materia) == ExpedienteMateria:
registro = RegistroVotacao.objects.filter(
expediente=materia, materia=materia.materia).last()
@ -461,54 +331,34 @@ def get_votos_nominal(response, materia):
'numero_votos_sim': 0,
'numero_votos_nao': 0,
'numero_abstencoes': 0,
'registro': None,
'total_votos': 0,
'tipo_votacao': tipo_votacao,
'tipo_resultado': 'Não foi votado ainda',
'natureza_resultado': None,
'votos': None
'tipo_resultado': 'Ainda não foi votada.',
})
else:
votos_parlamentares = VotoParlamentar.objects.filter(
votacao_id=registro.id).order_by('parlamentar__nome_parlamentar')
filiacao = Filiacao.objects.filter(
data_desfiliacao__isnull=True, parlamentar__ativo=True)
parlamentar_partido = {}
for f in filiacao:
parlamentar_partido[
f.parlamentar.nome_parlamentar] = f.partido.sigla
for v in votos_parlamentares:
try:
parlamentar_partido[v.parlamentar.nome_parlamentar]
except KeyError:
votos.append({
'parlamentar': v.parlamentar.nome_parlamentar,
'voto': str(v.voto),
'partido': str(_('Sem Registro'))
})
else:
votos.append({
'parlamentar': v.parlamentar.nome_parlamentar,
'voto': str(v.voto),
'partido': parlamentar_partido[
v.parlamentar.nome_parlamentar]
})
total = (registro.numero_votos_sim +
registro.numero_votos_nao +
registro.numero_abstencoes)
if materia.tipo_votacao == 2:
votos_parlamentares = VotoParlamentar.objects.filter(
votacao_id=registro.id).order_by('parlamentar__nome_parlamentar')
for i, p in enumerate(response['presentes']):
try:
response['presentes'][i]['voto'] = votos_parlamentares.get(
parlamentar_id=p['parlamentar_id']).voto
except ObjectDoesNotExist:
response['presentes'][i]['voto'] = None
response.update({
'numero_votos_sim': registro.numero_votos_sim,
'numero_votos_nao': registro.numero_votos_nao,
'numero_abstencoes': registro.numero_abstencoes,
'registro': True,
'total_votos': total,
'tipo_votacao': tipo_votacao,
'tipo_resultado': registro.tipo_resultado_votacao.nome,
'natureza_resultado': registro.tipo_resultado_votacao.natureza,
'votos': votos
})
return response
@ -517,79 +367,60 @@ def get_votos_nominal(response, materia):
@user_passes_test(check_permission)
def get_dados_painel(request, pk):
sessao = SessaoPlenaria.objects.get(id=pk)
cronometro_discurso = get_cronometro_status(request, 'discurso')
cronometro_aparte = get_cronometro_status(request, 'aparte')
cronometro_ordem = get_cronometro_status(request, 'ordem')
response = {
'sessao_plenaria': str(sessao),
'sessao_plenaria_data': sessao.data_inicio.strftime('%d/%m/%Y'),
'sessao_plenaria_hora_inicio': sessao.hora_inicio,
"cronometro_aparte": cronometro_aparte,
"cronometro_discurso": cronometro_discurso,
"cronometro_ordem": cronometro_ordem,
'cronometro_aparte': get_cronometro_status(request, 'aparte'),
'cronometro_discurso': get_cronometro_status(request, 'discurso'),
'cronometro_ordem': get_cronometro_status(request, 'ordem'),
}
ordem_dia = get_materia_aberta(pk)
expediente = get_materia_expediente_aberta(pk)
# Caso tenha alguma matéria com votação aberta, ela é mostrada no painel
# com prioridade para Ordem do Dia.
if ordem_dia:
return JsonResponse(get_presentes(pk, response, ordem_dia))
return JsonResponse(get_votos(
get_presentes(pk, response, ordem_dia),
ordem_dia))
elif expediente:
return JsonResponse(get_presentes_expediente(pk, response, expediente))
return JsonResponse(get_votos(
get_presentes(pk, response, expediente),
expediente))
# Ultimo voto em ordem e ultimo voto em expediente
# Caso não tenha nenhuma aberta, a matéria a ser mostrada no Painel deve ser
# a última votada
last_ordem_voto = RegistroVotacao.objects.filter(
ordem__sessao_plenaria=sessao).last()
last_expediente_voto = RegistroVotacao.objects.filter(
expediente__sessao_plenaria=sessao).last()
# Ultimas materias votadas
if last_ordem_voto:
ultima_ordem_votada = last_ordem_voto.ordem
if last_expediente_voto:
ultimo_expediente_votado = last_expediente_voto.expediente
# Caso não tenha nenhuma votação aberta
if last_ordem_voto or last_expediente_voto:
# Se alguma ordem E algum expediente já tiver sido votado...
if last_ordem_voto and last_expediente_voto:
# Verifica se o último resultado é um uma ordem do dia
if last_ordem_voto.pk >= last_expediente_voto.pk:
if ultima_ordem_votada.tipo_votacao in [1, 3]:
return JsonResponse(
get_votos(get_presentes(
pk, response, ultima_ordem_votada),
ultima_ordem_votada))
elif ultima_ordem_votada.tipo_votacao == 2:
return JsonResponse(
get_votos_nominal(get_presentes(
pk, response, ultima_ordem_votada),
ultima_ordem_votada))
# Caso não seja, verifica se é um expediente
else:
if ultimo_expediente_votado.tipo_votacao in [1, 3]:
return JsonResponse(
get_votos(get_presentes_expediente(
pk, response, ultimo_expediente_votado),
ultimo_expediente_votado))
elif ultimo_expediente_votado.tipo_votacao == 2:
return JsonResponse(
get_votos_nominal(get_presentes_expediente(
pk, response,
ultimo_expediente_votado),
ultimo_expediente_votado))
materia = ultima_ordem_votada\
if last_ordem_voto.pk >= last_expediente_voto.pk\
else ultimo_expediente_votado
# Caso somente um deles tenha resultado, prioriza a Ordem do Dia
if last_ordem_voto:
return JsonResponse(get_presentes(
pk, response, ultima_ordem_votada))
elif last_ordem_voto:
materia = ultima_ordem_votada
# Caso a Ordem do dia não tenha resultado, mostra o último expediente
if last_expediente_voto:
return JsonResponse(get_presentes_expediente(
pk, response,
ultimo_expediente_votado))
elif last_expediente_voto:
materia = ultimo_expediente_votado
return JsonResponse(get_votos(
get_presentes(pk, response, materia),
materia))
# Retorna que não há nenhuma matéria já votada ou aberta
return response_nenhuma_materia(response)

67
sapl/templates/painel/index.html

@ -174,58 +174,37 @@
presentes.children().remove();
votacao.children().remove()
var presentes_list = data["presentes"];
if (presentes_list) {
presentes.append('<table id="parlamentares_list">');
jQuery.each(presentes_list, function (index, parlamentar) {
$('#parlamentares_list').append('<tr> <td style="padding-right:20px">' +
parlamentar.nome +
'</td> <td style="padding-right:20px">' +
parlamentar.partido + '</td> <td style="padding-right:20px">'
+ show_voto(parlamentar.voto) + '</td> </tr>')
});
presentes.append('</table>');
}
else{
presentes.append('<span id="parlamentares_list">');
$('#parlamentares_list').append(
'<center>A listagem de parlamentares só aparecerá quando alguma matéria estiver em votação ou já tiver sido votada.</center>')
presentes.append('</span>');
}
if (data['materia_legislativa_texto']){
if (data["presentes_ordem_dia"] != null) {
presentes_ordem_dia = data["presentes_ordem_dia"];
}
else if (data["presentes_expediente"] != null){
presentes_ordem_dia = data["presentes_expediente"]
}
presentes.append('<table id="parlamentares_list">');
if( data["natureza_resultado"] == "A" || data["natureza_resultado"] == "R" ) {
if (data["tipo_votacao"] == "Nominal") {
jQuery.each(data["votos"], function (index, parlamentar) {
$('#parlamentares_list').append('<tr> <td style="padding-right:20px">' +
parlamentar.parlamentar +
'</td> <td style="padding-right:20px">' +
parlamentar.partido + '</td> <td style="padding-right:20px">'
+ show_voto(parlamentar.voto) + '</td> </tr>')
});
}
else {
jQuery.each(data["votos"], function (index, parlamentar) {
$('#parlamentares_list').append('<tr> <td style="padding-right:20px">' +
parlamentar.parlamentar +
'</td> <td style="padding-right:20px">' +
parlamentar.partido + '</td> </tr>')
});
}
}
else{
jQuery.each(presentes_ordem_dia, function (index, parlamentar) {
$('#parlamentares_list').append('<tr> <td style="padding-right:20px">' +
parlamentar.nome +
'</td> <td style="padding-right:20px">' +
parlamentar.partido + '</td> </tr>')
});
}
presentes.append('</table>');
//console.debug(presentes_ordem_dia)
var votacao = $("#votacao")
if (data["num_presentes_ordem_dia"] != null) {
num_presentes_ordem_dia = data["num_presentes_ordem_dia"];
}
else if (data["num_presentes_expediente"] != null){
num_presentes_ordem_dia = data["num_presentes_expediente"]
}
var num_presentes = data["num_presentes"];
votacao.append("<li>Sim: " + data["numero_votos_sim"] + "</li>")
votacao.append("<li>Não: " + data["numero_votos_nao"] + "</li>")
votacao.append("<li>Abstenções: " + data["numero_abstencoes"] + "</li>")
votacao.append("<li>Presentes: " + num_presentes_ordem_dia + "</li>")
votacao.append("<li>Presentes: " + num_presentes + "</li>")
votacao.append("<li>Total votos: " + data["total_votos"] + "</li>")
}

Loading…
Cancel
Save