diff --git a/frontend/src/__apps/painel/main.js b/frontend/src/__apps/painel/main.js
index 0e1aba292..9f655736e 100644
--- a/frontend/src/__apps/painel/main.js
+++ b/frontend/src/__apps/painel/main.js
@@ -10,10 +10,12 @@ var time_d = null
var time_o = null
var time_a = null
var time_c = null
+var time_p = null
var timeEnd_o = null
var timeEnd_d = null
var timeEnd_a = null
var timeEnd_c = null
+var timeEnd_p = null
var audioAlertFinish = document.getElementById('audio')
var cronometroStart = []
var started = []
@@ -35,6 +37,7 @@ const v = new Vue({ // eslint-disable-line
cronometro_aparte: '',
cronometro_ordem: '',
cronometro_consideracoes: '',
+ cronometro_personalizado: '',
sessao_solene: false,
sessao_solene_tema: '',
presentes: [],
@@ -57,7 +60,8 @@ const v = new Vue({ // eslint-disable-line
status_cronometro_discurso: '',
status_cronometro_aparte: '',
status_cronometro_ordem: '',
- status_cronometro_consideracoes: ''
+ status_cronometro_consideracoes: '',
+ status_cronometro_personalizado: ''
}
},
methods: {
@@ -127,6 +131,7 @@ const v = new Vue({ // eslint-disable-line
this.status_cronometro_ordem = objeto.status_cronometro_ordem
this.status_cronometro_aparte = objeto.status_cronometro_aparte
this.status_cronometro_consideracoes = objeto.status_cronometro_consideracoes
+ this.status_cronometro_personalizado = objeto.status_cronometro_personalizado
this.presentes = objeto.presentes
this.presentes.forEach(parlamentar => {
@@ -155,11 +160,13 @@ const v = new Vue({ // eslint-disable-line
cronometroStart[1] = objeto.cronometro_aparte
cronometroStart[2] = objeto.cronometro_ordem
cronometroStart[3] = objeto.cronometro_consideracoes
+ cronometroStart[4] = objeto.cronometro_personalizado
this.running[0] = 0
this.running[1] = 0
this.running[2] = 0
this.running[3] = 0
+ this.running[4] = 0
// Status cronometro
if (this.status_cronometro_discurso === 'S') {
@@ -186,6 +193,12 @@ const v = new Vue({ // eslint-disable-line
this.start(4)
}
+ if (this.status_cronometro_personalizado === 'S') {
+ this.stop(5)
+ } else if (this.status_cronometro_personalizado === 'I') {
+ this.start(5)
+ }
+
// Setar os timers no caso de nulo ou resetado
if (time_d === null || this.status_cronometro_discurso === 'R') {
this.setTimer(1)
@@ -203,17 +216,22 @@ const v = new Vue({ // eslint-disable-line
this.setTimer(4)
this.stop(4)
}
+ if (time_p === null || this.status_cronometro_personalizado === 'R') {
+ this.setTimer(5)
+ this.stop(5)
+ }
},
setTimer (temp_crono) {
var temp
var res
var now
- if (temp_crono === 5) {
+ if (temp_crono === 6) {
// Pegar data atual
this.cronometro_discurso = new Date()
this.cronometro_aparte = this.cronometro_discurso
this.cronometro_ordem = this.cronometro_discurso
this.cronometro_consideracoes = this.cronometro_discurso
+ this.cronometro_personalizado = this.cronometro_discurso
// Setar cada Cronometro
temp = new Date()
@@ -239,6 +257,12 @@ const v = new Vue({ // eslint-disable-line
res = new Date(temp - this.cronometro_consideracoes)
res.setHours(temp.getHours() - this.cronometro_consideracoes.getHours())
this.cronometro_consideracoes = this.formatTime(res)
+
+ temp = new Date()
+ temp.setSeconds(this.cronometro_personalizado.getSeconds() + cronometroStart[4])
+ res = new Date(temp - this.cronometro_personalizado)
+ res.setHours(temp.getHours() - this.cronometro_personalizado.getHours())
+ this.cronometro_personalizado = this.formatTime(res)
} else {
now = new Date()
switch (temp_crono) {
@@ -273,6 +297,14 @@ const v = new Vue({ // eslint-disable-line
res = new Date(temp - now)
res.setHours(cronometroStart[3] / 3600)
this.cronometro_consideracoes = this.formatTime(res)
+ break
+ case 5:
+ time_p = null
+ temp = new Date()
+ temp.setSeconds(now.getSeconds() + cronometroStart[4])
+ res = new Date(temp - now)
+ res.setHours(cronometroStart[4] / 3600)
+ this.cronometro_personalizado = this.formatTime(res)
}
}
},
@@ -290,7 +322,7 @@ const v = new Vue({ // eslint-disable-line
return tempo
},
stop: function stop (crono) {
- if (crono === 5) {
+ if (crono === 6) {
audioAlertFinish.play()
} else {
this.running[crono - 1] = 0
@@ -367,6 +399,23 @@ const v = new Vue({ // eslint-disable-line
}, 5000)
}
break
+ case 5:
+ if (this.status_cronometro_personalizado !== 'I') return
+ var now_p = new Date()
+ time_p = new Date(timeEnd_p - now_p)
+
+ // Definir propriamento o tempo
+ time_p.setHours((time_p.getTime() / 1000) / 3600)
+
+ if (timeEnd_p > now_p) {
+ this.cronometro_personalizado = this.formatTime(time_p)
+ } else {
+ audioAlertFinish.play()
+ this.alert = setTimeout(() => {
+ this.reset()
+ }, 5000)
+ }
+ break
}
},
start: function startStopWatch (temp_crono) {
@@ -441,6 +490,23 @@ const v = new Vue({ // eslint-disable-line
this.clockRunning(temp_crono)
}, 50)
break
+ case 5:
+ if (time_p === null) {
+ time_p = cronometroStart[4]
+ timeEnd_p = new Date()
+ timeEnd_p.setSeconds(timeEnd_p.getSeconds() + time_p)
+ } else {
+ timeEnd_p = new Date()
+ timeEnd_p.setHours(timeEnd_p.getHours() + time_p.getHours())
+ timeEnd_p.setMinutes(timeEnd_p.getMinutes() + time_p.getMinutes())
+ timeEnd_p.setSeconds(timeEnd_p.getSeconds() + time_p.getSeconds())
+ }
+ this.running[4] = 1
+
+ started[4] = setInterval(() => {
+ this.clockRunning(temp_crono)
+ }, 50)
+ break
}
}
},
diff --git a/sapl/base/forms.py b/sapl/base/forms.py
index 1dd54e3a7..eea75c33f 100644
--- a/sapl/base/forms.py
+++ b/sapl/base/forms.py
@@ -1556,6 +1556,7 @@ class ConfiguracoesAppForm(ModelForm):
'cronometro_aparte',
'cronometro_ordem',
'cronometro_consideracoes',
+ 'cronometro_personalizado',
'mostrar_brasao_painel',
'receber_recibo_proposicao',
'assinatura_ata',
@@ -1573,6 +1574,7 @@ class ConfiguracoesAppForm(ModelForm):
self.fields['cronometro_aparte'].widget.attrs['class'] = 'cronometro'
self.fields['cronometro_ordem'].widget.attrs['class'] = 'cronometro'
self.fields['cronometro_consideracoes'].widget.attrs['class'] = 'cronometro'
+ self.fields['cronometro_personalizado'].widget.attrs['class'] = 'cronometro'
def clean(self):
cleaned_data = super().clean()
diff --git a/sapl/base/models.py b/sapl/base/models.py
index fb2a3bd66..6c047fced 100644
--- a/sapl/base/models.py
+++ b/sapl/base/models.py
@@ -168,6 +168,11 @@ class AppConfig(models.Model):
blank=True,
null=True)
+ cronometro_personalizado = models.DurationField(
+ verbose_name=_('Cronômetro Personalizado'),
+ 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/tasks.py b/sapl/painel/tasks.py
index 6c72fba4c..ccc52112b 100644
--- a/sapl/painel/tasks.py
+++ b/sapl/painel/tasks.py
@@ -7,4 +7,6 @@ channel_layer = get_channel_layer()
def get_dados_painel_final(id):
json_data = views.get_dados_painel(id)
+ print(json_data)
+ print('\n')
async_to_sync(channel_layer.group_send)('painel', {'type':'send_data', 'message': json_data})
diff --git a/sapl/painel/views.py b/sapl/painel/views.py
index dca958c1b..38ef8f719 100644
--- a/sapl/painel/views.py
+++ b/sapl/painel/views.py
@@ -372,6 +372,9 @@ def get_cronometro_status(request):
elif tipo == 4:
sessao.status_cronometro_consideracoes_finais = 'I'
+ elif tipo == 5:
+ sessao.status_cronometro_personalizado = 'I'
+
elif ligado == 2:
if tipo == 1:
sessao.status_cronometro_discurso = 'S'
@@ -384,6 +387,9 @@ def get_cronometro_status(request):
elif tipo == 4:
sessao.status_cronometro_consideracoes_finais = 'S'
+
+ elif tipo == 5:
+ sessao.status_cronometro_personalizado = 'S'
elif ligado == 3:
if tipo == 1:
@@ -397,6 +403,9 @@ def get_cronometro_status(request):
elif tipo == 4:
sessao.status_cronometro_consideracoes_finais = 'R'
+
+ elif tipo == 5:
+ sessao.status_cronometro_personalizado = 'R'
sessao.save()
tasks.get_dados_painel_final(pk)
@@ -412,6 +421,8 @@ def get_cronometro_value(name):
result = ConfiguracoesAplicacao.objects.first().cronometro_ordem
if name == 'consideracoes':
result = ConfiguracoesAplicacao.objects.first().cronometro_consideracoes
+ if name == 'personalizado':
+ result = ConfiguracoesAplicacao.objects.first().cronometro_personalizado
return result.total_seconds()
@@ -628,10 +639,12 @@ def get_dados_painel(pk):
'status_cronometro_aparte': sessao.status_cronometro_aparte,
'status_cronometro_ordem': sessao.status_cronometro_ordem_do_dia,
'status_cronometro_consideracoes': sessao.status_cronometro_consideracoes_finais,
+ 'status_cronometro_personalizado': sessao.status_cronometro_personalizado,
'cronometro_aparte': get_cronometro_value('aparte'),
'cronometro_discurso': get_cronometro_value('discurso'),
'cronometro_ordem': get_cronometro_value('ordem'),
'cronometro_consideracoes': get_cronometro_value('consideracoes'),
+ 'cronometro_personalizado': get_cronometro_value('personalizado'),
'status_painel': sessao.painel_aberto,
'brasao': brasao
}
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
index f2bb0cc7b..c1f4e39be 100755
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -1404,9 +1404,11 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
cronometro_ordem = AppsAppConfig.attr('cronometro_ordem')
cronometro_consideracoes = AppsAppConfig.attr(
'cronometro_consideracoes')
+ cronometro_personalizado = AppsAppConfig.attr(
+ 'cronometro_personalizado')
if (not cronometro_discurso or not cronometro_aparte
- or not cronometro_ordem or not cronometro_consideracoes):
+ or not cronometro_ordem or not cronometro_consideracoes or not cronometro_personalizado):
username = self.request.user.username
self.logger.error('user=' + username + '. Você precisa primeiro configurar os cronômetros'
@@ -1421,6 +1423,7 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
cronometro_aparte = cronometro_aparte.seconds
cronometro_ordem = cronometro_ordem.seconds
cronometro_consideracoes = cronometro_consideracoes.seconds
+ cronometro_personalizado = cronometro_personalizado.seconds
sessao_pk = kwargs['pk']
sessao = SessaoPlenaria.objects.get(pk=sessao_pk)
@@ -1433,7 +1436,8 @@ class PainelView(PermissionRequiredForAppCrudMixin, TemplateView):
'cronometro_discurso': cronometro_discurso,
'cronometro_aparte': cronometro_aparte,
'cronometro_ordem': cronometro_ordem,
- 'cronometro_consideracoes': cronometro_consideracoes})
+ 'cronometro_consideracoes': cronometro_consideracoes,
+ 'cronometro_personalizado' : cronometro_personalizado})
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
diff --git a/sapl/templates/base/layouts.yaml b/sapl/templates/base/layouts.yaml
index 658eb8e17..69063368c 100644
--- a/sapl/templates/base/layouts.yaml
+++ b/sapl/templates/base/layouts.yaml
@@ -59,6 +59,7 @@ AppConfig:
{% trans 'Módulo Painel' %}:
- cronometro_discurso cronometro_aparte
- cronometro_ordem cronometro_consideracoes
+ - cronometro_personalizado
- mostrar_brasao_painel
{% trans 'Segurança' %}:
diff --git a/sapl/templates/painel/index.html b/sapl/templates/painel/index.html
index 70a9ca1c5..1156cb329 100644
--- a/sapl/templates/painel/index.html
+++ b/sapl/templates/painel/index.html
@@ -131,7 +131,10 @@
Considerações Finais: [[ cronometro_consideracoes ]]
-
+
+
+ Personalizado: [[ cronometro_personalizado ]]
+