diff --git a/sapl/painel/views.py b/sapl/painel/views.py
index 3183c61db..1b1678833 100644
--- a/sapl/painel/views.py
+++ b/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)
diff --git a/sapl/templates/painel/index.html b/sapl/templates/painel/index.html
index 85fdf3050..68e5cdf78 100644
--- a/sapl/templates/painel/index.html
+++ b/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('
');
+ jQuery.each(presentes_list, function (index, parlamentar) {
+ $('#parlamentares_list').append(' ' +
+ parlamentar.nome +
+ ' | ' +
+ parlamentar.partido + ' | '
+ + show_voto(parlamentar.voto) + ' |
')
+ });
+ presentes.append('
');
+ }
+ else{
+ presentes.append('');
+ $('#parlamentares_list').append(
+ 'A listagem de parlamentares só aparecerá quando alguma matéria estiver em votação ou já tiver sido votada.')
+ presentes.append('');
+ }
+
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('');
- if( data["natureza_resultado"] == "A" || data["natureza_resultado"] == "R" ) {
- if (data["tipo_votacao"] == "Nominal") {
- jQuery.each(data["votos"], function (index, parlamentar) {
- $('#parlamentares_list').append(' ' +
- parlamentar.parlamentar +
- ' | ' +
- parlamentar.partido + ' | '
- + show_voto(parlamentar.voto) + ' |
')
- });
- }
- else {
- jQuery.each(data["votos"], function (index, parlamentar) {
- $('#parlamentares_list').append(' ' +
- parlamentar.parlamentar +
- ' | ' +
- parlamentar.partido + ' |
')
- });
- }
- }
-
- else{
- jQuery.each(presentes_ordem_dia, function (index, parlamentar) {
- $('#parlamentares_list').append(' ' +
- parlamentar.nome +
- ' | ' +
- parlamentar.partido + ' |
')
- });
- }
-
- presentes.append('
');
//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("Sim: " + data["numero_votos_sim"] + "")
votacao.append("Não: " + data["numero_votos_nao"] + "")
votacao.append("Abstenções: " + data["numero_abstencoes"] + "")
- votacao.append("Presentes: " + num_presentes_ordem_dia + "")
+ votacao.append("Presentes: " + num_presentes + "")
votacao.append("Total votos: " + data["total_votos"] + "")
}