diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 513c3a7ca..5410ee3fe 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -834,6 +834,7 @@ class ConfiguracoesAppForm(ModelForm): 'cronometro_discurso', 'cronometro_aparte', 'cronometro_ordem', + 'cronometro_consideracoes', 'mostrar_brasao_painel', 'receber_recibo_proposicao'] @@ -842,6 +843,8 @@ class ConfiguracoesAppForm(ModelForm): self.fields['cronometro_discurso'].widget.attrs['class'] = 'cronometro' self.fields['cronometro_aparte'].widget.attrs['class'] = 'cronometro' self.fields['cronometro_ordem'].widget.attrs['class'] = 'cronometro' + self.fields['cronometro_consideracoes'].widget.attrs['class'] = 'cronometro' + def clean_mostrar_brasao_painel(self): mostrar_brasao_painel = self.cleaned_data.get( diff --git a/sapl/base/migrations/0017_appconfig_cronometro_consideracoes.py b/sapl/base/migrations/0017_appconfig_cronometro_consideracoes.py new file mode 100644 index 000000000..057344d9c --- /dev/null +++ b/sapl/base/migrations/0017_appconfig_cronometro_consideracoes.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.13 on 2018-05-23 17:30 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0016_auto_20180326_1840'), + ] + + operations = [ + migrations.AddField( + model_name='appconfig', + name='cronometro_consideracoes', + field=models.TimeField(blank=True, null=True, verbose_name='Cronômetro de Considerações Finais'), + ), + ] diff --git a/sapl/base/models.py b/sapl/base/models.py index d2a6035a8..bbc03b6c7 100644 --- a/sapl/base/models.py +++ b/sapl/base/models.py @@ -113,6 +113,11 @@ class AppConfig(models.Model): blank=True, null=True) + cronometro_consideracoes = models.TimeField( + verbose_name=_('Cronômetro de Considerações Finais'), + blank=True, + null=True) + mostrar_brasao_painel = models.BooleanField( default=False, verbose_name=_('Mostrar brasão da Casa no painel?')) diff --git a/sapl/painel/migrations/0002_auto_20180523_1430.py b/sapl/painel/migrations/0002_auto_20180523_1430.py new file mode 100644 index 000000000..52074acd1 --- /dev/null +++ b/sapl/painel/migrations/0002_auto_20180523_1430.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.13 on 2018-05-23 17:30 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('painel', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='cronometro', + name='tipo', + field=models.CharField(choices=[('A', 'Aparte'), ('D', 'Discurso'), ('O', 'Ordem do dia'), ('C', 'Considerações finais')], max_length=1, verbose_name='Tipo Cronômetro'), + ), + ] diff --git a/sapl/painel/models.py b/sapl/painel/models.py index 097981520..f999ca480 100644 --- a/sapl/painel/models.py +++ b/sapl/painel/models.py @@ -26,7 +26,8 @@ class Cronometro(models.Model): CRONOMETRO_TYPES = ( ('A', _('Aparte')), ('D', _('Discurso')), - ('O', _('Ordem do dia')) + ('O', _('Ordem do dia')), + ('C', _('Considerações finais')) ) CRONOMETRO_STATUS = ( diff --git a/sapl/painel/views.py b/sapl/painel/views.py index d3f7fc5cc..0cb151382 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -464,6 +464,7 @@ def get_dados_painel(request, pk): 'cronometro_aparte': get_cronometro_status(request, 'aparte'), 'cronometro_discurso': get_cronometro_status(request, 'discurso'), 'cronometro_ordem': get_cronometro_status(request, 'ordem'), + 'cronometro_consideracoes': get_cronometro_status(request, 'consideracoes'), 'status_painel': sessao.painel_aberto, 'brasao': brasao } diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index f1bb99e58..8700177c0 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -761,6 +761,7 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView): request.session['discurso'] = 'stop' request.session['aparte'] = 'stop' request.session['ordem'] = 'stop' + request.session['consideracoes'] = 'stop' return TemplateView.get(self, request, *args, **kwargs) @@ -768,9 +769,10 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView): cronometro_discurso = AppsAppConfig.attr('cronometro_discurso') cronometro_aparte = AppsAppConfig.attr('cronometro_aparte') cronometro_ordem = AppsAppConfig.attr('cronometro_ordem') + cronometro_consideracoes = AppsAppConfig.attr('cronometro_consideracoes') if (not cronometro_discurso or not cronometro_aparte - or not cronometro_ordem): + or not cronometro_ordem or not cronometro_consideracoes): msg = _( 'Você precisa primeiro configurar os cronômetros \ nas Configurações da Aplicação') @@ -786,6 +788,9 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView): m, s, x = cronometro_ordem.isoformat().split(':') cronometro_ordem = int(m) * 60 + int(s) + m, s, x = cronometro_consideracoes.isoformat().split(':') + cronometro_consideracoes = int(m) * 60 + int(s) + context = TemplateView.get_context_data(self, **kwargs) context.update({ 'head_title': str(_('Painel Plenário')), @@ -794,7 +799,8 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView): 'sessaoplenaria': SessaoPlenaria.objects.get(pk=kwargs['pk']), 'cronometro_discurso': cronometro_discurso, 'cronometro_aparte': cronometro_aparte, - 'cronometro_ordem': cronometro_ordem}) + 'cronometro_ordem': cronometro_ordem, + 'cronometro_consideracoes': cronometro_consideracoes}) return context diff --git a/sapl/templates/base/layouts.yaml b/sapl/templates/base/layouts.yaml index 3f066289b..c07c15036 100644 --- a/sapl/templates/base/layouts.yaml +++ b/sapl/templates/base/layouts.yaml @@ -21,7 +21,7 @@ AppConfig: - texto_articulado_proposicao texto_articulado_materia texto_articulado_norma {% trans 'Cronômetros do Painel' %}: - - cronometro_discurso cronometro_aparte cronometro_ordem + - cronometro_discurso cronometro_aparte cronometro_ordem cronometro_consideracoes {% trans 'Configurações do Painel' %}: - mostrar_brasao_painel diff --git a/sapl/templates/painel/index.html b/sapl/templates/painel/index.html index c50167161..621689ffe 100644 --- a/sapl/templates/painel/index.html +++ b/sapl/templates/painel/index.html @@ -28,7 +28,7 @@ ul, li { list-style-type: none; } - #date, #sessao_plenaria, #sessao_plenaria_data, #sessao_plenaria_hora_inicio, #message, #cronometro_discurso, #cronometro_aparte, #cronometro_ordem, #relogio, #parlamentares, #votacao, #materia_legislativa_texto, #observacao_materia, #resultado_votacao, #orador { + #date, #sessao_plenaria, #sessao_plenaria_data, #sessao_plenaria_hora_inicio, #message, #cronometro_discurso, #cronometro_aparte, #cronometro_ordem, #cronometro_consideracoes, #relogio, #parlamentares, #votacao, #materia_legislativa_texto, #observacao_materia, #resultado_votacao, #orador { font-family: Verdana; } } @@ -108,6 +108,9 @@ Questão de Ordem: + + Considerações Finais: + @@ -195,9 +198,20 @@ audioAlertFinish.play(); }); + $('#cronometro_consideracoes').runner({ + autostart: false, + countdown: true, + startAt: {{ 'consideracoes'|cronometro_to_seconds }} * 1000, + stopAt: 0, + milliseconds: false + }).on('runnerFinish', function(eventObject, info){ + audioAlertFinish.play(); + }); + var discurso_previous; var ordem_previous; var aparte_previous; + var consideracoes_previous; var counter = 1; (function poll() { @@ -325,6 +339,16 @@ ordem_previous = ordem_current; } + var consideracoes_current = data["cronometro_consideracoes"]; + if (!consideracoes_previous){ + consideracoes_previous = '' + } + + if (consideracoes_current != consideracoes_previous) { + $('#cronometro_consideracoes').runner(consideracoes_current); + consideracoes_previous = consideracoes_current; + } + if($('#cronometro_discurso').runner('info').formattedTime == 30) { audioAlertFinish.play(); } @@ -337,6 +361,10 @@ audioAlertFinish.play(); } + if($('#cronometro_consideracoes').runner('info').formattedTime == 30) { + audioAlertFinish.play(); + } + if (data['materia_legislativa_texto']){ $("#materia_legislativa_texto").text(data["materia_legislativa_texto"]); } diff --git a/sapl/templates/sessao/painel.html b/sapl/templates/sessao/painel.html index 22dc62dda..d83c99e86 100644 --- a/sapl/templates/sessao/painel.html +++ b/sapl/templates/sessao/painel.html @@ -69,6 +69,20 @@

+
+

Cronômetro de Considerações Finais

+
+ +
+
+
+
+ +
+
+
+
+

@@ -102,6 +116,7 @@ $(function() { $('#discurso').prop('disabled', true); $('#aparte').prop('disabled', true); $('#ordem').prop('disabled', true); + $('#consideracoes').prop('disabled', true); $('#discurso').runner({ autostart: false, @@ -119,6 +134,8 @@ $(function() { $('#aparteReset').prop('disabled', false); $('#ordemStart').prop('disabled', false); $('#ordemReset').prop('disabled', false); + $('#consideracoesStart').prop('disabled', false); + $('#consideracoesReset').prop('disabled', false); }); @@ -135,6 +152,8 @@ $(function() { $('#aparteReset').prop('disabled', false); $('#ordemStart').prop('disabled', false); $('#ordemReset').prop('disabled', false); + $('#consideracoesStart').prop('disabled', false); + $('#consideracoesReset').prop('disabled', false); } else { @@ -147,6 +166,8 @@ $(function() { $('#aparteReset').prop('disabled', false); $('#ordemStart').prop('disabled', false); $('#ordemReset').prop('disabled', false); + $('#consideracoesStart').prop('disabled', false); + $('#consideracoesReset').prop('disabled', false); } }); @@ -174,6 +195,8 @@ $(function() { $('#discursoReset').prop('disabled', false); $('#ordemStart').prop('disabled', false); $('#ordemReset').prop('disabled', false); + $('#consideracoesStart').prop('disabled', false); + $('#consideracoesReset').prop('disabled', false); }); @@ -189,6 +212,8 @@ $(function() { $('#discursoReset').prop('disabled', false); $('#ordemStart').prop('disabled', false); $('#ordemReset').prop('disabled', false); + $('#consideracoesStart').prop('disabled', false); + $('#consideracoesReset').prop('disabled', false); } else { $.get('/painel/cronometro', { tipo: 'aparte', action: 'stop' } ); @@ -200,6 +225,8 @@ $(function() { $('#discursoReset').prop('disabled', false); $('#ordemStart').prop('disabled', false); $('#ordemReset').prop('disabled', false); + $('#consideracoesStart').prop('disabled', false); + $('#consideracoesReset').prop('disabled', false); } }); @@ -227,6 +254,8 @@ $(function() { $('#discursoReset').prop('disabled', false); $('#aparteStart').prop('disabled', false); $('#aparteReset').prop('disabled', false); + $('#consideracoesStart').prop('disabled', false); + $('#consideracoesReset').prop('disabled', false); }); $('#ordemStart').click(function() { @@ -241,6 +270,8 @@ $(function() { $('#discursoReset').prop('disabled', false); $('#aparteStart').prop('disabled', false); $('#aparteReset').prop('disabled', false); + $('#consideracoesStart').prop('disabled', false); + $('#consideracoesReset').prop('disabled', false); } else { @@ -253,6 +284,8 @@ $(function() { $('#discursoReset').prop('disabled', false); $('#aparteStart').prop('disabled', false); $('#aparteReset').prop('disabled', false); + $('#consideracoesStart').prop('disabled', false); + $('#consideracoesReset').prop('disabled', false); } }); @@ -264,6 +297,65 @@ $(function() { $('#ordem').runner('reset'); }); + $('#consideracoes').runner({ + autostart: false, + countdown: true, + startAt: {{cronometro_consideracoes}} * 1000, + stopAt: 0, + milliseconds: false + }).on('runnerFinish', function(eventObject, info){ + $.get('/painel/cronometro', { tipo: 'consideracoes', action: 'stop' } ); + + $('#consideracoesReset').show(); + $('#consideracoes').runner('stop'); + $('#consideracoesStart').text('Iniciar'); + $('#discursoStart').prop('disabled', false); + $('#discursoReset').prop('disabled', false); + $('#ordemStart').prop('disabled', false); + $('#ordemReset').prop('disabled', false); + $('#aparteStart').prop('disabled', false); + $('#aparteReset').prop('disabled', false); + + }); + + $('#consideracoesStart').click(function(){ + if ($('#consideracoesStart').text() == 'Iniciar') { + + $.get('/painel/cronometro', { tipo: 'consideracoes', action: 'start' } ); + + $('#consideracoesReset').hide(); + $('#consideracoes').runner('start'); + $('#consideracoesStart').text('Parar'); + $('#discursoStart').prop('disabled', false); + $('#discursoReset').prop('disabled', false); + $('#ordemStart').prop('disabled', false); + $('#ordemReset').prop('disabled', false); + $('#aparteStart').prop('disabled', false); + $('#aparteReset').prop('disabled', false); + } else { + + $.get('/painel/cronometro', { tipo: 'consideracoes', action: 'stop' } ); + + $('#consideracoesReset').show(); + $('#consideracoes').runner('stop'); + $('#consideracoesStart').text('Iniciar'); + $('#discursoStart').prop('disabled', false); + $('#discursoReset').prop('disabled', false); + $('#ordemStart').prop('disabled', false); + $('#ordemReset').prop('disabled', false); + $('#aparteStart').prop('disabled', false); + $('#aparteReset').prop('disabled', false); + } + }); + + $('#consideracoesReset').click(function() { + + $.get('/painel/cronometro', { tipo: 'consideracoes', action: 'reset' } ); + + $('#consideracoes').runner('stop'); + $('#consideracoes').runner('reset'); + }); + }); function switch_painel(aberto) {