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 @@ +
+

+ {% if oradores_ordemdia %} + Oradores da Ordem do Dia: + {% for orador in oradores_ordemdia %} +

{{ orador.numero_ordem }} - {{ orador.parlamentar.nome_completo }}
+
{{ orador.url_discurso }}
+
{{ orador.observacao }}
+
+ {% endfor %} + {% endif %} +

+
\ 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 @@ +
+ Oradores da Ordem do Dia +
+
Parlamentar
+
Discurso
+
Observação
+
+
+ {% for orador in oradores_ordemdia %} +
{{ orador.numero_ordem }} - {{ orador.parlamentar }}
+
{{ orador.url_discurso }}
+
{{ orador.observacao }}
+ {% endfor %} +
+
\ 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