Browse Source

Websocket cronometro funcionando p1

Websocket_painel
Gustavo274 3 years ago
parent
commit
e00bfab629
  1. 10
      frontend/src/__apps/painel/main.js
  2. 4
      sapl/painel/urls.py
  3. 27
      sapl/painel/views.py
  4. 37
      sapl/sessao/migrations/0057_auto_20211006_0917.py
  5. 34
      sapl/sessao/migrations/0058_auto_20211006_0930.py
  6. 22
      sapl/sessao/migrations/0059_auto_20211006_0935.py
  7. 28
      sapl/sessao/migrations/0060_auto_20211006_1006.py
  8. 16
      sapl/sessao/models.py
  9. 1
      sapl/sessao/views.py
  10. 24
      sapl/templates/sessao/painel.html

10
frontend/src/__apps/painel/main.js

@ -47,7 +47,8 @@ const v = new Vue({ // eslint-disable-line
tipo_resultado: '', tipo_resultado: '',
tipo_votacao: '', tipo_votacao: '',
teste: null, teste: null,
running: 0 running: 0,
status_cronometro_discurso: ''
} }
}, },
methods: { methods: {
@ -113,6 +114,7 @@ const v = new Vue({ // eslint-disable-line
this.sessao_plenaria_hora_inicio = 'Hora Início: ' + objeto.sessao_plenaria_hora_inicio this.sessao_plenaria_hora_inicio = 'Hora Início: ' + objeto.sessao_plenaria_hora_inicio
this.sessao_solene = objeto.sessao_solene this.sessao_solene = objeto.sessao_solene
this.sessao_solene_tema = objeto.sessao_solene_tema this.sessao_solene_tema = objeto.sessao_solene_tema
this.status_cronometro_discurso = objeto.status_cronometro
this.presentes = objeto.presentes this.presentes = objeto.presentes
this.presentes.forEach(parlamentar => { this.presentes.forEach(parlamentar => {
@ -170,6 +172,12 @@ const v = new Vue({ // eslint-disable-line
res = new Date(temp - this.cronometro_consideracoes) res = new Date(temp - this.cronometro_consideracoes)
this.cronometro_consideracoes = this.formatTime(res) this.cronometro_consideracoes = this.formatTime(res)
} }
if (this.status_cronometro_discurso === 'I') {
this.start(1)
console.log(cronometroStart)
} else if (this.status_cronometro_discurso === 'S') {
this.stop(1)
}
}, },
formatTime (time) { formatTime (time) {
var tempo = '00:' + time.getMinutes().toLocaleString('en-US', { var tempo = '00:' + time.getMinutes().toLocaleString('en-US', {

4
sapl/painel/urls.py

@ -3,7 +3,7 @@ from django.conf.urls import url
from django.urls import path from django.urls import path
from .apps import AppConfig from .apps import AppConfig
from .views import (cronometro_painel, get_dados_painel, painel_mensagem_view, from .views import (cronometro_painel, get_cronometro_status, get_dados_painel, painel_mensagem_view,
painel_parlamentar_view, painel_view, painel_votacao_view, painel_parlamentar_view, painel_view, painel_votacao_view,
switch_painel, verifica_painel, votante_view) switch_painel, verifica_painel, votante_view)
@ -18,6 +18,8 @@ urlpatterns = [
name='painel_parlamentar'), name='painel_parlamentar'),
url(r'^painel/switch-painel$', switch_painel, url(r'^painel/switch-painel$', switch_painel,
name="switch_painel"), name="switch_painel"),
url(r'^painel/get-cronometro-status$', get_cronometro_status,
name="get_cronometro_status"),
url(r'^painel/votacao$', painel_votacao_view, name='painel_votacao'), url(r'^painel/votacao$', painel_votacao_view, name='painel_votacao'),
url(r'^painel/verifica-painel$', verifica_painel, url(r'^painel/verifica-painel$', verifica_painel,
name="verifica_painel"), name="verifica_painel"),

27
sapl/painel/views.py

@ -352,20 +352,23 @@ def cronometro_painel(request):
return HttpResponse({}) return HttpResponse({})
def get_cronometro_status(request, name): @user_passes_test(check_permission)
def get_cronometro_status(request):
pk = request.POST['pk_sessao'] pk = request.POST['pk_sessao']
sessao = SessaoPlenaria.objects.get(id=pk) sessao = SessaoPlenaria.objects.get(id=pk)
logger = logging.getLogger(__name__) ligado = json.loads(request.POST['ligado'])
username = request.user.username tipo = json.loads(request.POST['teste'])
try:
logger.debug("user=" + username + ". Tentando obter cronometro.")
cronometro = request.session[name] if ligado:
sessao.status_cronometro = cronometro if tipo == 1:
except KeyError as e: sessao.status_cronometro_discurso = 'I'
logger.error("user=" + username +
". Erro ao obter cronometro. Retornado como vazio. " + str(e))
cronometro = ''
sessao.save() sessao.save()
else:
if tipo == 1:
sessao.status_cronometro_discurso = 'S'
sessao.save()
tasks.get_dados_painel_final(pk)
return JsonResponse({}) return JsonResponse({})
@ -590,7 +593,7 @@ def get_dados_painel(pk):
'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,
'status_cronometro': sessao.status_cronometro, 'status_cronometro': sessao.status_cronometro_discurso,
'cronometro_aparte': get_cronometro_value('aparte'), 'cronometro_aparte': get_cronometro_value('aparte'),
'cronometro_discurso': get_cronometro_value('discurso'), 'cronometro_discurso': get_cronometro_value('discurso'),
'cronometro_ordem': get_cronometro_value('ordem'), 'cronometro_ordem': get_cronometro_value('ordem'),

37
sapl/sessao/migrations/0057_auto_20211006_0917.py

@ -0,0 +1,37 @@
# Generated by Django 2.2.24 on 2021-10-06 12:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0056_sessaoplenaria_status_cronometro'),
]
operations = [
migrations.RemoveField(
model_name='sessaoplenaria',
name='status_cronometro',
),
migrations.AddField(
model_name='sessaoplenaria',
name='status_cronometro_aparte',
field=models.CharField(default='S', max_length=1, verbose_name='Status do cronômetro aparte'),
),
migrations.AddField(
model_name='sessaoplenaria',
name='status_cronometro_consideracoes_finais',
field=models.CharField(default='S', max_length=1, verbose_name='Status do cronômetro consideracoes finais'),
),
migrations.AddField(
model_name='sessaoplenaria',
name='status_cronometro_discurso',
field=models.CharField(default='S', max_length=1, verbose_name='Status do cronômetro discurso'),
),
migrations.AddField(
model_name='sessaoplenaria',
name='status_cronometro_ordem_do_dia',
field=models.CharField(default='S', max_length=1, verbose_name='Status do cronômetro ordem do dia'),
),
]

34
sapl/sessao/migrations/0058_auto_20211006_0930.py

@ -0,0 +1,34 @@
# Generated by Django 2.2.24 on 2021-10-06 12:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0057_auto_20211006_0917'),
]
operations = [
migrations.RemoveField(
model_name='sessaoplenaria',
name='status_cronometro_aparte',
),
migrations.RemoveField(
model_name='sessaoplenaria',
name='status_cronometro_consideracoes_finais',
),
migrations.RemoveField(
model_name='sessaoplenaria',
name='status_cronometro_discurso',
),
migrations.RemoveField(
model_name='sessaoplenaria',
name='status_cronometro_ordem_do_dia',
),
migrations.AddField(
model_name='sessaoplenaria',
name='status_cronometro',
field=models.CharField(default='S', max_length=1, verbose_name='Status do cronômetro painel'),
),
]

22
sapl/sessao/migrations/0059_auto_20211006_0935.py

@ -0,0 +1,22 @@
# Generated by Django 2.2.24 on 2021-10-06 12:35
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0058_auto_20211006_0930'),
]
operations = [
migrations.RemoveField(
model_name='sessaoplenaria',
name='status_cronometro',
),
migrations.AddField(
model_name='sessaoplenaria',
name='status_cronometro_discurso',
field=models.CharField(default='S', max_length=1, verbose_name='Status do cronômetro discurso'),
),
]

28
sapl/sessao/migrations/0060_auto_20211006_1006.py

@ -0,0 +1,28 @@
# Generated by Django 2.2.24 on 2021-10-06 13:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0059_auto_20211006_0935'),
]
operations = [
migrations.AddField(
model_name='sessaoplenaria',
name='status_cronometro_aparte',
field=models.CharField(default='S', max_length=1, verbose_name='Status do cronômetro discurso'),
),
migrations.AddField(
model_name='sessaoplenaria',
name='status_cronometro_consideracoes_finais',
field=models.CharField(default='S', max_length=1, verbose_name='Status do cronômetro discurso'),
),
migrations.AddField(
model_name='sessaoplenaria',
name='status_cronometro_ordem_do_dia',
field=models.CharField(default='S', max_length=1, verbose_name='Status do cronômetro discurso'),
),
]

16
sapl/sessao/models.py

@ -157,9 +157,21 @@ class SessaoPlenaria(models.Model):
painel_aberto = models.BooleanField(blank=True, default=False, painel_aberto = models.BooleanField(blank=True, default=False,
verbose_name=_('Painel está aberto?')) verbose_name=_('Painel está aberto?'))
status_cronometro = models.CharField( status_cronometro_discurso = models.CharField(
max_length=1, max_length=1,
verbose_name=_('Status do cronômetro painel'), verbose_name=_('Status do cronômetro discurso'),
default='S')
status_cronometro_aparte = models.CharField(
max_length=1,
verbose_name=_('Status do cronômetro discurso'),
default='S')
status_cronometro_ordem_do_dia = models.CharField(
max_length=1,
verbose_name=_('Status do cronômetro discurso'),
default='S')
status_cronometro_consideracoes_finais = models.CharField(
max_length=1,
verbose_name=_('Status do cronômetro discurso'),
default='S') default='S')
tipo = models.ForeignKey(TipoSessaoPlenaria, tipo = models.ForeignKey(TipoSessaoPlenaria,
on_delete=models.PROTECT, on_delete=models.PROTECT,

1
sapl/sessao/views.py

@ -2,7 +2,6 @@
import logging import logging
from collections import OrderedDict from collections import OrderedDict
from re import sub from re import sub
from sapl.painel.views import get_cronometro_status
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required

24
sapl/templates/sessao/painel.html

@ -35,7 +35,8 @@
<br /> <br />
<div class="row"> <div class="row">
<div class="col-md-6"><button type="button" id="discursoStart" class="btn btn-success">Iniciar</button></div> <div class="col-md-6"><button onclick="switch_cronometro(true, 1)" id="discursoStart" class="btn btn-success">Iniciar</button></div>
<div class="col-md-6"><button onclick="switch_cronometro(false, 1)" id="discursoStop" class="btn btn-success">Parar</button></div>
<div class="col-md-6"><button type="button" id="discursoReset" class="btn btn-success">Reiniciar</button></div> <div class="col-md-6"><button type="button" id="discursoReset" class="btn btn-success">Reiniciar</button></div>
</div> </div>
@ -148,22 +149,20 @@ $(function() {
$('#discursoStart').click(function() { $('#discursoStart').click(function() {
if ($('#discursoStart').text() == 'Iniciar'){
$.get('/painel/cronometro', { tipo: 'discurso', action: 'start' } ); $.get('/painel/cronometro', { tipo: 'discurso', action: 'start' } );
$('#discursoReset').hide(); $('#discursoReset').hide();
$('#discurso').runner('start'); $('#discurso').runner('start');
$('#discursoStart').text('Parar');
} else { });
$('#discursoStop').click(function() {
$.get('/painel/cronometro', { tipo: 'discurso', action: 'stop' } ); $.get('/painel/cronometro', { tipo: 'discurso', action: 'stop' } );
$('#discursoReset').show(); $('#discursoReset').show();
$('#discurso').runner('stop'); $('#discurso').runner('stop');
$('#discursoStart').text('Iniciar');
}
}); });
$('#discursoReset').click(function() { $('#discursoReset').click(function() {
@ -356,6 +355,17 @@ function switch_painel(aberto) {
} }
} }
function switch_cronometro(ligado, teste){
var pk_sessao = {{root_pk}};
$.ajax({
data: {pk_sessao: pk_sessao, ligado: ligado, teste: teste},
type: 'POST',
url: "{% url 'sapl.painel:get_cronometro_status' %}",
headers: {'X-CSRFToken': getCookie('csrftoken')},
});
}
$(document).ready(function(){ $(document).ready(function(){
var pk_sessao = {{root_pk}}; var pk_sessao = {{root_pk}};
var botao_abrir = $('#id_abrir_painel'); var botao_abrir = $('#id_abrir_painel');

Loading…
Cancel
Save