From c3b369a3a33085ef47ed9d8d72c5ce346c3add44 Mon Sep 17 00:00:00 2001 From: Cesar Carvalho Date: Fri, 12 Jul 2019 09:35:12 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20sincroniza=C3=A7=C3=A3o=20no=20paine?= =?UTF-8?q?l=20eletr=C3=B4nico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/painel/views.py | 6 +++ sapl/templates/painel/index.html | 81 ++++++++++++++++++++++--------- sapl/templates/sessao/painel.html | 37 ++++++-------- 3 files changed, 79 insertions(+), 45 deletions(-) diff --git a/sapl/painel/views.py b/sapl/painel/views.py index bbd71e4cb..6f5da1703 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -600,12 +600,18 @@ def get_dados_painel(request, pk): for key, value in dict_status_cronometros.items(): dict_status_cronometros[key] = CRONOMETRO_STATUS[dict_status_cronometros[key]] + + dict_duracao_cronometros = dict(Cronometro.objects.filter(ativo=True).order_by('ordenacao').values_list('id', 'duracao_cronometro')) + + for key, value in dict_duracao_cronometros.items(): + dict_duracao_cronometros[key] = value.seconds response = { 'sessao_plenaria': str(sessao), 'sessao_plenaria_data': sessao.data_inicio.strftime('%d/%m/%Y'), 'sessao_plenaria_hora_inicio': sessao.hora_inicio, 'cronometros': dict_status_cronometros, + 'duracao_cronometros': dict_duracao_cronometros, 'sessao_solene': sessao.tipo.nome == "Solene", 'sessao_finalizada': sessao.finalizada, 'tema_solene': sessao.tema_solene, diff --git a/sapl/templates/painel/index.html b/sapl/templates/painel/index.html index 8cb7d7555..0eea79734 100644 --- a/sapl/templates/painel/index.html +++ b/sapl/templates/painel/index.html @@ -170,6 +170,16 @@ audio.play(); } + function convertValueToDuration(value){ + let h = Math.floor((value/1000) / 3600); + h = checkTime(h); + let m = Math.floor((value/1000) % 3600 / 60); + m = checkTime(m); + let s = Math.floor((value/1000) % 3600 % 60); + s = checkTime(s); + return h.toString() + ":" + m.toString() + ":" + s.toString(); + } + $(document).ready(function() { //TODO: replace by a fancy jQuery clock startTime(); @@ -186,23 +196,26 @@ {% for cron in cronometros %} cronometros_previous.push(0); $('#cronometro_' + "{{cron.id}}").runner({ - autostart: false, + autostart: {% if cron.status == "I"%} true {% else %} false {% endif %}, countdown: true, - startAt: parseInt("{{cron.duracao_cronometro|duration_to_seconds}}") * 1000, + startAt: + {% if cron.status == "R"%} + parseInt("{{cron.duracao_cronometro|duration_to_seconds}}") * 1000 + {% elif cron.status == "S"%} + {% if cron.last_stop_duration %} + parseInt("{{cron.last_stop_duration|duration_to_seconds}}") * 1000 + {% else %} + parseInt("{{cron.duracao_cronometro|duration_to_seconds}}") * 1000 + {% endif %} + {% elif cron.status == "I" %} + parseInt("{{cron.duracao_cronometro|duration_difference:cron.ultima_alteracao_status}}") * 1000 + {% endif %}, stopAt: 0, milliseconds: false, - format: function(value) { - let h = Math.floor((value/1000) / 3600); - h = checkTime(h); - let m = Math.floor((value/1000) % 3600 / 60); - m = checkTime(m); - let s = Math.floor((value/1000) % 3600 % 60); - s = checkTime(s); - return h.toString() + ":" + m.toString() + ":" + s.toString(); - } + format: convertValueToDuration }).on('runnerFinish', function(eventObject, info){ playAudioNumVezes(audioAlertFinish, num_vezes_toca_audio); - }) + }); {% endfor %} var tempo_disparo_antecedencia = "{{ painel_config.tempo_disparo_antecedencia }}" @@ -329,6 +342,8 @@ $("#votacao").append('
Não há votação, pois não há nenhuma matéria aberta ou já votada.
'); }; + // obtém todos os ids em uma lista e + // converte os dados do status dos cronômetros de dicionário para uma lista var ids = []; var status_cronometros = []; for (var key in data['cronometros']) { @@ -338,26 +353,44 @@ } } - //var ult_alteracao_cronometros = []; - //for (let id of ids) { - // ult_alteracao_cronometros.push(data['ult_alteracao_cronometros'][id]); - //} - - //console.log(data['ult_alteracao_cronometros']); - //console.log(ult_alteracao_cronometros); + // converte os dados de dicionário para uma lista + var duracao_cronometros = []; + for (let id of ids) { + duracao_cronometros.push(data['duracao_cronometros'][id]); + } for(let i=0; i convertValueToDuration(duracao_cronometro)){ - return 0; - } - return difference/1000; -} - $(document).ready(function(){ let pk_sessao = parseInt("{{root_pk}}"); @@ -174,14 +162,10 @@ $(document).ready(function(){ {% for cron in cronometros %} $('#cronometro_' + "{{cron.id}}").prop('disabled', false); - console.log("{{cron.status}}", "{{cron.last_stop_duration}}") - {% if cron.status == 'I' %} $('#cronometro_' + "{{cron.id}}" + '_Reset').hide(); $('#cronometro_' + "{{cron.id}}").runner('start'); $('#cronometro_' + "{{cron.id}}" + '_Start').text('Parar'); - //var resposta = getDifferenceToNow({{ cron.ultima_alteracao_status|date:"U" }} * 1000, "{{cron.duracao_cronometro|duration_to_seconds}}"); - //console.log(resposta); {% else %} $('#cronometro_' + "{{cron.id}}" + '_Reset').show(); $('#cronometro_' + "{{cron.id}}").runner('stop'); @@ -212,7 +196,7 @@ $(document).ready(function(){ $('#cronometro_' + "{{cron.id}}" + '_Reset').show(); $('#cronometro_' + "{{cron.id}}").runner('stop'); $('#cronometro_' + "{{cron.id}}" + '_Start').text('Iniciar'); - }) + }); $('#cronometro_' + "{{cron.id}}" + '_Start').click(function() { // Como o botão de start e stop está sendo reaproveitado (é o mesmo botão, que fica mudando de texto), @@ -255,10 +239,21 @@ $(document).ready(function(){ // Ação de reset é igual para todos os cronômetros $('#cronometro_' + "{{cron.id}}" + '_Reset').click(function() { $.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'reset', last_time: '0' } ); - //$('#cronometro_' + "{{cron.id}}").runner('stop'); - //$('#cronometro_' + "{{cron.id}}").runner('reset'); - // faz o reset manualmente para que o cronometro retorne para o valor correto - $('#cronometro_' + "{{cron.id}}").val(convertValueToDuration(parseInt("{{cron.duracao_cronometro|duration_to_seconds}}") * 1000)); + // é necessário recriar o cronômetro com o valor da duração original devido a limitações da API + $('#cronometro_' + "{{cron.id}}").runner({ + autostart: false, + countdown: true, + startAt: parseInt("{{cron.duracao_cronometro|duration_to_seconds}}") * 1000, + stopAt: 0, + milliseconds: false, + format: convertValueToDuration + }).on('runnerFinish', function(eventObject, info){ + $.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'stop', last_time: $('#cronometro_' + "{{c.id}}").val() } ); + playAudioNumVezes(audioAlertFinish, num_vezes_toca_audio); + $('#cronometro_' + "{{cron.id}}" + '_Reset').show(); + $('#cronometro_' + "{{cron.id}}").runner('stop'); + $('#cronometro_' + "{{cron.id}}" + '_Start').text('Iniciar'); + }); }); {% endfor %}