Browse Source

Os ticket #997362 (Adição de considerações finais na sessão) (#3437)

* Adicionada classe de ConsideracoesFinais

* Migration de ConsideracoesFinais

* Adicionado interface visual para ConsideracoesFinais

* Migration de adição di decimo_quinta_ordenacao em resumoordenacao

* Alterações para disponibilizar ConsideracoesFinais nas abas de resumo e resumo ata

* Adicionado o import de get_consideracoes_finais

* Adicionado consideracoes finais a outras abas

* Removido tag inutil do html

* Consertado problemas com consideracoes finais, ocorrencias da sessao e oradores de explicacoes pessoais - Fix #3434

* Adiciona mirror me drone.yaml

* Adiciona pull condicional em drone.yaml

* Retirado o hardcode e adicionado ConsideracoesFinais a tabela auxiliar

* Correções nos templates

* Adicionado observação das explicações pessoais à resumo_ata e resumo

* Adicionado observacoes das explicacoes ao PDF

Co-authored-by: eribeiro <edwardr@senado.leg.br>
pull/3445/head 3.1.162-RC9
Alvaro Gouvea 3 years ago
committed by GitHub
parent
commit
a1c7a040a6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py
  2. 2
      sapl/relatorios/templates/pdf_sessao_plenaria_preparar_pysc.py
  3. 51
      sapl/relatorios/views.py
  4. 10
      sapl/sessao/forms.py
  5. 27
      sapl/sessao/migrations/0056_ConsideracoesFinais.py
  6. 18
      sapl/sessao/migrations/0057_resumoordenacao_decimo_quinto.py
  7. 22
      sapl/sessao/models.py
  8. 4
      sapl/sessao/urls.py
  9. 94
      sapl/sessao/views.py
  10. 4
      sapl/templates/relatorios/blocos_sessao_plenaria/consideracoes_finais.html
  11. 4
      sapl/templates/relatorios/blocos_sessao_plenaria/ocorrencias_da_sessao.html
  12. 4
      sapl/templates/relatorios/blocos_sessao_plenaria/ocorrencias_sessao.html
  13. 2
      sapl/templates/relatorios/blocos_sessao_plenaria/oradores_explicacoes.html
  14. 1
      sapl/templates/relatorios/relatorio_ata.html
  15. 2
      sapl/templates/relatorios/relatorio_sessao_plenaria.html
  16. 8
      sapl/templates/sessao/blocos_ata/consideracoes_finais.html
  17. 9
      sapl/templates/sessao/blocos_resumo/consideracoes_finais.html
  18. 10
      sapl/templates/sessao/blocos_resumo/oradores_explicacoes.html
  19. 29
      sapl/templates/sessao/consideracoes_finais.html
  20. 0
      sapl/templates/sessao/ocorrencias_da_sessao.html
  21. 3
      sapl/templates/sessao/resumo.html
  22. 1
      sapl/templates/sessao/resumo_ata.html
  23. 3
      sapl/templates/sessao/resumo_ordenacao.html
  24. 2
      sapl/templates/sessao/subnav-solene.yaml
  25. 2
      sapl/templates/sessao/subnav.yaml

23
sapl/relatorios/templates/pdf_sessao_plenaria_gerar.py

@ -399,8 +399,23 @@ def ocorrencias(lst_ocorrencias):
tmp += '\t\t</para>\n'
return tmp
def consideracoes(lst_consideracoes):
tmp = ''
if lst_consideracoes:
tmp += '\t\t<para style="P1">Consideracoes Finais</para>\n'
tmp += '\t\t<para style="P2">\n'
tmp += '\t\t\t<font color="white"> </font>\n'
tmp += '\t\t</para>\n'
for consideracoes in lst_consideracoes:
tmp += '\t\t<para style="P3">' + \
str(consideracoes.conteudo) + '</para>\n'
tmp += '\t\t<para style="P2">\n'
tmp += '\t\t\t<font color="white"> </font>\n'
tmp += '\t\t</para>\n'
return tmp
def principal(rodape_dic, imagem, inf_basicas_dic, cont_mult_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):
def principal(rodape_dic, imagem, inf_basicas_dic, cont_mult_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, lst_consideracoes):
"""
"""
arquivoPdf = str(int(time.time() * 100)) + ".pdf"
@ -437,7 +452,8 @@ def principal(rodape_dic, imagem, inf_basicas_dic, cont_mult_dic, lst_mesa, lst_
'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)
'ocorr_sessao': ocorrencias(lst_ocorrencias),
'cons_finais': consideracoes(lst_consideracoes)
}
if ordenacao:
@ -456,6 +472,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, cont_mult_dic, lst_mesa, lst_
tmp += dict_ord_template[ordenacao.decimo_segundo]
tmp += dict_ord_template[ordenacao.decimo_terceiro]
tmp += dict_ord_template[ordenacao.decimo_quarto]
tmp += dict_ord_template[ordenacao.decimo_quinto]
except KeyError as e:
logger.error("KeyError: " + str(e) + ". Erro ao tentar utilizar "
"configuração de ordenação. Utilizando ordenação padrão.")
@ -473,6 +490,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, cont_mult_dic, lst_mesa, lst_
tmp += oradores_ordemdia(lst_oradores_ordemdia)
tmp += oradores(lst_oradores)
tmp += ocorrencias(lst_ocorrencias)
tmp += consideracoes(lst_consideracoes)
else:
tmp += inf_basicas(inf_basicas_dic)
@ -489,6 +507,7 @@ def principal(rodape_dic, imagem, inf_basicas_dic, cont_mult_dic, lst_mesa, lst_
tmp += oradores_ordemdia(lst_oradores_ordemdia)
tmp += oradores(lst_oradores)
tmp += ocorrencias(lst_ocorrencias)
tmp += consideracoes(lst_consideracoes)
tmp += '\t</story>\n'
tmp += '</document>\n'

2
sapl/relatorios/templates/pdf_sessao_plenaria_preparar_pysc.py

@ -277,7 +277,7 @@ if context.REQUEST['data'] != '':
# return lst_votacao
sessao = session.id
caminho = context.pdf_sessao_plenaria_gerar(rodape, sessao, imagem, inf_basicas_dic, lst_mesa, lst_presenca_sessao,
lst_expedientes, lst_expediente_materia, lst_oradores_expediente, lst_presenca_ordem_dia, lst_votacao, lst_oradores)
lst_expedientes, lst_expediente_materia, lst_oradores_expediente, lst_presenca_ordem_dia, lst_votacao, lst_oradores, lst_ocorrencias, lst_consideracoes)
if caminho == 'aviso':
response.redirect('mensagem_emitir_proc')
else:

51
sapl/relatorios/views.py

@ -25,7 +25,8 @@ from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao,
Orador, OradorExpediente,
OrdemDia, PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, OcorrenciaSessao,
RegistroVotacao, VotoParlamentar, OradorOrdemDia, TipoExpediente, ResumoOrdenacao)
RegistroVotacao, VotoParlamentar, OradorOrdemDia,
ConsideracoesFinais, TipoExpediente, ResumoOrdenacao)
from sapl.settings import STATIC_ROOT
from sapl.utils import LISTA_DE_UFS, TrocaTag, filiacao_data, create_barcode
@ -34,7 +35,8 @@ from sapl.sessao.views import (get_identificacao_basica, get_mesa_diretora,
get_materias_expediente, get_oradores_expediente,
get_presenca_ordem_do_dia, get_materias_ordem_do_dia,
get_oradores_ordemdia,
get_oradores_explicacoes_pessoais, get_ocorrencias_da_sessao, get_assinaturas)
get_oradores_explicacoes_pessoais, get_consideracoes_finais,
get_ocorrencias_da_sessao, get_assinaturas)
from .templates import (pdf_capa_processo_gerar,
pdf_documento_administrativo_gerar, pdf_espelho_gerar,
@ -824,13 +826,13 @@ def get_sessao_plenaria(sessao, casa):
lst_oradores.append({
"num_ordem": orador.numero_ordem,
"nom_parlamentar": parlamentar.nome_parlamentar,
"observacao": orador.observacao,
"sgl_partido": "" if not partido_sigla else partido_sigla.partido.sigla
})
# Ocorrências da Sessão
lst_ocorrencias = []
ocorrencias = OcorrenciaSessao.objects.filter(sessao_plenaria=sessao)
for o in ocorrencias:
conteudo = o.conteudo
@ -847,6 +849,26 @@ def get_sessao_plenaria(sessao, casa):
lst_ocorrencias.append(o)
# Ocorrências da Sessão
lst_consideracoes = []
consideracoes = ConsideracoesFinais.objects.filter(sessao_plenaria=sessao)
for c in consideracoes:
conteudo = c.conteudo
# unescape HTML codes
# https://github.com/interlegis/sapl/issues/1046
conteudo = re.sub('style=".*?"', '', conteudo)
conteudo = html.unescape(conteudo)
# escape special character '&'
# https://github.com/interlegis/sapl/issues/1009
conteudo = conteudo.replace('&', '&amp;')
c.conteudo = conteudo
lst_consideracoes.append(c)
return (inf_basicas_dic,
cont_mult_dic,
lst_mesa,
@ -861,7 +883,8 @@ def get_sessao_plenaria(sessao, casa):
lst_votacao_vot_nom,
lst_oradores_ordemdia,
lst_oradores,
lst_ocorrencias)
lst_ocorrencias,
lst_consideracoes)
def get_turno(materia):
@ -923,7 +946,8 @@ def relatorio_sessao_plenaria(request, pk):
lst_votacao_vot_nom,
lst_oradores_ordemdia,
lst_oradores,
lst_ocorrencias) = get_sessao_plenaria(sessao, casa)
lst_ocorrencias,
lst_consideracoes) = get_sessao_plenaria(sessao, casa)
for idx in range(len(lst_expedientes)):
txt_expedientes = lst_expedientes[idx]['txt_expediente']
@ -948,7 +972,8 @@ def relatorio_sessao_plenaria(request, pk):
lst_votacao_vot_nom,
lst_oradores_ordemdia,
lst_oradores,
lst_ocorrencias)
lst_ocorrencias,
lst_consideracoes)
response.write(pdf)
return response
@ -1327,6 +1352,7 @@ def resumo_ata_pdf(request, pk):
context.update(get_materias_ordem_do_dia(sessao_plenaria))
context.update(get_oradores_ordemdia(sessao_plenaria))
context.update(get_ocorrencias_da_sessao(sessao_plenaria))
context.update(get_consideracoes_finais(sessao_plenaria))
context.update(get_oradores_explicacoes_pessoais(sessao_plenaria))
context.update(get_assinaturas(sessao_plenaria))
context.update({'object': sessao_plenaria})
@ -1480,7 +1506,8 @@ def relatorio_sessao_plenaria_pdf(request, pk):
lst_votacao_vot_nom,
lst_oradores_ordemdia,
lst_oradores,
lst_ocorrencias) = get_sessao_plenaria(sessao, casa)
lst_ocorrencias,
lst_consideracoes) = get_sessao_plenaria(sessao, casa)
dict_ord_template = {
'cont_mult': 'conteudo_multimidia.html',
@ -1496,7 +1523,8 @@ def relatorio_sessao_plenaria_pdf(request, pk):
'oradores_exped': 'oradores_expediente.html',
'oradores_o_d': 'oradores_ordemdia.html',
'oradores_expli': 'oradores_explicacoes.html',
'ocorr_sessao': 'ocorrencias_sessao.html'
'ocorr_sessao': 'ocorrencias_da_sessao.html',
'cons_finais': 'consideracoes_finais.html'
}
context = {
@ -1515,6 +1543,7 @@ def relatorio_sessao_plenaria_pdf(request, pk):
"lst_votacao_vot_nom": lst_votacao_vot_nom,
"lst_oradores": lst_oradores,
"lst_ocorrencias": lst_ocorrencias,
"lst_consideracoes": lst_consideracoes,
"rodape": rodape,
"data": dt.today().strftime('%d/%m/%Y')
}
@ -1535,7 +1564,8 @@ def relatorio_sessao_plenaria_pdf(request, pk):
'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_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto]
'decimo_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto],
'decimo_quinto_ordenacao': dict_ord_template[ordenacao.decimo_quinto]
})
except KeyError as e:
# self.logger.error("KeyError: " + str(e) + ". Erro ao tentar utilizar "
@ -1554,7 +1584,8 @@ def relatorio_sessao_plenaria_pdf(request, pk):
'decimo_primeiro_ordenacao': 'votos_nominais_ordemdia.html',
'decimo_segundo_ordenacao': 'oradores_ordemdia.html',
'decimo_terceiro_ordenacao': 'oradores_explicacoes.html',
'decimo_quarto_ordenacao': 'ocorrencias_sessao.html'
'decimo_quarto_ordenacao': 'ocorrencias_da_sessao.html',
'decimo_quinto_ordenacao': 'consideracoes_finais.html'
})
html_template = render_to_string(

10
sapl/sessao/forms.py

@ -783,6 +783,10 @@ class ResumoOrdenacaoForm(forms.Form):
label='14°',
choices=ORDENACAO_RESUMO
)
decimo_quinto = forms.ChoiceField(
label='15°',
choices=ORDENACAO_RESUMO
)
def __init__(self, *args, **kwargs):
row1 = to_row(
@ -814,13 +818,16 @@ class ResumoOrdenacaoForm(forms.Form):
row14 = to_row(
[('decimo_quarto', 12)]
)
row15 = to_row(
[('decimo_quinto', 12)]
)
self.helper = SaplFormHelper()
self.helper.layout = Layout(
Fieldset(_(''),
row1, row2, row3, row4, row5,
row6, row7, row8, row9, row10,
row11, row12, row13, row14,
row11, row12, row13, row14, row15,
form_actions(label='Atualizar'))
)
@ -862,6 +869,7 @@ class ResumoOrdenacaoForm(forms.Form):
ordenacao.decimo_segundo = cleaned_data['decimo_segundo']
ordenacao.decimo_terceiro = cleaned_data['decimo_terceiro']
ordenacao.decimo_quarto = cleaned_data['decimo_quarto']
ordenacao.decimo_quinto = cleaned_data['decimo_quinto']
ordenacao.save()

27
sapl/sessao/migrations/0056_ConsideracoesFinais.py

@ -0,0 +1,27 @@
# Generated by Django 2.2.20 on 2021-08-05 13:04
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('sessao', '0055_auto_20210304_1221'),
]
operations = [
migrations.CreateModel(
name='ConsideracoesFinais',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('conteudo', models.TextField(blank=True, verbose_name='Considerações Finais da Sessão Plenária')),
('sessao_plenaria', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='sessao.SessaoPlenaria')),
],
options={
'verbose_name': 'Consideração Final da Sessão Plenária',
'verbose_name_plural': 'Considerações Finais da Sessão Plenária',
'ordering': ('id',),
},
),
]

18
sapl/sessao/migrations/0057_resumoordenacao_decimo_quinto.py

@ -0,0 +1,18 @@
# Generated by Django 2.2.20 on 2021-08-11 13:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0056_ConsideracoesFinais'),
]
operations = [
migrations.AddField(
model_name='resumoordenacao',
name='decimo_quinto',
field=models.CharField(default='cons_finais', max_length=50),
),
]

22
sapl/sessao/models.py

@ -426,6 +426,21 @@ class OcorrenciaSessao(models.Model): # OcorrenciaSessaoPlenaria
def __str__(self):
return '%s - %s' % (self.sessao_plenaria, self.conteudo)
@reversion.register()
class ConsideracoesFinais(models.Model): # ConsideracoesFinaisSessaoPlenaria
sessao_plenaria = models.OneToOneField(SessaoPlenaria,
on_delete=models.PROTECT)
conteudo = models.TextField(
blank=True, verbose_name=_('Considerações Finais da Sessão Plenária'))
class Meta:
verbose_name = _('Consideração Final da Sessão Plenária')
verbose_name_plural = _('Considerações Finais da Sessão Plenária')
ordering = ('id',)
def __str__(self):
return '%s - %s' % (self.sessao_plenaria, self.conteudo)
@reversion.register()
class IntegranteMesa(models.Model): # MesaSessaoPlenaria
@ -686,7 +701,8 @@ ORDENACAO_RESUMO = [
('v_n_mat_o_d', 'Votações Nominais - Matérias da Ordem do Dia'),
('oradores_o_d', 'Oradores da Ordem do Dia'),
('oradores_expli', 'Oradores das Explicações Pessoais'),
('ocorr_sessao', 'Ocorrências da Sessão')
('ocorr_sessao', 'Ocorrências da Sessão'),
('cons_finais', 'Considerações Finais')
]
@ -752,6 +768,10 @@ class ResumoOrdenacao(models.Model):
max_length=50,
default=ORDENACAO_RESUMO[13][0]
)
decimo_quinto = models.CharField(
max_length=50,
default=ORDENACAO_RESUMO[14][0]
)
class Meta:
verbose_name = _('Ordenação do Resumo de uma Sessão')

4
sapl/sessao/urls.py

@ -4,7 +4,7 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
AdicionarVariasMateriasOrdemDia, BancadaCrud,
CargoBancadaCrud, ExpedienteMateriaCrud,
ExpedienteView, JustificativaAusenciaCrud,
OcorrenciaSessaoView, MateriaOrdemDiaCrud, OradorOrdemDiaCrud,
OcorrenciaSessaoView, ConsideracoesFinaisView, MateriaOrdemDiaCrud, OradorOrdemDiaCrud,
MesaView, OradorCrud,
OradorExpedienteCrud, PainelView,
PautaSessaoDetailView, PautaSessaoView,
@ -128,6 +128,8 @@ urlpatterns = [
ExpedienteView.as_view(), name='expediente'),
url(r'^sessao/(?P<pk>\d+)/ocorrencia_sessao$',
OcorrenciaSessaoView.as_view(), name='ocorrencia_sessao'),
url(r'^sessao/(?P<pk>\d+)/consideracoes_finais$',
ConsideracoesFinaisView.as_view(), name='consideracoes_finais'),
url(r'^sessao/(?P<pk>\d+)/presenca$',
PresencaView.as_view(), name='presenca'),
url(r'^sessao/(?P<pk>\d+)/painel$',

94
sapl/sessao/views.py

@ -44,7 +44,7 @@ from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm,
SessaoPlenariaForm, VotacaoEditForm, VotacaoForm,
VotacaoNominalForm, RetiradaPautaForm, OradorOrdemDiaForm)
from .models import (Bancada, CargoBancada, CargoMesa,
ExpedienteMateria, ExpedienteSessao, OcorrenciaSessao, IntegranteMesa,
ExpedienteMateria, ExpedienteSessao, OcorrenciaSessao, ConsideracoesFinais, IntegranteMesa,
MateriaLegislativa, Orador, OradorExpediente, OrdemDia,
PresencaOrdemDia, RegistroVotacao, ResumoOrdenacao,
SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente,
@ -1843,7 +1843,8 @@ class ResumoOrdenacaoView(PermissionRequiredMixin, FormView):
'decimo_primeiro': self.get_tupla(ordenacao.decimo_primeiro),
'decimo_segundo': self.get_tupla(ordenacao.decimo_segundo),
'decimo_terceiro': self.get_tupla(ordenacao.decimo_terceiro),
'decimo_quarto': self.get_tupla(ordenacao.decimo_quarto)
'decimo_quarto': self.get_tupla(ordenacao.decimo_quarto),
'decimo_quinto': self.get_tupla(ordenacao.decimo_quinto)
}
return initial
@ -2170,10 +2171,13 @@ def get_oradores_explicacoes_pessoais(sessao_plenaria):
sigla = ''
else:
sigla = partido_sigla.partido.sigla
observacao = orador.observacao
oradores = {
'numero_ordem': orador.numero_ordem,
'parlamentar': parlamentar,
'sgl_partido': sigla
'sgl_partido': sigla,
'observacao': observacao
}
oradores_explicacoes.append(oradores)
context = {'oradores_explicacoes': oradores_explicacoes}
@ -2186,6 +2190,12 @@ def get_ocorrencias_da_sessao(sessao_plenaria):
context = {'ocorrencias_da_sessao': ocorrencias_sessao}
return context
def get_consideracoes_finais(sessao_plenaria):
consideracoes_finais = ConsideracoesFinais.objects.filter(
sessao_plenaria_id=sessao_plenaria.id)
context = {'consideracoes_finais': consideracoes_finais}
return context
class ResumoView(DetailView):
template_name = 'sessao/resumo.html'
@ -2271,6 +2281,9 @@ class ResumoView(DetailView):
# Ocorrẽncias da Sessão
context.update(get_ocorrencias_da_sessao(self.object))
# =====================================================================
# Consideracoes Finais da Sessão
context.update(get_consideracoes_finais(self.object))
# =====================================================================
# Indica a ordem com a qual o template será renderizado
dict_ord_template = {
'cont_mult': 'conteudo_multimidia.html',
@ -2286,7 +2299,8 @@ class ResumoView(DetailView):
'oradores_exped': 'oradores_expediente.html',
'oradores_o_d': 'oradores_ordemdia.html',
'oradores_expli': 'oradores_explicacoes.html',
'ocorr_sessao': 'ocorrencias_da_sessao.html'
'ocorr_sessao': 'ocorrencias_da_sessao.html',
'cons_finais': 'consideracoes_finais.html'
}
ordenacao = ResumoOrdenacao.objects.get_or_create()[0]
@ -2305,7 +2319,8 @@ class ResumoView(DetailView):
'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_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto]
'decimo_quarto_ordenacao': dict_ord_template[ordenacao.decimo_quarto],
'decimo_quinto_ordenacao': dict_ord_template[ordenacao.decimo_quinto]
})
except KeyError as e:
self.logger.error("KeyError: " + str(e) + ". Erro ao tentar utilizar "
@ -2324,7 +2339,8 @@ class ResumoView(DetailView):
'decimo_primeiro_ordenacao': 'votos_nominais_materias_ordem_dia.html',
'decimo_segundo_ordenacao': 'oradores_ordemdia.html',
'decimo_terceiro_ordenacao': 'oradores_explicacoes.html',
'decimo_quarto_ordenacao': 'ocorrencias_da_sessao.html'
'decimo_quarto_ordenacao': 'ocorrencias_da_sessao.html',
'decimo_quinto_ordenacao': 'consideracoes_finais.html'
})
sessao = context['object']
@ -2438,7 +2454,7 @@ class ExpedienteView(FormMixin, DetailView):
class OcorrenciaSessaoView(FormMixin, DetailView):
template_name = 'sessao/ocorrencia_sessao.html'
template_name = 'sessao/ocorrencias_da_sessao.html'
form_class = OcorrenciaSessaoForm
model = SessaoPlenaria
@ -2502,6 +2518,70 @@ class OcorrenciaSessaoView(FormMixin, DetailView):
pk = self.kwargs['pk']
return reverse('sapl.sessao:ocorrencia_sessao', kwargs={'pk': pk})
class ConsideracoesFinaisView(FormMixin, DetailView):
template_name = 'sessao/consideracoes_finais.html'
form_class = OcorrenciaSessaoForm
model = SessaoPlenaria
logger = logging.getLogger(__name__)
def get_context_data(self, **kwargs):
context = FormMixin.get_context_data(self, **kwargs)
context['title'] = 'Considerações Finais <small>(%s)</small>' % (
self.object)
sessao = context['object']
tipo_sessao = sessao.tipo
if tipo_sessao.nome == "Solene":
context.update(
{'subnav_template_name': 'sessao/subnav-solene.yaml'})
return context
def delete(self):
ConsideracoesFinais.objects.filter(sessao_plenaria=self.object).delete()
username = self.request.user.username
self.logger.info('user=' + username + '. ConsideracoesFinais com SessaoPlenaria de id={} deletada.'
.format(self.object.id))
msg = _('Registro deletado com sucesso')
messages.add_message(self.request, messages.SUCCESS, msg)
def save(self, form):
conteudo = form.cleaned_data['conteudo']
ConsideracoesFinais.objects.filter(sessao_plenaria=self.object).delete()
consideracao = ConsideracoesFinais()
consideracao.sessao_plenaria_id = self.object.id
consideracao.conteudo = conteudo
consideracao.save()
msg = _('Registro salvo com sucesso')
messages.add_message(self.request, messages.SUCCESS, msg)
username = self.request.user.username
self.logger.info(
'user=' + username + '. consideracoesFinais de sessao_plenaria_id={} atualizada com sucesso.'.format(self.object.id))
@method_decorator(permission_required('sessao.add_consideraoesfinais'))
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = OcorrenciaSessaoForm(request.POST)
if not form.is_valid():
return self.form_invalid(form)
if request.POST.get('delete'):
self.delete()
elif request.POST.get('save'):
self.save(form)
return self.form_valid(form)
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('sapl.sessao:consideracoes_finais', kwargs={'pk': pk})
class VotacaoEditView(SessaoPermissionMixin):

4
sapl/templates/relatorios/blocos_sessao_plenaria/consideracoes_finais.html

@ -0,0 +1,4 @@
<h2 class="gray-title">Considerações Finais</h2>
{% for c in lst_consideracoes%}
<p>{{c}}</p>
{% endfor %}

4
sapl/templates/relatorios/blocos_sessao_plenaria/ocorrencias_da_sessao.html

@ -0,0 +1,4 @@
<h2 class="gray-title">Ocorrências da Sessão</h2>
{% for o in lst_ocorrencias%}
<p>{{o}}</p>
{% endfor %}

4
sapl/templates/relatorios/blocos_sessao_plenaria/ocorrencias_sessao.html

@ -1,4 +0,0 @@
<h2 class="gray-title">Ocorrências da Sessão</h2>
{% for ocorrencia in lst_ocorrencias%}
<p>{{ocorrencia}}</p>
{% endfor %}

2
sapl/templates/relatorios/blocos_sessao_plenaria/oradores_explicacoes.html

@ -2,7 +2,7 @@
<h2 class="gray-title">Oradores das Explicações Pessoais</h2>
{% for orador in lst_oradores%}
<tr>
<p style="page-break-after: avoid;">{{orador.num_ordem}} - {{orador.nom_parlamentar}}/{{orador.sgl_partido}}</p>
<p style="page-break-after: avoid;">{{orador.num_ordem}} - {{orador.nom_parlamentar}}/{{orador.sgl_partido}} - {{ orador.observacao }}</p>
</tr>
{% endfor %}
</div>

1
sapl/templates/relatorios/relatorio_ata.html

@ -14,6 +14,7 @@
{% include 'sessao/blocos_ata/oradores_ordemdia.html' %}
{% include 'sessao/blocos_ata/oradores_explicacoes.html' %}
{% include 'sessao/blocos_ata/ocorrencias_da_sessao.html' %}
{% include 'sessao/blocos_ata/consideracoes_finais.html' %}
{% if assinatura_mesa or assinatura_presentes %}

2
sapl/templates/relatorios/relatorio_sessao_plenaria.html

@ -32,6 +32,8 @@
{% include 'relatorios/blocos_sessao_plenaria/'|add:decimo_quarto_ordenacao %}
{% include 'relatorios/blocos_sessao_plenaria/'|add:decimo_quinto_ordenacao %}
</div>

8
sapl/templates/sessao/blocos_ata/consideracoes_finais.html

@ -0,0 +1,8 @@
<fieldset>
<p align="justify">
{% if object.consideracoesfinais.conteudo %}
<strong>Considerações Finais: </strong>
{{object.consideracoesfinais.conteudo|striptags|safe}}
{% endif %}
</p>
</fieldset>

9
sapl/templates/sessao/blocos_resumo/consideracoes_finais.html

@ -0,0 +1,9 @@
{% if object.consideracoesfinais.conteudo %}
<fieldset>
<legend>Considerações Finais</legend>
<div style="border:0.5px solid #BAB4B1; border-radius: 10px; background-color: rgba(225, 225, 225, .8);">
<p>{{object.consideracoesfinais.conteudo|safe}}</p>
</div>
</fieldset>
<br /><br /><br />
{% endif %}

10
sapl/templates/sessao/blocos_resumo/oradores_explicacoes.html

@ -4,13 +4,15 @@
<fieldset>
<legend>Oradores das Explicações Pessoais</legend>
<div class="row">
<div class="col-md-6">Parlamentar</div>
<div class="col-md-6">Discurso</div>
<div class="col-md-4">Parlamentar</div>
<div class="col-md-4">Discurso</div>
<div class="col-md-4">Observação</div>
</div>
<div class="row">
{% for o in oradores_explicacoes %}
<div class="col-md-6"><b>{{o.numero_ordem}}</b> - {{o.parlamentar.nome_parlamentar}} / {% if o.parlamentar|filiacao_data_filter:object.data_inicio %} {{ o.parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}</div>
<div class="col-md-6">{{o.url_discurso}}</div>
<div class="col-md-4"><b>{{o.numero_ordem}}</b> - {{o.parlamentar.nome_parlamentar}} / {% if o.parlamentar|filiacao_data_filter:object.data_inicio %} {{ o.parlamentar|filiacao_data_filter:object.data_inicio }} {% else %} Sem partido {% endif %}</div>
<div class="col-md-4">{{o.url_discurso}}</div>
<div class="col-md-4">{{o.observacao}}</div>
</br>
{% endfor %}
</div>

29
sapl/templates/sessao/consideracoes_finais.html

@ -0,0 +1,29 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% load common_tags %}
{% block actions %}{% endblock %}
{% block detail_content %}
{% if perms|get_add_perm:view %}
<form method="post" accept-charset="ISO-8859-1">
{% csrf_token %}
<fieldset class="form-group">
<textarea rows="5" cols="50" name="conteudo" id="conteudo">{{object.consideracoesfinais.conteudo}}</textarea>
</fieldset>
<input type="submit" name="save" value="Salvar" class="btn btn-primary"/>
<input type="submit" name="delete" value="Apagar" class="btn btn-danger" />
</form>
{% else %}
{{object.consideracoesfinais.conteudo|safe}}
{% endif %}
{% endblock detail_content %}
<!-- Texto RICO -->
{% block extra_js %}
{% if perms|get_add_perm:view %}
<script language="JavaScript">
initTextRichEditor(null);
</script>
{% endif %}
{% endblock %}

0
sapl/templates/sessao/ocorrencia_sessao.html → sapl/templates/sessao/ocorrencias_da_sessao.html

3
sapl/templates/sessao/resumo.html

@ -49,5 +49,8 @@
{% include 'sessao/blocos_resumo/'|add:decimo_terceiro_ordenacao %}
{% include 'sessao/blocos_resumo/'|add:decimo_quarto_ordenacao %}
{% include 'sessao/blocos_resumo/'|add:decimo_quinto_ordenacao %}
{% endblock detail_content %}

1
sapl/templates/sessao/resumo_ata.html

@ -33,5 +33,6 @@
{% 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/'|add:decimo_quinto_ordenacao %}
{% include 'sessao/blocos_ata/assinaturas.html' %}
{% endblock detail_content %}

3
sapl/templates/sessao/resumo_ordenacao.html

@ -7,7 +7,6 @@
{% endblock %}
{% block base_content %}
{% crispy form %}
{% endblock %}
{% endblock %}

2
sapl/templates/sessao/subnav-solene.yaml

@ -12,6 +12,8 @@
url: orador_list
- title: {% trans 'Ocorrências da Sessão' %}
url: ocorrencia_sessao
- title: {% trans 'Considerações Finais' %}
url: consideracoes_finais
- title: {% trans 'Expedientes' %}
children:

2
sapl/templates/sessao/subnav.yaml

@ -14,6 +14,8 @@
url: orador_list
- title: {% trans 'Ocorrências da Sessão' %}
url: ocorrencia_sessao
- title: {% trans 'Considerações Finais' %}
url: consideracoes_finais
- title: {% trans 'Retirada de Pauta'%}
url: retiradapauta_list

Loading…
Cancel
Save