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. 293
      sapl/painel/views.py
  2. 49
      sapl/templates/painel/index.html

293
sapl/painel/views.py

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

49
sapl/templates/painel/index.html

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

Loading…
Cancel
Save