From e5c4d17c0bb528c5a36085d9a83198ef3d7c30a2 Mon Sep 17 00:00:00 2001 From: Cesar Carvalho Date: Fri, 14 Jun 2019 12:01:49 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20op=C3=A7=C3=A3o=20de=20dura=C3=A7?= =?UTF-8?q?=C3=A3o=20do=20disparo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/painel/forms.py | 4 ++- ...0007_painelconfig_tempo_disparo_termino.py | 20 ++++++++++++++ sapl/painel/models.py | 6 +++++ sapl/templates/painel/index.html | 26 +++++++++++++++++-- sapl/templates/painel/layouts.yaml | 1 + sapl/templates/sessao/painel.html | 24 ++++++++++++++++- 6 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 sapl/painel/migrations/0007_painelconfig_tempo_disparo_termino.py diff --git a/sapl/painel/forms.py b/sapl/painel/forms.py index 063e82f42..3366b7384 100644 --- a/sapl/painel/forms.py +++ b/sapl/painel/forms.py @@ -20,8 +20,10 @@ class ConfiguracoesPainelForm(forms.ModelForm): model = PainelConfig fields = ['cronometro_ordem', 'disparo_cronometro', - 'tempo_disparo_antecedencia'] + 'tempo_disparo_antecedencia', + 'tempo_disparo_termino'] def __init__(self, *args, **kwargs): super(ConfiguracoesPainelForm, self).__init__(*args, **kwargs) self.fields['tempo_disparo_antecedencia'].widget.attrs['class'] = 'cronometro' + self.fields['tempo_disparo_termino'].widget.attrs['class'] = 'cronometro' diff --git a/sapl/painel/migrations/0007_painelconfig_tempo_disparo_termino.py b/sapl/painel/migrations/0007_painelconfig_tempo_disparo_termino.py new file mode 100644 index 000000000..ddff4bf07 --- /dev/null +++ b/sapl/painel/migrations/0007_painelconfig_tempo_disparo_termino.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-06-14 14:04 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('painel', '0006_auto_20190612_1347'), + ] + + operations = [ + migrations.AddField( + model_name='painelconfig', + name='tempo_disparo_termino', + field=models.DurationField(blank=True, default='00:00:05', null=True, verbose_name='Cronômetros devem permanecer tocando por quanto tempo ao término tempo?'), + ), + ] diff --git a/sapl/painel/models.py b/sapl/painel/models.py index 681c442ce..4645eb123 100644 --- a/sapl/painel/models.py +++ b/sapl/painel/models.py @@ -84,6 +84,12 @@ class PainelConfig(models.Model): blank=True, null=True) + tempo_disparo_termino = models.DurationField( + verbose_name=_('Cronômetros devem permanecer tocando por quanto tempo ao término tempo?'), + default="00:00:05", + blank=True, + null=True) + class Meta: verbose_name = _('Configurações do Painel') verbose_name_plural = _('Configurações do Painel') diff --git a/sapl/templates/painel/index.html b/sapl/templates/painel/index.html index db25c62b5..b6007a163 100644 --- a/sapl/templates/painel/index.html +++ b/sapl/templates/painel/index.html @@ -149,12 +149,34 @@ return voto } + function playAudioNumVezes(audio, times, ended) { + if (times <= 0) { + return; + } + let played = 0; + audio.addEventListener("ended", function() { + played++; + if (played < times) { + audio.play(); + } else if (ended) { + ended(); + } + }); + audio.play(); + } + $(document).ready(function() { //TODO: replace by a fancy jQuery clock startTime(); var audioAlertFinish = document.getElementById("audio"); + // Obtém duração do disparo ao término do tempo e converte para segundos + var duracao_disparo = "{{ painel_config.tempo_disparo_termino }}"; + let tmp = duracao_disparo.split(":"); + duracao_disparo = parseInt(tmp[0])*3600 + parseInt(tmp[1])*60 + parseInt(tmp[2]); + var num_vezes_toca_audio = Math.round(duracao_disparo/audioAlertFinish.duration); + var cronometros_previous = []; {% for cron in cronometros %} cronometros_previous.push(0); @@ -174,12 +196,12 @@ return h.toString() + ":" + m.toString() + ":" + s.toString(); } }).on('runnerFinish', function(eventObject, info){ - audioAlertFinish.play(); + playAudioNumVezes(audioAlertFinish, num_vezes_toca_audio); }) {% endfor %} var tempo_disparo_antecedencia = "{{ painel_config.tempo_disparo_antecedencia }}" - let tmp = tempo_disparo_antecedencia.split(":"); + tmp = tempo_disparo_antecedencia.split(":"); tempo_disparo_antecedencia = checkTime(parseInt(tmp[0])) + ":" + checkTime(parseInt(tmp[1])) + ":" + checkTime(parseInt(tmp[2])); var counter = 1; diff --git a/sapl/templates/painel/layouts.yaml b/sapl/templates/painel/layouts.yaml index 8accc94e6..7e89dbc22 100644 --- a/sapl/templates/painel/layouts.yaml +++ b/sapl/templates/painel/layouts.yaml @@ -7,3 +7,4 @@ PainelConfig: {% trans 'Configurações do Painel' %}: - cronometro_ordem - disparo_cronometro:6 tempo_disparo_antecedencia:6 + - tempo_disparo_termino:8 diff --git a/sapl/templates/sessao/painel.html b/sapl/templates/sessao/painel.html index 7f90d9b02..9b0078fd3 100644 --- a/sapl/templates/sessao/painel.html +++ b/sapl/templates/sessao/painel.html @@ -99,6 +99,22 @@ function startTime() { },500); } +function playAudioNumVezes(audio, times, ended) { + if (times <= 0) { + return; + } + let played = 0; + audio.addEventListener("ended", function() { + played++; + if (played < times) { + audio.play(); + } else if (ended) { + ended(); + } + }); + audio.play(); +} + $(document).ready(function(){ let pk_sessao = parseInt("{{root_pk}}"); @@ -127,6 +143,12 @@ $(document).ready(function(){ startTime(); let audioAlertFinish = document.getElementById("audio"); + // Obtém duração do disparo ao término do tempo e converte para segundos + var duracao_disparo = "{{ painel_config.tempo_disparo_termino }}"; + let tmp = duracao_disparo.split(":"); + duracao_disparo = parseInt(tmp[0])*3600 + parseInt(tmp[1])*60 + parseInt(tmp[2]); + let num_vezes_toca_audio = Math.round(duracao_disparo/audioAlertFinish.duration); + {% for cron in cronometros %} $('#cronometro_' + "{{cron.id}}").prop('disabled', false); @@ -147,7 +169,7 @@ $(document).ready(function(){ } }).on('runnerFinish', function(eventObject, info){ $.get('/painel/cronometro', { tipo: 'cronometro_' + "{{cron.id}}", action: 'stop' } ); - audioAlertFinish.play(); + playAudioNumVezes(audioAlertFinish, num_vezes_toca_audio); $('#cronometro_' + "{{cron.id}}" + '_Reset').show(); $('#cronometro_' + "{{cron.id}}").runner('stop'); $('#cronometro_' + "{{cron.id}}" + '_Start').text('Iniciar');