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. 13
      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.base.models import Autor
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa
from sapl.painel.models import Cronometro
from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar, from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar,
Partido, SessaoLegislativa) Partido, SessaoLegislativa)
from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation, from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation,
@ -810,3 +811,50 @@ class RetiradaPauta(models.Model):
'ReritadaPauta deve ter exatamente um dos campos ' 'ReritadaPauta deve ter exatamente um dos campos '
'ordem ou expediente preenchido. Ambos estão preenchidos: ' 'ordem ou expediente preenchido. Ambos estão preenchidos: '
'{}, {}'. format(self.ordem, self.expediente)) '{}, {}'. 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, VotacaoEmBlocoSimbolicaView, VotacaoEmBlocoNominalView,
resumo_ordenacao, resumo_ordenacao,
recuperar_nome_tipo_sessao, recuperar_nome_tipo_sessao,
voto_nominal_parlamentar) voto_nominal_parlamentar,
ListaDiscursoView,
TipoListaDiscursoCrud,
ListaDiscursoCrud)
from .apps import AppConfig from .apps import AppConfig
@ -99,6 +102,11 @@ urlpatterns = [
include(TipoJustificativaCrud.get_urls())), include(TipoJustificativaCrud.get_urls())),
url(r'^sistema/sessao-plenaria/tipo-retirada-pauta/', url(r'^sistema/sessao-plenaria/tipo-retirada-pauta/',
include(TipoRetiradaPautaCrud.get_urls())), 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/', url(r'^sistema/resumo-ordenacao/',
resumo_ordenacao, resumo_ordenacao,
name='resumo_ordenacao'), name='resumo_ordenacao'),
@ -194,4 +202,9 @@ urlpatterns = [
voto_nominal_parlamentar, voto_nominal_parlamentar,
name='votacao_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, PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar, TipoRetiradaPauta, 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') TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
@ -61,7 +62,8 @@ TipoJustificativaCrud = CrudAux.build(TipoJustificativa, 'tipo_justificativa')
TipoResultadoVotacaoCrud = CrudAux.build( TipoResultadoVotacaoCrud = CrudAux.build(
TipoResultadoVotacao, 'tipo_resultado_votacao') TipoResultadoVotacao, 'tipo_resultado_votacao')
TipoRetiradaPautaCrud = CrudAux.build(TipoRetiradaPauta, 'tipo_retirada_pauta') 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): def reordernar_materias_expediente(request, pk):
expedientes = ExpedienteMateria.objects.filter( expedientes = ExpedienteMateria.objects.filter(
@ -4377,3 +4379,23 @@ def voto_nominal_parlamentar(request):
voto.save() voto.save()
return JsonResponse({}) 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' %} - title: {% trans 'Tipo de Justificativa' %}
url: sapl.sessao:tipojustificativa_list url: sapl.sessao:tipojustificativa_list
css_class: btn btn-link 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' %} - title: {% trans 'Módulo Painel' %}
css_class: head_title css_class: head_title
children: children:

9
sapl/templates/sessao/layouts.yaml

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

13
sapl/templates/sessao/subnav.yaml

@ -41,10 +41,15 @@
url: votacao_bloco_ordemdia url: votacao_bloco_ordemdia
check_permission: sessao.add_sessaoplenaria check_permission: sessao.add_sessaoplenaria
- title: {% trans 'Painel Eletrônico' %} - title: {% trans 'Operador' %}
url: painel children:
{% if not 'painel_aberto'|get_config_attr %}check_permission: painel.list_painel{%endif%} - title: {% trans 'Painel Eletrônico' %}
check_permission: painel.list_painel 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' %} - title: {% trans 'Resumo' %}
children: children:

Loading…
Cancel
Save