Browse Source

Add sync between stopwatches of Painel two windows.

pull/11/merge
Edward Ribeiro 9 years ago
parent
commit
b97574476d
  1. 27
      barcode.py
  2. 6
      painel/urls.py
  3. 29
      painel/views.py
  4. 55
      templates/painel/index.html
  5. 36
      templates/sessao/painel.html

27
barcode.py

@ -0,0 +1,27 @@
from reportlab.lib.units import mm
from reportlab.graphics.barcode import createBarcodeDrawing
from reportlab.graphics.shapes import Drawing, String
from reportlab.graphics.charts.barcharts import HorizontalBarChart
class BarcodeDrawing(Drawing):
def __init__(self, text_value, *args, **kw):
barcode = createBarcodeDrawing(
'Code128', value=text_value, barHeight=10 * mm, humanReadable=True)
Drawing.__init__(self, barcode.width, barcode.height, *args, **kw)
self.add(barcode, name='barcode')
# def barcode(request):
# #instantiate a drawing object
# import barcode
# d = barcode.BarcodeDrawing("HELLO WORLD")
# binaryStuff = d.asString('gif')
# return HttpResponse(binaryStuff, 'image/gif')
if __name__ == '__main__':
# use the standard 'save' method to save barcode.gif, barcode.pdf etc
# for quick feedback while working.
BarcodeDrawing("HELLO WORLD").save(
formats=['gif', 'pdf'], outDir='.', fnRoot='barcode')

6
painel/urls.py

@ -1,6 +1,7 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from .views import (controlador_painel, cronometro_painel_crud, from .views import (controlador_painel, #cronometro_painel_crud,
cronometro_painel,
get_dados_painel, painel_mensagem_view, get_dados_painel, painel_mensagem_view,
painel_parlamentares_view, painel_view, painel_parlamentares_view, painel_view,
painel_votacao_view) painel_votacao_view)
@ -14,5 +15,6 @@ urlpatterns = [
url(r'^painel/parlamentares$', painel_parlamentares_view, url(r'^painel/parlamentares$', painel_parlamentares_view,
name='painel_parlamentares'), name='painel_parlamentares'),
url(r'^painel/votacao$', painel_votacao_view, name='painel_votacao'), url(r'^painel/votacao$', painel_votacao_view, name='painel_votacao'),
url(r'^painel/cronometro$', include(cronometro_painel_crud.urls)), url(r'^painel/cronometro$', cronometro_painel, name='cronometro_painel'),
# url(r'^painel/cronometro$', include(cronometro_painel_crud.urls)),
] ]

29
painel/views.py

@ -45,15 +45,7 @@ def controlador_painel(request):
context = {'painel': painel, 'PAINEL_TYPES': Painel.PAINEL_TYPES} context = {'painel': painel, 'PAINEL_TYPES': Painel.PAINEL_TYPES}
return render(request, 'painel/controlador.html', context) return render(request, 'painel/controlador.html', context)
def cronometro_painel(request):
print(request.POST)
return HttpResponse({})
def painel_view(request, pk): def painel_view(request, pk):
print(pk)
context = {'head_title': 'Painel Plenário', 'sessao_id': pk} context = {'head_title': 'Painel Plenário', 'sessao_id': pk}
return render(request, 'painel/index.html', {'context': context}) return render(request, 'painel/index.html', {'context': context})
@ -69,6 +61,19 @@ def painel_parlamentares_view(request):
def painel_votacao_view(request): def painel_votacao_view(request):
return render(request, 'painel/votacao.html') return render(request, 'painel/votacao.html')
def cronometro_painel(request):
print(request.GET['tipo'] + ' ' + request.GET['action']);
request.session[request.GET['tipo']] = request.GET['action'];
return HttpResponse({})
def get_cronometro_status(request, name):
try:
cronometro = request.session[name]
except KeyError:
cronometro = ''
return cronometro
def get_dados_painel(request, pk): def get_dados_painel(request, pk):
# Sessão Plenária # Sessão Plenária
@ -87,7 +92,6 @@ def get_dados_painel(request, pk):
# Presença Sessão Plenária # Presença Sessão Plenária
sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter( sessao_plenaria_presenca = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=sessao_plenaria_id) sessao_plenaria_id=sessao_plenaria_id)
print(sessao_plenaria_presenca)
presentes_sessao_plenaria = [ presentes_sessao_plenaria = [
p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca] p.parlamentar.nome_parlamentar for p in sessao_plenaria_presenca]
num_presentes_sessao_plen = len(presentes_sessao_plenaria) num_presentes_sessao_plen = len(presentes_sessao_plenaria)
@ -149,6 +153,10 @@ def get_dados_painel(request, pk):
materia_observacao = "" materia_observacao = ""
tipo_votacao = "" tipo_votacao = ""
cronometro_discurso = get_cronometro_status(request, 'discurso')
cronometro_aparte = get_cronometro_status(request, 'aparte')
cronometro_ordem = get_cronometro_status(request, 'ordem')
votacao_json = {"sessao_plenaria": str(sessao_plenaria), votacao_json = {"sessao_plenaria": str(sessao_plenaria),
"sessao_plenaria_data": sessao_plenaria.data_inicio, "sessao_plenaria_data": sessao_plenaria.data_inicio,
"sessao_plenaria_hora_inicio": sessao_plenaria.hora_inicio, "sessao_plenaria_hora_inicio": sessao_plenaria.hora_inicio,
@ -167,6 +175,9 @@ def get_dados_painel(request, pk):
"total_votos": total_votos, "total_votos": total_votos,
"tipo_resultado": tipo_resultado, "tipo_resultado": tipo_resultado,
"votos": votos, "votos": votos,
"cronometro_aparte": cronometro_aparte,
"cronometro_discurso": cronometro_discurso,
"cronometro_ordem": cronometro_ordem,
} }
return JsonResponse(votacao_json) return JsonResponse(votacao_json)

55
templates/painel/index.html

@ -12,6 +12,7 @@
<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 'foundation/js/vendor/jquery.js' %}"></script> <script type="text/javascript" src="{% static 'foundation/js/vendor/jquery.js' %}"></script>
<script type="text/javascript" src="{% static 'jquery-runner/build/jquery.runner.js' %}"></script>
<STYLE type="text/css"> <STYLE type="text/css">
@media screen { @media screen {
@ -43,6 +44,34 @@
startTime(); startTime();
$('#cronometro_discurso').runner({
autostart: false,
countdown: true,
startAt: 5 * 60 * 1000, // 5 minutes
stopAt: 0,
milliseconds: false
});
$('#cronometro_aparte').runner({
autostart: false,
countdown: true,
startAt: 3 * 60 * 1000, // 3 minutes
stopAt: 0,
milliseconds: false
});
$('#cronometro_ordem').runner({
autostart: false,
countdown: true,
startAt: 2 * 60 * 1000, // 2 minutes
stopAt: 0,
milliseconds: false
});
var discurso_previous = '';
var aparte_previous = '';
var ordem_previous = '';
var counter = 1; var counter = 1;
(function poll() { (function poll() {
$.ajax({ $.ajax({
@ -82,6 +111,24 @@
$("#observacao_materia").text(data["observacao_materia"]) $("#observacao_materia").text(data["observacao_materia"])
$("#resultado_votacao").text(data["tipo_resultado"]) $("#resultado_votacao").text(data["tipo_resultado"])
var discurso_current = data["cronometro_discurso"];
if (discurso_current != discurso_previous) {
$('#cronometro_discurso').runner(discurso_current);
discurso_previous = discurso_current;
}
var aparte_current = data["cronometro_aparte"];
if (aparte_current != aparte_previous) {
$('#cronometro_aparte').runner(aparte_current);
aparte_previous = aparte_current;
}
var ordem_current = data["cronometro_ordem"];
if (ordem_current != ordem_previous) {
$('#cronometro_ordem').runner(ordem_current);
ordem_previous = ordem_current;
}
$("#counter").text(counter); $("#counter").text(counter);
counter++; counter++;
}, },
@ -89,7 +136,7 @@
console.error(err); console.error(err);
}, },
dataType: "json", dataType: "json",
complete: setTimeout(function() {poll()}, 5000), complete: setTimeout(function() {poll()}, 2000),
timeout: 20000 // TODO: decrease timeout: 20000 // TODO: decrease
}) })
})(); })();
@ -113,15 +160,15 @@
</tr> </tr>
<tr> <tr>
<td>DISCURSO:</td> <td>DISCURSO:</td>
<td><span id="cronometro-discurso"></span></td> <td><span id="cronometro_discurso"></span></td>
</tr> </tr>
<tr> <tr>
<td>APARTE:</td> <td>APARTE:</td>
<td><span id="cronometro-aparte"></span></td> <td><span id="cronometro_aparte"></span></td>
</tr> </tr>
<tr> <tr>
<td>QUESTÃO DE ORDEM:</td> <td>QUESTÃO DE ORDEM:</td>
<td><span id="cronometro-ordem"></span></td> <td><span id="cronometro_ordem"></span></td>
</tr> </tr>
</table> </table>
<table> <table>

36
templates/sessao/painel.html

@ -95,13 +95,14 @@ $(function() {
stopAt: 0, stopAt: 0,
milliseconds: false milliseconds: false
}).on('runnerFinish', function(eventObject, info){ }).on('runnerFinish', function(eventObject, info){
audioAlertFinish.play(); audioAlertFinish.play();
}); });
$('#discursoStart').click(function() { $('#discursoStart').click(function() {
if($('#discursoStart').text() == 'Iniciar'){
if ($('#discursoStart').text() == 'Iniciar'){
$.post('/sistema/painel/cronometro', { tipo: 'Discurso', action: 'Start' } ); $.get('/painel/cronometro', { tipo: 'discurso', action: 'start' } );
$('#discursoReset').hide(); $('#discursoReset').hide();
$('#discurso').runner('start'); $('#discurso').runner('start');
@ -110,9 +111,10 @@ $(function() {
$('#aparteReset').prop('disabled', true); $('#aparteReset').prop('disabled', true);
$('#ordemStart').prop('disabled', true); $('#ordemStart').prop('disabled', true);
$('#ordemReset').prop('disabled', true); $('#ordemReset').prop('disabled', true);
}else{
$.post('/sistema/painel/cronometro', { tipo: 'Discurso', action: 'Stop' } ); } else {
$.get('/painel/cronometro', { tipo: 'discurso', action: 'stop' } );
$('#discursoReset').show(); $('#discursoReset').show();
$('#discurso').runner('stop'); $('#discurso').runner('stop');
@ -126,7 +128,7 @@ $(function() {
$('#discursoReset').click(function() { $('#discursoReset').click(function() {
$.post('/sistema/painel/cronometro', { tipo: 'Discurso', action: 'Reset' } ); $.get('/painel/cronometro', { tipo: 'discurso', action: 'reset' } );
$('#discurso').runner('stop'); $('#discurso').runner('stop');
$('#discurso').runner('reset'); $('#discurso').runner('reset');
@ -143,9 +145,9 @@ $(function() {
}); });
$('#aparteStart').click(function(){ $('#aparteStart').click(function(){
if($('#aparteStart').text() == 'Iniciar'){ if ($('#aparteStart').text() == 'Iniciar') {
$.post('/sistema/painel/cronometro', { tipo: 'Aparte', action: 'Start' } ); $.get('/painel/cronometro', { tipo: 'aparte', action: 'start' } );
$('#aparteReset').hide(); $('#aparteReset').hide();
$('#aparte').runner('start'); $('#aparte').runner('start');
@ -154,9 +156,10 @@ $(function() {
$('#discursoReset').prop('disabled', true); $('#discursoReset').prop('disabled', true);
$('#ordemStart').prop('disabled', true); $('#ordemStart').prop('disabled', true);
$('#ordemReset').prop('disabled', true); $('#ordemReset').prop('disabled', true);
}else{
$.post('/sistema/painel/cronometro', { tipo: 'Aparte', action: 'Stop' } ); } else {
$.get('/painel/cronometro', { tipo: 'aparte', action: 'stop' } );
$('#aparteReset').show(); $('#aparteReset').show();
$('#aparte').runner('stop'); $('#aparte').runner('stop');
@ -170,7 +173,7 @@ $(function() {
$('#aparteReset').click(function() { $('#aparteReset').click(function() {
$.post('/sistema/painel/cronometro', { tipo: 'Aparte', action: 'Reset' } ); $.get('/painel/cronometro', { tipo: 'aparte', action: 'reset' } );
$('#aparte').runner('stop'); $('#aparte').runner('stop');
$('#aparte').runner('reset'); $('#aparte').runner('reset');
@ -187,9 +190,9 @@ $(function() {
}); });
$('#ordemStart').click(function() { $('#ordemStart').click(function() {
if($('#ordemStart').text() == 'Iniciar'){ if ($('#ordemStart').text() == 'Iniciar') {
$.post('/sistema/painel/cronometro', { tipo: 'Ordem', action: 'Start' } ); $.get('/painel/cronometro', { tipo: 'ordem', action: 'start' } );
$('#ordemReset').hide(); $('#ordemReset').hide();
$('#ordem').runner('start'); $('#ordem').runner('start');
@ -198,9 +201,10 @@ $(function() {
$('#discursoReset').prop('disabled', true); $('#discursoReset').prop('disabled', true);
$('#aparteStart').prop('disabled', true); $('#aparteStart').prop('disabled', true);
$('#aparteReset').prop('disabled', true); $('#aparteReset').prop('disabled', true);
}else{
$.post('/sistema/painel/cronometro', { tipo: 'Ordem', action: 'Stop' } ); } else {
$.get('/painel/cronometro', { tipo: 'ordem', action: 'stop' } );
$('#ordemReset').show(); $('#ordemReset').show();
$('#ordem').runner('stop'); $('#ordem').runner('stop');
@ -214,7 +218,7 @@ $(function() {
$('#ordemReset').click(function() { $('#ordemReset').click(function() {
$.post('/sistema/painel/cronometro', { tipo: 'Ordem', action: 'Reset' } ); $.get('/painel/cronometro', { tipo: 'ordem', action: 'reset' } );
$('#ordem').runner('stop'); $('#ordem').runner('stop');
$('#ordem').runner('reset'); $('#ordem').runner('reset');

Loading…
Cancel
Save