Browse Source

Adiciona sincronização no painel eletrônico

pull/2894/head
Cesar Carvalho 7 years ago
parent
commit
c3b369a3a3
  1. 6
      sapl/painel/views.py
  2. 81
      sapl/templates/painel/index.html
  3. 37
      sapl/templates/sessao/painel.html

6
sapl/painel/views.py

@ -600,12 +600,18 @@ def get_dados_painel(request, pk):
for key, value in dict_status_cronometros.items(): for key, value in dict_status_cronometros.items():
dict_status_cronometros[key] = CRONOMETRO_STATUS[dict_status_cronometros[key]] 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 = { 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,
'cronometros': dict_status_cronometros, 'cronometros': dict_status_cronometros,
'duracao_cronometros': dict_duracao_cronometros,
'sessao_solene': sessao.tipo.nome == "Solene", 'sessao_solene': sessao.tipo.nome == "Solene",
'sessao_finalizada': sessao.finalizada, 'sessao_finalizada': sessao.finalizada,
'tema_solene': sessao.tema_solene, 'tema_solene': sessao.tema_solene,

81
sapl/templates/painel/index.html

@ -170,6 +170,16 @@
audio.play(); 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() { $(document).ready(function() {
//TODO: replace by a fancy jQuery clock //TODO: replace by a fancy jQuery clock
startTime(); startTime();
@ -186,23 +196,26 @@
{% for cron in cronometros %} {% for cron in cronometros %}
cronometros_previous.push(0); cronometros_previous.push(0);
$('#cronometro_' + "{{cron.id}}").runner({ $('#cronometro_' + "{{cron.id}}").runner({
autostart: false, autostart: {% if cron.status == "I"%} true {% else %} false {% endif %},
countdown: true, 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, stopAt: 0,
milliseconds: false, milliseconds: false,
format: function(value) { format: convertValueToDuration
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();
}
}).on('runnerFinish', function(eventObject, info){ }).on('runnerFinish', function(eventObject, info){
playAudioNumVezes(audioAlertFinish, num_vezes_toca_audio); playAudioNumVezes(audioAlertFinish, num_vezes_toca_audio);
}) });
{% endfor %} {% endfor %}
var tempo_disparo_antecedencia = "{{ painel_config.tempo_disparo_antecedencia }}" var tempo_disparo_antecedencia = "{{ painel_config.tempo_disparo_antecedencia }}"
@ -329,6 +342,8 @@
$("#votacao").append('<center>Não há votação, pois não há nenhuma matéria aberta ou já votada.</center>'); $("#votacao").append('<center>Não há votação, pois não há nenhuma matéria aberta ou já votada.</center>');
}; };
// 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 ids = [];
var status_cronometros = []; var status_cronometros = [];
for (var key in data['cronometros']) { for (var key in data['cronometros']) {
@ -338,26 +353,44 @@
} }
} }
//var ult_alteracao_cronometros = []; // converte os dados de dicionário para uma lista
//for (let id of ids) { var duracao_cronometros = [];
// ult_alteracao_cronometros.push(data['ult_alteracao_cronometros'][id]); for (let id of ids) {
//} duracao_cronometros.push(data['duracao_cronometros'][id]);
}
//console.log(data['ult_alteracao_cronometros']);
//console.log(ult_alteracao_cronometros);
for(let i=0; i<status_cronometros.length; i++){ for(let i=0; i<status_cronometros.length; i++){
if (!cronometros_previous[i]) if (!cronometros_previous[i]){
cronometros_previous[i] = '' cronometros_previous[i] = ''
}
// se houve alteração de status
if (status_cronometros[i] != cronometros_previous[i]) { if (status_cronometros[i] != cronometros_previous[i]) {
$('#cronometro_' + ids[i]).runner(status_cronometros[i]); if(status_cronometros[i] == 'reset'){
// é necessário recriar o cronômetro com o valor da duração original devido a limitações da API
$('#cronometro_' + ids[i]).runner({
autostart: false,
countdown: true,
startAt: parseInt(duracao_cronometros[i]) * 1000,
stopAt: 0,
milliseconds: false,
format: convertValueToDuration
}).on('runnerFinish', function(eventObject, info){
playAudioNumVezes(audioAlertFinish, num_vezes_toca_audio);
});
}
// ações de start e stop
else{
$('#cronometro_' + ids[i]).runner(status_cronometros[i]);
}
cronometros_previous[i] = status_cronometros[i]; cronometros_previous[i] = status_cronometros[i];
} }
if($('#cronometro_' + ids[i]).runner('info').formattedTime == tempo_disparo_antecedencia && // Dispara aviso prévio se estiver configurado
"{{ painel_config.disparo_cronometro }}" == "True" ) if($('#cronometro_' + ids[i]).runner('info').formattedTime == tempo_disparo_antecedencia
&& "{{ painel_config.disparo_cronometro }}" == "True" ){
audioAlertFinish.play(); audioAlertFinish.play();
}
} }

37
sapl/templates/sessao/painel.html

@ -125,18 +125,6 @@ function convertValueToDuration(value){
return h.toString() + ":" + m.toString() + ":" + s.toString(); return h.toString() + ":" + m.toString() + ":" + s.toString();
} }
function getDifferenceToNow(ultima_alteracao, duracao_cronometro){
var today = new Date();
var djDate = new Date(ultima_alteracao);
var difference = today.getTime() - djDate.getTime();
var dif = convertValueToDuration(difference);
console.log(difference/(1000));
if(dif > convertValueToDuration(duracao_cronometro)){
return 0;
}
return difference/1000;
}
$(document).ready(function(){ $(document).ready(function(){
let pk_sessao = parseInt("{{root_pk}}"); let pk_sessao = parseInt("{{root_pk}}");
@ -174,14 +162,10 @@ $(document).ready(function(){
{% for cron in cronometros %} {% for cron in cronometros %}
$('#cronometro_' + "{{cron.id}}").prop('disabled', false); $('#cronometro_' + "{{cron.id}}").prop('disabled', false);
console.log("{{cron.status}}", "{{cron.last_stop_duration}}")
{% if cron.status == 'I' %} {% if cron.status == 'I' %}
$('#cronometro_' + "{{cron.id}}" + '_Reset').hide(); $('#cronometro_' + "{{cron.id}}" + '_Reset').hide();
$('#cronometro_' + "{{cron.id}}").runner('start'); $('#cronometro_' + "{{cron.id}}").runner('start');
$('#cronometro_' + "{{cron.id}}" + '_Start').text('Parar'); $('#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 %} {% else %}
$('#cronometro_' + "{{cron.id}}" + '_Reset').show(); $('#cronometro_' + "{{cron.id}}" + '_Reset').show();
$('#cronometro_' + "{{cron.id}}").runner('stop'); $('#cronometro_' + "{{cron.id}}").runner('stop');
@ -212,7 +196,7 @@ $(document).ready(function(){
$('#cronometro_' + "{{cron.id}}" + '_Reset').show(); $('#cronometro_' + "{{cron.id}}" + '_Reset').show();
$('#cronometro_' + "{{cron.id}}").runner('stop'); $('#cronometro_' + "{{cron.id}}").runner('stop');
$('#cronometro_' + "{{cron.id}}" + '_Start').text('Iniciar'); $('#cronometro_' + "{{cron.id}}" + '_Start').text('Iniciar');
}) });
$('#cronometro_' + "{{cron.id}}" + '_Start').click(function() { $('#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), // 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 // Ação de reset é igual para todos os cronômetros
$('#cronometro_' + "{{cron.id}}" + '_Reset').click(function() { $('#cronometro_' + "{{cron.id}}" + '_Reset').click(function() {
$.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'reset', last_time: '0' } ); $.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'reset', last_time: '0' } );
//$('#cronometro_' + "{{cron.id}}").runner('stop'); // é necessário recriar o cronômetro com o valor da duração original devido a limitações da API
//$('#cronometro_' + "{{cron.id}}").runner('reset'); $('#cronometro_' + "{{cron.id}}").runner({
// faz o reset manualmente para que o cronometro retorne para o valor correto autostart: false,
$('#cronometro_' + "{{cron.id}}").val(convertValueToDuration(parseInt("{{cron.duracao_cronometro|duration_to_seconds}}") * 1000)); 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 %} {% endfor %}

Loading…
Cancel
Save