From 1e00c7d7c992d049046d6b5f12e2440da57e7d0c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Rodrigues?=
Date: Wed, 3 Apr 2019 11:44:00 -0300
Subject: [PATCH] Fix #2403 Adiciona Oradores da Ordem do Dia (#2662)
* Adicionar oradores da ordem do dia
* Atualizar sessao/forms.py
---
.../templates/pdf_sessao_plenaria_gerar.py | 24 +++++-
sapl/relatorios/views.py | 44 +++++++++--
sapl/rules/map_rules.py | 1 +
sapl/sessao/forms.py | 55 +++++++++++++-
sapl/sessao/migrations/0034_oradorordemdia.py | 34 +++++++++
.../0035_resumoordenacao_decimo_quarto.py | 20 +++++
sapl/sessao/models.py | 9 +++
sapl/sessao/urls.py | 7 +-
sapl/sessao/views.py | 76 +++++++++++++++++--
sapl/templates/relatorios/relatorio_ata.html | 1 +
.../sessao/blocos_ata/oradores_ordemdia.html | 13 ++++
.../blocos_resumo/oradores_ordemdia.html | 15 ++++
sapl/templates/sessao/layouts.yaml | 6 ++
sapl/templates/sessao/resumo.html | 3 +
sapl/templates/sessao/resumo_ata.html | 1 +
sapl/templates/sessao/subnav.yaml | 2 +
16 files changed, 292 insertions(+), 19 deletions(-)
create mode 100644 sapl/sessao/migrations/0034_oradorordemdia.py
create mode 100644 sapl/sessao/migrations/0035_resumoordenacao_decimo_quarto.py
create mode 100644 sapl/templates/sessao/blocos_ata/oradores_ordemdia.html
create mode 100644 sapl/templates/sessao/blocos_resumo/oradores_ordemdia.html
diff --git a/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py b/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
index 6a39fa1c1..4c388e59a 100644
--- a/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
+++ b/sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
@@ -340,6 +340,24 @@ def votacao_vot_nom(lst_votacao_vot_nom):
return tmp
+def oradores_ordemdia(lst_oradores_ordemdia):
+ """
+
+ """
+ tmp = ''
+ tmp += '\t\tOradores da Ordem do Dia\n'
+ tmp += '\t\t\n'
+ tmp += '\t\t\t
\n'
+ tmp += '\t\t\n'
+ for orador_ordemdia in lst_oradores_ordemdia:
+ tmp += '\t\t' + \
+ str(orador_ordemdia['num_ordem']) + ' - ' + \
+ orador_ordemdia['nome_parlamentar'] + '/' + \
+ str(orador_ordemdia['sigla']) + ' - ' + \
+ str(orador_ordemdia['observacao']) + '\n'
+ return tmp
+
+
def oradores(lst_oradores):
"""
@@ -374,7 +392,7 @@ def ocorrencias(lst_ocorrencias):
return tmp
-def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao, lst_ausencia_sessao, lst_expedientes, lst_expediente_materia, lst_expediente_materia_vot_nom, lst_oradores_expediente, lst_presenca_ordem_dia, lst_votacao, lst_votacao_vot_nom, lst_oradores, lst_ocorrencias):
+def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao, lst_ausencia_sessao, lst_expedientes, lst_expediente_materia, lst_expediente_materia_vot_nom, lst_oradores_expediente, lst_presenca_ordem_dia, lst_votacao, lst_votacao_vot_nom, lst_oradores_ordemdia, lst_oradores, lst_ocorrencias):
"""
"""
arquivoPdf = str(int(time.time() * 100)) + ".pdf"
@@ -409,6 +427,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao
'v_n_mat_o_d': votacao_vot_nom(lst_votacao_vot_nom),
'mesa_d': mesa(lst_mesa),
'oradores_exped': oradores_expediente(lst_oradores_expediente),
+ 'oradores_o_d': oradores_ordemdia(lst_oradores_ordemdia),
'oradores_expli': oradores(lst_oradores),
'ocorr_sessao': ocorrencias(lst_ocorrencias)
}
@@ -428,6 +447,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao
tmp += dict_ord_template[ordenacao.decimo_primeiro]
tmp += dict_ord_template[ordenacao.decimo_segundo]
tmp += dict_ord_template[ordenacao.decimo_terceiro]
+ tmp += dict_ord_template[ordenacao.decimo_quarto]
except KeyError as e:
logger.error("KeyError: " + str(e) + ". Erro ao tentar utilizar "
"configuração de ordenação. Utilizando ordenação padrão.")
@@ -441,6 +461,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao
tmp += presenca_ordem_dia(lst_presenca_ordem_dia)
tmp += votacao(lst_votacao)
tmp += votacao_vot_nom(lst_votacao_vot_nom)
+ tmp += oradores_ordemdia(lst_oradores_ordemdia)
tmp += oradores(lst_oradores)
tmp += ocorrencias(lst_ocorrencias)
@@ -455,6 +476,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao
tmp += presenca_ordem_dia(lst_presenca_ordem_dia)
tmp += votacao(lst_votacao)
tmp += votacao_vot_nom(lst_votacao_vot_nom)
+ tmp += oradores_ordemdia(lst_oradores_ordemdia)
tmp += oradores(lst_oradores)
tmp += ocorrencias(lst_ocorrencias)
diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py
index deb1e885f..72ef64e45 100755
--- a/sapl/relatorios/views.py
+++ b/sapl/relatorios/views.py
@@ -23,15 +23,16 @@ from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao,
Orador, OradorExpediente,
OrdemDia, PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, OcorrenciaSessao,
- RegistroVotacao, VotoParlamentar)
+ RegistroVotacao, VotoParlamentar, OradorOrdemDia)
from sapl.settings import STATIC_ROOT
from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data
from sapl.sessao.views import (get_identificação_basica, get_mesa_diretora,
- get_presenca_sessao, get_expedientes,
- get_materias_expediente, get_oradores_expediente,
+ get_presenca_sessao,get_expedientes,
+ get_materias_expediente,get_oradores_expediente,
get_presenca_ordem_do_dia, get_materias_ordem_do_dia,
- get_oradores_explicações_pessoais, get_ocorrencias_da_sessão, get_assinaturas)
+ get_oradores_ordemdia,
+ get_oradores_explicações_pessoais, get_ocorrencias_da_sessão)
from .templates import (pdf_capa_processo_gerar,
pdf_documento_administrativo_gerar, pdf_espelho_gerar,
@@ -780,6 +781,35 @@ def get_sessao_plenaria(sessao, casa):
}
lst_votacao_vot_nom.append(dic_votacao_vot_nom)
+ # Lista dos oradores da Ordem do Dia
+ lst_oradores_ordemdia = []
+
+ oradores_ordem_dia = OradorOrdemDia.objects.filter(
+ sessao_plenaria=sessao
+ ).order_by('numero_ordem')
+
+ for orador_ordemdia in oradores_ordem_dia:
+ parlamentar_orador = Parlamentar.objects.get(
+ id=orador_ordemdia.parlamentar.id
+ )
+
+ sigla_partido = Filiacao.objects.filter(
+ parlamentar=parlamentar_orador
+ ).first()
+
+ if not sigla_partido:
+ sigla_p = ""
+ else:
+ sigla_p = sigla_partido.partido.sigla
+
+ dic_oradores_ordemdia = {
+ 'num_ordem': orador_ordemdia.numero_ordem,
+ 'nome_parlamentar': parlamentar_orador.nome_parlamentar,
+ 'observacao': orador_ordemdia.observacao,
+ 'sigla': sigla_p
+ }
+ lst_oradores_ordemdia.append(dic_oradores_ordemdia)
+
# Lista dos oradores nas Explicações Pessoais
lst_oradores = []
for orador in Orador.objects.filter(
@@ -830,6 +860,7 @@ def get_sessao_plenaria(sessao, casa):
lst_presenca_ordem_dia,
lst_votacao,
lst_votacao_vot_nom,
+ lst_oradores_ordemdia,
lst_oradores,
lst_ocorrencias)
@@ -886,7 +917,8 @@ def relatorio_sessao_plenaria(request, pk):
lst_oradores_expediente,
lst_presenca_ordem_dia,
lst_votacao,
- lst_votacao_vot_nom,
+ lst_votacao_vot_nom,
+ lst_oradores_ordemdia,
lst_oradores,
lst_ocorrencias) = get_sessao_plenaria(sessao, casa)
@@ -910,6 +942,7 @@ def relatorio_sessao_plenaria(request, pk):
lst_presenca_ordem_dia,
lst_votacao,
lst_votacao_vot_nom,
+ lst_oradores_ordemdia,
lst_oradores,
lst_ocorrencias)
@@ -1256,6 +1289,7 @@ def resumo_ata_pdf(request,pk):
context.update(get_oradores_expediente(sessao_plenaria))
context.update(get_presenca_ordem_do_dia(sessao_plenaria))
context.update(get_materias_ordem_do_dia(sessao_plenaria))
+ context.update(get_oradores_ordemdia(sessao_plenaria))
context.update(get_oradores_explicações_pessoais(sessao_plenaria))
context.update(get_ocorrencias_da_sessão(sessao_plenaria))
context.update(get_assinaturas(sessao_plenaria))
diff --git a/sapl/rules/map_rules.py b/sapl/rules/map_rules.py
index 13c89a547..d09e65961 100644
--- a/sapl/rules/map_rules.py
+++ b/sapl/rules/map_rules.py
@@ -175,6 +175,7 @@ rules_group_sessao = {
(sessao.ExpedienteSessao, __base__, __perms_publicas__),
(sessao.Orador, __base__, __perms_publicas__),
(sessao.OradorExpediente, __base__, __perms_publicas__),
+ (sessao.OradorOrdemDia, __base__, __perms_publicas__),
(sessao.OrdemDia, __base__, __perms_publicas__),
(sessao.PresencaOrdemDia, __base__, __perms_publicas__),
(sessao.RegistroVotacao, __base__, __perms_publicas__),
diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py
index 172b37be5..373b1e951 100644
--- a/sapl/sessao/forms.py
+++ b/sapl/sessao/forms.py
@@ -26,7 +26,7 @@ from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES,
from .models import (Bancada, Bloco, ExpedienteMateria, JustificativaAusencia,
Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, TipoResultadoVotacao,
- OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta)
+ OcorrenciaSessao, RetiradaPauta, TipoRetiradaPauta, OradorOrdemDia)
MES_CHOICES = RANGE_MESES
@@ -45,7 +45,8 @@ ORDENACAO_RESUMO = [('cont_mult', 'Conteúdo Multimídia'),
('oradores_expli', 'Oradores das Explicações Pessoais'),
('ocorr_sessao', 'Ocorrências da Sessão'),
('v_n_mat_exp', 'Votações Nominais - Matérias do Expediente'),
- ('v_n_mat_o_d', 'Votações Nominais - Matérias da Ordem do Dia')]
+ ('v_n_mat_o_d', 'Votações Nominais - Matérias da Ordem do Dia'),
+ ('oradores_o_d', 'Oradores da Ordem do Dia')]
class SessaoPlenariaForm(FileFieldCheckMixin, ModelForm):
@@ -758,6 +759,49 @@ class OradorExpedienteForm(ModelForm):
exclude = ['sessao_plenaria']
+class OradorOrdemDiaForm(ModelForm):
+
+ def __init__(self, *args, **kwargs):
+ super(OradorOrdemDiaForm, self).__init__(*args, **kwargs)
+
+ id_sessao = int(self.initial['id_sessao'])
+
+ ids = [p.parlamentar.id for p in PresencaOrdemDia.objects.filter(
+ sessao_plenaria_id=id_sessao
+ )]
+
+ self.fields['parlamentar'].queryset = Parlamentar.objects.filter(
+ id__in=ids
+ ).order_by('nome_parlamentar')
+
+
+ def clean(self):
+ super(OradorOrdemDiaForm, self).clean()
+ cleaned_data = self.cleaned_data
+
+ if not self.is_valid():
+ return self.cleaned_data
+
+ sessao_id = self.initial['id_sessao']
+ numero = self.initial.get('numero')
+ numero_ordem = cleaned_data['numero_ordem']
+ ordem = OradorOrdemDia.objects.filter(
+ sessao_plenaria_id=sessao_id,
+ numero_ordem=numero_ordem
+ ).exists()
+
+ if ordem and numero_ordem != numero:
+ raise ValidationError(_(
+ "Já existe orador nesta posição de ordem de pronunciamento"
+ ))
+
+ return self.cleaned_data
+
+ class Meta:
+ model = OradorOrdemDia
+ exclude = ['sessao_plenaria']
+
+
class PautaSessaoFilterSet(SessaoPlenariaFilterSet):
titulo = _('Pesquisa de Pauta de Sessão')
@@ -789,6 +833,8 @@ class ResumoOrdenacaoForm(forms.Form):
choices=ORDENACAO_RESUMO)
decimo_terceiro = forms.ChoiceField(label='13°',
choices=ORDENACAO_RESUMO)
+ decimo_quarto = forms.ChoiceField(label='14°',
+ choices=ORDENACAO_RESUMO)
def __init__(self, *args, **kwargs):
super(ResumoOrdenacaoForm, self).__init__(*args, **kwargs)
@@ -819,13 +865,16 @@ class ResumoOrdenacaoForm(forms.Form):
[('decimo_segundo', 12)])
row13 = to_row(
[('decimo_terceiro', 12)])
+ row14 = to_row(
+ [('decimo_quarto', 12)]
+ )
self.helper = SaplFormHelper()
self.helper.layout = Layout(
Fieldset(_(''),
row1, row2, row3, row4, row5,
row6, row7, row8, row9, row10,
- row11, row12, row13,
+ row11, row12, row13, row14,
form_actions(label='Atualizar'))
)
diff --git a/sapl/sessao/migrations/0034_oradorordemdia.py b/sapl/sessao/migrations/0034_oradorordemdia.py
new file mode 100644
index 000000000..b0e5976fb
--- /dev/null
+++ b/sapl/sessao/migrations/0034_oradorordemdia.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-03-26 16:14
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import sapl.sessao.models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('parlamentares', '0025_auto_20180924_1724'),
+ ('sessao', '0033_auto_20190228_1803'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='OradorOrdemDia',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('numero_ordem', models.PositiveIntegerField(verbose_name='Ordem de pronunciamento')),
+ ('url_discurso', models.URLField(blank=True, max_length=150, verbose_name='URL Vídeo')),
+ ('observacao', models.CharField(blank=True, max_length=150, verbose_name='Observação')),
+ ('upload_anexo', models.FileField(blank=True, null=True, upload_to=sapl.sessao.models.anexo_upload_path, verbose_name='Anexo do Orador')),
+ ('parlamentar', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='parlamentares.Parlamentar', verbose_name='Parlamentar')),
+ ('sessao_plenaria', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sessao.SessaoPlenaria')),
+ ],
+ options={
+ 'verbose_name_plural': 'Oradores da Ordem do Dia',
+ 'verbose_name': 'Orador da Ordem do Dia',
+ },
+ ),
+ ]
diff --git a/sapl/sessao/migrations/0035_resumoordenacao_decimo_quarto.py b/sapl/sessao/migrations/0035_resumoordenacao_decimo_quarto.py
new file mode 100644
index 000000000..f8e00489e
--- /dev/null
+++ b/sapl/sessao/migrations/0035_resumoordenacao_decimo_quarto.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-03-26 18:14
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('sessao', '0034_oradorordemdia'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='resumoordenacao',
+ name='decimo_quarto',
+ field=models.CharField(default='Oradores da Ordem do Dia', max_length=30),
+ ),
+ ]
diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py
index 34ed20cca..7267e78fc 100644
--- a/sapl/sessao/models.py
+++ b/sapl/sessao/models.py
@@ -378,6 +378,14 @@ class OradorExpediente(AbstractOrador): # OradoresExpediente
verbose_name_plural = _('Oradores do Expediente')
+@reversion.register()
+class OradorOrdemDia(AbstractOrador): # OradoresOrdemDia
+
+ class Meta:
+ verbose_name = _('Orador da Ordem do Dia')
+ verbose_name_plural = _('Oradores da Ordem do Dia')
+
+
@reversion.register()
class OrdemDia(AbstractOrdemDia):
@@ -579,6 +587,7 @@ class ResumoOrdenacao(models.Model):
decimo_primeiro = models.CharField(max_length=30,default="Ocorrências da Sessão")
decimo_segundo = models.CharField(max_length=30, default="Votos Nominais Mat Expediente")
decimo_terceiro = models.CharField(max_length=30, default="Votos Nominais Mat Ordem Dia")
+ decimo_quarto = models.CharField(max_length=30, default="Oradores da Ordem do Dia")
class Meta:
verbose_name = _('Ordenação do Resumo de uma Sessão')
diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py
index ba0735ec6..00add810a 100644
--- a/sapl/sessao/urls.py
+++ b/sapl/sessao/urls.py
@@ -4,7 +4,8 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
AdicionarVariasMateriasOrdemDia, BancadaCrud,
BlocoCrud, CargoBancadaCrud,
ExpedienteMateriaCrud, ExpedienteView, JustificativaAusenciaCrud,
- OcorrenciaSessaoView, MateriaOrdemDiaCrud, MesaView, OradorCrud,
+ OcorrenciaSessaoView, MateriaOrdemDiaCrud, OradorOrdemDiaCrud,
+ MesaView, OradorCrud,
OradorExpedienteCrud, PainelView,
PautaSessaoDetailView, PautaSessaoView,
PesquisarPautaSessaoView,
@@ -44,7 +45,9 @@ urlpatterns = [
OradorExpedienteCrud.get_urls() +
ExpedienteMateriaCrud.get_urls() +
JustificativaAusenciaCrud.get_urls() +
- MateriaOrdemDiaCrud.get_urls() + RetiradaPautaCrud.get_urls())),
+ MateriaOrdemDiaCrud.get_urls() +
+ OradorOrdemDiaCrud.get_urls() +
+ RetiradaPautaCrud.get_urls())),
url(r'^sessao/(?P\d+)/mesa$', MesaView.as_view(), name='mesa'),
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
index 550b231be..08adf1fa0 100755
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -42,14 +42,14 @@ from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm, BlocoForm,
MesaForm, OradorExpedienteForm, OradorForm, PautaSessaoFilterSet,
PresencaForm, ResumoOrdenacaoForm, SessaoPlenariaFilterSet,
SessaoPlenariaForm, VotacaoEditForm, VotacaoForm,
- VotacaoNominalForm, RetiradaPautaForm)
+ VotacaoNominalForm, RetiradaPautaForm, OradorOrdemDiaForm)
from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
ExpedienteMateria, ExpedienteSessao, OcorrenciaSessao, IntegranteMesa,
MateriaLegislativa, Orador, OradorExpediente, OrdemDia,
PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar, TipoRetiradaPauta,
- RetiradaPauta, TipoJustificativa, JustificativaAusencia)
+ RetiradaPauta, TipoJustificativa, JustificativaAusencia, OradorOrdemDia)
TipoSessaoCrud = CrudAux.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria')
@@ -618,6 +618,31 @@ class OradorExpedienteCrud(OradorCrud):
'numero': self.object.numero_ordem}
+class OradorOrdemDiaCrud(OradorCrud):
+ model = OradorOrdemDia
+
+ class CreateView(MasterDetailCrud.CreateView):
+ form_class = OradorOrdemDiaForm
+
+ def get_initial(self):
+ return {'id_sessao': self.kwargs['pk']}
+
+ def get_success_url(self):
+ return reverse('sapl.sessao:oradorordemdia_list',
+ kwargs={'pk': self.kwargs['pk']})
+
+ class UpdateView(MasterDetailCrud.UpdateView):
+ form_class = OradorOrdemDiaForm
+
+ def get_initial(self):
+ initial = super(UpdateView, self).get_initial()
+
+ initial.update({'id_sessao': self.object.sessao_plenaria.id})
+ initial.update({'numero': self.object.numero_ordem})
+
+ return initial
+
+
class OradorCrud(OradorCrud):
model = Orador
@@ -1290,7 +1315,8 @@ class ResumoOrdenacaoView(PermissionRequiredMixin, FormView):
'decimo': ordenacao.decimo,
'decimo_primeiro': ordenacao.decimo_primeiro,
'decimo_segundo': ordenacao.decimo_segundo,
- 'decimo_terceiro': ordenacao.decimo_terceiro})
+ 'decimo_terceiro': ordenacao.decimo_terceiro,
+ 'decimo_quarto': ordenacao.decimo_quarto})
return initial
def form_valid(self, form):
@@ -1309,6 +1335,7 @@ class ResumoOrdenacaoView(PermissionRequiredMixin, FormView):
ordenacao.decimo_primeiro = form.cleaned_data['decimo_primeiro']
ordenacao.decimo_segundo = form.cleaned_data['decimo_segundo']
ordenacao.decimo_terceiro = form.cleaned_data['decimo_terceiro']
+ ordenacao.decimo_quarto = form.cleaned_data['decimo_quarto']
ordenacao.save()
@@ -1584,6 +1611,32 @@ def get_materias_ordem_do_dia(sessao_plenaria):
return context
+def get_oradores_ordemdia(sessao_plenaria):
+ oradores = []
+
+ oradores_ordem_dia = OradorOrdemDia.objects.filter(
+ sessao_plenaria_id=sessao_plenaria.id
+ ).order_by('numero_ordem')
+
+ for orador in oradores_ordem_dia:
+ numero_ordem = orador.numero_ordem
+ url_discurso = orador.url_discurso
+ observacao = orador.observacao
+ parlamentar = Parlamentar.objects.get(
+ id=orador.parlamentar_id
+ )
+ o = {
+ 'numero_ordem': numero_ordem,
+ 'url_discurso': url_discurso,
+ 'parlamentar': parlamentar,
+ 'observacao': observacao
+ }
+ oradores.append(o)
+
+ context = {'oradores_ordemdia': oradores}
+ return context
+
+
def get_oradores_explicações_pessoais(sessao_plenaria):
oradores_explicacoes = []
for orador in Orador.objects.filter(
@@ -1698,6 +1751,9 @@ class ResumoView(DetailView):
context.update(get_materias_ordem_do_dia(self.object))
# =====================================================================
+ # Oradores Ordem do Dia
+ context.update(get_oradores_ordemdia(self.object))
+ # =====================================================================
# Oradores nas Explicações Pessoais
context.update(get_oradores_explicações_pessoais(self.object))
# =====================================================================
@@ -1718,6 +1774,7 @@ class ResumoView(DetailView):
'v_n_mat_o_d': 'votos_nominais_materias_ordem_dia.html',
'mesa_d': 'mesa_diretora.html',
'oradores_exped': 'oradores_expediente.html',
+ 'oradores_o_d': 'oradores_ordemdia.html',
'oradores_expli': 'oradores_explicacoes.html',
'ocorr_sessao': 'ocorrencias_da_sessao.html'
}
@@ -1737,7 +1794,8 @@ class ResumoView(DetailView):
'decimo_ordenacao': dict_ord_template[ordenacao.decimo],
'decimo_primeiro_ordenacao': dict_ord_template[ordenacao.decimo_primeiro],
'decimo_segundo_ordenacao': dict_ord_template[ordenacao.decimo_segundo],
- 'decimo_terceiro_ordenacao': dict_ord_template[ordenacao.decimo_terceiro]})
+ 'decimo_terceiro_ordenacao': dict_ord_template[ordenacao.decimo_terceiro],
+ 'decimo_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto]})
except KeyError as e:
self.logger.error('user=' + self.request.user.username + '. ' + "KeyError: " + str(e) + ". Erro "
"ao tentar utilizar configuração de ordenação. Utilizando ordenação padrão.")
@@ -1753,8 +1811,9 @@ class ResumoView(DetailView):
'nono_ordenacao': dict_ord_template['lista_p_o_d'],
'decimo_ordenacao': dict_ord_template['mat_o_d'],
'decimo_primeiro_ordenacao': dict_ord_template['v_n_mat_o_d'],
- 'decimo_segundo_ordenacao': dict_ord_template['oradores_expli'],
- 'decimo_terceiro_ordenacao': dict_ord_template['ocorr_sessao']
+ 'decimo_segundo_ordenacao': dict_ord_template['oradores_o_d'],
+ 'decimo_terceiro_ordenacao': dict_ord_template['oradores_expli'],
+ 'decimo_quarto_ordenacao': dict_ord_template['ocorr_sessao']
})
else:
context.update(
@@ -1769,8 +1828,9 @@ class ResumoView(DetailView):
'nono_ordenacao': dict_ord_template['lista_p_o_d'],
'decimo_ordenacao': dict_ord_template['mat_o_d'],
'decimo_primeiro_ordenacao': dict_ord_template['v_n_mat_o_d'],
- 'decimo_segundo_ordenacao': dict_ord_template['oradores_expli'],
- 'decimo_terceiro_ordenacao': dict_ord_template['ocorr_sessao']
+ 'decimo_segundo_ordenacao': dict_ord_template['oradores_o_d'],
+ 'decimo_terceiro_ordenacao': dict_ord_template['oradores_expli'],
+ 'decimo_quarto_ordenacao': dict_ord_template['ocorr_sessao']
})
return context
diff --git a/sapl/templates/relatorios/relatorio_ata.html b/sapl/templates/relatorios/relatorio_ata.html
index 7d6c45d7b..05c5355c4 100644
--- a/sapl/templates/relatorios/relatorio_ata.html
+++ b/sapl/templates/relatorios/relatorio_ata.html
@@ -46,6 +46,7 @@
{% include 'sessao/blocos_ata/oradores_expediente.html' %}
{% include 'sessao/blocos_ata/lista_presenca_ordem_dia.html' %}
{% include 'sessao/blocos_ata/materias_ordem_dia.html' %}
+ {% include 'sessao/blocos_ata/oradores_ordemdia.html' %}
{% include 'sessao/blocos_ata/oradores_explicacoes.html' %}
{% include 'sessao/blocos_ata/ocorrencias_da_sessao.html' %}
diff --git a/sapl/templates/sessao/blocos_ata/oradores_ordemdia.html b/sapl/templates/sessao/blocos_ata/oradores_ordemdia.html
new file mode 100644
index 000000000..62ec92e81
--- /dev/null
+++ b/sapl/templates/sessao/blocos_ata/oradores_ordemdia.html
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/blocos_resumo/oradores_ordemdia.html b/sapl/templates/sessao/blocos_resumo/oradores_ordemdia.html
new file mode 100644
index 000000000..a1898cce0
--- /dev/null
+++ b/sapl/templates/sessao/blocos_resumo/oradores_ordemdia.html
@@ -0,0 +1,15 @@
+
\ No newline at end of file
diff --git a/sapl/templates/sessao/layouts.yaml b/sapl/templates/sessao/layouts.yaml
index 55e0db570..98307d74d 100644
--- a/sapl/templates/sessao/layouts.yaml
+++ b/sapl/templates/sessao/layouts.yaml
@@ -39,6 +39,12 @@ OradorExpediente:
- url_discurso observacao
- upload_anexo
+OradorOrdemDia:
+ {% trans 'Orador da Ordem do Dia' %}:
+ - numero_ordem parlamentar
+ - url_discurso observacao
+ - upload_anexo
+
ExpedienteMateria:
{% trans 'Matéria do Expediente' %}:
- data_ordem numero_ordem
diff --git a/sapl/templates/sessao/resumo.html b/sapl/templates/sessao/resumo.html
index bcedeedb8..0be605eb8 100644
--- a/sapl/templates/sessao/resumo.html
+++ b/sapl/templates/sessao/resumo.html
@@ -58,5 +58,8 @@
{% include 'sessao/blocos_resumo/'|add:decimo_terceiro_ordenacao %}
+
+ {% include 'sessao/blocos_resumo/'|add:decimo_quarto_ordenacao %}
+
{% endblock detail_content %}
diff --git a/sapl/templates/sessao/resumo_ata.html b/sapl/templates/sessao/resumo_ata.html
index 12507b79a..2f450b97e 100644
--- a/sapl/templates/sessao/resumo_ata.html
+++ b/sapl/templates/sessao/resumo_ata.html
@@ -32,5 +32,6 @@
{% include 'sessao/blocos_ata/'|add:decimo_primeiro_ordenacao %}
{% include 'sessao/blocos_ata/'|add:decimo_segundo_ordenacao %}
{% include 'sessao/blocos_ata/'|add:decimo_terceiro_ordenacao %}
+ {% include 'sessao/blocos_ata/'|add:decimo_quarto_ordenacao %}
{% include 'sessao/blocos_ata/assinaturas.html' %}
{% endblock detail_content %}
diff --git a/sapl/templates/sessao/subnav.yaml b/sapl/templates/sessao/subnav.yaml
index 1decc0ded..28717e4ab 100644
--- a/sapl/templates/sessao/subnav.yaml
+++ b/sapl/templates/sessao/subnav.yaml
@@ -35,6 +35,8 @@
url: ordemdia_list
- title: {% trans 'Presença Ordem do Dia' %}
url: presencaordemdia
+ - title: {% trans 'Oradores da Ordem do Dia' %}
+ url: oradorordemdia_list
- title: {% trans 'Votação em Bloco' %}
url: votacao_bloco_ordemdia
check_permission: sessao.add_sessaoplenaria