Browse Source

Fix #2186 - Lista de inscrição para discurso

pull/2995/head
Cesar Carvalho 6 years ago
parent
commit
3881e012f2
  1. 72
      sapl/sessao/migrations/0048_auto_20191003_1246.py
  2. 48
      sapl/sessao/models.py
  3. 15
      sapl/sessao/urls.py
  4. 26
      sapl/sessao/views.py
  5. 6
      sapl/templates/menu_tabelas_auxiliares.yaml
  6. 9
      sapl/templates/sessao/layouts.yaml
  7. 16
      sapl/templates/sessao/lista_presenca.html
  8. 5
      sapl/templates/sessao/subnav.yaml

72
sapl/sessao/migrations/0048_auto_20191003_1246.py

@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.20 on 2019-10-03 15:46
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('painel', '0011_cronometro_last_stop_duration'),
('parlamentares', '0035_merge_20190802_0954'),
('sessao', '0047_auto_20191001_1115'),
]
operations = [
migrations.CreateModel(
name='CronometroLista',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('cronometro', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='painel.Cronometro')),
],
),
migrations.CreateModel(
name='ListaDiscurso',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('orador_atual', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='parlamentares.Parlamentar')),
('sessao_plenaria', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='sessao.SessaoPlenaria', verbose_name='Sessão Plenária')),
],
options={
'verbose_name': 'Lista de Discurso',
'verbose_name_plural': 'Listas de Discurso',
'ordering': ['tipo', 'sessao_plenaria'],
},
),
migrations.CreateModel(
name='ParlamentarLista',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('lista', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='sessao.ListaDiscurso')),
('parlamentar', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='parlamentares.Parlamentar')),
],
),
migrations.CreateModel(
name='TipoListaDiscurso',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=100, verbose_name='Tipo')),
],
options={
'verbose_name': 'Tipo de Lista de Discurso',
'verbose_name_plural': 'Tipos de Lista de Discurso',
'ordering': ['nome'],
},
),
migrations.AddField(
model_name='listadiscurso',
name='tipo',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='sessao.TipoListaDiscurso', verbose_name='Tipo de Lista de Discurso'),
),
migrations.AddField(
model_name='cronometrolista',
name='lista',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='sessao.ListaDiscurso'),
),
migrations.AlterUniqueTogether(
name='listadiscurso',
unique_together=set([('tipo', 'sessao_plenaria')]),
),
]

48
sapl/sessao/models.py

@ -10,6 +10,7 @@ import reversion
from sapl.base.models import Autor
from sapl.materia.models import MateriaLegislativa
from sapl.painel.models import Cronometro
from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar,
Partido, SessaoLegislativa)
from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation,
@ -810,3 +811,50 @@ class RetiradaPauta(models.Model):
'ReritadaPauta deve ter exatamente um dos campos '
'ordem ou expediente preenchido. Ambos estão preenchidos: '
'{}, {}'. format(self.ordem, self.expediente))
@reversion.register()
class TipoListaDiscurso(models.Model):
nome = models.CharField(max_length=100, verbose_name=_('Tipo'))
class Meta:
verbose_name = _('Tipo de Lista de Discurso')
verbose_name_plural = _('Tipos de Lista de Discurso')
ordering = ['nome']
def __str__(self):
return self.nome
@reversion.register()
class ListaDiscurso(models.Model):
tipo = models.ForeignKey(TipoListaDiscurso,
on_delete=models.PROTECT,
verbose_name=_('Tipo de Lista de Discurso'))
sessao_plenaria = models.ForeignKey(SessaoPlenaria,
on_delete=models.PROTECT,
verbose_name=_('Sessão Plenária'))
orador_atual = models.ForeignKey(Parlamentar,
on_delete=models.PROTECT,
blank=True,
null=True)
class Meta:
verbose_name = _('Lista de Discurso')
verbose_name_plural = _('Listas de Discurso')
ordering = ['tipo', 'sessao_plenaria']
unique_together = (('tipo', 'sessao_plenaria'),)
def __str__(self):
return str(self.tipo) + ' - ' + str(self.sessao_plenaria)
@reversion.register()
class CronometroLista(models.Model):
cronometro = models.ForeignKey(Cronometro, on_delete=models.PROTECT)
lista = models.ForeignKey(ListaDiscurso, on_delete=models.PROTECT)
@reversion.register()
class ParlamentarLista(models.Model):
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
lista = models.ForeignKey(ListaDiscurso, on_delete=models.PROTECT)

15
sapl/sessao/urls.py

@ -35,7 +35,10 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
VotacaoEmBlocoSimbolicaView, VotacaoEmBlocoNominalView,
resumo_ordenacao,
recuperar_nome_tipo_sessao,
voto_nominal_parlamentar)
voto_nominal_parlamentar,
ListaDiscursoView,
TipoListaDiscursoCrud,
ListaDiscursoCrud)
from .apps import AppConfig
@ -99,6 +102,11 @@ urlpatterns = [
include(TipoJustificativaCrud.get_urls())),
url(r'^sistema/sessao-plenaria/tipo-retirada-pauta/',
include(TipoRetiradaPautaCrud.get_urls())),
url(r'^sistema/sessao-plenaria/tipo-lista-discurso/',
include(TipoListaDiscursoCrud.get_urls())),
url(r'^sistema/sessao-plenaria/lista-discurso/',
include(ListaDiscursoCrud.get_urls())),
url(r'^sistema/resumo-ordenacao/',
resumo_ordenacao,
name='resumo_ordenacao'),
@ -194,4 +202,9 @@ urlpatterns = [
voto_nominal_parlamentar,
name='votacao_nominal_parlamentar'
),
url(r'^sessao/(?P<pk>\d+)/lista-presenca/',
ListaDiscursoView.as_view(),
name='lista_presenca')
]

26
sapl/sessao/views.py

@ -53,7 +53,8 @@ from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao, OcorrenciaS
PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar, TipoRetiradaPauta,
RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia, ORDENACAO_RESUMO)
RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia, ORDENACAO_RESUMO,
TipoListaDiscurso, ListaDiscurso)
TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
@ -61,7 +62,8 @@ TipoJustificativaCrud = CrudAux.build(TipoJustificativa, 'tipo_justificativa')
TipoResultadoVotacaoCrud = CrudAux.build(
TipoResultadoVotacao, 'tipo_resultado_votacao')
TipoRetiradaPautaCrud = CrudAux.build(TipoRetiradaPauta, 'tipo_retirada_pauta')
TipoListaDiscursoCrud = CrudAux.build(TipoListaDiscurso, 'tipo_lista_discurso')
ListaDiscursoCrud = CrudAux.build(ListaDiscurso, 'lista_discurso')
def reordernar_materias_expediente(request, pk):
expedientes = ExpedienteMateria.objects.filter(
@ -4377,3 +4379,23 @@ def voto_nominal_parlamentar(request):
voto.save()
return JsonResponse({})
class ListaDiscursoView(TemplateView):
template_name = 'sessao/lista_presenca.html'
def get(self, request, *args, **kwargs):
# import ipdb; ipdb.set_trace()
return TemplateView.get(self, request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = TemplateView.get_context_data(self, **kwargs)
sessao_pk = kwargs['pk']
sessao = SessaoPlenaria.objects.get(id=sessao_pk)
context.update({
'root_pk': sessao_pk,
'subnav_template_name': 'sessao/subnav.yaml',
'sessaoplenaria': sessao,
})
return context

6
sapl/templates/menu_tabelas_auxiliares.yaml

@ -170,6 +170,12 @@
- title: {% trans 'Tipo de Justificativa' %}
url: sapl.sessao:tipojustificativa_list
css_class: btn btn-link
- title: {% trans 'Tipo de Lista de Discurso' %}
url: sapl.sessao:tipolistadiscurso_list
css_class: btn btn-link
- title: {% trans 'Lista de Discurso' %}
url: sapl.sessao:listadiscurso_list
css_class: btn btn-link
- title: {% trans 'Módulo Painel' %}
css_class: head_title
children:

9
sapl/templates/sessao/layouts.yaml

@ -101,6 +101,15 @@ TipoRetiradaPauta:
{% trans 'Tipo Retirada Pauta'%}:
- descricao
TipoListaDiscurso:
{% trans 'Tipo de Lista de Discurso' %}:
- nome
ListaDiscurso:
{% trans 'Lista de Discurso' %}:
- tipo
- sessao_plenaria
RetiradaPauta:
{% trans 'Retirada de Pauta' %}:
- tipo_de_retirada materia

16
sapl/templates/sessao/lista_presenca.html

@ -0,0 +1,16 @@
{% extends "base.html" %}
{% load i18n staticfiles menus %}
{% load webpack_static from webpack_loader %}
{% block title %}
<h1 class="page-header">
Lista de Discurso <small>({{sessaoplenaria}})</small>
</h1>
{% endblock %}
{% block base_content %}
oioi
{% endblock %}

5
sapl/templates/sessao/subnav.yaml

@ -41,10 +41,15 @@
url: votacao_bloco_ordemdia
check_permission: sessao.add_sessaoplenaria
- title: {% trans 'Operador' %}
children:
- title: {% trans 'Painel Eletrônico' %}
url: painel
{% if not 'painel_aberto'|get_config_attr %}check_permission: painel.list_painel{%endif%}
check_permission: painel.list_painel
- title: {% trans 'Lista de Discurso' %}
url: lista_presenca
check_permission: painel.list_painel
- title: {% trans 'Resumo' %}
children:

Loading…
Cancel
Save