Browse Source

Adiciona mais recursos e layout

pull/3136/head
eribeiro 6 years ago
committed by João Rodrigues
parent
commit
98bb9b8f35
  1. 1
      sapl/sdr/__init__.py
  2. 0
      sapl/sdr/admin.py
  3. 6
      sapl/sdr/apps.py
  4. 29
      sapl/sdr/forms.py
  5. 4
      sapl/sdr/migrations/0001_initial.py
  6. 22
      sapl/sdr/migrations/0002_videoconferencia_sessao_plenaria.py
  7. 19
      sapl/sdr/migrations/0003_auto_20200331_1926.py
  8. 23
      sapl/sdr/migrations/0004_auto_20200331_1933.py
  9. 0
      sapl/sdr/migrations/__init__.py
  10. 14
      sapl/sdr/models.py
  11. 0
      sapl/sdr/tests.py
  12. 13
      sapl/sdr/urls.py
  13. 51
      sapl/sdr/views.py
  14. 2
      sapl/settings.py
  15. 80
      sapl/templates/sdr/deliberacaoremota.html
  16. 3
      sapl/templates/sdr/deliberacaoremota_detail.html
  17. 12
      sapl/templates/sdr/layouts.yaml
  18. 6
      sapl/templates/videoconf/layouts.yaml
  19. 43
      sapl/templates/videoconf/videoconferencia.html
  20. 4
      sapl/urls.py
  21. 1
      sapl/videoconf/__init__.py
  22. 13
      sapl/videoconf/urls.py

1
sapl/sdr/__init__.py

@ -0,0 +1 @@
default_app_config = 'sapl.sdr.apps.AppConfig'

0
sapl/videoconf/admin.py → sapl/sdr/admin.py

6
sapl/videoconf/apps.py → sapl/sdr/apps.py

@ -3,6 +3,6 @@ from django.utils.translation import ugettext_lazy as _
class AppConfig(apps.AppConfig):
name = 'sapl.videoconf'
label = 'videoconf'
verbose_name = _('Video-conferência')
name = 'sapl.sdr'
label = 'sdr'
verbose_name = _('Sistema de Deliberação Remota')

29
sapl/videoconf/forms.py → sapl/sdr/forms.py

@ -1,20 +1,39 @@
import logging
from django import forms
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
from sapl.videoconf.models import Videoconferencia
from sapl.sdr.models import DeliberacaoRemota
class VideoconferenciaForm(ModelForm):
class DeliberacaoRemotaCreateForm(ModelForm):
logger = logging.getLogger(__name__)
class Meta:
model = Videoconferencia
fields = ['chat_id', 'descricao']
model = DeliberacaoRemota
exclude = []
widgets = {
'created_by': forms.HiddenInput(),
'descricao': forms.Textarea(attrs={'id': 'texto-rico'})
}
def clean(self):
cleaned_data = super().clean()
import ipdb; ipdb.set_trace()
if not self.is_valid():
return self.cleaned_data
return cleaned_data
# class DeliberacaoRemotaForm(ModelForm):
#
# logger = logging.getLogger(__name__)
#
# class Meta:
# model = DeliberacaoRemota
# fields = ['chat_id', 'descricao']
# class AutoriaNormaForm(ModelForm):
#
# tipo_autor = ModelChoiceField(label=_('Tipo Autor'),

4
sapl/videoconf/migrations/0001_initial.py → sapl/sdr/migrations/0001_initial.py

@ -5,7 +5,7 @@ from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import sapl.videoconf.models
import sapl.sdr.models
class Migration(migrations.Migration):
@ -21,7 +21,7 @@ class Migration(migrations.Migration):
name='Videoconferencia',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('chat_id', models.CharField(default=sapl.videoconf.models.gen_session_id, max_length=100, verbose_name='Chat ID')),
('chat_id', models.CharField(default=sapl.sdr.models.gen_session_id, max_length=100, verbose_name='Chat ID')),
('titulo', models.CharField(max_length=100, verbose_name='Título')),
('descricao', models.CharField(blank=True, max_length=256, verbose_name='Descrição')),
('inicio', models.DateTimeField(auto_now=True, verbose_name='Data e Hora de Início')),

22
sapl/sdr/migrations/0002_videoconferencia_sessao_plenaria.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-03-31 21:50
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('sessao', '0050_auto_20191029_1441'),
('sdr', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='videoconferencia',
name='sessao_plenaria',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.SessaoPlenaria', verbose_name='Sessão Plenária'),
),
]

19
sapl/sdr/migrations/0003_auto_20200331_1926.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-03-31 22:26
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('sdr', '0002_videoconferencia_sessao_plenaria'),
]
operations = [
migrations.RenameModel(
old_name='Videoconferencia',
new_name='SistemaDeliberacaoRemota',
),
]

23
sapl/sdr/migrations/0004_auto_20200331_1933.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-03-31 22:33
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('sdr', '0003_auto_20200331_1926'),
]
operations = [
migrations.RenameModel(
old_name='SistemaDeliberacaoRemota',
new_name='DeliberacaoRemota',
),
migrations.AlterModelOptions(
name='deliberacaoremota',
options={'ordering': ['chat_id', 'descricao'], 'verbose_name': 'Deliberação Remota', 'verbose_name_plural': 'Deliberações Remotas'},
),
]

0
sapl/videoconf/migrations/__init__.py → sapl/sdr/migrations/__init__.py

14
sapl/videoconf/models.py → sapl/sdr/models.py

@ -3,6 +3,7 @@ from django.utils import timezone
from django.db import models
from django.utils.translation import ugettext_lazy as _
from sapl.sessao.models import SessaoPlenaria
from sapl.utils import get_settings_auth_user_model
@ -12,7 +13,7 @@ def gen_session_id():
return ''.join([str(choice(range(10))) for _ in range(25)])
class Videoconferencia(models.Model):
class DeliberacaoRemota(models.Model):
chat_id = models.CharField(max_length=100,
default=gen_session_id,
@ -20,7 +21,12 @@ class Videoconferencia(models.Model):
titulo = models.CharField(max_length=100, verbose_name=_('Título'))
descricao = models.CharField(max_length=256, blank=True,
verbose_name=_('Descrição'))
inicio = models.DateTimeField(auto_now=timezone.now, verbose_name=_('Data e Hora de Início'))
inicio = models.DateTimeField(auto_now=timezone.now,
verbose_name=_('Data e Hora de Início'))
#TODO: obrigatorio?
sessao_plenaria = models.ForeignKey(SessaoPlenaria,
null=True, blank=True,
verbose_name=_('Sessão Plenária'))
#TODO: preencher quando usuário selecionar a opção 'finalizada'
termino = models.DateTimeField(blank=True, null=True,
@ -33,8 +39,8 @@ class Videoconferencia(models.Model):
verbose_name=_('Criado por'))
class Meta:
verbose_name = _('Videoconferência')
verbose_name_plural = _('Videoconferências')
verbose_name = _('Deliberação Remota')
verbose_name_plural = _('Deliberações Remotas')
ordering = ['chat_id', 'descricao']
def __str__(self):

0
sapl/videoconf/tests.py → sapl/sdr/tests.py

13
sapl/sdr/urls.py

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

51
sapl/videoconf/views.py → sapl/sdr/views.py

@ -7,22 +7,49 @@ from django.core.urlresolvers import reverse, reverse_lazy
from django.views.generic import TemplateView
from sapl.base.models import Autor
from sapl.crud.base import CrudAux
from sapl.crud.base import Crud
from sapl.parlamentares.models import Parlamentar
from sapl.videoconf.models import Videoconferencia
from sapl.rules import RP_LIST, RP_DETAIL
from sapl.sdr.forms import DeliberacaoRemotaCreateForm
from sapl.sdr.models import DeliberacaoRemota, gen_session_id
from sapl.sessao.models import SessaoPlenaria
VideoConferenciaCrud = CrudAux.build(Videoconferencia, 'videoconferencia')
class DeliberacaoRemotaCrud(Crud):
model = DeliberacaoRemota
public = [RP_LIST, RP_DETAIL]
class BaseMixin(Crud.BaseMixin):
ordered_list = False
list_field_names = [
'titulo',
'chat_id',
'finalizada',
'sessao_plenaria']
# class CreateView(Crud.CreateView):
# form_class = DeliberacaoRemotaCreateForm
#
# layout_key = 'DeliberacaoRemotaCreate'
#
# def get_initial(self):
# import ipdb; ipdb.set_trace()
# initial = super().get_initial()
# initial['created_by'] = self.request.user
# return initial
#
# def get_context_data(self):
class ChatView(PermissionRequiredMixin, TemplateView):
template_name = "videoconf/videoconferencia.html"
template_name = "sdr/deliberacaoremota.html"
permission_required = ('sessao.add_sessao', )
logger = logging.getLogger(__name__)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
try:
context['object'] = Videoconferencia.objects.get(id=kwargs['pk'])
context['object'] = DeliberacaoRemota.objects.get(id=kwargs['pk'])
except ObjectDoesNotExist:
pass #TODO: return error
@ -30,29 +57,35 @@ class ChatView(PermissionRequiredMixin, TemplateView):
content_type = ContentType.objects.get_for_model(Parlamentar)
try:
autor = user.autor
nome = autor.nome
nome_usuario = autor.nome
parlamentar = None
if not autor.object_id or autor.content_type != content_type:
is_parlamentar = False
else:
try:
parlamentar = Parlamentar.objects.get(id=autor.object_id)
nome = parlamentar.nome_parlamentar
nome_usuario = parlamentar.nome_parlamentar
is_parlamentar = True
except ObjectDoesNotExist:
is_parlamentar = False
user_data = {
'nome': nome,
'nome_usuario': nome_usuario,
'is_autor': True,
'is_parlamentar': is_parlamentar,
'parlamentar': parlamentar
}
except:
user_data = {
'nome': user.username,
'nome_usuario': user.username,
'is_autor': False,
'is_parlamentar': False
}
context.update(user_data)
# TODO: recuperar sessao_plenaria da vinculacao
sessao_plenaria = SessaoPlenaria.objects.last()
context.update({'sessao_plenaria': sessao_plenaria})
return context

2
sapl/settings.py

@ -66,7 +66,7 @@ SAPL_APPS = (
'sapl.redireciona_urls',
'sapl.compilacao',
'sapl.api',
'sapl.videoconf',
'sapl.sdr',
'sapl.rules'

80
sapl/templates/sdr/deliberacaoremota.html

@ -0,0 +1,80 @@
{% extends "crud/detail.html" %}
{% load i18n common_tags %}
{% load render_bundle from webpack_loader %}
{% 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/>
{% if is_parlamentar %}
<h4>Parlamentar: {{ parlamentar.nome_parlamentar }}</h4>
{% else %}
<h4>Nome: {{ nome_usuario }}</h4>
{% endif %}
</div>
<div class="container">
<div id="meet" class="col-md"></div>
<div id="painel" class="col-md">
<h3>Dados Básicos</h3>
Sessão: {{ sessao_plenaria }} <br/>
Data Início: {{ sessao_plenaria.data_inicio }} <br/>
Hora Início: {{ sessao_plenaria.hora_inicio }} <br/>
Iniciada: {{ sessao_plenaria.iniciada|yesno:"Sim,Não" }} <br/>
<br/>
<br/>
<!-- 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 sessao_plenaria.sessaoplenariapresenca_set.all %}
<li>{{p.parlamentar}}</li>
{% endfor %}
</ul>
</div>
<div class="sm-5" style="margin-right:60px">
<h3>Presentes Ordem do Dia:</h3>
<ul>
{% for p in sessao_plenaria.presencaordemdia_set.all %}
<li>{{p.parlamentar}}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endblock base_content %}
{% block extra_js %}
{{block.super}}
<script src='https://meet.jit.si/external_api.js'></script>
<script language="Javascript">
api = undefined;
$(document).ready(function() {
const domain = 'jitsih.interlegis.leg.br';
const options= {
roomName: '{{object.chat_id}}',
width: 700,
height: 700,
parentNode: document.querySelector('#meet'),
interfaceConfigOverwrite: {TOOLBAR_BUTTONS: ['hangup','microphone', 'camera']}
};
api = new JitsiMeetExternalAPI(domain, options);
api.executeCommand('displayName', '{{nome_usuario}}');
api.executeCommand('toggleTileView');
api.executeCommand('subject', '{{object.titulo}}');
// api.executeCommand('password', '12345');
//api.executeCommand('toggleChat');
api.on('readyToClose', () => {
console.log('Closed session');
window.location.href = "{% url 'sapl.sdr:deliberacaoremota_list' %}";
});
});
</script>
{% endblock extra_js %}

3
sapl/templates/videoconf/videoconferencia_detail.html → sapl/templates/sdr/deliberacaoremota_detail.html

@ -2,8 +2,7 @@
{% load i18n common_tags %}
{% load render_bundle from webpack_loader %}
{% block detail_content %}
{{block.super}}
<a href="{% url 'sapl.videoconf:chat-session' object.pk %}"><strong>Link da sessão de vídeo</strong></a>
<a href="{% url 'sapl.sdr:chat-session' object.pk %}"><strong>Link da sessão de vídeo</strong></a>
{% endblock detail_content %}

12
sapl/templates/sdr/layouts.yaml

@ -0,0 +1,12 @@
{% load i18n %}
DeliberacaoRemota:
{% trans 'Deliberação Remota' %}:
- titulo finalizada
- descricao
DeliberacaoRemotaCreate:
{% trans 'Deliberação Remota' %}:
- created_by
- titulo finalizada
- descricao

6
sapl/templates/videoconf/layouts.yaml

@ -1,6 +0,0 @@
{% load i18n %}
Videoconferencia:
{% trans 'Videoconferência' %}:
- titulo finalizada
- descricao

43
sapl/templates/videoconf/videoconferencia.html

@ -1,43 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script src='https://meet.jit.si/external_api.js'></script>
<script language="Javascript">
api = undefined;
$(document).ready(function() {
const domain = 'jitsih.interlegis.leg.br';
const options= {
roomName: '{{object.chat_id}}',
width: 700,
height: 700,
parentNode: document.querySelector('#meet'),
interfaceConfigOverwrite: {TOOLBAR_BUTTONS: ['hangup','microphone', 'camera']}
};
api = new JitsiMeetExternalAPI(domain, options);
api.executeCommand('displayName', '{{nome}}');
// api.executeCommand('password', '12345');
api.executeCommand('toggleTileView');
//api.executeCommand('toggleChat');
api.executeCommand('subject', '{{object.titulo}}');
api.on('readyToClose', () => {
console.log('Closed session');
window.location.href = "{% url 'sapl.videoconf:videoconferencia_list' %}";
});
});
</script>
<title>Videoconferência</title>
</head>
<body>
<div id="content">
<h3>Título: {{ object.titulo }}<br/></h3>
<h3>Descrição: {{ object.descricao }}<br/></h3>
<strong>ID: </strong>{{ object.chat_id }}<br/>
</div>
<div id="meet"></div>
</body>
</html>

4
sapl/urls.py

@ -34,7 +34,7 @@ import sapl.protocoloadm.urls
import sapl.redireciona_urls.urls
import sapl.relatorios.urls
import sapl.sessao.urls
import sapl.videoconf.urls
import sapl.sdr.urls
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='index.html'),
@ -65,7 +65,7 @@ urlpatterns = [
url(r'', include(sapl.redireciona_urls.urls)),
url(r'', include(sapl.videoconf.urls)),
url(r'', include(sapl.sdr.urls)),
]

1
sapl/videoconf/__init__.py

@ -1 +0,0 @@
default_app_config = 'sapl.videoconf.apps.AppConfig'

13
sapl/videoconf/urls.py

@ -1,13 +0,0 @@
from .apps import AppConfig
from .views import ChatView, VideoConferenciaCrud
from django.conf.urls import include, url
app_name = AppConfig.name
urlpatterns = [
url(r'^videoconferencia/chat/(?P<pk>[0-9]+)$',
ChatView.as_view(), name='chat-session'),
url(r'^videoconferencia/',
include(VideoConferenciaCrud.get_urls()), name='videoconferencia'),
]
Loading…
Cancel
Save