Browse Source

Adiciona informações na tela de videoconferência

pull/3136/head
João Rodrigues 6 years ago
parent
commit
e9e3770f98
  1. 13
      sapl/sdr/urls.py
  2. 110
      sapl/sdr/views.py
  3. 189
      sapl/templates/sdr/deliberacaoremota.html

13
sapl/sdr/urls.py

@ -1,13 +1,20 @@
from .apps import AppConfig
from .views import ChatView, DeliberacaoRemotaCrud
from .views import (ChatView,
DeliberacaoRemotaCrud,
get_dados_deliberacao_remota)
from django.conf.urls import include, url
app_name = AppConfig.name
urlpatterns = [
url(r'^sdr/',
include(DeliberacaoRemotaCrud.get_urls()),
name='deliberacaoremota'),
url(r'^sdr/chat/(?P<pk>[0-9]+)$',
ChatView.as_view(), name='chat-session'),
url(r'^sdr/',
include(DeliberacaoRemotaCrud.get_urls()), name='deliberacaoremota'),
url(r'^sdr/(?P<pk>\d+)/dados$',
get_dados_deliberacao_remota,
name='dados_deliberacao_remota'),
]

110
sapl/sdr/views.py

@ -4,6 +4,7 @@ from django.contrib.auth.mixins import PermissionRequiredMixin
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
from django.core.urlresolvers import reverse, reverse_lazy
from django.http import JsonResponse
from django.views.generic import TemplateView
from django.utils import timezone
@ -13,7 +14,10 @@ from sapl.parlamentares.models import Parlamentar
from sapl.rules import RP_LIST, RP_DETAIL
from sapl.sdr.forms import DeliberacaoRemotaForm
from sapl.sdr.models import DeliberacaoRemota, gen_session_id
from sapl.sessao.models import SessaoPlenaria
from sapl.sessao.models import (ExpedienteMateria, OradorExpediente,
OradorOrdemDia, OrdemDia, PresencaOrdemDia,
RegistroLeitura, RegistroVotacao,
SessaoPlenaria, SessaoPlenariaPresenca)
class DeliberacaoRemotaCrud(Crud):
@ -55,6 +59,110 @@ class DeliberacaoRemotaCrud(Crud):
return context
#@user_passes_test(check_permission)
def get_dados_deliberacao_remota(request, pk):
sessao = SessaoPlenaria.objects.get(id=pk)
sessao_plenaria_presenca, oradores_expediente, materias_expediente = [], [], []
ordemdia_presenca, oradores_ordemdia, materias_ordemdia = [], [], []
f_od = 1 if not ExpedienteMateria.objects.filter(sessao_plenaria=sessao, votacao_aberta=True).exists() else 0
f_em = 1 if not OrdemDia.objects.filter(sessao_plenaria=sessao, votacao_aberta=True).exists() else 0
if f_em:
for presenca in SessaoPlenariaPresenca.objects.filter(sessao_plenaria=sessao):
sessao_plenaria_presenca.append(presenca.parlamentar.nome_parlamentar)
for orador in OradorExpediente.objects.filter(sessao_plenaria=sessao).order_by("numero_ordem"):
oradores_expediente.append(str(orador.numero_ordem) + " - " + orador.parlamentar.nome_parlamentar)
for expediente in ExpedienteMateria.objects.filter(sessao_plenaria=sessao):
if expediente.tipo_votacao == 4:
if RegistroLeitura.objects.filter(expediente=expediente).exists():
materias_expediente.append(
(
str(expediente.numero_ordem), expediente.materia.__str__(),
expediente.materia.ementa, "Matéria Lida"
)
)
else:
materias_expediente.append(
(
str(expediente.numero_ordem), expediente.materia.__str__(),
expediente.materia.ementa, "Matéria Não Lida"
)
)
else:
if RegistroVotacao.objects.filter(expediente=expediente).exists():
registro = RegistroVotacao.objects.get(expediente=expediente)
materias_expediente.append(
(
str(expediente.numero_ordem), expediente.materia.__str__(),
expediente.materia.ementa, registro.tipo_resultado_votacao.nome
)
)
else:
materias_expediente.append(
(
str(expediente.numero_ordem), expediente.materia.__str__(),
expediente.materia.ementa, "Matéria Não Votada"
)
)
if f_od:
for presenca in PresencaOrdemDia.objects.filter(sessao_plenaria=sessao):
ordemdia_presenca.append(presenca.parlamentar.nome_parlamentar)
for orador in OradorOrdemDia.objects.filter(sessao_plenaria=sessao).order_by("numero_ordem"):
oradores_ordemdia.append(str(orador.numero_ordem) + " - " + orador.parlamentar.nome_parlamentar)
for ordemdia in OrdemDia.objects.filter(sessao_plenaria=sessao):
if ordemdia.tipo_votacao == 4:
if RegistroLeitura.objects.filter(ordem=ordemdia).exists():
materias_ordemdia.append(
(
str(ordemdia.numero_ordem), ordemdia.materia.__str__(),
ordemdia.materia.ementa, "Matéria Lida"
)
)
else:
materias_ordemdia.append(
(
str(ordemdia.numero_ordem), ordemdia.materia.__str__(),
ordemdia.materia.ementa, "Matéria Não Lida"
)
)
else:
if RegistroVotacao.objects.filter(ordem=ordemdia).exists():
registro = RegistroVotacao.objects.get(ordem=ordemdia)
materias_ordemdia.append(
(
str(ordemdia.numero_ordem), ordemdia.materia.__str__(),
ordemdia.materia.ementa, registro.tipo_resultado_votacao.nome
)
)
else:
materias_ordemdia.append(
(
str(ordemdia.numero_ordem), ordemdia.materia.__str__(),
ordemdia.materia.ementa, "Matéria Não Votada"
)
)
response = {
'sessao_plenaria': str(sessao), 'sessao_plenaria_data': sessao.data_inicio.strftime('%d/%m/%Y'),
'sessao_plenaria_hora_inicio': sessao.hora_inicio,
'sessao_plenaria_iniciada': "Sim" if sessao.iniciada else "Não",
'f_em': f_em, 'f_od': f_od, 'sessao_plenaria_presenca': sessao_plenaria_presenca,
'oradores_expediente': oradores_expediente, 'materias_expediente': materias_expediente,
'ordemdia_presenca': ordemdia_presenca, 'oradores_ordemdia': oradores_ordemdia,
'materias_ordemdia': materias_ordemdia
}
return JsonResponse(response)
class ChatView(TemplateView):
# class ChatView(PermissionRequiredMixin, TemplateView):
template_name = "sdr/deliberacaoremota.html"

189
sapl/templates/sdr/deliberacaoremota.html

@ -2,62 +2,61 @@
{% load i18n common_tags %}
{% load render_bundle from webpack_loader %}
{% block title%}
{% block title %}
<h2 class="page-header">Sistema de Deliberação Remota (SDR)</h2>
{% endblock %}
{% block base_content %}
{{ block.super }}
<div id="content">
<h3>Título: {{ object.titulo }}<br/></h3>
<h3>Descrição: {{ object.descricao }}<br/></h3>
<h5>ID: {{ object.chat_id }}</h5><br/>
<h4><b>Título:</b> {{ object.titulo }}<br/></h4>
<h4><b>Descrição:</b> {% if object.descricao %}{{ object.descricao }}{% else %}Sem descrição.{% endif %}<br/></h4>
<h5><b>ID:</b> {{ object.chat_id }}</h5><br/>
{% if is_parlamentar %}
<h4>Parlamentar: {{ parlamentar.nome_parlamentar }}</h4><br/>
<h4><b>Parlamentar:</b> {{ parlamentar.nome_parlamentar }}</h4><br/>
{% else %}
<h4>Usuário: {{ nome_usuario }}</h4><br/>
<h4><b>Usuário:</b> {{ nome_usuario }}</h4><br/>
{% endif %}
</div>
<div class="container">
<div id="meet" class="col-md"></div>
<div id="painel" class="col-md">
<div class="row">
<div class="sm-6" style="margin-right:60px">
<br/><h3>Dados Básicos</h3>
Sessão: {{ object.sessao_plenaria }} <br/>
Data Início: {{ object.sessao_plenaria.data_inicio }} <br/>
Hora Início: {{ object.sessao_plenaria.hora_inicio }} <br/>
Iniciada: {{ object.sessao_plenaria.iniciada|yesno:"Sim,Não" }} <br/>
<br/>
{% if object.sessao_plenaria %}
<div class="row"><div id="dados_basicos" class="sm-12" style="margin-right:60px"></div></div>
<div class="row"><div id="titulo_expediente" class="sm-12" style="margin-right:60px"></div></div>
<div class="row">
<div id="presenca_sessao" class="sm-6" style="margin-top: 6px; margin-right:60px"></div>
<div id="oradores_expediente" class="sm-6" style="margin-top: 6px; margin-right:60px"></div>
</div>
</div>
<!-- TODO: pegar de REST WS -->
<div class="row">
<div class="sm-5" style="margin-right:60px">
<h3>Presença Sessão Plenária</h3>
<ul>
{% for p in object.sessao_plenaria.sessaoplenariapresenca_set.all %}
<li>{{ p.parlamentar }}</li>
{% endfor %}
<br/>
</ul>
<div class="row">
<div class="sm-12">
<table class="table table-striped table-hover">
<thead id="thead_tabela_expediente"></thead>
<tbody id="materias_expediente"></tbody>
</table>
</div>
</div>
<div class="row"><div id="titulo_ordemdia" class="sm-12" style="margin-right:60px"></div></div>
<div class="row">
<div id="presenca_ordemdia" class="sm-6" style="margin-top: 6px; margin-right:60px"></div>
<div id="oradores_ordemdia" class="sm-6" style="margin-top: 6px; margin-right:60px"></div>
</div>
<div class="sm-5" style="margin-right:60px">
<h3>Presentes Ordem do Dia:</h3>
<ul>
{% for p in object.sessao_plenaria.presencaordemdia_set.all %}
<li>{{ p.parlamentar }}</li>
{% endfor %}
<br/>
</ul>
<div class="row">
<div class="sm-12">
<table class="table table-striped table-hover">
<thead id="thead_tabela_ordemdia"></thead>
<tbody id=materias_ordemdia></tbody>
</table>
</div>
</div>
</div>
</div>
{% endif %}
</div>
<br/>
{% endblock base_content %}
{% block extra_js %}
{{block.super}}
{{ block.super }}
<script src='https://meet.jit.si/external_api.js'></script>
<script language="Javascript">
api = undefined;
@ -70,8 +69,7 @@
configOverwrite: { defaultLanguage: 'ptBR' },
parentNode: document.querySelector('#meet'),
interfaceConfigOverwrite: {TOOLBAR_BUTTONS: [
'microphone', 'camera', 'hangup', 'chat', 'recording', 'livestreaming', 'raisehand',
'videoquality', 'shortcuts', 'tileview'
'microphone', 'camera', 'hangup', 'chat', 'recording', 'livestreaming', 'raisehand', 'videoquality', 'shortcuts', 'tileview'
]}
};
@ -92,4 +90,121 @@
});
});
</script>
<script language="Javascript">
$(document).ready(function() { (function poll() {
"{% if object.sessao_plenaria %}"
$.ajax({
url: "{% url 'sapl.sdr:dados_deliberacao_remota' object.sessao_plenaria.id %}",
type: "GET",
success: function(data) {
$("#dados_basicos").html(
"<br/><h3><b>Dados Básicos</b></h3>Sessão: " + data["sessao_plenaria"] + "<br/>Data Início: " + data["sessao_plenaria_data"] + "<br/>Hora Início: " +
data["sessao_plenaria_hora_inicio"] + "<br/>Iniciada: " + data["sessao_plenaria_iniciada"] + "<br/>"
);
if (data["f_em"]){
$("#titulo_expediente").html(
"<br/><h3><b>Expediente</b></h3>"
);
let presencas = "";
data["sessao_plenaria_presenca"].forEach(presenca => {
p = "<li>" + presenca + "</li>";
presencas = presencas + p;
});
if (!presencas){
presencas = "<li>Nenhum parlamentar presente.</li>";
}
$("#presenca_sessao").html("<h3>Presença</h3><ul>" + presencas + "<br/></ul>");
let oradores_expediente = "";
data["oradores_expediente"].forEach(orador => {
o = "<li>" + orador + "</li>";
oradores_expediente = oradores_expediente + o;
});
if (!oradores_expediente){
oradores_expediente = "<li>Nenhum orador nessa sessão.</li>";
}
$("#oradores_expediente").html("<h3>Oradores</h3>" + "<ul>" + oradores_expediente + "<br/></ul>");
$("#thead_tabela_expediente").html(
"<tr><th>Número Ordem</th><th>Matéria</th><th>Ementa</th><th>Resultado</th></tr>"
);
let materias_expediente = "";
data["materias_expediente"].forEach(materia_expediente => {
expediente_1 = "<tr><td>" + materia_expediente[0] + "</td><td>" + materia_expediente[1] + "</td><td>" + materia_expediente[2] + "</td><td><b>";
expediente_2 = materia_expediente[3] + "</b></td></tr>";
materias_expediente = materias_expediente + expediente_1 + expediente_2;
});
if (!materias_expediente){
materias_expediente = "Nenhum registro encontrado.";
}
$("#materias_expediente").html(materias_expediente);
} else {
$("#titulo_expediente").html("");
$("#presenca_sessao").html("");
$("#oradores_expediente").html("");
$("#thead_tabela_expediente").html("");
$("#materias_expediente").html("");
}
if (data["f_od"]){
$("#titulo_ordemdia").html(
" <br/><h3><b>Ordem do Dia</b></h3>"
);
let presencas_ordemdia = "";
data["ordemdia_presenca"].forEach(presenca => {
p = "<li>" + presenca + "</li>";
presencas_ordemdia = presencas_ordemdia + p;
});
if (!presencas_ordemdia){
presencas_ordemdia = "<li>Nenhum parlamentar presente.</li>";
}
$("#presenca_ordemdia").html("<h3>Presença</h3><ul>" + presencas_ordemdia + "<br/></ul>");
let oradores_ordemdia = "";
data["oradores_ordemdia"].forEach(orador => {
o = "<li>" + orador + "</li>";
oradores_ordemdia = oradores_ordemdia + o;
});
if (!oradores_ordemdia){
oradores_ordemdia = "<li>Nenhum orador nessa sessão.</li>";
}
$("#oradores_ordemdia").html("<h3>Oradores</h3>" + "<ul>" + oradores_ordemdia + "<br/></ul>");
$("#thead_tabela_ordemdia").html(
"<tr><th>Número Ordem</th><th>Matéria</th><th>Ementa</th><th>Resultado</th></tr>"
);
let materias_ordemdia = "";
data["materias_ordemdia"].forEach(materia_ordemdia => {
ordemdia_1 = "<tr><td>" + materia_ordemdia[0] + "</td><td>" + materia_ordemdia[1] + "</td><td>" + materia_ordemdia[2] + "</td><td><b>";
ordemdia_2 = materia_ordemdia[3] + "</b></td></tr>";
materias_ordemdia = materias_ordemdia + ordemdia_1 + ordemdia_2;
});
if (!materias_ordemdia){
materias_ordemdia = "Nenhum registro encontrado."
}
$("#materias_ordemdia").html(materias_ordemdia);
} else {
$("#titulo_ordemdia").html("");
$("#presenca_ordemdia").html("");
$("#oradores_ordemdia").html("");
$("#thead_tabela_ordemdia").html("");
$("#materias_ordemdia").html("");
}
},
error: function(err) {
console.error(err);
},
dataType: "json",
complete: setTimeout(function() {poll()}, 500),
timeout: 20000 // TODO: decrease
})
"{% endif %}"
} )(); });
</script>
{% endblock extra_js %}
Loading…
Cancel
Save