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. 79
      sapl/templates/painel/index.html
  3. 37
      sapl/templates/sessao/painel.html

6
sapl/painel/views.py

@ -601,11 +601,17 @@ 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,

79
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('<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 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<status_cronometros.length; i++){
if (!cronometros_previous[i])
if (!cronometros_previous[i]){
cronometros_previous[i] = ''
}
// se houve alteração de status
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];
}
if($('#cronometro_' + ids[i]).runner('info').formattedTime == tempo_disparo_antecedencia &&
"{{ painel_config.disparo_cronometro }}" == "True" )
// Dispara aviso prévio se estiver configurado
if($('#cronometro_' + ids[i]).runner('info').formattedTime == tempo_disparo_antecedencia
&& "{{ painel_config.disparo_cronometro }}" == "True" ){
audioAlertFinish.play();
}
}

37
sapl/templates/sessao/painel.html

@ -125,18 +125,6 @@ function convertValueToDuration(value){
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(){
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 %}

Loading…
Cancel
Save