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): class AppConfig(apps.AppConfig):
name = 'sapl.videoconf' name = 'sapl.sdr'
label = 'videoconf' label = 'sdr'
verbose_name = _('Video-conferência') verbose_name = _('Sistema de Deliberação Remota')

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

@ -1,20 +1,39 @@
import logging import logging
from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _ 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__) logger = logging.getLogger(__name__)
class Meta: class Meta:
model = Videoconferencia model = DeliberacaoRemota
fields = ['chat_id', 'descricao'] 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): # class AutoriaNormaForm(ModelForm):
# #
# tipo_autor = ModelChoiceField(label=_('Tipo Autor'), # 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.conf import settings
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import sapl.videoconf.models import sapl.sdr.models
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -21,7 +21,7 @@ class Migration(migrations.Migration):
name='Videoconferencia', name='Videoconferencia',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('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')), ('titulo', models.CharField(max_length=100, verbose_name='Título')),
('descricao', models.CharField(blank=True, max_length=256, verbose_name='Descrição')), ('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')), ('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.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from sapl.sessao.models import SessaoPlenaria
from sapl.utils import get_settings_auth_user_model 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)]) 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, chat_id = models.CharField(max_length=100,
default=gen_session_id, default=gen_session_id,
@ -20,7 +21,12 @@ class Videoconferencia(models.Model):
titulo = models.CharField(max_length=100, verbose_name=_('Título')) titulo = models.CharField(max_length=100, verbose_name=_('Título'))
descricao = models.CharField(max_length=256, blank=True, descricao = models.CharField(max_length=256, blank=True,
verbose_name=_('Descrição')) 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' #TODO: preencher quando usuário selecionar a opção 'finalizada'
termino = models.DateTimeField(blank=True, null=True, termino = models.DateTimeField(blank=True, null=True,
@ -33,8 +39,8 @@ class Videoconferencia(models.Model):
verbose_name=_('Criado por')) verbose_name=_('Criado por'))
class Meta: class Meta:
verbose_name = _('Videoconferência') verbose_name = _('Deliberação Remota')
verbose_name_plural = _('Videoconferências') verbose_name_plural = _('Deliberações Remotas')
ordering = ['chat_id', 'descricao'] ordering = ['chat_id', 'descricao']
def __str__(self): 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 django.views.generic import TemplateView
from sapl.base.models import Autor 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.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): class ChatView(PermissionRequiredMixin, TemplateView):
template_name = "videoconf/videoconferencia.html" template_name = "sdr/deliberacaoremota.html"
permission_required = ('sessao.add_sessao', ) permission_required = ('sessao.add_sessao', )
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
try: try:
context['object'] = Videoconferencia.objects.get(id=kwargs['pk']) context['object'] = DeliberacaoRemota.objects.get(id=kwargs['pk'])
except ObjectDoesNotExist: except ObjectDoesNotExist:
pass #TODO: return error pass #TODO: return error
@ -30,29 +57,35 @@ class ChatView(PermissionRequiredMixin, TemplateView):
content_type = ContentType.objects.get_for_model(Parlamentar) content_type = ContentType.objects.get_for_model(Parlamentar)
try: try:
autor = user.autor autor = user.autor
nome = autor.nome nome_usuario = autor.nome
parlamentar = None parlamentar = None
if not autor.object_id or autor.content_type != content_type: if not autor.object_id or autor.content_type != content_type:
is_parlamentar = False is_parlamentar = False
else: else:
try: try:
parlamentar = Parlamentar.objects.get(id=autor.object_id) parlamentar = Parlamentar.objects.get(id=autor.object_id)
nome = parlamentar.nome_parlamentar nome_usuario = parlamentar.nome_parlamentar
is_parlamentar = True is_parlamentar = True
except ObjectDoesNotExist: except ObjectDoesNotExist:
is_parlamentar = False is_parlamentar = False
user_data = { user_data = {
'nome': nome, 'nome_usuario': nome_usuario,
'is_autor': True, 'is_autor': True,
'is_parlamentar': is_parlamentar, 'is_parlamentar': is_parlamentar,
'parlamentar': parlamentar 'parlamentar': parlamentar
} }
except: except:
user_data = { user_data = {
'nome': user.username, 'nome_usuario': user.username,
'is_autor': False, 'is_autor': False,
'is_parlamentar': False 'is_parlamentar': False
} }
context.update(user_data) context.update(user_data)
# TODO: recuperar sessao_plenaria da vinculacao
sessao_plenaria = SessaoPlenaria.objects.last()
context.update({'sessao_plenaria': sessao_plenaria})
return context return context

2
sapl/settings.py

@ -66,7 +66,7 @@ SAPL_APPS = (
'sapl.redireciona_urls', 'sapl.redireciona_urls',
'sapl.compilacao', 'sapl.compilacao',
'sapl.api', 'sapl.api',
'sapl.videoconf', 'sapl.sdr',
'sapl.rules' '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 i18n common_tags %}
{% load render_bundle from webpack_loader %} {% load render_bundle from webpack_loader %}
{% block detail_content %} {% block detail_content %}
{{block.super}} {{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 %} {% 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.redireciona_urls.urls
import sapl.relatorios.urls import sapl.relatorios.urls
import sapl.sessao.urls import sapl.sessao.urls
import sapl.videoconf.urls import sapl.sdr.urls
urlpatterns = [ urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='index.html'), 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.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