Browse Source

Fix #758 refatora painel (#792)

* Merge

* Conserta a logica de painel

* Transfere para o painel o audio de termino do discurso"

* Conserta bug

* Conserta alguns bugs no painel

* Conserta bugs na ordem das materias no paineil

* Bug fix

* Melhorias no front-end do painel

* Remove ipdb

* Conserta bug quando finaliza cronômetro"
pull/797/head
eduardocalil 8 years ago
committed by Edward
parent
commit
69dc68ed51
  1. 283
      sapl/painel/views.py
  2. 24
      sapl/sessao/views.py
  3. 230
      sapl/templates/painel/index.html
  4. 41
      sapl/templates/sessao/painel.html

283
sapl/painel/views.py

@ -84,21 +84,8 @@ def get_cronometro_status(request, name):
def get_materia_aberta(pk): def get_materia_aberta(pk):
try: return OrdemDia.objects.filter(
materia = OrdemDia.objects.filter( sessao_plenaria_id=pk, votacao_aberta=True).last()
sessao_plenaria_id=pk, votacao_aberta=True).last()
return materia
except ObjectDoesNotExist:
return False
def get_last_materia(pk):
try:
materia = OrdemDia.objects.filter(
sessao_plenaria_id=pk).last()
return materia
except ObjectDoesNotExist:
return None
def get_presentes(pk, response, materia): def get_presentes(pk, response, materia):
@ -138,11 +125,14 @@ def get_presentes(pk, response, materia):
num_presentes_ordem_dia = len(presentes_ordem_dia) num_presentes_ordem_dia = len(presentes_ordem_dia)
if materia.tipo_votacao == 1: if materia.tipo_votacao == 1:
tipo_votacao = 'Simbólica' tipo_votacao = str(_('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_ordem_dia': presentes_ordem_dia,
@ -151,10 +141,6 @@ def get_presentes(pk, response, materia):
'num_presentes_sessao_plenaria': num_presentes_sessao_plen, '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!')),
'numero_votos_sim': 0,
'numero_votos_nao': 0,
'numero_abstencoes': 0,
'total_votos': 0,
'tipo_resultado': tipo_votacao, 'tipo_resultado': tipo_votacao,
'observacao_materia': materia.observacao, 'observacao_materia': materia.observacao,
'materia_legislativa_texto': str(materia.materia)}) 'materia_legislativa_texto': str(materia.materia)})
@ -166,21 +152,8 @@ def get_presentes(pk, response, materia):
def get_materia_expediente_aberta(pk): def get_materia_expediente_aberta(pk):
try: return ExpedienteMateria.objects.filter(
materia = ExpedienteMateria.objects.filter( sessao_plenaria_id=pk, votacao_aberta=True).last()
sessao_plenaria_id=pk, votacao_aberta=True).last()
return materia
except ObjectDoesNotExist:
return False
def get_last_materia_expediente(pk):
try:
materia = ExpedienteMateria.objects.filter(
sessao_plenaria_id=pk).last()
return materia
except ObjectDoesNotExist:
return None
def get_presentes_expediente(pk, response, materia): def get_presentes_expediente(pk, response, materia):
@ -221,10 +194,14 @@ def get_presentes_expediente(pk, response, materia):
if materia.tipo_votacao == 1: if materia.tipo_votacao == 1:
tipo_votacao = '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_expediente': presentes_expediente, 'presentes_expediente': presentes_expediente,
'num_presentes_expediente': num_presentes_expediente, 'num_presentes_expediente': num_presentes_expediente,
@ -232,10 +209,6 @@ def get_presentes_expediente(pk, response, materia):
'num_presentes_sessao_plenaria': num_presentes_sessao_plen, 'num_presentes_sessao_plenaria': num_presentes_sessao_plen,
'status_painel': str(_('ABERTO')), 'status_painel': str(_('ABERTO')),
'msg_painel': str(_('Votação aberta!')), 'msg_painel': str(_('Votação aberta!')),
'numero_votos_sim': 0,
'numero_votos_nao': 0,
'numero_abstencoes': 0,
'total_votos': 0,
'tipo_resultado': tipo_votacao, 'tipo_resultado': tipo_votacao,
'observacao_materia': materia.observacao, 'observacao_materia': materia.observacao,
'materia_legislativa_texto': str(materia.materia)}) 'materia_legislativa_texto': str(materia.materia)})
@ -245,16 +218,14 @@ def get_presentes_expediente(pk, response, materia):
# ##########################GENERAL FUNCTIONS############################# # ##########################GENERAL FUNCTIONS#############################
def response_null_materia(response): def response_nenhuma_materia(response):
response.update({ response.update({
'status_painel': 'FECHADO', 'status_painel': 'FECHADO',
'msg_painel': str(_('Nenhuma matéria disponivel para votação.')) 'msg_painel': str(_('Nenhuma matéria disponivel para votação.'))})
})
return JsonResponse(response) return JsonResponse(response)
def get_votos(response, materia): def get_votos(response, materia):
if materia.tipo_votacao == 1: if materia.tipo_votacao == 1:
tipo_votacao = 'Simbólica' tipo_votacao = 'Simbólica'
elif materia.tipo_votacao == 2: elif materia.tipo_votacao == 2:
@ -262,19 +233,34 @@ def get_votos(response, materia):
elif materia.tipo_votacao == 3: elif materia.tipo_votacao == 3:
tipo_votacao = 'Secreta' tipo_votacao = 'Secreta'
registro = RegistroVotacao.objects.filter( if type(materia) == OrdemDia:
ordem=materia, materia=materia.materia).last() registro = RegistroVotacao.objects.filter(
total = (registro.numero_votos_sim + ordem=materia, materia=materia.materia).last()
registro.numero_votos_nao + else:
registro.numero_abstencoes) registro = RegistroVotacao.objects.filter(
response.update({ expediente=materia, materia=materia.materia).last()
'numero_votos_sim': registro.numero_votos_sim,
'numero_votos_nao': registro.numero_votos_nao, if registro:
'numero_abstencoes': registro.numero_abstencoes, total = (registro.numero_votos_sim +
'total_votos': total, registro.numero_votos_nao +
'tipo_votacao': tipo_votacao, registro.numero_abstencoes)
'tipo_resultado': registro.tipo_resultado_votacao.nome, 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,
})
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.',
})
return response return response
@ -288,48 +274,65 @@ def get_votos_nominal(response, materia):
elif materia.tipo_votacao == 3: elif materia.tipo_votacao == 3:
tipo_votacao = 'Secreta' tipo_votacao = 'Secreta'
registro = RegistroVotacao.objects.get( if type(materia) == OrdemDia:
ordem=materia, materia=materia.materia) registro = RegistroVotacao.objects.filter(
ordem=materia, materia=materia.materia).last()
votos_parlamentares = VotoParlamentar.objects.filter( else:
votacao_id=registro.id) registro = RegistroVotacao.objects.filter(
expediente=materia, materia=materia.materia).last()
filiacao = Filiacao.objects.filter(
data_desfiliacao__isnull=True, parlamentar__ativo=True) if not registro:
parlamentar_partido = {} response.update({
for f in filiacao: 'numero_votos_sim': 0,
parlamentar_partido[ 'numero_votos_nao': 0,
f.parlamentar.nome_parlamentar] = f.partido.sigla 'numero_abstencoes': 0,
'total_votos': 0,
for v in votos_parlamentares: 'tipo_votacao': tipo_votacao,
try: 'tipo_resultado': 'Não foi votado ainda',
parlamentar_partido[v.parlamentar.nome_parlamentar] 'votos': None
except KeyError: })
votos.update({v.parlamentar.id: {
'parlamentar': v.parlamentar.nome_parlamentar,
'voto': str(v.voto),
'partido': str(_('Sem Registro'))
}})
else:
votos.update({v.parlamentar.id: {
'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({ else:
'numero_votos_sim': registro.numero_votos_sim, votos_parlamentares = VotoParlamentar.objects.filter(
'numero_votos_nao': registro.numero_votos_nao, votacao_id=registro.id)
'numero_abstencoes': registro.numero_abstencoes,
'total_votos': total, filiacao = Filiacao.objects.filter(
'tipo_votacao': tipo_votacao, data_desfiliacao__isnull=True, parlamentar__ativo=True)
'tipo_resultado': registro.tipo_resultado_votacao.nome, parlamentar_partido = {}
'votos': votos 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.update({v.parlamentar.id: {
'parlamentar': v.parlamentar.nome_parlamentar,
'voto': str(v.voto),
'partido': str(_('Sem Registro'))
}})
else:
votos.update({v.parlamentar.id: {
'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({
'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,
'votos': votos
})
return response return response
@ -358,37 +361,57 @@ def get_dados_painel(request, pk):
elif expediente: elif expediente:
return JsonResponse(get_presentes_expediente(pk, response, expediente)) return JsonResponse(get_presentes_expediente(pk, response, expediente))
ultima_ordem = get_last_materia(pk) # Ultimo voto em ordem e ultimo voto em expediente
last_ordem_voto = RegistroVotacao.objects.filter(
if ultima_ordem: ordem__sessao_plenaria=sessao).last()
if ultima_ordem.resultado: last_expediente_voto = RegistroVotacao.objects.filter(
if ultima_ordem.tipo_votacao in [1, 3]: expediente__sessao_plenaria=sessao).last()
return JsonResponse(
get_votos(get_presentes( # Ultimas materias votadas
pk, response, ultima_ordem), ultima_ordem)) if last_ordem_voto:
elif ultima_ordem.tipo_votacao == 2: ultima_ordem_votada = last_ordem_voto.ordem
return JsonResponse( if last_expediente_voto:
get_votos_nominal(get_presentes( ultimo_expediente_votado = last_expediente_voto.expediente
pk, response, ultima_ordem), ultima_ordem))
else: # Caso não tenha nenhuma votação aberta
return JsonResponse(get_presentes(pk, response, ultima_ordem)) if last_ordem_voto or last_expediente_voto:
ultimo_expediente = get_last_materia_expediente(pk) # Se alguma ordem E algum expediente já tiver sido votado...
if last_ordem_voto and last_expediente_voto:
if ultimo_expediente: # Verifica se o último resultado é um uma ordem do dia
if ultimo_expediente.resultado: if last_ordem_voto.pk >= last_expediente_voto.pk:
if ultimo_expediente.tipo_votacao in [1, 3]: if ultima_ordem_votada.tipo_votacao in [1, 3]:
return JsonResponse( return JsonResponse(
get_votos(get_presentes( get_votos(get_presentes(
pk, response, ultimo_expediente), pk, response, ultima_ordem_votada),
ultimo_expediente)) ultima_ordem_votada))
elif ultimo_expediente.tipo_votacao == 2: elif ultima_ordem_votada.tipo_votacao == 2:
return JsonResponse( return JsonResponse(
get_votos_nominal(get_presentes( get_votos_nominal(get_presentes(
pk, response, ultimo_expediente), pk, response, ultima_ordem_votada),
ultimo_expediente)) ultima_ordem_votada))
else: # Caso não seja, verifica se é um expediente
else:
if ultimo_expediente_votado.tipo_votacao in [1, 3]:
return JsonResponse(
get_votos(get_presentes(
pk, response, ultimo_expediente_votado),
ultimo_expediente_votado))
elif ultimo_expediente_votado.tipo_votacao == 2:
return JsonResponse(
get_votos_nominal(get_presentes(
pk, response,
ultimo_expediente_votado),
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))
# Caso a Ordem do dia não tenha resultado, mostra o último expediente
if last_expediente_voto:
return JsonResponse(get_presentes(pk, response, return JsonResponse(get_presentes(pk, response,
ultimo_expediente)) ultimo_expediente_votado))
else:
return response_null_materia(response) # Retorna que não há nenhuma matéria já votada ou aberta
return response_nenhuma_materia(response)

24
sapl/sessao/views.py

@ -3,7 +3,7 @@ from re import sub
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.forms.utils import ErrorList from django.forms.utils import ErrorList
from django.http import JsonResponse from django.http import JsonResponse
@ -1854,9 +1854,14 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin):
'ementa': expediente.observacao} 'ementa': expediente.observacao}
context.update({'materia': materia}) context.update({'materia': materia})
votacao = RegistroVotacao.objects.get( try:
materia_id=materia_id, votacao = RegistroVotacao.objects.get(
expediente_id=expediente_id) materia_id=materia_id,
expediente_id=expediente_id)
except MultipleObjectsReturned:
votacao = RegistroVotacao.objects.filter(
materia_id=materia_id,
expediente_id=expediente_id).last()
votacao_existente = {'observacao': sub( votacao_existente = {'observacao': sub(
' ', ' ', strip_tags(votacao.observacao)), ' ', ' ', strip_tags(votacao.observacao)),
'tipo_resultado': 'tipo_resultado':
@ -1875,9 +1880,14 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin):
expediente_id = kwargs['mid'] expediente_id = kwargs['mid']
if(int(request.POST['anular_votacao']) == 1): if(int(request.POST['anular_votacao']) == 1):
RegistroVotacao.objects.get( try:
materia_id=materia_id, RegistroVotacao.objects.get(
expediente_id=expediente_id).delete() materia_id=materia_id,
expediente_id=expediente_id).delete()
except MultipleObjectsReturned:
RegistroVotacao.objects.filter(
materia_id=materia_id,
expediente_id=expediente_id).last().delete()
expediente = ExpedienteMateria.objects.get( expediente = ExpedienteMateria.objects.get(
sessao_plenaria_id=self.object.id, sessao_plenaria_id=self.object.id,

230
sapl/templates/painel/index.html

@ -1,5 +1,5 @@
{% load i18n %} {% load i18n %}
{% load staticfiles %} {% load staticfiles sass_tags %}
<!DOCTYPE HTML> <!DOCTYPE HTML>
<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]--> <!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <!--[if gt IE 8]><!-->
@ -8,6 +8,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<!-- TODO: does it need this head_title here? --> <!-- TODO: does it need this head_title here? -->
<link rel="stylesheet" href="{% sass_src 'bootstrap-sass/assets/stylesheets/_bootstrap.scss' %}" type="text/css">
<title>{% block head_title %}{% trans 'SAPL - Sistema de Apoio ao Processo Legislativo' %}{% endblock %}</title> <title>{% block head_title %}{% trans 'SAPL - Sistema de Apoio ao Processo Legislativo' %}{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" src="{% static 'jquery/dist/jquery.js' %}"></script> <script type="text/javascript" src="{% static 'jquery/dist/jquery.js' %}"></script>
@ -16,12 +17,11 @@
<style type="text/css"> <style type="text/css">
@media screen { @media screen {
body { body {
background: #2B2B2A; background: #1c1b1b;
} }
ul, li { ul, li {
list-style-type: none; list-style-type: none;
} }
#sessao_plenaria, #sessao_plenaria_data, #sessao_plenaria_hora_inicio, #message, #cronometro_discurso, #cronometro_aparte, #cronometro_ordem, #relogio, #parlamentares, #votacao, #materia_legislativa_texto, #observacao_materia, #resultado_votacao{ #sessao_plenaria, #sessao_plenaria_data, #sessao_plenaria_hora_inicio, #message, #cronometro_discurso, #cronometro_aparte, #cronometro_ordem, #relogio, #parlamentares, #votacao, #materia_legislativa_texto, #observacao_materia, #resultado_votacao{
font-family: Verdana; font-family: Verdana;
} }
@ -29,66 +29,77 @@
</style> </style>
</head> </head>
<body> <body>
<audio type="hidden" id="audio" src="{% static 'audio/ring.mp3' %}"> </audio>
<h1 id="title"></h1> <h1 id="title"></h1>
<input id="json_url" type="hidden" value="{% url 'sapl.painel:dados_painel' sessao_id %}"> <input id="json_url" type="hidden" value="{% url 'sapl.painel:dados_painel' sessao_id %}">
<h3><font color="#4FA64D"><p align="center"><span id="sessao_plenaria"></span></p></font></h3> <h1><b><font color="#4FA64D"><p align="center"><span id="sessao_plenaria"></span></p></font></b></h1>
<table style="width:100%"> <table style="width:100%">
<tr> <tr>
<th style="text-align:center"><font color="white" size="2"><span id="sessao_plenaria_data"></span></font></th> <th style="text-align:center"><font color="white" size="4"><span id="sessao_plenaria_data"></span></font></th>
<th style="text-align:center"><font color="white" size="2"><span id="sessao_plenaria_hora_inicio"></span></font></th> <th style="text-align:center"><font color="white" size="4"><span id="sessao_plenaria_hora_inicio"></span></font></th>
</tr> </tr>
</table> </table>
<h2><font color="red"><p align="center"><span id="message"></span></p></font></h2> <h2><font color="red"><p align="center"><span id="message"></span></p></font></h2>
<h3><font color="white"><p align="center">________________________________________________</p></font></h3> <h1><font color="white"><p align="center"><span id="relogio"></span></p></font></h1>
<h3><font color="white"><p align="center"><span id="relogio"></span></p></font></h3>
<h3><font color="white"><p align="center">________________________________________________</p></font></h3> <div class="row container-detail clearfix">
<div class="row-fluid">
<h3><font color="#459170"><p style="font-family:Verdana" align="center">Cronômetros</p></font></h3> <div class="col-md-4">
<table style="width:100%"> <h2><font color="#459170"><p align="center" style="font-family:Verdana">Parlamentares</p></b></font></h2>
<tr> <table align="center">
<th style="text-align:center; font-family:Verdana"><font color="white">Discurso: <span id="cronometro_discurso"></span></font></th> <tr>
</tr> <th><h4><font color="white"><span id="parlamentares"></span></h4></font></th>
<tr> </tr>
<th style="text-align:center; font-family:Verdana"><font color="white">Aparte: <span id="cronometro_aparte"></span></font></th> </table>
</tr> </div>
<tr>
<th style="text-align:center; font-family:Verdana"><font color="white">Questão de Ordem: <span id="cronometro_ordem"></span></font></th> <div class="col-md-4" >
</tr> <h2><font color="#459170"><p align="center" style="font-family:Verdana">Cronômetros</p></font></h2>
</table> <table align="center">
<tr>
<h3><font color="white"><p align="center">________________________________________________</p></font></h3> <th style="font-family:Verdana; text-align:center;"><font size="5" color="white">Discurso: <span id="cronometro_discurso"></span></font></th>
</tr>
<h3><font color="#459170"><p style="font-family:Verdana" align="center">Parlamentares e Votos</p></font></h3> <tr>
<table style="width:60%" align="center"> <th style="font-family:Verdana; text-align:center;"><font size="5" color="white">Aparte: <span id="cronometro_aparte"></span></font></th>
<tr> </tr>
<th style="text-align:left"><font color="white" align="left"><span id="parlamentares"></span></font></th> <tr>
<th style="text-align:left"><font color="white"><span id="votacao"></span></font></th> <th style="font-family:Verdana; text-align:center;"><font size="5" color="white">Questão de Ordem: <span id="cronometro_ordem"></span></font></th>
</tr> </tr>
</table> </table>
</div>
<h3><font color="white"><p align="center">________________________________________________</p></font></h3>
<div class="col-md-4">
<h3><font color="#459170"><p align="center" style="font-family:Verdana">Matéria em Votação</p></font></h3> <h2><font color="#459170"><p align="center" style="font-family:Verdana">Resultado</p></font></h2>
<table align="center">
<tr>
<th><h4><font color="white"><span id="votacao"></span></h4></font></th>
</tr>
</table>
</div>
</div>
</div>
</br>
<h2><font color="#459170"><p align="center" style="font-family:Verdana">Matéria em Votação</p></font></h2>
<table style="width:100%; border:1px;"> <table style="width:100%; border:1px;">
<tr><th style="text-align:center"><font color="white"><span id="materia_legislativa_texto"></span></font></th></tr> <tr><th style="text-align:center"><h4><font color="white"><span id="materia_legislativa_texto"></span></font></th></tr>
<tr><th style="text-align:center"><font color="white"><span id="observacao_materia"></span></font></th></tr> <tr><th style="text-align:center"><h4><font color="white"><span id="observacao_materia"></span></font></th></tr>
<tr><th style="text-align:center"><font color="#45919D"><span id="resultado_votacao"></span></font></th></tr> <tr><th style="text-align:center"><font color="#45919D"><span id="resultado_votacao"></span></font></th></tr>
</table> </table>
</body> </body>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
//TODO: replace by a fancy jQuery clock //TODO: replace by a fancy jQuery clock
function checkTime(i) { function checkTime(i) {
if (i<10) {i = "0" + i}; // add zero in front of numbers < 10 if (i<10) {i = "0" + i}; // add zero in front of numbers < 10
return i; return i;
} }
function startTime() { function startTime() {
var today=new Date(); var today=new Date();
var h=today.getHours(); var h=today.getHours();
@ -101,15 +112,18 @@
startTime() startTime()
}, 500); }, 500);
} }
startTime(); startTime();
var audioAlertFinish = document.getElementById("audio");
$('#cronometro_discurso').runner({ $('#cronometro_discurso').runner({
autostart: false, autostart: false,
countdown: true, countdown: true,
startAt: 5 * 60 * 1000, // 5 minutes startAt: 5 * 60 * 1000, // 5 minutes
stopAt: 0, stopAt: 0,
milliseconds: false milliseconds: false
}).on('runnerFinish', function(eventObject, info){
audioAlertFinish.play();
}); });
$('#cronometro_aparte').runner({ $('#cronometro_aparte').runner({
@ -118,6 +132,8 @@
startAt: 3 * 60 * 1000, // 3 minutes startAt: 3 * 60 * 1000, // 3 minutes
stopAt: 0, stopAt: 0,
milliseconds: false milliseconds: false
}).on('runnerFinish', function(eventObject, info){
audioAlertFinish.play();
}); });
$('#cronometro_ordem').runner({ $('#cronometro_ordem').runner({
@ -126,11 +142,13 @@
startAt: 2 * 60 * 1000, // 2 minutes startAt: 2 * 60 * 1000, // 2 minutes
stopAt: 0, stopAt: 0,
milliseconds: false milliseconds: false
}).on('runnerFinish', function(eventObject, info){
audioAlertFinish.play();
}); });
var discurso_previous = ''; var discurso_previous;
var aparte_previous = ''; var ordem_previous;
var ordem_previous = ''; var aparte_previous;
var counter = 1; var counter = 1;
(function poll() { (function poll() {
@ -138,82 +156,118 @@
url: $("#json_url").val(), url: $("#json_url").val(),
type: "GET", type: "GET",
success: function(data) { success: function(data) {
$("#sessao_plenaria").text(data["sessao_plenaria"]) $("#sessao_plenaria").text(data["sessao_plenaria"])
$("#sessao_plenaria_data").text("Data Início: " + data["sessao_plenaria_data"]) $("#sessao_plenaria_data").text("Data Início: " + data["sessao_plenaria_data"])
$("#sessao_plenaria_hora_inicio").text("Hora Início: " + data["sessao_plenaria_hora_inicio"]) $("#sessao_plenaria_hora_inicio").text("Hora Início: " + data["sessao_plenaria_hora_inicio"])
if (data["status_painel"] == "FECHADO") {
if (data["status_painel"] === "FECHADO") {
$("#message").text("PAINEL ENCONTRA-SE FECHADO"); $("#message").text("PAINEL ENCONTRA-SE FECHADO");
return;
} }
else{
$("#message").text("");
}
var presentes = $("#parlamentares"); var presentes = $("#parlamentares");
var votacao = $("#votacao");
$("#votacao").text('');
presentes.children().remove(); presentes.children().remove();
votacao.children().remove()
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"]
}
if( (data["tipo_resultado"] == "Aprovado por unanimidade") || (data["tipo_resultado"] == "Aprovado por maioria") || (data["tipo_resultado"] == "Rejeitado")){
if(data["tipo_votacao"] == "Nominal") {
jQuery.each(data["votos"], function(index, parlamentar) {
$('<li />', {text: parlamentar.parlamentar + ' - ' + parlamentar.partido + ' - Voto: ' + parlamentar.voto}).appendTo(presentes);
});
}
else{
jQuery.each(presentes_ordem_dia, function(index, parlamentar) {
$('<li />', {text: parlamentar.nome + ' - ' + parlamentar.partido}).appendTo(presentes);
});
}
}
if (data["presentes_ordem_dia"] != null) { else{
presentes_ordem_dia = data["presentes_ordem_dia"]; jQuery.each(presentes_ordem_dia, function(index, parlamentar) {
} $('<li />', {text: parlamentar.nome + ' - ' + parlamentar.partido}).appendTo(presentes);
else if (data["presentes_expediente"] != null){
presentes_ordem_dia = data["presentes_expediente"]
}
if( (data["tipo_resultado"] == "Aprovado por unanimidade") || (data["tipo_resultado"] == "Aprovado por maioria") || (data["tipo_resultado"] == "Rejeitado")){
if(data["tipo_votacao"] == "Nominal") {
jQuery.each(data["votos"], function(index, parlamentar) {
$('<li />', {text: parlamentar.parlamentar + ' - ' + parlamentar.partido + ' - Voto: ' + parlamentar.voto}).appendTo(presentes);
}); });
} }
}else{
jQuery.each(presentes_ordem_dia, function(index, parlamentar) { //console.debug(presentes_ordem_dia)
$('<li />', {text: parlamentar.nome + ' - ' + parlamentar.partido}).appendTo(presentes); 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"]
}
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>Total votos: " + data["total_votos"] + "</li>")
} }
//console.debug(presentes_ordem_dia) else{
$("#votacao").text('Não há votação, pois não há nenhuma matéria aberta ou já votada.');
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"]
}
votacao.children().remove()
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>Total votos: " + data["total_votos"] + "</li>")
var discurso_current = data["cronometro_discurso"]; var discurso_current = data["cronometro_discurso"];
if (!discurso_previous){
discurso_previous = ''
}
if (discurso_current != discurso_previous) { if (discurso_current != discurso_previous) {
$('#cronometro_discurso').runner(discurso_current); $('#cronometro_discurso').runner(discurso_current);
discurso_previous = discurso_current; discurso_previous = discurso_current;
} }
var aparte_current = data["cronometro_aparte"]; var aparte_current = data["cronometro_aparte"];
if (!aparte_previous){
aparte_previous = ''
}
if (aparte_current != aparte_previous) { if (aparte_current != aparte_previous) {
$('#cronometro_aparte').runner(aparte_current); $('#cronometro_aparte').runner(aparte_current);
aparte_previous = aparte_current; aparte_previous = aparte_current;
} }
var ordem_current = data["cronometro_ordem"]; var ordem_current = data["cronometro_ordem"];
if (!ordem_previous){
ordem_previous = ''
}
if (ordem_current != ordem_previous) { if (ordem_current != ordem_previous) {
$('#cronometro_ordem').runner(ordem_current); $('#cronometro_ordem').runner(ordem_current);
ordem_previous = ordem_current; ordem_previous = ordem_current;
} }
$("#materia_legislativa_texto").text(data["materia_legislativa_texto"]) if (data['materia_legislativa_texto']){
$("#observacao_materia").text(data["observacao_materia"]) $("#materia_legislativa_texto").text(data["materia_legislativa_texto"]);
$("#resultado_votacao").text(data["tipo_resultado"]) }
else{
$("#materia_legislativa_texto").text('Não há nehuma matéria votada ou para votação');
}
if (data['observacao_materia']){
$("#observacao_materia").text(data["observacao_materia"]);
}
else{
$("#observacao_materia").text('');
}
if (data['resultado_votacao']){
$("#resultado_votacao").text(data["tipo_resultado"]);
}
else{
$("#resultado_votacao").text('');
}
}, },
error: function(err) { error: function(err) {
console.error(err); console.error(err);

41
sapl/templates/sessao/painel.html

@ -11,7 +11,6 @@
{% block detail_content %} {% block detail_content %}
<audio type="hidden" id="audio" src="{% static 'audio/ring.mp3' %}"> </audio>
<div class="row"> <div class="row">
<!--<div class="col-md-6"><a href="{% url 'sapl.painel:painel_principal' pk %}" class="btn btn-primary btn-sm active">Iniciar painel presidente</a></div> --> <!--<div class="col-md-6"><a href="{% url 'sapl.painel:painel_principal' pk %}" class="btn btn-primary btn-sm active">Iniciar painel presidente</a></div> -->
@ -95,8 +94,6 @@ $(function() {
startTime(); startTime();
var audioAlertFinish = document.getElementById("audio");
$('#discurso').prop('disabled', true); $('#discurso').prop('disabled', true);
$('#aparte').prop('disabled', true); $('#aparte').prop('disabled', true);
$('#ordem').prop('disabled', true); $('#ordem').prop('disabled', true);
@ -108,8 +105,17 @@ $(function() {
stopAt: 0, stopAt: 0,
milliseconds: false milliseconds: false
}).on('runnerFinish', function(eventObject, info){ }).on('runnerFinish', function(eventObject, info){
audioAlertFinish.play(); $.get('/painel/cronometro', { tipo: 'discurso', action: 'stop' } );
});
$('#discursoReset').show();
$('#discurso').runner('stop');
$('#discursoStart').text('Iniciar');
$('#aparteStart').prop('disabled', false);
$('#aparteReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false);
});
$('#discursoStart').click(function() { $('#discursoStart').click(function() {
@ -154,8 +160,17 @@ $(function() {
stopAt: 0, stopAt: 0,
milliseconds: false milliseconds: false
}).on('runnerFinish', function(eventObject, info){ }).on('runnerFinish', function(eventObject, info){
audioAlertFinish.play(); $.get('/painel/cronometro', { tipo: 'aparte', action: 'stop' } );
});
$('#aparteReset').show();
$('#aparte').runner('stop');
$('#aparteStart').text('Iniciar');
$('#discursoStart').prop('disabled', false);
$('#discursoReset').prop('disabled', false);
$('#ordemStart').prop('disabled', false);
$('#ordemReset').prop('disabled', false);
});
$('#aparteStart').click(function(){ $('#aparteStart').click(function(){
if ($('#aparteStart').text() == 'Iniciar') { if ($('#aparteStart').text() == 'Iniciar') {
@ -199,8 +214,16 @@ $(function() {
stopAt: 0, stopAt: 0,
milliseconds: false milliseconds: false
}).on('runnerFinish', function(eventObject, info){ }).on('runnerFinish', function(eventObject, info){
audioAlertFinish.play(); $.get('/painel/cronometro', { tipo: 'ordem', action: 'stop' } );
});
$('#ordemReset').show();
$('#ordem').runner('stop');
$('#ordemStart').text('Iniciar');
$('#discursoStart').prop('disabled', false);
$('#discursoReset').prop('disabled', false);
$('#aparteStart').prop('disabled', false);
$('#aparteReset').prop('disabled', false);
});
$('#ordemStart').click(function() { $('#ordemStart').click(function() {
if ($('#ordemStart').text() == 'Iniciar') { if ($('#ordemStart').text() == 'Iniciar') {

Loading…
Cancel
Save