Browse Source

Adição de telas principais

pull/3136/head
eribeiro 6 years ago
committed by João Rodrigues
parent
commit
5bc73ff6a4
  1. 1
      sapl/painel/views.py
  2. 6
      sapl/templates/videoconf/layouts.yaml
  3. 17
      sapl/templates/videoconf/videoconferencia.html
  4. 9
      sapl/templates/videoconf/videoconferencia_detail.html
  5. 65
      sapl/videoconf/forms.py
  6. 38
      sapl/videoconf/migrations/0001_initial.py
  7. 40
      sapl/videoconf/models.py
  8. 9
      sapl/videoconf/urls.py
  9. 52
      sapl/videoconf/views.py

1
sapl/painel/views.py

@ -132,6 +132,7 @@ def votacao(context,context_vars):
'Ordem do Dia/Expediente em votação.'})
return context, context_vars
def sessao_votacao(context,context_vars):
pk = context_vars['sessao'].pk
context.update({'sessao_id': pk})

6
sapl/templates/videoconf/layouts.yaml

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

17
sapl/templates/videoconf/videoconferencia.html

@ -9,30 +9,35 @@
<script language="Javascript">
api = undefined;
$(document).ready(function() {
const domain = 'meet.jit.si';
const domain = 'jitsih.interlegis.leg.br';
const options= {
roomName: 'test30392910',
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', 'Vereador Teste'); //TODO: remover
api.executeCommand('displayName', '{{nome}}');
// api.executeCommand('password', '12345');
api.executeCommand('toggleTileView');
//api.executeCommand('toggleChat');
api.executeCommand('subject', 'Sessão Plenária 18o. de 2020');
api.executeCommand('subject', '{{object.titulo}}');
api.on('readyToClose', () => {
console.log('opaaaaa');
console.log('Closed session');
window.location.href = "{% url 'sapl.videoconf:videoconferencia_list' %}";
});
});
</script>
<title>Videoconferência</title>
</head>
<body>
<h2>Vídeoconferência</h2>
<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>

9
sapl/templates/videoconf/videoconferencia_detail.html

@ -0,0 +1,9 @@
{% extends "crud/detail.html" %}
{% 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>
{% endblock detail_content %}

65
sapl/videoconf/forms.py

@ -0,0 +1,65 @@
import logging
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
from sapl.videoconf.models import Videoconferencia
class VideoconferenciaForm(ModelForm):
logger = logging.getLogger(__name__)
class Meta:
model = Videoconferencia
fields = ['chat_id', 'descricao']
# class AutoriaNormaForm(ModelForm):
#
# tipo_autor = ModelChoiceField(label=_('Tipo Autor'),
# required=False,
# queryset=TipoAutor.objects.all(),
# empty_label=_('Selecione'), )
#
# data_relativa = forms.DateField(
# widget=forms.HiddenInput(), required=False)
#
# logger = logging.getLogger(__name__)
#
# def __init__(self, *args, **kwargs):
# super(AutoriaNormaForm, self).__init__(*args, **kwargs)
#
# row1 = to_row([('tipo_autor', 4),
# ('autor', 4),
# ('primeiro_autor', 4)])
#
# self.helper = SaplFormHelper()
# self.helper.layout = Layout(
# Fieldset(_('Autoria'),
# row1, 'data_relativa', form_actions(label='Salvar')))
#
# if not kwargs['instance']:
# self.fields['autor'].choices = []
#
# class Meta:
# model = AutoriaNorma
# fields = ['tipo_autor', 'autor', 'primeiro_autor', 'data_relativa']
#
# def clean(self):
# cd = super(AutoriaNormaForm, self).clean()
#
# if not self.is_valid():
# return self.cleaned_data
#
# autorias = AutoriaNorma.objects.filter(
# norma=self.instance.norma, autor=cd['autor'])
# pk = self.instance.pk
#
# if ((not pk and autorias.exists()) or
# (pk and autorias.exclude(pk=pk).exists())):
# self.logger.error(
# "Autor ({}) já foi cadastrado.".format(cd['autor']))
# raise ValidationError(_('Esse Autor já foi cadastrado.'))
#
# return cd

38
sapl/videoconf/migrations/0001_initial.py

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-03-31 21:34
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
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
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')),
('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')),
('termino', models.DateTimeField(blank=True, null=True, verbose_name='Data e Hora de Término')),
('finalizada', models.BooleanField(default=False, verbose_name='Finalizada?')),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Criado por')),
],
options={
'verbose_name': 'Videoconferência',
'verbose_name_plural': 'Videoconferências',
'ordering': ['chat_id', 'descricao'],
},
),
]

40
sapl/videoconf/models.py

@ -1,3 +1,41 @@
from django.utils import timezone
from django.db import models
from django.utils.translation import ugettext_lazy as _
from sapl.utils import get_settings_auth_user_model
def gen_session_id():
from random import choice
return ''.join([str(choice(range(10))) for _ in range(25)])
class Videoconferencia(models.Model):
chat_id = models.CharField(max_length=100,
default=gen_session_id,
verbose_name=_('Chat ID'))
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'))
#TODO: preencher quando usuário selecionar a opção 'finalizada'
termino = models.DateTimeField(blank=True, null=True,
verbose_name=_('Data e Hora de Término'))
finalizada = models.BooleanField(default=False, verbose_name=_('Finalizada?'))
#TODO: obrigatório com preenchimento automatico
created_by = models.ForeignKey(get_settings_auth_user_model(),
blank=True, null=True,
verbose_name=_('Criado por'))
class Meta:
verbose_name = _('Videoconferência')
verbose_name_plural = _('Videoconferências')
ordering = ['chat_id', 'descricao']
# Create your models here.
def __str__(self):
return "".format(self.chat_id)

9
sapl/videoconf/urls.py

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

52
sapl/videoconf/views.py

@ -1,14 +1,58 @@
from django.shortcuts import render
from django.views.generic import TemplateView
import logging
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.views.generic import TemplateView
# Create your views here.
from sapl.base.models import Autor
from sapl.crud.base import CrudAux
from sapl.parlamentares.models import Parlamentar
from sapl.videoconf.models import Videoconferencia
VideoConferenciaCrud = CrudAux.build(Videoconferencia, 'videoconferencia')
class VideoConferenciaView(PermissionRequiredMixin, TemplateView):
class ChatView(PermissionRequiredMixin, TemplateView):
template_name = "videoconf/videoconferencia.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'])
except ObjectDoesNotExist:
pass #TODO: return error
user = self.request.user
content_type = ContentType.objects.get_for_model(Parlamentar)
try:
autor = user.autor
nome = 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
is_parlamentar = True
except ObjectDoesNotExist:
is_parlamentar = False
user_data = {
'nome': nome,
'is_autor': True,
'is_parlamentar': is_parlamentar,
'parlamentar': parlamentar
}
except:
user_data = {
'nome': user.username,
'is_autor': False,
'is_parlamentar': False
}
context.update(user_data)
return context

Loading…
Cancel
Save